Skip to main content

REST API Reference

This reference is for developers integrating market data, portfolio data, and trading actions into their own apps.

BASE_URL = gameday.markets/api

Before You Start

Authentication

Authenticated endpoints require Authorization: Bearer <Token> header.

  • Obtain your API KEY on /account page under the settings tab
  • Read permission is required for balances, positions, transactions, and open orders.
  • Write permission is required to place or cancel orders.
Response envelopes

Successful responses use a shared envelope:

{
"data": {},
"meta": {}
}

Errors use a consistent envelope:

{
"error": {
"code": "market_not_found",
"message": "Market does not exist"
}
}

Request conventions

  • Use Unix seconds for start_time and end_time filters.
  • You may pass multi-value filters for market and id as comma-separated strings.
  • Every REST endpoint accepts the optional chain query parameter. If you omit it, the backend defaults to 11155420.

Rate limits

Rate limits

Order related endpoints are limited to 120 r/m with 30 burst allowance, and 1 r/s with 10 burst for other endpoints.

Endpoints summary

AreaEndpointAuthReturns
Market dataGET /collectionsPublicNames of collections and active market account in each
Market dataGET /collections/:entityPublicAll active Market descriptions for collection name
Market dataGET /marketsPublicDescriptions for filtered Markets
Market dataGET /market/:marketPublicDescription for provided Market address
Market dataGET /orderbook/:marketPublicOrder book states for Market address and token ids
Market dataGET /tradesPublicTrade information
Market dataGET /trades/pricePublicPrice information
Account dataGET /balancesBearer token (read)Account's allowance and CLOB reserved balances
Account dataGET /positionsBearer token (read)Account's positions in markets
Account dataGET /transactionsBearer token (read)Account's executed transaction history
OrdersGET /ordersBearer token (read)Account's outstanding orders
OrdersPOST /ordersBearer token (write)Place a single order
OrdersPOST /orders/batchBearer token (write)Place up to 20 orders
OrdersPOST /orders/deleteBearer token (write)Delete orders by order id
OrdersPOST /orders/delete/batchBearer token (write)Delete orders by market, token id

Public Market Data

GET /collections

Collections

List every active collection and the number of active markets inside it.

This endpoint does not expose any collection-specific filters beyond chain.

ParameterInTypeRequiredDescription
chainquerystringnoNetwork selector. Defaults to 11155420.

Example response

{
"data": [
{
"entity": "NBA",
"marketCount": 12
},
{
"entity": "Bitcoin",
"marketCount": 4
}
],
"meta": {}
}
Payload shape
type Collection = {
entity: string;
marketCount: number;
};

GET /collections/:entity

Collection Markets

Fetch every active market for a single collection such as NBA, Bitcoin, or F1.

Select the collection through the :entity path segment.

ParameterInTypeRequiredDescription
entitypathstringyesCollection identifier.
chainquerystringnoNetwork selector. Defaults to 11155420.

Example response

{
"data": [
{
"marketName": "Group A: Mexico vs South Africa",
"description": "FIFA World Cup 2026 Matchday 1, Group A match between Mexico and South Africa in Mexico City Scheduled Start: Thursday, June 11, 2026 at 07:00 PM UTC",
"descriptionHash": "7757962724999b28d09d68bbb2bb3b018f7ef853f5075801bf7db2666555b60b",
"eventId": "18568566312947289722104530323130404698620178579483588220412103555084861387298",
"settlementType": "1",
"nOutcomes": "1",
"expiry": "1781211600",
"currency": "0x672f464846e86ce6fe0F2dF8358b8249A12439d8",
"version": "ranked_v2",
"address": "0x6be27081bC2BF0F318BB9C62A098646Be8D1f730",
"nameShort": "Mexico vs South Africa",
"startTime": "1781204400",
"betType": "winner",
"displayStatus": "0",
"displayPriority": "[0,0,0]",
"candidateOutcomes": "[\"Mexico\",\"Draw\",\"South Africa\"]",
"status": "0",
"resolutionState": "0",
"outcome": "[]",
"entity": "FIFA World Cup",
"volume": "10000000"
}
],
"meta": {}
}
Payload shape
type MarketParams = {
marketName: string;
description: string;
descriptionHash: string;
eventId: string;
settlementType: string;
nOutcomes: string;
expiry: string;
currency: string;
version: string;
address: string;
nameShort: string;
startTime: string;
betType: string;
displayStatus: string;
displayPriority: string;
candidateOutcomes: string;
status: string;
resolutionState: string;
outcome: string;
entity: string;
volume: string;
};

GET /markets

Market Search

