One clean path for your catalog.
Sport list, tournament list, and event list give you stable ids. Pass them to market list and market details — no guessing, no remapping.
Live sports market data API
Load sports, tournaments, events, and markets over REST. Then keep one socket
open and every marketRate change lands in your app the moment it happens.
Product
REST gives you the snapshot. The socket gives you the stream. IDs stay linked the whole way down.
Sport list, tournament list, and event list give you stable ids. Pass them to market list and market details — no guessing, no remapping.
Five REST calls and one socket event.
Batch event or market ids in one call.
Across all client APIs combined.
Listen on marketRate instead.
Sports, tournaments, events, and markets come back with linked ids — so your own search can cut across all of them.
Search by sport, tournament, event, market, runner and more…
Then go inside the market, down to every runner, price, and size.
POST /api/client/marketPrice { "marketId": ["a26c25ae28270df1b4e9a5fcbec85839"] }
socket.on("marketRate", update)
Live feed
Every push from the socket ripples through the field above and updates this board — this is what your UI feels like on marketRate.
Simulated data for illustration. Real payloads match the Market details response.
Views
The same Market details response, shaped however your UI needs it — a board, a table, the id tree, or raw JSON.
| RUNNER | BACK | LAY |
|---|---|---|
| Floyd Mayweather Jr | 1.55 | 1.66 |
| Manny Pacquiao | 3.10 | 3.30 |
| Draw | 11.0 | 20.0 |
6
1576402161
35303651
1.988253031
3861213236414331162{
"exMarketId": "a26c25ae28270df1b4e9a5fcbec85839",
"marketName": "Match Odds",
"runners": [
{
"selectionId": 3861213,
"description": { "runnerName": "Floyd Mayweather Jr" },
"state": { "lastPriceTraded": 1.63, "status": "ACTIVE" },
"exchange": {
"availableToBack": [{ "price": 1.55, "size": 42.71 }],
"availableToLay": [{ "price": 1.66, "size": 78.12 }]
}
}
]
}
Integration flow
Call them in order so each request uses ids from the previous response.
Store every sportId.
Tournaments tied to each sport.
Keep event ids exactly as returned.
Markets for your event ids.
The live price snapshot.
Every change after that, pushed.
Endpoints
/api/client/sportListEvery sport, with id and name.
/api/client/tournamentsListTournaments and their sport.
/api/client/eventListThe full event catalog.
/api/client/marketListMarkets per event. Limit max 200.
/api/client/marketPriceRunners, back, and lay. 200 ids max.
marketRatesocket.api4data.com — pushed on change.
Features
Every market change arrives on marketRate. No polling loop.
Up to 200 market ids per Market details call.
API and socket only answer to servers you've registered.
status, lastPriceTraded, and totalMatched per runner.
Walk large market lists with page and limit.
Price and size on availableToBack and availableToLay.
Connect with the standard socket.io-client package.
Every response carries the ids you need for the next call.
Know when a market is ACTIVE or SUSPENDED.
Five endpoints, one content type, nothing to install.
Every event and market ships with its marketTime.
Market list marks pre-bet markets with isPreBet.
Get started
Share your server IP with the api4data team to get whitelisted, then start with the Sport list.