Data product · matched
The matched feed arrives already paired
Bookmaker back prices across 140+ books in 20 countries, Bet365 among them, arrive already paired to a current exchange lay price, grouped per event with liquidity carried. All six feed types ship from one endpoint.
Matched · rated
Arsenal v Chelsea · Match Odds
Football · Arsenal
- Back · Bet365
- 2.10
- Lay · Exchange
- 2.05
- Rating
- 102.4%
Paired and liquidity-gated, with the lay price and liquidity carried. The rating here is one line of client-side maths at your own commission rate (at 0: 100 × back ÷ lay). You render the row.
What's in the box
Prices arrive grouped by match, with every book's back and lay offers under one entry.
Every offer carries a deep link to that event at its bookmaker or exchange, so a click lands on the right page.
The lay side comes from four UK exchanges (Betfair, Smarkets, Matchbook and BETDAQ) with liquidity attached, so every pair has money behind it.
Rows past a time-aware update-time cutoff are hidden and lay offers are gated by a liquidity floor, so the pairs you render can actually be placed.
The six feed types, one schema
Six processed feed types from one endpoint, all sharing one event-grouped schema: the standard oddsmatcher board, the racing types (each-way, extra-place, best-odds-guaranteed), back-only dutching, and football's 2up.
The type lives in the path and the grammar never changes, so turning one on is a parameter change rather than a re-integration. Every response shape is in the docs.
$ 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" }] }] }]}Standard: The core pair: every back price beside the exchange lay, liquidity attached.
Why buy it matched rather than raw
A raw odds feed hands you unpaired prices and leaves the relational work as your engineering: aligning selection names, pairing back to lay, gating on liquidity. The matched feed does that layer for you, so a pairing arrives finished rather than as a pipeline you maintain.
Depth makes the pairing worth having. The back side includes smaller domestic books a shallow feed leaves out, and a tight pair at a book you don't carry is a row a competitor shows and you don't. The coverage dashboard is live and the docs are public.
Who it's built for
Matched-betting platforms and oddsmatchers render the rows directly. Arbitrage and value tools consume the dutching and rated outputs. Comparison and tipster platforms use it as a normalised spine.
The solutions pages frame the fit by who you are.
How it's delivered
Integration is small: authenticate, request a feed type, render the rows. The docs carry sample responses for every type, so most teams have a first call working the same afternoon.
Regional coverage fans out from the same feed: a 20-country network filtered by one query param, each book carrying its region and a live update-time signal.
Coverage · update time
- Bet365UK1,284
- Bet VictorUK1,102
- William HillUK1,190
- Betfair ExchangeUK2,041
- Paddy PowerUK1,067
- Sky BetUK998
- LadbrokesUK1,043
- CoralUK1,011
… and the rest of the 140+-book network
Questions
Is Bet365 covered?
Yes, across all six feed types, already paired to exchange lay prices.
Which regions does the matched feed cover?
Region-filtered across a 20-country coverage network from one endpoint and one region parameter; your key's scope sets which regions it can request. Where a market has no in-region exchange, coverage lands as normalised back prices and dutching, not a claimed lay match.
See the matched pairs live
A free trial key puts the matched feed in your own product.