Use this route to discover markets when you want to search or filter instead of looking up one exact market address.

ParameterInTypeRequiredDescription
addressquerystringnoFilter by market address.
entityquerystringnoFilter by collection name.
groupquerystringnoFilter by market grouping key. sports, price, politics
bet_typequerystringnoFilter by market bet type. winner, price, points
settledquerybooleannoFilter settled versus unsettled markets.
start_timequeryintegernoLower bound for the time window, in Unix seconds.
end_timequeryintegernoUpper bound for the time window, in Unix seconds.
chainquerystringnoNetwork selector. Defaults to 11155420.

Bet types:

  • winner - singular winner of a game, competition
  • top - top n finishers in a ranked event in any order. For example, F1 race podium
  • ranked - ordered list of finishers in a ranked event.
  • price - asset price over under
  • points - game points/goals over under
  • spread - points/goals difference
  • exact - exact numeric value, like total points
  • range - price, points, points differential is within bounds

Example response

{
"data": [
{
"marketName": "BTCUSD price 2026-06-06",
"description": "Event resolves to YES if BitMEX .BXBT index (bitmex.com/app/index/.BXBT) is greater than or equal to the target price on 2026-06-06 20:00 UTC.",
"descriptionHash": "6909cec446e362e07db9e83def246319f8e2c9fe3d59c9016fa619abf1c0e68c",
"eventId": "59284192173660553983829066293343914472327160798828592751200376623956234053690",
"settlementType": "3",
"nOutcomes": "1",
"expiry": "1780776000",
"currency": "0x672f464846e86ce6fe0F2dF8358b8249A12439d8",
"version": "ou_v2",
"address": "0x1d93d964ce88eaeFE7d459B062EC848b458139d6",
"nameShort": "BTCUSD 20260606",
"startTime": "1779875166",
"betType": "price",
"displayStatus": "0",
"displayPriority": "[]",
"candidateOutcomes": "[\"64500\",\"65500\",\"66500\",\"67500\",\"68500\",\"69500\",\"70500\",\"71500\",\"72500\",\"73500\",\"74500\",\"75500\",\"76500\",\"77500\",\"78500\",\"79500\",\"80500\",\"81500\",\"62000\",\"62500\",\"63000\",\"63500\",\"64000\",\"65000\",\"66000\",\"67000\",\"68000\",\"69000\",\"70000\",\"71000\",\"72000\"]",
"status": "1",
"resolutionState": "0",
"outcome": "[]",
"entity": "Bitcoin",
"volume": "66000000"
}
],
"meta": {}
}
Payload shape
type MarketParams = {
marketName: string;
description: string;
descriptionHash: string;
eventId: string;
settlementType: string;
nOutcomes: string;
expiry: string;
currency: string;
version: string;
address: string;
nameShort: string;
startTime: string;
betType: string;
displayStatus: string;
displayPriority: string;
candidateOutcomes: string;
status: string;
resolutionState: string;
outcome: string;
entity: string;
volume: string;
};

GET /market/:market

Market Details

Fetch a single market by address.

ParameterInTypeRequiredDescription
marketpathstringYESMarket address.
chainquerystringnoNetwork selector. Defaults to 11155420.

Example request

curl "$BASE_URL/market/0x1d93d964ce88eaeFE7d459B062EC848b458139d6?chain=11155420"
Payload shape
type MarketParams = {
marketName: string;
description: string;
descriptionHash: string;
eventId: string;
settlementType: string;
nOutcomes: string;
expiry: string;
currency: string;
version: string;
address: string;
nameShort: string;
startTime: string;
betType: string;
displayStatus: string;
displayPriority: string;
candidateOutcomes: string;
status: string;
resolutionState: string;
outcome: string;
entity: string;
volume: string;
};

Common error

{
"error": {
"code": "market_not_found",
"message": "Market does not exist"
}
}

GET /orderbook/:market

Market Orderbook

Fetch the orderbook for a market. Use the optional id query to filter to one or more token IDs.

ParameterInTypeRequiredDescription
marketpathstringYESMarket address.
idquerystringnoComma-separated token IDs or side identifiers.
chainquerystringnoNetwork selector. Defaults to 11155420.

Example request

curl "$BASE_URL/orderbook/0x1234...abcd?id=0,1&chain=11155420"

Example response

{
"data": [
{
"market": "0x1234...abcd",
"books": {
"0": [
{
"9900": 15
}
],
"1": [
{
"100": 11
}
]
},
"ts": 1767225600
}
],
"meta": {}
}
Payload shape
type BookState = {
market: string;
books: Record<string, Array<Record<number, number>>>;
ts: number;
};

