DocsChangelog
Changelog
Changes to the OddsRelay API, newest first. Subscribe with RSS.
Breaking changes ship only as a new version, with 6 months' notice. Versioning policy
Raw winner markets sold each-way now carry
places,place_andfraction extra_(golf, horse racing and greyhounds, from 19:18 UTC). A bookmaker's other each-way terms for the same event are their own market,place outright_, and an exchange's own each-way market iswinner_ ew_ <places> outright_; both are raw only. The market keys added from 2 to 5 November, such aseach_ way result_andbtts handicap_, are listed by3way GET /.v2/ coverage Added in-play prices and exchange history. From 13:52 UTC,
inPlayonGET /andv2/ odds/ raw GET /(v2/ odds/ event/ {id} exclude, the default,includeoronly), and from 15:30 UTC onGET /forv2/ odds/ {type} standardanddutching(excludeoronly), within_on each event it serves; an in-play call costs what the same pre-match call costs. From 10:46 UTC,play GET /andv2/ historical/ odds/ raw GET /answer with Betfair, Smarkets and Matchbook beside the bookmakers by default,v2/ historical/ events/ {id}/ odds exchangesandexchangesOnly=answer instead oftrue 403, andbookmakersOnly=on those two routes and ontrue GET /gives the bookmakers-only answer, byte for byte. Closing lines and the files stay bookmakers only.v2/ historical/ closing Contract diff
Added
- parameter: GET /v2/odds/{type} query:inPlay
- enum value: GET /v2/odds/{type} query:inPlay: "exclude"
- enum value: GET /v2/odds/{type} query:inPlay: "only"
- parameter: GET /v2/odds/raw query:inPlay
- enum value: GET /v2/odds/raw query:inPlay: "exclude"
- enum value: GET /v2/odds/raw query:inPlay: "include"
- enum value: GET /v2/odds/raw query:inPlay: "only"
- parameter: GET /v2/odds/event/{id} query:inPlay
- enum value: GET /v2/odds/event/{id} query:inPlay: "exclude"
- enum value: GET /v2/odds/event/{id} query:inPlay: "include"
- enum value: GET /v2/odds/event/{id} query:inPlay: "only"
- parameter: GET /v2/historical/odds/raw query:bookmakersOnly
- enum value: GET /v2/historical/odds/raw query:bookmakersOnly: "true"
- enum value: GET /v2/historical/odds/raw query:bookmakersOnly: "false"
- parameter: GET /v2/historical/events/{id}/odds query:bookmakersOnly
- enum value: GET /v2/historical/events/{id}/odds query:bookmakersOnly: "true"
- enum value: GET /v2/historical/events/{id}/odds query:bookmakersOnly: "false"
- parameter: GET /v2/historical/closing query:bookmakersOnly
- enum value: GET /v2/historical/closing query:bookmakersOnly: "true"
- enum value: GET /v2/historical/closing query:bookmakersOnly: "false"
Contract diff
Added
- required field: #/components/schemas/PriceRegion: products
- required field: #/components/schemas/HistoricalPrices: snapshot
- required field: #/components/schemas/HistoricalPrices: event
- required field: #/components/schemas/HistoricalPrices: closing
- required field: #/components/schemas/HistoricalPrices: file_per_mb
- required field: #/components/schemas/HistoricalPrices: free_closing_days
Added historical odds, bookmakers only, in five routes: a past board (
GET /), one event's price changes (v2/ historical/ odds/ raw GET /), a day's closing lines (v2/ historical/ events/ {id}/ odds GET /), and the nightly day files (v2/ historical/ closing GET /and its download). They are priced fromv2/ historical/ files regions.uk.historicalin/.v2/ pricing Contract diff
Added
- path: GET /v2/historical/odds/raw
- parameter: GET /v2/historical/odds/raw query:date
- parameter: GET /v2/historical/odds/raw query:sports
- parameter: GET /v2/historical/odds/raw query:region
- enum value: GET /v2/historical/odds/raw query:region: "uk"
- parameter: GET /v2/historical/odds/raw query:format
- enum value: GET /v2/historical/odds/raw query:format: "envelope"
- enum value: GET /v2/historical/odds/raw query:format: "bare"
- parameter: GET /v2/historical/odds/raw query:oddsFormat
- enum value: GET /v2/historical/odds/raw query:oddsFormat: "decimal"
- enum value: GET /v2/historical/odds/raw query:oddsFormat: "american"
- parameter: GET /v2/historical/odds/raw query:dateFormat
- enum value: GET /v2/historical/odds/raw query:dateFormat: "iso"
- enum value: GET /v2/historical/odds/raw query:dateFormat: "unix"
- parameter: GET /v2/historical/odds/raw query:bookmakers
- parameter: GET /v2/historical/odds/raw query:exchanges
- parameter: GET /v2/historical/odds/raw query:markets
- parameter: GET /v2/historical/odds/raw query:eventIds
- parameter: GET /v2/historical/odds/raw query:exchangesOnly
- enum value: GET /v2/historical/odds/raw query:exchangesOnly: "true"
- enum value: GET /v2/historical/odds/raw query:exchangesOnly: "false"
- parameter: GET /v2/historical/odds/raw query:includeLiquidity
- enum value: GET /v2/historical/odds/raw query:includeLiquidity: "true"
- enum value: GET /v2/historical/odds/raw query:includeLiquidity: "false"
- parameter: GET /v2/historical/odds/raw query:limit
- parameter: GET /v2/historical/odds/raw query:cursor
- parameter: GET /v2/historical/odds/raw query:quote
- parameter: GET /v2/historical/odds/raw header:Accept-Encoding
- path: GET /v2/historical/events/{id}/odds
- parameter: GET /v2/historical/events/{id}/odds path:id
- parameter: GET /v2/historical/events/{id}/odds query:from
- parameter: GET /v2/historical/events/{id}/odds query:to
- parameter: GET /v2/historical/events/{id}/odds query:region
- enum value: GET /v2/historical/events/{id}/odds query:region: "uk"
- parameter: GET /v2/historical/events/{id}/odds query:oddsFormat
- enum value: GET /v2/historical/events/{id}/odds query:oddsFormat: "decimal"
- enum value: GET /v2/historical/events/{id}/odds query:oddsFormat: "american"
- parameter: GET /v2/historical/events/{id}/odds query:bookmakers
- parameter: GET /v2/historical/events/{id}/odds query:exchanges
- parameter: GET /v2/historical/events/{id}/odds query:markets
- parameter: GET /v2/historical/events/{id}/odds query:exchangesOnly
- enum value: GET /v2/historical/events/{id}/odds query:exchangesOnly: "true"
- enum value: GET /v2/historical/events/{id}/odds query:exchangesOnly: "false"
- parameter: GET /v2/historical/events/{id}/odds query:limit
- parameter: GET /v2/historical/events/{id}/odds query:cursor
- parameter: GET /v2/historical/events/{id}/odds query:quote
- path: GET /v2/historical/closing
- parameter: GET /v2/historical/closing query:date
- parameter: GET /v2/historical/closing query:sports
- parameter: GET /v2/historical/closing query:region
- enum value: GET /v2/historical/closing query:region: "uk"
- parameter: GET /v2/historical/closing query:bookmakers
- parameter: GET /v2/historical/closing query:exchanges
- parameter: GET /v2/historical/closing query:markets
- parameter: GET /v2/historical/closing query:exchangesOnly
- enum value: GET /v2/historical/closing query:exchangesOnly: "true"
- enum value: GET /v2/historical/closing query:exchangesOnly: "false"
- parameter: GET /v2/historical/closing query:limit
- parameter: GET /v2/historical/closing query:cursor
- parameter: GET /v2/historical/closing query:quote
- path: GET /v2/historical/files
- parameter: GET /v2/historical/files query:tier
- enum value: GET /v2/historical/files query:tier: "closing"
- enum value: GET /v2/historical/files query:tier: "60s"
- enum value: GET /v2/historical/files query:tier: "5s"
- enum value: GET /v2/historical/files query:tier: "1s"
- enum value: GET /v2/historical/files query:tier: "changes"
- parameter: GET /v2/historical/files query:sports
- parameter: GET /v2/historical/files query:from
- parameter: GET /v2/historical/files query:to
- parameter: GET /v2/historical/files query:region
- enum value: GET /v2/historical/files query:region: "uk"
- path: GET /v2/historical/files/{tier}/{sport}/{file}
- parameter: GET /v2/historical/files/{tier}/{sport}/{file} path:tier
- enum value: GET /v2/historical/files/{tier}/{sport}/{file} path:tier: "closing"
- enum value: GET /v2/historical/files/{tier}/{sport}/{file} path:tier: "60s"
- enum value: GET /v2/historical/files/{tier}/{sport}/{file} path:tier: "5s"
- enum value: GET /v2/historical/files/{tier}/{sport}/{file} path:tier: "1s"
- enum value: GET /v2/historical/files/{tier}/{sport}/{file} path:tier: "changes"
- parameter: GET /v2/historical/files/{tier}/{sport}/{file} path:sport
- parameter: GET /v2/historical/files/{tier}/{sport}/{file} path:file
- parameter: GET /v2/historical/files/{tier}/{sport}/{file} query:region
- enum value: GET /v2/historical/files/{tier}/{sport}/{file} query:region: "uk"
- parameter: GET /v2/historical/files/{tier}/{sport}/{file} query:quote
- error code: 400 date_out_of_range
- error code: 403 exchange_history_unavailable
- error code: 403 files_need_whole_scope
- error code: 404 no_history
- error code: 429 too_many_downloads
- required field: #/components/schemas/HistoricalRawMeta: feed_type
- required field: #/components/schemas/HistoricalRawMeta: region
- required field: #/components/schemas/HistoricalRawMeta: odds_format
- required field: #/components/schemas/HistoricalRawMeta: processed_at
- required field: #/components/schemas/HistoricalRawMeta: count
- required field: #/components/schemas/HistoricalRawMeta: version
- required field: #/components/schemas/HistoricalRawMeta: next_cursor
- required field: #/components/schemas/HistoricalRawMeta: total
- required field: #/components/schemas/HistoricalRawMeta: board_version
- required field: #/components/schemas/HistoricalRawMeta: historical
- required field: #/components/schemas/HistoricalRawMeta: timestamp
- required field: #/components/schemas/HistoricalRawMeta: previous_timestamp
- required field: #/components/schemas/HistoricalRawMeta: next_timestamp
- required field: #/components/schemas/HistoricalRawMeta: complete
- enum value: #/components/schemas/HistoricalRawMeta/properties/feed_type: "raw"
- enum value: #/components/schemas/HistoricalRawMeta/properties/odds_format: "decimal"
- enum value: #/components/schemas/HistoricalRawMeta/properties/odds_format: "american"
- enum value: #/components/schemas/HistoricalRawMeta/properties/historical: true
- required field: #/components/schemas/HistoricalRawEnvelope: meta
- required field: #/components/schemas/HistoricalRawEnvelope: data
- required field: #/components/schemas/ChangeRow: timestamp
- required field: #/components/schemas/ChangeRow: event_id
- required field: #/components/schemas/ChangeRow: bookmaker
- required field: #/components/schemas/ChangeRow: market
- required field: #/components/schemas/ChangeRow: outcome
- required field: #/components/schemas/ChangeRow: last_update
- enum value: #/components/schemas/ChangeRow/properties/removed: true
- required field: #/components/schemas/HistoricalEventEnvelope: meta
- required field: #/components/schemas/HistoricalEventEnvelope: data
- required field: #/components/schemas/HistoricalEventEnvelope/properties/meta: feed_type
- required field: #/components/schemas/HistoricalEventEnvelope/properties/meta: event_id
- required field: #/components/schemas/HistoricalEventEnvelope/properties/meta: ids
- required field: #/components/schemas/HistoricalEventEnvelope/properties/meta: from
- required field: #/components/schemas/HistoricalEventEnvelope/properties/meta: to
- required field: #/components/schemas/HistoricalEventEnvelope/properties/meta: count
- required field: #/components/schemas/HistoricalEventEnvelope/properties/meta: next_cursor
- required field: #/components/schemas/HistoricalEventEnvelope/properties/meta: historical
- required field: #/components/schemas/HistoricalEventEnvelope/properties/meta: gaps
- enum value: #/components/schemas/HistoricalEventEnvelope/properties/meta/properties/feed_type: "historical_event"
- required field: #/components/schemas/ClosingOutcome: name
- required field: #/components/schemas/ClosingEvent: id
- required field: #/components/schemas/ClosingEvent: bookmakers
- required field: #/components/schemas/ClosingEnvelope: meta
- required field: #/components/schemas/ClosingEnvelope: data
- enum value: #/components/schemas/ClosingEnvelope/properties/meta/properties/feed_type: "historical_closing"
- required field: #/components/schemas/HistoricalFile: name
- required field: #/components/schemas/HistoricalFile: tier
- required field: #/components/schemas/HistoricalFile: sport
- required field: #/components/schemas/HistoricalFile: day
- required field: #/components/schemas/HistoricalFile: size
- required field: #/components/schemas/HistoricalFile: url
- required field: #/components/schemas/HistoricalFile: cost
- enum value: #/components/schemas/HistoricalFile/properties/tier: "closing"
- enum value: #/components/schemas/HistoricalFile/properties/tier: "60s"
- enum value: #/components/schemas/HistoricalFile/properties/tier: "5s"
- enum value: #/components/schemas/HistoricalFile/properties/tier: "1s"
- enum value: #/components/schemas/HistoricalFile/properties/tier: "changes"
- required field: #/components/schemas/FilesEnvelope: meta
- required field: #/components/schemas/FilesEnvelope: data
- enum value: #/components/schemas/FilesEnvelope/properties/meta/properties/feed_type: "historical_files"
Contract diff
Added
- path: GET /v2/spotlight
- parameter: GET /v2/spotlight query:region
- required field: #/components/schemas/Spotlight: region
- required field: #/components/schemas/Spotlight: generated_at
- required field: #/components/schemas/Spotlight: arb
- required field: #/components/schemas/Spotlight: pairs
- required field: #/components/schemas/SpotlightArb: event_id
- required field: #/components/schemas/SpotlightArb: sport_key
- required field: #/components/schemas/SpotlightArb: sport_title
- required field: #/components/schemas/SpotlightArb: home_team
- required field: #/components/schemas/SpotlightArb: away_team
- required field: #/components/schemas/SpotlightArb: commence_time
- required field: #/components/schemas/SpotlightArb: market
- required field: #/components/schemas/SpotlightArb: legs
- required field: #/components/schemas/SpotlightArb: rating
- enum value: #/components/schemas/SpotlightArb/properties/market: "h2h"
- required field: #/components/schemas/SpotlightArb/properties/legs/items: outcome
- required field: #/components/schemas/SpotlightArb/properties/legs/items: bookmaker
- required field: #/components/schemas/SpotlightArb/properties/legs/items: price
- required field: #/components/schemas/SpotlightPair: event_id
- required field: #/components/schemas/SpotlightPair: sport_key
- required field: #/components/schemas/SpotlightPair: sport_title
- required field: #/components/schemas/SpotlightPair: commence_time
- required field: #/components/schemas/SpotlightPair: market
- required field: #/components/schemas/SpotlightPair: selection
- required field: #/components/schemas/SpotlightPair: back
- required field: #/components/schemas/SpotlightPair: lay
- enum value: #/components/schemas/SpotlightPair/properties/market: "h2h"
- enum value: #/components/schemas/SpotlightPair/properties/market: "totals"
- enum value: #/components/schemas/SpotlightPair/properties/market: "btts"
- enum value: #/components/schemas/SpotlightPair/properties/market: "correct_score"
- enum value: #/components/schemas/SpotlightPair/properties/market: "double_chance"
- enum value: #/components/schemas/SpotlightPair/properties/market: "draw_no_bet"
- enum value: #/components/schemas/SpotlightPair/properties/market: "half_time_full_time"
- enum value: #/components/schemas/SpotlightPair/properties/market: "win"
- required field: #/components/schemas/SpotlightPair/properties/back: bookmaker
- required field: #/components/schemas/SpotlightPair/properties/back: price
- required field: #/components/schemas/SpotlightPair/properties/lay: exchange
- required field: #/components/schemas/SpotlightPair/properties/lay: price
- required field: #/components/schemas/SpotlightPair/properties/lay: available
Contract diff
Added
- error code: 400 sport_not_served_by_this_worker
Contract diff
Added
- required field: #/components/schemas/CoverageSummary: markets
Contract diff
Added
- error code: 403 exchange_not_in_plan
- error code: 403 market_not_in_plan
- error code: 403 sport_not_in_plan
- required field: #/components/schemas/Usage: scope
- required field: #/components/schemas/Usage: scope_version
Contract diff
Added
- parameter: GET /v2/odds/raw query:requireBookmakers
Breaking
Contract diff
Removed
- required field: #/components/schemas/MatchedMeta: unreliable_links
- required field: #/components/schemas/MatchedMeta/properties/unreliable_links/items: bookmaker
- required field: #/components/schemas/MatchedMeta/properties/unreliable_links/items: sport
Documented the
Accept-Encodingrequest header onGET /andv2/ odds/ {type} GET /. A request that does not send it gets a plain, uncompressed body.v2/ odds/ raw Contract diff
Added
- parameter: GET /v2/odds/{type} header:Accept-Encoding
- parameter: GET /v2/odds/raw header:Accept-Encoding
Breaking
upgrade_is no longer always present in aurl 402error. A custom Enterprise plan does not carry one.Contract diff
Removed
- required field: #/components/schemas/Error402/properties/error: upgrade_url
API version 2026-07-08
The first published version: 14 endpoints and 31 error codes.