The sports odds API

SockOdds

Bookmaker prices we record ourselves.
Readable keys, recorded history, one REST API.

API / Example responseLocal test API · invented prices
Rugby League World Cup / 15 OCT 2026

Australia v New Zealand

Winner · Full match
4 bookmakers
BookmakerAustraliaNew Zealand
Ladbrokes
07:58:00 UTC
1.692.08
PlayUp
07:58:00 UTC
1.812.23
Sportsbet
07:58:00 UTC
1.722.12
TAB
07:58:00 UTC
1.772.18
19Leagues delivering prices
42Bookmakers, exchanges and prediction markets
163Market types in the catalogue
DecimalPrices exactly as each bookmaker showed them

Coverage as of 30 October 2026. Quoted markets vary by game, bookmaker and plan.

One request to get started.

Send your key as a bearer token. Every response is data, meta and links.

curl -sS "https://api.sockodds.com/v1/odds?league=rlwc&markets=winner&limit=1&starts_after=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
  -H "Authorization: Bearer $SOCKODDS_API_KEY"
const response = await fetch(`https://api.sockodds.com/v1/odds?league=rlwc&markets=winner&limit=1&starts_after=${new Date().toISOString().slice(0, 19)}Z`, {
  headers: { Authorization: `Bearer ${process.env.SOCKODDS_API_KEY}` },
});
console.log(JSON.stringify(await response.json(), null, 2));
import json, os, urllib.request
from datetime import datetime, timezone

request = urllib.request.Request(
    f"https://api.sockodds.com/v1/odds?league=rlwc&markets=winner&limit=1&starts_after={datetime.now(timezone.utc):%Y-%m-%dT%H:%M:%SZ}",
    headers={"Authorization": "Bearer " + os.environ["SOCKODDS_API_KEY"]},
)
with urllib.request.urlopen(request) as response:
    print(json.dumps(json.load(response), indent=2))

Response from a local copy of the API with invented test prices

{
  "data": [
    {
      "id": "ev_000ckk0zrx33",
      "name": "Australia v New Zealand",
      "league": {
        "key": "rlwc",
        "name": "Rugby League World Cup"
      },
      "scheduled_start": "2026-10-15T09:05:00.000Z",
      "status": "scheduled",
      "participants": [
        {
          "role": "away",
          "identity": {
            "key": "new_zealand_rugby_league",
            "name": "New Zealand"
          }
        },
        {
          "role": "home",
          "identity": {
            "key": "australia_rugby_league",
            "name": "Australia"
          }
        }
      ],
      "markets": [
        {
          "id": "mk_pz0msgze2rqwwktb",
          "key": "winner",
          "name": "Winner",
          "period": "full",
          "subject": null,
          "alternate": false,
          "outcomes": [
            {
              "id": "oc_nncgcssmzjhyt5pe",
              "name": "Australia",
              "side": "home",
              "line": null,
              "prices": [
                {
                  "bookmaker": "playup",
                  "decimal_odds": 1.81,
                  "implied_probability": 0.552486,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                },
                {
                  "bookmaker": "tab",
                  "decimal_odds": 1.77,
                  "implied_probability": 0.564972,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                },
                {
                  "bookmaker": "sportsbet",
                  "decimal_odds": 1.72,
                  "implied_probability": 0.581395,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                },
                {
                  "bookmaker": "ladbrokes",
                  "decimal_odds": 1.69,
                  "implied_probability": 0.591716,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                }
              ]
            },
            {
              "id": "oc_cwsr1gda0qcgf03j",
              "name": "New Zealand",
              "side": "away",
              "line": null,
              "prices": [
                {
                  "bookmaker": "playup",
                  "decimal_odds": 2.23,
                  "implied_probability": 0.44843,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                },
                {
                  "bookmaker": "tab",
                  "decimal_odds": 2.18,
                  "implied_probability": 0.458716,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                },
                {
                  "bookmaker": "sportsbet",
                  "decimal_odds": 2.12,
                  "implied_probability": 0.471698,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                },
                {
                  "bookmaker": "ladbrokes",
                  "decimal_odds": 2.08,
                  "implied_probability": 0.480769,
                  "available": true,
                  "observed_at": "2026-10-15T07:58:00.000Z"
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "meta": {
    "count": 1,
    "cursor": null
  },
  "links": {
    "next": null
  }
}

From the first request
to your next release.

Readable keys you can type, identities that hold across bookmakers, and prices that say when they were seen.

Compare every bookmaker at once.

Each outcome names its bookmaker, its decimal price and when we saw it. A price older than ten minutes is withheld, never shown as current.

Reading prices

See how the market moved.

On Pro, read every recorded price change for an event, plus opening and closing prices. History goes back to 22 December 2025 for NFL.

History and snapshots

Settle bets from official results.

Results grade each outcome won, lost, void, dead heat, half won or half lost from official sources, market by market.

Results
Local depth. Global reach.

Start with the leagues
your customers follow.

AFL Women's, ATP Tour, Bundesliga, UEFA Champions League, English Premier League and La Liga and more, from Australian and global bookmakers, exchanges and prediction markets.

Pre-match first. In-play prices are not a dedicated low-latency product.

Your first request starts here

Build for free. Grow from there.

2,500 objects a month and 10 requests a minute on the free Developer plan. No card required.

Get your API key

Search across the SockOdds documentation and catalogue.