GET /trades

Trades

Fetch recent trades. You can filter directly by market or use the collection shortcut to retrieve trades for a single collection.

ParameterInTypeRequiredDescription
marketquerystringnoFilter one or more market addresses, comma-separated.
idquerystringnoFilter one or more side or token IDs, comma-separated.
sizequeryintegernoMinimum trade size. Without decimals.
start_timequeryintegernoLower bound for the time window, in Unix seconds.
end_timequeryintegernoUpper bound for the time window, in Unix seconds.
chainquerystringnoNetwork selector. Defaults to 11155420.

Example response

{
"data": [
{
"txHash": "24627237d754a64cf2ef1b25ce36c898b251aa0aae5d8e7d91e3d1568b61939f",
"market": "0x1d93d964ce88eaeFE7d459B062EC848b458139d6",
"marketName": "BTCUSD price 2026-06-06",
"amount": 20,
"price": 6500,
"takerSide": "21716317273191121794908309581631211478035604576498232614272661820087589741316",
"makerSide": "21714550426126343410578726284130468559519777092601356995314540213886297121540",
"takerSideName": "[74500]",
"makerSideName": "[74500]",
"timestamp": 1780164950
}
],
"meta": {}
}
Payload shape
type Trade = {
txHash: string;
market: string;
marketName: string;
amount: number;
price: number;
takerSide: string;
makerSide: string;
takerSideName: string;
makerSideName: string;
timestamp: number;
};

GET /trades/price

Price Snapshots

Fetch prices per market and token Id. Key is always YES side

ParameterInTypeRequiredDescription
marketquerystringYESFilter one or more market addresses, comma-separated.
idquerystringnoFilter one or more side or token IDs, comma-separated.
freqquerystringnoPrice bucket interval. 1m, 15m, 1h, 4h, 1d
start_timequerystringnoLower bound for the time window, in Unix seconds.
end_timequerystringnoUpper bound for the time window, in Unix seconds.
chainquerystringnoNetwork selector. Defaults to 11155420

Example response

{
'data':
{
'21714550426126343410578726284130468559519777092601356995314540213886297120540':
[
{
'market': '0x1d93d964ce88eaeFE7d459B062EC848b458139d6',
'takerSide': '21714550426126343410578726284130468559519777092601356995314540213886297120540', 'makerSide': '21716317273191121794908309581631211478035604576498232614272661820087589740316', 'takerSideName': '[73500]',
'makerSideName': '[73500]',
'timestamp': 1780065240,
'open': 7500,
'high': 7500,
'low': 7500,
'close': 7500,
'volume': 10,
'tradeCount': 1
},
{
'market': '0x1d93d964ce88eaeFE7d459B062EC848b458139d6',
'takerSide': '21714550426126343410578726284130468559519777092601356995314540213886297120540', 'makerSide': '21716317273191121794908309581631211478035604576498232614272661820087589740316', 'takerSideName': '[73500]',
'makerSideName': '[73500]',
'timestamp': 1780066140,
'open': 7500,
'high': 7500,
'low': 7500,
'close': 7500,
'volume': 5,
'tradeCount': 1
}
]
},

'meta': {}
}
Payload shape
type PricePoint = {
market: string;
takerSide: string;
makerSide: string;
takerSideName: string,
makerSideName: string,
timestamp: number;
open: int,
high: int,
low: int,
close: int,
volume: number;
tradeCount: number;
};

Authenticated Account Data

Include your API_KEY in the request headers:

Authorization: Bearer <API_KEY>

GET /balances

Balances

Fetch the caller's current balance summary.

This endpoint does not expose any account-specific filters beyond chain.

ParameterInTypeRequiredDescription
chainquerystringnoNetwork selector. Defaults to 11155420.

Example request

curl "$BASE_URL/balances?chain=11155420" \
-H "Authorization: Bearer $API_KEY"

Example response

{
"data": {
"allowance": 5000,
"balanceOf": 4200,
"reserved": 300
},
"meta": {}
}

GET /positions

Positions

Fetch the caller's open or settled positions across markets.

ParameterInTypeRequiredDescription
marketquerystringnoFilter one or more market addresses, comma-separated.
idquerystringnoFilter one or more side or token IDs, comma-separated.
settledqueryboolnoIf provided filters markets by resolution status.
winningqueryboolnoIf provided filters settled positions by win status
claimedqueryboolnoIf provided filters positions by claimed status
chainquerystringnoNetwork selector. Defaults to 11155420.

Example response

