Skip to content

How it works

Integrate in an afternoon.

The hard parts (coverage, matching, liquidity gating) are already done on our side.

api.oddsrelay.io/v2/odds/standard?region=uk
$ curl api.oddsrelay.io/v2/odds/standard?region=uk \
  -H "Authorization: Bearer or_live_••••••••••••"
GET 200 · application/json
{  "event_id": "or_evt_9f2c1a7b41d0",  "sport_key": "soccer_premier_league",  "sport_title": "Premier League",  "commence_time": "2026-07-08T14:00:00Z",  "home_team": "Arsenal",  "away_team": "Chelsea",  "markets": [{    "key": "h2h",    "outcomes": [{      "name": "Arsenal",      "back": [{        "bookmaker": "bet365",        "price": 2.10,        "link": null,        "last_update": "2026-07-08T12:34:48Z"      }],      "lay": [{        "exchange": "smarkets",        "price": 2.05,        "available": 1840.0,        "link": null,        "last_update": "2026-07-08T12:34:48Z"      }]    }]  }]}
  1. 01source

    bookmaker coverage

    140+ books, 20 countries

  2. 02

    normalise

    one shape, every book

  3. 03

    match vs exchange lay

    back paired to lay

  4. 04

    rate & gate

    scored, liquidity-checked

  5. 05

    your endpoint

    one clean API call

We describe what we deliver reliably, not how we source it. The sourcing stays ours.

01 · Getting started

Four steps, no matching engine.

01

Get a key

Start a free trial (the full UK product for 14 days) or enquire for a paid key. Keys are or_live_* / or_test_*, sent as a Bearer token and scoped to the feed types and regions you need.

02

Call one endpoint

One authenticated GET, one of six matcher types, a region filter. Predictable JSON, no SDK required.

03

Render the opportunities

The response is already matched and event-grouped: every outcome carries each book's back price beside the exchange lay, with liquidity attached.

04

Ship and stay efficient

Send If-None-Match to get cheap 304s, accept gzip, and poll on the matcher cycle. The OpenAPI spec and the API docs cover the full envelope, scopes and rate limits.

02 · Anatomy of an odds object

Every event, already matched.

Hover a field to see what it carries.

event object · matched
{      }],      }]    }]  }]}

event_id

Stable, deterministic id: the same fixture resolves to the same id across polls and across every /v2 family.

Identity once, source facts only: a rating is one line of client-side maths on these prices, with your own stake and your own commission rate.

For the complete reference, read the API docs.

Update times run on the cycle

The board re-prices every few seconds, whatever your request rate, so polling faster than the cycle buys nothing. Live update times and uptime are published on the coverage dashboard.

Try the real thing

Wire the trial feed into your product and see the matched rows for yourself.