Sports Betting Odds API for Apps

Games, prices and results for a betting app, from one REST API.

A betting app needs a list of games, prices from the bookmakers its users hold accounts with, and results once the games are over. SockOdds v1 gives you all three through one REST API, with one response shape, plain keys for leagues, teams and bookmakers, and ids that join prices to results.

Why SockOdds

  • The bookmakers your users know. Sportsbet, TAB, Ladbrokes, Neds, PointsBet and many more, plus exchanges and prediction markets. The full list is on bookmakers.
  • One shape for everything. Every response is {data, meta, links}, errors are application/problem+json, and you page by following links.next unchanged.
  • Results in the same API. GET /results grades outcomes won, lost, void, dead_heat, half_won or half_lost from official sources.
  • Readable keys and shared ids. Leagues such as nfl and rlwc, teams such as australia_rugby_league, and ev_, mk_ and oc_ ids that are the same across bookmakers, history and results.
  • Tooling ready. An OpenAPI file, a Postman collection and runnable samples in cURL, JavaScript and Python on every docs page.
  • Free to start. A free Developer key covers a set of leagues and bookmakers. See pricing.

Call the API from your own server, not from the app itself: a key shipped in a mobile build or a browser bundle can be read by anyone.

What you can build

A games and odds screen

List a league's games with GET /events?league= and show their prices from GET /odds?league=, filtered with bookmakers= to the ones your users hold accounts with.

Bet tracking in the app

Save the outcome id with each bet and settle it from /results. See bet tracking and settlement.

Price comparison

Show which bookmaker has the best price for each outcome. See odds comparison.

Try it

This request lists NFL games in the default window.

curl -sS "https://api.sockodds.com/v1/events?league=nfl" \
  -H "Authorization: Bearer $SOCKODDS_API_KEY"
const response = await fetch("https://api.sockodds.com/v1/events?league=nfl", {
  headers: { Authorization: `Bearer ${process.env.SOCKODDS_API_KEY}` },
});
console.log(JSON.stringify(await response.json(), null, 2));
import json, os, urllib.request

request = urllib.request.Request(
    "https://api.sockodds.com/v1/events?league=nfl",
    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_000ckk0rv081",
      "name": "Arizona Cardinals v Atlanta Falcons",
      "league": {
        "key": "nfl",
        "name": "NFL"
      },
      "scheduled_start": "2026-10-16T20:00:00.000Z",
      "status": "scheduled",
      "participants": [
        {
          "role": "away",
          "identity": {
            "key": "atlanta_falcons",
            "name": "Atlanta Falcons"
          }
        },
        {
          "role": "home",
          "identity": {
            "key": "arizona_cardinals",
            "name": "Arizona Cardinals"
          }
        }
      ]
    }
  ],
  "meta": {
    "count": 1,
    "cursor": null
  },
  "links": {
    "next": null
  }
}

There are two games: one final and one scheduled. With no dates, the list starts 48 hours ago, so recent games and upcoming ones come back together. Use starts_after and starts_before to ask for any other window. Each game's id is what you pass to the odds and results routes.

Search across the SockOdds documentation and catalogue.