Live sports market data API

Every market. Every tick. Pushed live.

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

From sport list to live price.

REST gives you the snapshot. The socket gives you the stream. IDs stay linked the whole way down.

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.

sportId tournamentId eventId exMarketId
0

Endpoints

Five REST calls and one socket event.

0

IDs per request

Batch event or market ids in one call.

0/sec

REST rate limit

Across all client APIs combined.

0polls

For live rates

Listen on marketRate instead.

Ask once. Get every tick.

Your server Give me the live snapshot for this market.
POST /api/client/marketPrice
{ "marketId": ["a26c25ae28270df1b4e9a5fcbec85839"] }
a4d
api4data Here's Match Odds for Floyd Mayweather Jr v Manny Pacquiao:
Floyd Mayweather Jr1.551.66
Manny Pacquiao3.103.30
Draw11.020.0
Your server Great. Now tell me the moment anything moves.
socket.on("marketRate", update)
a4d
api4data Connected to socket.api4data.com. Pushing changes as they happen:

Live feed

Prices that move on their own.

Every push from the socket ripples through the field above and updates this board — this is what your UI feels like on marketRate.

Match Odds · Boxing

Floyd Mayweather Jr v Manny Pacquiao

Sample
RUNNERBACKLAY
exMarketId a26c25ae… updates 0
socket.api4data.com · listening

    Simulated data for illustration. Real payloads match the Market details response.

    Views

    One payload, every shape.

    The same Market details response, shaped however your UI needs it — a board, a table, the id tree, or raw JSON.

    Match Odds · Floyd Mayweather Jr v Manny PacquiaoBoard

    Floyd Mayweather Jr

    selectionId 3861213
    BACK1.55
    LAY1.66

    Manny Pacquiao

    selectionId 2364143
    BACK3.10
    LAY3.30

    Draw

    selectionId 31162
    BACK11.0
    LAY20.0
    runners[] · 3 rowsTable
    SELECTION IDRUNNERSTATUSBACKLAY
    3861213Floyd Mayweather JrACTIVE1.551.66
    2364143Manny PacquiaoACTIVE3.103.30
    31162DrawACTIVE11.020.0
    sport → tournament → event → marketTree
    • sportBoxing6
      • tournamentBoxing Matches1576402161
        • eventFloyd Mayweather Jr v Manny Pacquiao35303651
          • marketMatch Odds1.988253031
            • runnerFloyd Mayweather Jr3861213
            • runnerManny Pacquiao2364143
            • runnerDraw31162
    POST /api/client/marketPriceJSON
    {
      "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 }]
          }
        }
      ]
    }

    Power live odds boards.

    Trigger alerts on every move.

    Chart how prices drift.

    Keep your catalog in sync.

    ✦ Perfect for:
    SportsbooksOdds comparisonMedia apps
    BotsNotificationsTrading signals
    Trading desksAnalystsResearch
    FixturesEvent listingsContent teams

    Integration flow

    Six steps. One feed.

    Call them in order so each request uses ids from the previous response.

    01

    Sport list

    GET

    Store every sportId.

    02

    Tournament list

    POST

    Tournaments tied to each sport.

    03

    Event list

    GET

    Keep event ids exactly as returned.

    04

    Market list

    POST

    Markets for your event ids.

    05

    Market details

    POST

    The live price snapshot.

    06

    marketRate

    SOCKET

    Every change after that, pushed.

    Endpoints

    Small surface. Real-time core.

    GET /api/client/sportListEvery sport, with id and name.
    POST /api/client/tournamentsListTournaments and their sport.
    GET /api/client/eventListThe full event catalog.
    POST /api/client/marketListMarkets per event. Limit max 200.
    POST /api/client/marketPriceRunners, back, and lay. 200 ids max.
    WS marketRatesocket.api4data.com — pushed on change.
    Rate limit. One REST call per second across all client APIs.
    IP whitelist. Share your server IP with the api4data team first.
    client.js

    Features

    Everything you'd expect, and then some.

    01WS

    Socket push

    Every market change arrives on marketRate. No polling loop.

    02200

    Batch requests

    Up to 200 market ids per Market details call.

    03IP

    IP whitelist

    API and socket only answer to servers you've registered.

    04LTP

    Runner state

    status, lastPriceTraded, and totalMatched per runner.

    05PG

    Pagination

    Walk large market lists with page and limit.

    06B/L

    Back & lay depth

    Price and size on availableToBack and availableToLay.

    07IO

    Socket.IO client

    Connect with the standard socket.io-client package.

    08ID

    Linked ids

    Every response carries the ids you need for the next call.

    09ON

    Market status

    Know when a market is ACTIVE or SUSPENDED.

    10{ }

    Plain JSON REST

    Five endpoints, one content type, nothing to install.

    11T

    Market time

    Every event and market ships with its marketTime.

    12PRE

    Pre-bet flag

    Market list marks pre-bet markets with isPreBet.

    Get started

    Plug into the feed.

    Share your server IP with the api4data team to get whitelisted, then start with the Sport list.

    Never miss a tick, with