Live Odds API

Build with live, in-play odds through REST, SSE and WebSockets. Current live coverage is Betfair Exchange, with back and lay prices, liquidity and matched volume.

GET /v1/events/{event_id}/exchange/orderbook/snapshot?exchanges=betfair
{
  "event_id": "event-001",
  "items": [{
    "id": "betfair::1.23456789::moneyline",
    "event_id": "event-001",
    "exchange": "betfair",
    "exchange_market_id": "1.23456789",
    "market_key": "moneyline", "period": "full time",
    "in_play": true, "status": "open",
    "currency": "AUD", "total_matched": 24567.12,
    "freshness": "live", "actively_collected": true,
    "selections": [{
      "selection_key": "moneyline:home", "selection_name": "Home",
      "best_back_price": 2.08, "best_back_size": 120.50,
      "best_lay_price": 2.10, "best_lay_size": 84.30
    }]
  }],
  "resume": "1760000000000-0"
}
Betfair live odds Back and lay prices, available size and matched activity during the game.
Back and lay depth Keep Betfair prices, available size and selection identity together at each ladder level.
Streaming + REST included
  • REST snapshots
  • SSE streams
  • WebSocket streams

Follow the market after kickoff.

Read the exchange price, available liquidity and market state together.

Exchange prices

Back + lay

Both sides of each selection, with the price and available size at each level.

Traded activity

Matched volume

Track total matched activity and each selection’s last traded price.

Market state

In-play status

Handle open, suspended and closed markets alongside quote freshness.

Pull live odds

Start with a Betfair in-play event. Copy the request or give the prompt to your AI agent.

Authentication
X-API-Key
Exchange
betfair
Open the API reference
GET/v1/events/{event_id}/exchange/orderbook/snapshot
Build a live Betfair odds board using https://api.odds-api.net/v1. Keep ODDS_API_KEY on the server and authenticate with X-API-Key.

Find events with /events?event_states=in_play&limit=50 and select one that lists betfair. Fetch /events/{event_id}/exchange/orderbook/snapshot?exchanges=betfair&depth=3&refresh=true. Show only order books with in_play=true.

Display back and lay ladders, price-level size, total_matched, status and freshness. Open the matching /exchange/orderbook/stream or /exchange/orderbook/ws route with the snapshot resume as since. Handle delta, heartbeat and resync. Treat suspended or stale books as unavailable for a current quote.

Use decimal exchange prices. Keep pre-match sportsbook prices separate from Betfair in-play exchange data.

Inspect the Betfair JSON response
{
  "event_id": "event-001",
  "items": [{
    "id": "betfair::1.23456789::moneyline",
    "event_id": "event-001",
    "exchange": "betfair",
    "exchange_market_id": "1.23456789",
    "market_key": "moneyline",
    "period": "full time",
    "period_str": "full time",
    "status": "open",
    "in_play": true,
    "currency": "AUD",
    "total_matched": 24567.12,
    "freshness": "live",
    "actively_collected": true,
    "selections": [{
      "selection_key": "moneyline:home",
      "selection_name": "Home",
      "best_back_price": 2.08,
      "best_back_size": 120.50,
      "best_lay_price": 2.10,
      "best_lay_size": 84.30,
      "available_to_back": [{"price": 2.08, "size": 120.50}],
      "available_to_lay": [{"price": 2.10, "size": 84.30}]
    }]
  }],
  "resume": "1760000000000-0"
}

Live odds, liquidity and market state

Build an in-play exchange board with back and lay ladders, traded activity and market state.

  • Back and lay prices

    Keep both sides of the market, with the price and available size at each level.

    available_to_backavailable_to_lay
  • Matched activity

    Follow matched market volume and each selection’s last traded price alongside the quoted ladder.

    total_matchedlast_traded_price
  • In-play state

    Read whether the market is in play and whether it is open, suspended or closed.

    in_playstatus
  • Quote freshness

    Separate a current quote from a warming or stale book using the source observation fields.

    freshnesssource_age_secondsobserved_at
  • Available liquidity

    Keep the available size with each back and lay price. Use depth to select how many price levels your board needs.

    best_back_sizebest_lay_sizecurrency
  • Resumable streams

    Follow delta messages, keep your resume token and reload the snapshot when the stream requests a resync.

    deltaheartbeatresync

