Get your fills
curl --request GET \
--url https://api.sx.bet/fills-v3 \
--header 'x-sx-api-key: <api-key>'import requests
url = "https://api.sx.bet/fills-v3"
headers = {"x-sx-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-sx-api-key': '<api-key>'}};
fetch('https://api.sx.bet/fills-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/fills-v3",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.sx.bet/fills-v3"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-sx-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sx.bet/fills-v3")
.header("x-sx-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sx.bet/fills-v3")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-sx-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"fills": [
{
"id": "0xec8eaaa21ef52bf5f2a3fee5f139258a63f65cf2218dfee40362f2fc90e55793:0x02d22c2ac3f2aa27ca96e156aa2fa4affb15064a169e02b55881bdd6867c55ea:0x1fec4ed9b71c2f812db900af7d12446158a0eda56041106f99551c496efd3266",
"matchId": "0xec8eaaa21ef52bf5f2a3fee5f139258a63f65cf2218dfee40362f2fc90e55793",
"orderId": "0x02d22c2ac3f2aa27ca96e156aa2fa4affb15064a169e02b55881bdd6867c55ea",
"tradeId": "0xac6bb30bba6ea82d8717219a4fa49d15b58fd638fba479f294b4d402376d14d6",
"marketHash": "0x1fec4ed9b71c2f812db900af7d12446158a0eda56041106f99551c496efd3266",
"isParlay": false,
"userAddress": "0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5",
"wallet": "0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A",
"fillAmount": "333334",
"fillOdds": "40000000000000000000",
"returnAmount": "833335",
"isBettingOutcomeOne": false,
"status": "LOCKED",
"txHash": "0x64307e2f35d0a81b0f44e9043e99cf01def3b2f079fb68cf2c5a942b88d95e9a",
"ceRefundAmount": "0",
"ceRefundFeeAmount": "0",
"usedBetCredits": false,
"createdAt": "2026-07-31T18:47:09.586Z",
"updatedAt": "2026-07-31T18:47:12.837Z",
"settlement": null
},
{
"id": "0x6c2d2a49c159720d26fa89a13ac49711aba2adac5dad2c12255440ebdf7a62c4:0x02d22c2ac3f2aa27ca96e156aa2fa4affb15064a169e02b55881bdd6867c55ea:0x1fec4ed9b71c2f812db900af7d12446158a0eda56041106f99551c496efd3266",
"matchId": "0x6c2d2a49c159720d26fa89a13ac49711aba2adac5dad2c12255440ebdf7a62c4",
"orderId": "0x02d22c2ac3f2aa27ca96e156aa2fa4affb15064a169e02b55881bdd6867c55ea",
"tradeId": "0xac6bb30bba6ea82d8717219a4fa49d15b58fd638fba479f294b4d402376d14d6",
"marketHash": "0x1fec4ed9b71c2f812db900af7d12446158a0eda56041106f99551c496efd3266",
"isParlay": false,
"userAddress": "0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5",
"wallet": "0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A",
"fillAmount": "666666",
"fillOdds": "40000000000000000000",
"returnAmount": "1666665",
"isBettingOutcomeOne": false,
"status": "LOCKED",
"txHash": "0x64307e2f35d0a81b0f44e9043e99cf01def3b2f079fb68cf2c5a942b88d95e9a",
"ceRefundAmount": "0",
"ceRefundFeeAmount": "0",
"usedBetCredits": false,
"createdAt": "2026-07-31T18:47:09.577Z",
"updatedAt": "2026-07-31T18:47:12.837Z",
"settlement": null
}
]
}
}{
"message": "Invalid nextKey",
"error": "Bad Request",
"statusCode": 400
}{
"message": "BAD_AUTH",
"error": "Unauthorized",
"statusCode": 401
}{
"message": "Service Unavailable",
"statusCode": 503
}Trades, Fills & Positions
Get your fills
Get your fill history from the SX Bet API.
GET
/
fills-v3
Get your fills
curl --request GET \
--url https://api.sx.bet/fills-v3 \
--header 'x-sx-api-key: <api-key>'import requests
url = "https://api.sx.bet/fills-v3"
headers = {"x-sx-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-sx-api-key': '<api-key>'}};
fetch('https://api.sx.bet/fills-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/fills-v3",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.sx.bet/fills-v3"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-sx-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sx.bet/fills-v3")
.header("x-sx-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sx.bet/fills-v3")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-sx-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"fills": [
{
"id": "0xec8eaaa21ef52bf5f2a3fee5f139258a63f65cf2218dfee40362f2fc90e55793:0x02d22c2ac3f2aa27ca96e156aa2fa4affb15064a169e02b55881bdd6867c55ea:0x1fec4ed9b71c2f812db900af7d12446158a0eda56041106f99551c496efd3266",
"matchId": "0xec8eaaa21ef52bf5f2a3fee5f139258a63f65cf2218dfee40362f2fc90e55793",
"orderId": "0x02d22c2ac3f2aa27ca96e156aa2fa4affb15064a169e02b55881bdd6867c55ea",
"tradeId": "0xac6bb30bba6ea82d8717219a4fa49d15b58fd638fba479f294b4d402376d14d6",
"marketHash": "0x1fec4ed9b71c2f812db900af7d12446158a0eda56041106f99551c496efd3266",
"isParlay": false,
"userAddress": "0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5",
"wallet": "0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A",
"fillAmount": "333334",
"fillOdds": "40000000000000000000",
"returnAmount": "833335",
"isBettingOutcomeOne": false,
"status": "LOCKED",
"txHash": "0x64307e2f35d0a81b0f44e9043e99cf01def3b2f079fb68cf2c5a942b88d95e9a",
"ceRefundAmount": "0",
"ceRefundFeeAmount": "0",
"usedBetCredits": false,
"createdAt": "2026-07-31T18:47:09.586Z",
"updatedAt": "2026-07-31T18:47:12.837Z",
"settlement": null
},
{
"id": "0x6c2d2a49c159720d26fa89a13ac49711aba2adac5dad2c12255440ebdf7a62c4:0x02d22c2ac3f2aa27ca96e156aa2fa4affb15064a169e02b55881bdd6867c55ea:0x1fec4ed9b71c2f812db900af7d12446158a0eda56041106f99551c496efd3266",
"matchId": "0x6c2d2a49c159720d26fa89a13ac49711aba2adac5dad2c12255440ebdf7a62c4",
"orderId": "0x02d22c2ac3f2aa27ca96e156aa2fa4affb15064a169e02b55881bdd6867c55ea",
"tradeId": "0xac6bb30bba6ea82d8717219a4fa49d15b58fd638fba479f294b4d402376d14d6",
"marketHash": "0x1fec4ed9b71c2f812db900af7d12446158a0eda56041106f99551c496efd3266",
"isParlay": false,
"userAddress": "0xbcc6D643e4159A75ED1dB4e13330230B82F2AEe5",
"wallet": "0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A",
"fillAmount": "666666",
"fillOdds": "40000000000000000000",
"returnAmount": "1666665",
"isBettingOutcomeOne": false,
"status": "LOCKED",
"txHash": "0x64307e2f35d0a81b0f44e9043e99cf01def3b2f079fb68cf2c5a942b88d95e9a",
"ceRefundAmount": "0",
"ceRefundFeeAmount": "0",
"usedBetCredits": false,
"createdAt": "2026-07-31T18:47:09.577Z",
"updatedAt": "2026-07-31T18:47:12.837Z",
"settlement": null
}
]
}
}{
"message": "Invalid nextKey",
"error": "Bad Request",
"statusCode": 400
}{
"message": "BAD_AUTH",
"error": "Unauthorized",
"statusCode": 401
}{
"message": "Service Unavailable",
"statusCode": 503
}GET /fills-v3 returns one row per match, each with its own amount, price and settlement. Where
GET /trades-v3 gives one row for a whole bet, this gives the
fills that made it up. A trade will have multiple fills that compose it.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.
Query Parameters
Trade ID to query.
Only include fills recorded at or after this time (ISO-8601).
Example:
"2026-06-01T00:00:00Z"
Only include fills recorded at or before this time (ISO-8601). Must not be earlier than startDate.
Example:
"2026-06-08T00:00:00Z"
Sort oldest-first. Defaults to true.
Rows per page.
Required range:
1 <= x <= 100Cursor from the previous response to continue pagination.
Last modified on August 11, 2026
⌘I