{
"data": [
{
"market": "0xa7bCBC7F3CE7003F28819D6408E91452bD830818",
"balance": "30000000",
"avgPrice": "0.45",
"claimable": 0, // 0 - no, 1 - yes, 2 - refundable
"marketName": "F1 Monaco GP Race Winner",
"side": "7242306118526597366961936455545222996376856493293162109340463819098448461842",
"sideName": "[\"Russell\"]",
"isFinal": false,
"outcome": "[]",
"txHash": "",
"timestamp": 0,
"expiry": 1780844400
}
]
"meta": {}
}
Payload shape
type Position = {
market: string;
balance: string;
avgPrice: string;
claimable: number; // 0 - no, 1 - yes, 2 - refundable
marketName: string;
side: string;
sideName: string;
isFinal: boolean; // market is settled
outcome: string; // settled outcome
txHash: string; // claim txhash
timestamp: number; // claim time
expiry: number;
};

GET /transactions

Transactions

Fetch the caller's transaction history.

ParameterInTypeRequiredDescription
marketquerystringnoFilter one or more market addresses, comma-separated.
idquerystringnoFilter one or more side or token IDs, comma-separated.
typequerystringnoFilter by transaction type. trade or settlement
start_timequeryintegernoLower bound for the time window, in Unix seconds.
end_timequeryintegernoUpper bound for the time window, in Unix seconds.
chainquerystringnoNetwork selector. Defaults to 11155420.

Example response

{
"data": [
{
"txHash": "964adbdc71a8e44e6185e1a62bf7d7a01c3e98c283def69e18f4363ecbcebca7",
"type": "TRADE",
"market": "0x1d93d964ce88eaeFE7d459B062EC848b458139d6",
"marketName": "BTCUSD 20260606",
"side": "21716317273191121794908309581631211478035604576498232614272661820087589740316",
"sideName": "[73500]",
"price": 2500,
"amount": "10000000",
"aggrSide": "MAKER",
"contractSpend": "0",
"contractReceive": "10000000",
"currencySpend": "2500000",
"currencyReceive": "0",
"rewardFee": "14687",
"poolNet": "-2500000",
"timestamp": 1780065282
}
],
"meta": {}
}
Payload shape
type Transaction = {
txHash: string;
type: string;
market: string;
marketName: string;
side: string;
sideName: string;
price: number;
amount: string;
aggrSide: string;
contractSpend: string;
contractReceive: string;
currencySpend: string;
currencyReceive: string;
rewardFee: string;
poolNet: string;
timestamp: number;
};

Orders

Order endpoints require authentication.

  • Use read permission to inspect your open orders.
  • Use write permission to place or cancel orders.
  • Send large order values such as price, size, side, and expiry as strings.

GET /orders

List Open Orders

Fetch the caller's currently open orders.

This route returns your current open orders. Query filters are not currently supported on this endpoint.

ParameterInTypeRequiredDescription
marketquerystringnoFilter one or more market addresses, comma-separated.
idquerystringnoFilter one or more token ids, comma-separated.
saltquerystringnoFilter one or more order salts, comma-separated.
chainquerystringnoNetwork selector. Defaults to 11155420.

Example response

{
"data": [
{
"owner": "0xF6206615a2b222dbA064B83Fc2449d5dBf057224",
"salt": "PY-17805120871b487103e8126541",
"market": "0x1d93d964ce88eaeFE7d459B062EC848b458139d6",
"side": "21716317273191121794908309581631211478035604576498232614272661820087589735316",
"price": 5700,
"size": "400000000",
"expiry": 0,
"signature": "2bd51c5c592d41c928bef23e7607de831363fc3b036f84b67d325e3bc6705a5913db950e2f3bfe1b945edfc37c0cb2fab21e8cee43e952e9825fdc8f25d9cbdb1c",
"fill": "0",
"timestamp": 1780512087,
"marketName": "BTCUSD 20260606",
"sideName": "[68500]"
}
],
"meta": {}
}
Payload shape
type Order = {
owner: string;
salt: string;
market: string;
side: string;
price: number;
size: string;
expiry: number;
signature: string;
fill: string;
timestamp: number;
marketName: string;
sideName: string;
};

POST /orders

Submit Order

Submit a single order.

ParameterInTypeRequiredDescription
chainquerystringnoNetwork selector. Defaults to 11155420.

Order payload

FieldTypeRequiredDescription
marketstringyesMarket address
sidestringyesToken ID uint256 as string
ownerstringyesOrder signer address
sizestringyesOrder size in outcome tokens (6 decimals). Min size 1e6
pricestringyesLimit price as basis points, 1 to 9999.
expirystringyesOrder expiration unix timestamp in seconds or 0 if order does not expire
saltstringyesUnique order Id string, alphanum and _,-, maxlen 128
signaturestringyesEIP-712 signature hexstring

