How it works
Integrate in an afternoon.
The hard parts (coverage, matching, liquidity gating) are already done on our side.
$ 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" }] }] }]}- 01source
bookmaker coverage
140+ books, 20 countries
- 02
normalise
one shape, every book
- 03
match vs exchange lay
back paired to lay
- 04
rate & gate
scored, liquidity-checked
- 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.
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.
Call one endpoint
One authenticated GET, one of six matcher types, a region filter. Predictable JSON, no SDK required.
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.
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_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.