Skip to content

Overview

Live odds and prices from every book we cover, in one JSON API.

Fixtures and prices from every sportsbook, exchange and prediction market we cover, joined onto one fixture and returned in one JSON response. Every book is available on every plan, and there is no regional gating.

Response format

Fixture and price fields use plain, familiar names: bookmakers[] -> markets[] -> outcomes[{name, price, point}], with home_team / away_team on the fixture. A few things worth knowing about how our format works:

  • The API key is sent in the X-API-Key request header only. There is no query parameter alternative, since a key in a URL can end up recorded by a proxy or a log.
  • Period is part of the market key: totals_f5, spreads_h1. A full-game market has no suffix. GET /v1/markets lists every key and the period it covers.
  • price is one number. Under the default oddsFormat=american it is always an integer (-110, 124); under oddsFormat=decimal it is a decimal number above 1 (1.91). point is a decimal number (2.5, -3.0) and is absent on a moneyline.
  • last_update is present on every price and can be null. A null value means we do not yet measure a fetch time for that book, and it is never an estimate. A price older than its book’s normal update rhythm is removed rather than shown as stale.
  • size is a typed object: kind (posted_limit, resting_depth or contracts) and amount. It is present only where a book publishes one.
  • unmatched_bookmakers appears on every successful odds or props response. A book that had a price for this fixture but could not be matched to it safely is named here explicitly, instead of being left out silently.
  • id is a readable id built from the sport, the two teams and the date, for example nfl:falcons-panthers:2026-09-20. Treat it as an opaque string.
  • Props have their own endpoints. Each row covers one player, stat and line per book, with every outcome for that line together in one place.
  • History has its own endpoints: openers, closing lines and the full recorded series.
  • Errors are nested under error: code, message, docs_url, request_id.

What counts as a request

Only calls that return prices count against your monthly allowance: the odds endpoints, the props endpoints and the history endpoints. Listing sports, bookmakers, markets and fixtures is free on every plan, and the account endpoints are free too. All of them still follow your plan’s speed limit. Each operation below states whether it counts (x-counts-as-request). A free call never answers ALLOWANCE_SPENT: once the month’s allowance is used up, the free calls keep working.

Breaking changes

Within one version, changes only add: new endpoints, new optional parameters, new response fields, new values you should be ready to see. We do not rename or remove a field, change a field’s type, or change what an existing parameter does by default. A change that cannot be made that way ships as a new version, with the previous one kept running through a notice period.

A response field whose value comes from a documented list (a book’s kind, a size’s kind, a plan name) can gain a new value within a version. Those lists are marked x-extensible-enum instead of enum, so a client generated from this file reads them as plain strings; handle a value you do not recognise instead of failing on it.

Information

  • License: Proprietary
  • OpenAPI version: 3.1.0

Every operation except /v1/account/keys accepts this. There is no ?apiKey= query fallback.

Security scheme type: apiKey

Header parameter name: X-API-Key

A signed-in website session’s access token. Required by /v1/account/keys. An X-API-Key is refused there: only a signed-in customer creates or revokes keys.

Security scheme type: http