Create orders
curl --request POST \
--url https://api.sx.bet/orders-v3 \
--header 'Content-Type: application/json' \
--header 'x-sx-api-key: <api-key>' \
--data '
{
"waitForOutcome": true,
"orders": [
{
"marketHash": "0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf",
"maker": "0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5",
"totalBetSize": "2000000",
"percentageOdds": "40000000000000000000",
"salt": "0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef",
"expiry": 1785527222,
"baseToken": "0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956",
"isMakerBettingOutcomeOne": true,
"timeInForce": "GTC",
"orderSignature": "0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b",
"clientOrderId": "quote-2026-07-31-002"
}
]
}
'import requests
url = "https://api.sx.bet/orders-v3"
payload = {
"waitForOutcome": True,
"orders": [
{
"marketHash": "0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf",
"maker": "0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5",
"totalBetSize": "2000000",
"percentageOdds": "40000000000000000000",
"salt": "0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef",
"expiry": 1785527222,
"baseToken": "0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956",
"isMakerBettingOutcomeOne": True,
"timeInForce": "GTC",
"orderSignature": "0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b",
"clientOrderId": "quote-2026-07-31-002"
}
]
}
headers = {
"x-sx-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-sx-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
waitForOutcome: true,
orders: [
{
marketHash: '0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf',
maker: '0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5',
totalBetSize: '2000000',
percentageOdds: '40000000000000000000',
salt: '0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef',
expiry: 1785527222,
baseToken: '0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956',
isMakerBettingOutcomeOne: true,
timeInForce: 'GTC',
orderSignature: '0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b',
clientOrderId: 'quote-2026-07-31-002'
}
]
})
};
fetch('https://api.sx.bet/orders-v3', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sx.bet/orders-v3",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'waitForOutcome' => true,
'orders' => [
[
'marketHash' => '0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf',
'maker' => '0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5',
'totalBetSize' => '2000000',
'percentageOdds' => '40000000000000000000',
'salt' => '0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef',
'expiry' => 1785527222,
'baseToken' => '0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956',
'isMakerBettingOutcomeOne' => true,
'timeInForce' => 'GTC',
'orderSignature' => '0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b',
'clientOrderId' => 'quote-2026-07-31-002'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-sx-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sx.bet/orders-v3"
payload := strings.NewReader("{\n \"waitForOutcome\": true,\n \"orders\": [\n {\n \"marketHash\": \"0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf\",\n \"maker\": \"0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5\",\n \"totalBetSize\": \"2000000\",\n \"percentageOdds\": \"40000000000000000000\",\n \"salt\": \"0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef\",\n \"expiry\": 1785527222,\n \"baseToken\": \"0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956\",\n \"isMakerBettingOutcomeOne\": true,\n \"timeInForce\": \"GTC\",\n \"orderSignature\": \"0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b\",\n \"clientOrderId\": \"quote-2026-07-31-002\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-sx-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sx.bet/orders-v3")
.header("x-sx-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"waitForOutcome\": true,\n \"orders\": [\n {\n \"marketHash\": \"0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf\",\n \"maker\": \"0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5\",\n \"totalBetSize\": \"2000000\",\n \"percentageOdds\": \"40000000000000000000\",\n \"salt\": \"0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef\",\n \"expiry\": 1785527222,\n \"baseToken\": \"0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956\",\n \"isMakerBettingOutcomeOne\": true,\n \"timeInForce\": \"GTC\",\n \"orderSignature\": \"0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b\",\n \"clientOrderId\": \"quote-2026-07-31-002\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sx.bet/orders-v3")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-sx-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"waitForOutcome\": true,\n \"orders\": [\n {\n \"marketHash\": \"0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf\",\n \"maker\": \"0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5\",\n \"totalBetSize\": \"2000000\",\n \"percentageOdds\": \"40000000000000000000\",\n \"salt\": \"0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef\",\n \"expiry\": 1785527222,\n \"baseToken\": \"0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956\",\n \"isMakerBettingOutcomeOne\": true,\n \"timeInForce\": \"GTC\",\n \"orderSignature\": \"0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b\",\n \"clientOrderId\": \"quote-2026-07-31-002\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"orders": [
{
"orderId": "0x7f611d85216fa11810d5357ffaaeafbbefb88e69b9fd26bfae7b13a67cceb9dc",
"status": "PENDING",
"commandId": "550e8400-e29b-41d4-a716-446655440000",
"clientOrderId": "quote-2026-07-31-002",
"outcome": {
"state": "FULLY_FILLED",
"remainingAmount": "0",
"fillAmount": "2000000",
"matchIds": [
"0x9a1c2f3e4b5d6a7f8c9b0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a"
],
"tradeId": "0xtrade1"
}
}
]
}
}{
"message": "TOTAL_BET_SIZE_TOO_LOW",
"marketHash": "0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf",
"minimum": "1"
}{
"message": "BAD_AUTH",
"error": "Unauthorized",
"statusCode": 401
}{
"message": "Service Unavailable",
"statusCode": 503
}Orders
Create orders
Submit a new order to the SX Bet orderbook.
POST
/
orders-v3
Create orders
curl --request POST \
--url https://api.sx.bet/orders-v3 \
--header 'Content-Type: application/json' \
--header 'x-sx-api-key: <api-key>' \
--data '
{
"waitForOutcome": true,
"orders": [
{
"marketHash": "0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf",
"maker": "0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5",
"totalBetSize": "2000000",
"percentageOdds": "40000000000000000000",
"salt": "0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef",
"expiry": 1785527222,
"baseToken": "0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956",
"isMakerBettingOutcomeOne": true,
"timeInForce": "GTC",
"orderSignature": "0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b",
"clientOrderId": "quote-2026-07-31-002"
}
]
}
'import requests
url = "https://api.sx.bet/orders-v3"
payload = {
"waitForOutcome": True,
"orders": [
{
"marketHash": "0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf",
"maker": "0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5",
"totalBetSize": "2000000",
"percentageOdds": "40000000000000000000",
"salt": "0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef",
"expiry": 1785527222,
"baseToken": "0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956",
"isMakerBettingOutcomeOne": True,
"timeInForce": "GTC",
"orderSignature": "0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b",
"clientOrderId": "quote-2026-07-31-002"
}
]
}
headers = {
"x-sx-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-sx-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
waitForOutcome: true,
orders: [
{
marketHash: '0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf',
maker: '0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5',
totalBetSize: '2000000',
percentageOdds: '40000000000000000000',
salt: '0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef',
expiry: 1785527222,
baseToken: '0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956',
isMakerBettingOutcomeOne: true,
timeInForce: 'GTC',
orderSignature: '0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b',
clientOrderId: 'quote-2026-07-31-002'
}
]
})
};
fetch('https://api.sx.bet/orders-v3', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sx.bet/orders-v3",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'waitForOutcome' => true,
'orders' => [
[
'marketHash' => '0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf',
'maker' => '0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5',
'totalBetSize' => '2000000',
'percentageOdds' => '40000000000000000000',
'salt' => '0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef',
'expiry' => 1785527222,
'baseToken' => '0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956',
'isMakerBettingOutcomeOne' => true,
'timeInForce' => 'GTC',
'orderSignature' => '0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b',
'clientOrderId' => 'quote-2026-07-31-002'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-sx-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sx.bet/orders-v3"
payload := strings.NewReader("{\n \"waitForOutcome\": true,\n \"orders\": [\n {\n \"marketHash\": \"0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf\",\n \"maker\": \"0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5\",\n \"totalBetSize\": \"2000000\",\n \"percentageOdds\": \"40000000000000000000\",\n \"salt\": \"0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef\",\n \"expiry\": 1785527222,\n \"baseToken\": \"0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956\",\n \"isMakerBettingOutcomeOne\": true,\n \"timeInForce\": \"GTC\",\n \"orderSignature\": \"0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b\",\n \"clientOrderId\": \"quote-2026-07-31-002\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-sx-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sx.bet/orders-v3")
.header("x-sx-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"waitForOutcome\": true,\n \"orders\": [\n {\n \"marketHash\": \"0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf\",\n \"maker\": \"0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5\",\n \"totalBetSize\": \"2000000\",\n \"percentageOdds\": \"40000000000000000000\",\n \"salt\": \"0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef\",\n \"expiry\": 1785527222,\n \"baseToken\": \"0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956\",\n \"isMakerBettingOutcomeOne\": true,\n \"timeInForce\": \"GTC\",\n \"orderSignature\": \"0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b\",\n \"clientOrderId\": \"quote-2026-07-31-002\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sx.bet/orders-v3")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-sx-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"waitForOutcome\": true,\n \"orders\": [\n {\n \"marketHash\": \"0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf\",\n \"maker\": \"0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5\",\n \"totalBetSize\": \"2000000\",\n \"percentageOdds\": \"40000000000000000000\",\n \"salt\": \"0x8fa0cd4dbb399048caf74b8455f0fcf502fc989fc3e2720003aa10756faa70ef\",\n \"expiry\": 1785527222,\n \"baseToken\": \"0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956\",\n \"isMakerBettingOutcomeOne\": true,\n \"timeInForce\": \"GTC\",\n \"orderSignature\": \"0xa343a8052087c6739375c157f716beb6ddad7f1549e4c746aafda2869eb1f3235e7ba71aa79fa5b3d99b51b51c9cfc1b41cbda4b02badc0ef31ec3e978e069d81b\",\n \"clientOrderId\": \"quote-2026-07-31-002\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"orders": [
{
"orderId": "0x7f611d85216fa11810d5357ffaaeafbbefb88e69b9fd26bfae7b13a67cceb9dc",
"status": "PENDING",
"commandId": "550e8400-e29b-41d4-a716-446655440000",
"clientOrderId": "quote-2026-07-31-002",
"outcome": {
"state": "FULLY_FILLED",
"remainingAmount": "0",
"fillAmount": "2000000",
"matchIds": [
"0x9a1c2f3e4b5d6a7f8c9b0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a"
],
"tradeId": "0xtrade1"
}
}
]
}
}{
"message": "TOTAL_BET_SIZE_TOO_LOW",
"marketHash": "0x81cfc23d0a02403f32d29b5a7c5686acd5eaedcdaa461cf253a1488e4cac0fcf",
"minimum": "1"
}{
"message": "BAD_AUTH",
"error": "Unauthorized",
"statusCode": 401
}{
"message": "Service Unavailable",
"statusCode": 503
}Making and taking are the same request
with a different
timeInForce — there is no separate fill endpoint.
EIP-712 order signing covers the eight signed fields and the
domain.
A deployed proxy wallet is required before any order is accepted
This endpoint is asynchronous by default. A success response means the order was submitted to
the matching engine, not that it rested or matched. Each order comes back as
PENDING — the terminal
outcome (rested as ACTIVE, matched, or gone) arrives later on
account:orders_v3_#{address}. Subscribe to that channel before
you submit and treat it as the source of truth.Optional synchronous mode. Set
waitForOutcome: true to have the call wait up to maxWaitTime and return each accepted order’s terminal outcome inline.Authorizations
API key, sent as the x-sx-api-key header. Generate one from the API keys section of your account page on sx.bet.
Body
application/json
1 to limits.maxCreateOrders signed orders — 10 today. An empty array is a 400. All orders in a batch must share one maker.
Show child attributes
Show child attributes
When true, wait for each order's matching outcome and return it inline as outcome on every accepted (PENDING) result. Defaults to false. See Async operations.
Max time in ms to wait for outcomes when waitForOutcome is true. Omitted uses the server default (10s today); capped server-side (15s today). Ignored when waitForOutcome is not true.
Last modified on August 13, 2026
⌘I