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. Also an expiry that falls inside the market’s betting delay plus two seconds is rejected.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.
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 26, 2026