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": "SUBMITTED",
"commandId": "550e8400-e29b-41d4-a716-446655440000",
"clientOrderId": "quote-2026-07-31-002",
"outcome": {
"state": "FULLY_FILLED",
"remainingAmount": "0",
"fillAmount": "2000000",
"blendedOdds": "50000000000000000000",
"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": "SUBMITTED",
"commandId": "550e8400-e29b-41d4-a716-446655440000",
"clientOrderId": "quote-2026-07-31-002",
"outcome": {
"state": "FULLY_FILLED",
"remainingAmount": "0",
"fillAmount": "2000000",
"blendedOdds": "50000000000000000000",
"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
SUBMITTED — 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 matching outcome inline.outcome is the matching result, not on-chain finality. The funds are escrowed a moment later, when it reaches LOCKED on
account:trades_v3_#{address}. See which status to act on.expiry is required and must be a unix epoch timestamp in seconds (not milliseconds) that is in
the future. 0 is not accepted — there is no never-expires order. An expiry that
falls inside the market’s betting delay plus two seconds is rejected. Resolve the delay from
bettingDelay on GET /metadata/obv3.
See Betting delays.Posting an order does not lock capital, regardless of
timeInForce. Funds are escrowed only when
the order matches. See Risk limits.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 (SUBMITTED) 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 23, 2026
⌘I