Built for agents and humans

MCP server

Tools for events, odds, line movement, streams, and paid-plan positive EV or arbitrage feeds.

Agent skill

Agent-ready instructions.

SDKs and examples

TypeScript, Python, Postman and example builds.

Sports and racing

Sports and racing odds coverage for agent workflows.

SSE odds stream

Lightweight streaming updates for dashboards and alerts.

WebSocket feeds

Price updates for sportsbook and exchange products.

How to use the live odds API

Load the snapshot, then follow changes using the same event and selection identifiers.

  1. 1

    Find the event

    Filter events with event_states=in_play, then select a Betfair event by its canonical event ID.

  2. 2

    Load the order book

    Request exchanges=betfair and choose your ladder depth. Keep price, size, market and selection identity together.

  3. 3

    Follow the changes

    Open SSE or WebSocket with since set to the snapshot’s resume token. Apply delta messages in order.

  4. 4

    Reconnect cleanly

    Retain the latest resume token. When the server sends resync, reload the snapshot before following updates again.

Odds API Pricing

Choose a monthly plan based on request volume, rate limits, and support.

Best for first builds

Starter

250K
$50 USD / month

Odds

Requests
250K / month
Streams
500 stream-hours / month
Stream connections
3 concurrent
  • All Bookmakers
  • All Markets
  • Pre-match odds
  • 120 requests/min

Racing Odds

  • Greyhounds
  • Horse
  • Harness

Bets

  • Positive EV and arbitrage bets
  • Up to 4 bookmakers
Best value

Builder

2M
$90 USD / month

Odds

Requests
2M / month
Streams
1,500 stream-hours / month
Stream connections
8 concurrent
  • All Bookmakers
  • All Markets
  • Pre-match odds
  • 300 requests/min
Betfair in-play odds included

Racing Odds

  • Greyhounds
  • Horse
  • Harness

Bets

  • Positive EV and arbitrage bets
  • Up to 6 bookmakers

Live

20M
$250 USD / month

Odds

Requests
20M / month
Streams
6,000 stream-hours / month
Stream connections
25 concurrent
  • All Bookmakers
  • All Markets
  • Pre-match odds
  • 600 requests/min
Betfair in-play odds included

Racing Odds

  • Greyhounds
  • Horse
  • Harness

Bets

  • Positive EV and arbitrage bets
  • Up to 15 bookmakers

Pro

75M
$500 USD / month

Odds

Requests
75M / month
Streams
20,000 stream-hours / month
Stream connections
75 concurrent
  • All Bookmakers
  • All Markets
  • Pre-match odds
  • 1,200 requests/min
Betfair in-play odds included

Racing Odds

  • Greyhounds
  • Horse
  • Harness

Bets

  • Positive EV and arbitrage bets
  • Up to 50 bookmakers

Enterprise grade

Custom feeds and models

Custom projects, scoped with your team.

Models and configurations

  • Custom fair-price models
  • Private +EV and arbitrage feeds
  • Separate brand configurations

Delivery and data

  • Managed feed delivery
  • Custom schemas and ID mapping
  • Research datasets and exports
  • Bookmaker and market coverage projects

Racing Odds

  • Greyhounds
  • Horse
  • Harness

Live Odds API FAQs

Connections, data fields and integration.

What does the live odds API return?

The live odds API returns Betfair in-play back and lay prices, available liquidity, matched activity and market state, alongside normalized identifiers, freshness fields and stream resume tokens.

How do I find a Betfair event that is in play?

Request /events with event_states=in_play, then select an event that lists betfair. Load its exchange order-book snapshot with exchanges=betfair and check in_play and status before displaying a current quote.

Should I choose SSE or WebSocket?

Use SSE for a simple HTTP connection that receives updates. Choose WebSocket when it fits your application’s connection model. Both exchange streams provide delta, heartbeat and resync messages and support resume tokens.

How do I measure how fresh an exchange price is?

Read freshness, source_age_seconds, observed_at and actively_collected on the order book. Keep in_play and status with the quote, so a suspended market or an old observation is handled correctly.

Can I place a Betfair bet through this API?

The API supplies market data. It does not log in to a Betfair customer account, hold funds or submit bets.

Build with live odds

Create your account and connect your first Betfair order book with REST, SSE or WebSocket.