EIP-712 Types

domain_data = {
"name": "gameday.markets",
"chainId": {CHAIN_ID},
"verifyingContract": {MARKET_ADDRESS},
"version": "1",
}
message_types = {
"Order": [
{"name": "market", "type": "address"},
{"name": "side", "type": "uint256"},
{"name": "owner", "type": "address"},
{"name": "size", "type": "uint256"},
{"name": "price", "type": "uint256"},
{"name": "expiry", "type": "uint48"},
{"name": "salt", "type": "string"}
]
}

Example request

curl -X POST "$BASE_URL/orders?chain=11155420" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"market": "0x1d93d964ce88eaeFE7d459B062EC848b458139d6",
"side": "21716317273191121794908309581631211478035604576498232614272661820087589733316",
"owner": "0xF6206615a2b222dbA064B83Fc2449d5dBf057224",
"size": "5000000000",
"price": "4100",
"expiry": "0",
"salt": "PY-1780678126360447c238ab313d",
"signature": "818a887c2f6775ec8b456dca82613af7b567ee5ca1a51e991c24abc8102ec2d7110ec49261af1cd2b299e9a7f64764f9b792b1eb7b2de0ddc8a210bd547c4f391b"
}'

Example response

{
"data": {
"status": "accepted"
},
"meta": {}
}

Common errors

{
"error": {
"code": "invalid_order",
"message": "invalid price"
}
}
Request body shape
type OrderUI = {
market: string;
side: string;
owner: string;
size: string;
price: string;
expiry: string;
salt: string;
signature: string;
};
Validation rules
price: digits only, must be between 1 and 9999
size: digits only, minimum 1_000_000 (1 USDC), maximum 10_000_000_000 (10_000 USDC)
salt: 1..128 chars, pattern ^[a-zA-Z0-9\-_]+$
expiry: "0" or at least 60 seconds in the future
signature: required
owner: should match the authenticated address submitting signing the order

POST /orders/batch

Submit Batch Orders

Submit multiple orders in one request. The backend validates each order and returns batch feedback in the success envelope.

ParameterInTypeRequiredDescription
chainquerystringnoNetwork selector. Defaults to 11155420.

Example request

curl -X POST "$BASE_URL/orders/batch?chain=11155420" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"orders": [
{
"market": "0x1234...abcd",
"side": "0",
"owner": "0xabcd...1234",
"size": "250000000",
"price": "6120",
"expiry": "1767312000",
"salt": "order-001",
"signature": "0xdeadbeef..."
},
{
"market": "0x1234...abcd",
"side": "1",
"owner": "0xabcd...1234",
"size": "125000000",
"price": "3880",
"expiry": "1767312000",
"salt": "order-002",
"signature": "0xfeedface..."
}
]
}'

Example response

{
"data": {
"feedback": [null, null]
},
"meta": {}
}
Request body shape
type BatchOrderRequest = {
orders: OrderUI[];
};

POST /orders/delete

Cancel Orders by id

Cancel one open order by salt.

ParameterInTypeRequiredDescription
chainquerystringnoNetwork selector. Defaults to 11155420.

Example request

curl -X POST "$BASE_URL/orders/delete?chain=11155420" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"salt": "order-001,order-002"
}'

Example response

{
"data": {
"status": "ok"
},
"meta": {}
}

Common error

{
"error": {
"code": "order_cancel_failed",
"message": "Order cancel error"
}
}
Request body shape
type CancelOrderRequest = {
salt: string;
};

POST /orders/delete/batch

Cancel Batch Orders

Cancel multiple open orders by query filter. At least one filter must be provided.

ParameterInTypeRequiredDescription
marketquerystringnoFilter one or more market addresses, comma-separated.
idquerystringnoFilter one or more side or token IDs, comma-separated.
chainquerystringnoNetwork selector. Defaults to 11155420.

Example request

curl -X POST "$BASE_URL/orders/delete/batch?market=0x1234...abcd&id=0,1&chain=11155420" \
-H "Authorization: Bearer $API_KEY"

Example response

{
"data": {
"status": "ok"
},
"meta": {}
}

Common error

{
"error": {
"code": "batch_cancel_failed",
"message": "Failed to batch cancel orders: at least one filter must be provided"
}
}

POST /orders/delete/all

Cancel All Orders

Cancel multiple all outstanding orders.

ParameterInTypeRequiredDescription
chainquerystringnoNetwork selector. Defaults to 11155420.

Example response

{
"data": {
"status": "ok"
},
"meta": {}
}