Skip to content

List fixtures in play with prices

GET
/v1/sports/{sport}/odds/live
curl --request GET \
--url 'https://oddslink.app/v1/sports/nfl/odds/live?league=epl&tournament=atp_beijing&markets=h2h%2Cspreads%2Ctotals&periods=full%2C1h&bookmakers=draftkings%2Cfanduel&oddsFormat=american&devig=true&fees=taker&dateFormat=iso&eventIds=nfl%3Aatlantafalcons-carolinapanthers%3A2026-09-20%2Cnfl%3Abaltimoreravens-neworleanssaints%3A2026-09-20&commenceTimeFrom=2026-09-20T00%3A00%3A00.000Z&commenceTimeTo=2026-09-21T00%3A00%3A00.000Z' \
--header 'X-API-Key: <X-API-Key>'

/live = fixtures in play now: started and not finished, using public is_live. Needs in-play odds (Growth and up), NOT the live feed add-on. The same selectors and formats as the upcoming list apply.

sport
required
string

A sport key, for example nfl, soccer, tennis, epl or tennis_atp_hangzhou. soccer and tennis are aggregate keys with optional competition selectors; their legacy per-competition keys remain aliases. A well-formed tennis tournament key is accepted; one we carry no fixtures for this week returns an empty list. Esports uses one key per game: cs2, lol, dota2, valorant; use tournament= to select a tournament within that game.

Example
nfl
league
string

Optional soccer competition selector, using its existing public alias key (epl, not an internal provider slug). Only valid with the aggregate soccer sport key. Omitting it returns every currently available soccer competition in one response, which may be larger.

Example
epl
tournament
string

Optional tennis competition selector, without the legacy tennis_ path prefix (atp_beijing). The tournament.key a response carries (tennis_atp_beijing) is accepted too. Valid with aggregate tennis or an esports game key (cs2, lol, dota2, valorant). For esports, pass the fixture’s tournament.key unchanged. Omitting it returns every currently available tennis competition in one response, which may be larger.

Example
atp_beijing
markets
string

Comma-separated market keys, with no period in them (h2h, h2h_3_way, spreads, totals, team_totals, …); choose periods with periods. Omitting it returns the available main markets (h2h,spreads,totals). Requesting full-game spreads, totals or team_totals includes its main line followed by every available alternate line in that one market object (one object per team for team_totals). A period market has the same shape: one object per market key and period, holding every line the bookmaker posts, main line first. Outside soccer, a moneyline with a separately priced Draw uses h2h_3_way; two-way prices stay under h2h. Soccer keeps its standard result including Draw under h2h. NHL regulation-time results use h2h_3_way with period: reg. Request markets=h2h,h2h_3_way to receive both contracts, and select periods separately (for example periods=1q). Default markets remain h2h,spreads,totals and exclude h2h_3_way. Esports map-count keys are maps_handicap and maps_total; per-map round keys are rounds_handicap, rounds_total (CS2, Valorant) and kill keys are kills_handicap, kills_total (LoL, Dota 2). Request these explicitly.

Example
h2h,spreads,totals
periods
string

Comma-separated periods for the requested markets: 1h, 2h (halves), 1q..4q (quarters), 1p..3p (hockey periods), f5 (baseball first 5 innings), 1i (baseball first inning), 1s..5s (tennis sets), reg (hockey regulation time). Omitting it returns the full game only. full asks for the full game beside other periods (periods=full,1h); it is accepted here only, since a full-game market carries no period. all returns the full game and every period. An unknown period is 422 INVALID_MARKET. There are no F3 or F7 markets. Esports also accepts map1, map2, map3, map4, map5; use periods=full,map1 for full-match and first-map prices.

Example
full,1h
bookmakers
string

Comma-separated, case-sensitive book keys from /v1/bookmakers. A typo or wrong case returns 422 INVALID_BOOKMAKER with a suggested key and valid_bookmakers; it does not count against your allowance. Defaults to every book when omitted. On the odds and props routes, any book you name that returns no markets for a fixture is listed in that fixture’s unmatched_bookmakers.

Example
draftkings,fanduel
oddsFormat
string
default: american
Allowed values: american decimal

One number per price.

devig
string
Allowed values: true false power multiplicative shin additive

Adds fair_prob and fair_price to every outcome that has its complete set of sides: the price with the bookmaker’s margin removed. devig=true uses power. Methods: power (the margin comes off in proportion to each price raised to a power; keeps the favourite-longshot shape), multiplicative (the margin comes off in proportion to each implied probability; what a basic no-vig calculator shows), shin, additive (for a two-way market shin and additive give the same numbers). On a lopsided market power and multiplicative differ by a point or more (1.20/5.00: 82.2 % vs 80.7 %). The method used comes back in the X-Devig-Method header. An outcome whose partner side is missing, or whose set is crossed or an exchange stub, carries no fair_* fields. Exchange and prediction-market prices are asks, so the gap between the two sides is the spread, not a margin; fair_prob is then the middle of the spread. Requires the Starter plan or above (403 PLAN_REQUIRED on Free).

fees
string
Allowed values: taker true false

fees=taker adds net_price to the outcomes of exchanges and prediction markets that charge a fee, and a fees object to each such market describing the published schedule used. net_price is the price after the taker fee, in the same oddsFormat as price (decimal to 3 places). Per-contract venues (Polymarket, Kalshi, Novig): the fee grows with price x (1 - price) and the figure is for a large order (Kalshi and Fanatics round each order up to the cent). Commission venues (SX Bet, ProphetX, Betfair, 4Casters): commission on winnings, so net_price is the price if the bet wins. Fanatics Markets prices already include its fee (fees.model is included, no net_price). Account tiers, discounts and promotions change what you pay; the published rate is shown. A venue or date with no published schedule carries neither field. Requires the Starter plan or above.

dateFormat
string
default: iso
Allowed values: iso unix

How commence_time, every last_update and recorded_at, and archive_from are written: ISO-8601 UTC strings with exactly three fractional digits and trailing Z (iso, e.g. 2026-10-11T13:00:00.000Z) or unix seconds (unix). ISO sub-millisecond digits are truncated. Unix price clocks may be fractional; fixture and gameline archive times use whole seconds.

eventIds
string

Comma-separated fixture ids, to narrow a list call to specific fixtures.

Example
nfl:atlantafalcons-carolinapanthers:2026-09-20,nfl:baltimoreravens-neworleanssaints:2026-09-20
commenceTimeFrom
string format: date-time

Only fixtures commencing at or after this ISO-8601 UTC instant.

Example
2026-09-20T00:00:00.000Z
commenceTimeTo
string format: date-time

Only fixtures commencing at or before this ISO-8601 UTC instant.

Example
2026-09-21T00:00:00.000Z

Fixtures with prices.

Media typeapplication/json
Array
object
id
required

A readable, constructible fixture id. Treat as opaque.

string
sport_key
required
string
sport_title
required
string
commence_time
required
Any of:

ISO-8601 UTC with exactly three fractional digits and a trailing Z.

string format: date-time
is_live
required

true from scheduled commence_time until the sport-specific live-window cutoff; false outside that window. Inferred from time, not a confirmed match-status or final-result feed, except reliable source terminal evidence makes it false. See the additive status and status_evidence fields. A delayed start, early finish or unusually long fixture can disagree with this flag. Evaluated when the response is served, so it can flip without a price change. On the WebSocket feed a flip arrives as a status upsert. Historical routes apply the same time-derived rule.

boolean
status

On current fixture routes, scheduled means the fixture has not started, including a delayed start. Live requires is_live to be true and a fresh observation of a linked book’s own in-play state, identified by status_evidence. Unknown means neither live play nor finish is confirmed. Finished requires retained explicit terminal evidence. These values are additive; clients must accept new values. Historical props use their separately documented recording status. Archive presence and absent prices alone never prove finish.

string
score

Present only for covered live soccer and tennis fixtures with a fresh observation. All sides follow home_team and away_team. Soccer clocks are cumulative observed match time, without extrapolation. Tennis totals count completed sets; ambiguous totals are omitted. Uncovered or stale scores are absent.

object
home
integer
away
integer
period
string
clock
string
sets
Array<object>
object
home
required
integer
away
required
integer
points
object
home
string
away
string
serving
string
updated_at
Any of:

ISO-8601 UTC with exactly three fractional digits and a trailing Z.

string format: date-time
status_evidence

The book, its observed state and observation time supporting live or finished status. Absent when no supporting observation is available.

object
bookmaker
required
string
state
required
string
observed_at
required
Any of:

ISO-8601 UTC with exactly three fractional digits and a trailing Z.

string format: date-time
home_team
required
string
away_team
required
string
league

Soccer fixtures only: the league a fixture belongs to. key is the public sport key when the league has one (epl; pass it as soccer?league= or as the sport key), else a stable key for that league; title is its display name. null when the league is not known for the fixture. Historical bodies carry the same object; a fixture archived before its league was recorded has league: null unless the sport key you asked with names one (epl). Other sports carry no league (tennis and esports carry tournament; every other sport key is one league).

object
key
required
string
title
required
string
tournament

Tennis and esports fixtures: the tournament a match belongs to. key is the tournament’s public sport key (tennis_atp_hangzhou; pass it as tennis?tournament= or as the sport key); title is its display name. null when the tournament is not known. Historical bodies carry the same object. For esports, key identifies the tournament within the requested game and is accepted by tournament= on events and odds lists.

object
key
required
string
title
required
string
best_of

Esports series format. Present only when known and the books agree; absent when unknown. A BO2 Draw is represented by h2h_3_way independently of this field.

integer
Allowed values: 1 3 5
bookmakers
required
Array<object>
object
key
required
string
title
required
string
link

A link to this fixture on the bookmaker’s own website. Present only when the bookmaker gives one; the field is absent otherwise, never empty or null. Some bookmakers link to the competition page rather than the single event. This is an event-page link; it does not select an outcome or populate a bet slip.

string format: uri
last_update
required
Any of:
Any of:

ISO-8601 UTC with exactly three fractional digits and a trailing Z.

string format: date-time
markets
required
Array<object>
object
key
required

Market key, with no period in it (spreads). Outside soccer, three-way moneylines use h2h_3_way, including NHL period: reg; two-way prices use h2h. Soccer results including Draw keep h2h. Full-game spreads, totals and team_totals (one object per team) each contain their main line first followed by available alternate lines. Esports: h2h is two-way match or map result; h2h_3_way is the separate BO2 result including a 1-1 Draw. maps_handicap and maps_total measure map counts. Per-map rounds_handicap and rounds_total apply to CS2 and Valorant; kills_handicap and kills_total apply to League of Legends and Dota 2. Select numbered maps with the separate period field.

string
period

The slice of the game a market settles on: 1h/2h halves, 1q..4q quarters, 1p..3p hockey periods, f5 baseball’s first 5 innings, 1i baseball’s first inning, 1s..5s tennis sets, reg hockey regulation time. Absent on a full-game market; never full. More periods may be added. There are no F3 or F7 markets. Esports map periods are map1 through map5; full-match markets omit the period field.

string
last_update
required
Any of:
Any of:

ISO-8601 UTC with exactly three fractional digits and a trailing Z.

string format: date-time
outcomes
required
Array<object>
object
name
required

The team, player or side this price is for. Never home/away. On h2h, h2h_3_way and spreads a team outcome is named exactly as the fixture’s away_team or home_team, and outcomes are listed away team first, then home team, then Draw on a three-way moneyline. Totals are Over then Under.

string
description

Present where name alone does not say what the price is for. On team_totals (and its period variants) name is Over or Under and description is the team the total belongs to.

string
price
required
Any of:

American odds: an integer of +100 or more, or -100 or less (124, -110). Never between -100 and +100, and never fractional.

integer
>= -99 <= 99
point

The line/spread/total this price is for, always written as a decimal number (2.5, -3.0). Absent (not present) on h2h and h2h_3_way.

number
main

Present on every spread, total and team-total ladder outcome, including periods and opening/closing history; omitted on partial series points. True on the main line, false on alternates. The main line comes first: the book’s featured two-sided line when named, otherwise the most balanced two-sided line by implied probability. A one-sided line is main only when no two-sided line exists. Lines with an implied probability sum at or below 1.25 take priority over lines above 1.25. Extreme prices are kept as quoted.

boolean
size
object
kind
required

posted_limit: one number that applies to both legs, a sportsbook’s maximum bet. resting_depth: a separate number per leg, an exchange’s live order book. contracts: a contract count; no bookmaker uses it today (Kalshi and Polymarket report resting_depth in dollars at the best price). More kinds may be added. The kind is fixed per bookmaker (GET /v1/bookmakers size_kind).

string
amount
required

Always a positive number. A posted_limit or resting_depth amount is in the bookmaker’s own currency; a contracts amount is a count. The same object appears on every line the bookmaker states a size for, including alternate lines and periods.

number
fair_prob

With devig: the probability of this outcome after the margin is removed from its complete set of sides (see the devig parameter for the method). Absent, never null or 0, when the set is incomplete, crossed or a stub.

number
<= 1
fair_price

With devig: fair_prob as a price, in the request’s oddsFormat (an integer in American, three decimals in decimal).

number
net_price

With fees: the price after the venue’s taker fee, in the request’s oddsFormat (an integer in American, three decimals in decimal). Present only on a venue and date with a published schedule; see the market’s fees object. A commission venue’s figure is the price if the bet wins.

number
fees

With fees: the published fee schedule behind this market’s net_price values. included means the venue’s price already contains the fee and no net_price is added.

object
basis
required
string
model
required

per_contract: a fee per contract that grows with price x (1 - price) (Polymarket, Kalshi, Novig). on_winnings: commission on winnings (SX Bet, ProphetX, Betfair, 4Casters). included: already in price (Fanatics Markets).

string
rate

The rate net_price uses. Absent when model is included. Where the venue’s rate depends on the customer’s country (Betfair, Matchbook) this is the rate for its home countries (UK and Ireland) and rate_elsewhere is the rate for everyone else.

number
rate_elsewhere

Present only where the rate depends on the customer’s country.

number
rate_source

published: the venue’s published rate for this book. schedule: a sport-level schedule (Polymarket sets its rate per market, and we apply the rate that sport’s markets carry); a market created before the sport’s last rate change can differ.

string
effective

The day this rate took effect.

string format: date
unmatched_bookmakers
required

Sorted book keys the response could not serve for this fixture. With bookmakers=, every book you asked for that returned no markets here (not listed, not matched to the fixture safely, none of the markets you asked for, or too old to serve). Without bookmakers=, a book that reached us with a price for this fixture that we could not serve (not matched to it safely, or too old to serve); a book that does not list the fixture at all is not named. Present, and possibly empty, on every successful response.

Array<string>
Example
[
{
"id": "nfl:atlantafalcons-carolinapanthers:2026-09-20",
"sport_key": "nfl",
"sport_title": "NFL",
"commence_time": "2026-09-20T17:00:00.000Z",
"is_live": false,
"score": {
"clock": "67:12",
"updated_at": "2026-09-20T17:00:00.000Z"
},
"status_evidence": {
"observed_at": "2026-09-20T17:00:00.000Z"
},
"league": {
"key": "epl",
"title": "EPL"
},
"tournament": {
"key": "tennis_atp_hangzhou",
"title": "ATP Hangzhou"
},
"best_of": 1,
"bookmakers": [
{
"key": "draftkings",
"title": "DraftKings",
"link": "https://sports.nj.betmgm.com/en/sports/events/carolina-panthers-at-atlanta-falcons-17042931",
"last_update": "2026-09-20T17:00:00.000Z",
"markets": [
{
"key": "h2h_3_way",
"period": "1q",
"last_update": "2026-10-15T21:49:00.000Z",
"outcomes": [
{
"name": "Atlanta Falcons",
"price": 120
},
{
"name": "Carolina Panthers",
"price": -110
},
{
"name": "Draw",
"price": 650
}
]
}
]
}
],
"unmatched_bookmakers": [
"betano"
]
}
]
x-requests-used
integer

Requests used this billing period.

x-requests-remaining
integer

Requests remaining this billing period.

x-requests-last
integer

What this one call cost against the allowance (0 for a free call).

X-RateLimit-Limit
integer

This plan’s speed limit, in requests per second.

X-RateLimit-Remaining
integer

Requests left in the current one-second window.

X-RateLimit-Reset
integer

Seconds until the speed-limit window resets.

X-Request-Id
string

This request’s id, for support and for matching against error.request_id.

A parameter was malformed.

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
docs_url
required
string format: uri
request_id
required
string
stored_commence_times

Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.

Array<integer>
valid_bookmakers

Valid case-sensitive book keys on INVALID_BOOKMAKER.

Array<string>
current_plan

403 only: the plan on the presented key.

string
required_plan

403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.

string
Example
{
"error": {
"code": "BAD_REQUEST",
"message": "commenceTimeFrom is not a valid ISO-8601 timestamp.",
"docs_url": "https://oddslink.app/docs/errors/#bad-request",
"request_id": "req_01hz8k3z9e2v6w1x"
}
}
x-requests-used
integer

Requests used this billing period.

x-requests-remaining
integer

Requests remaining this billing period.

x-requests-last
integer

What this one call cost against the allowance (0 for a free call).

X-RateLimit-Limit
integer

This plan’s speed limit, in requests per second.

X-RateLimit-Remaining
integer

Requests left in the current one-second window.

X-RateLimit-Reset
integer

Seconds until the speed-limit window resets.

X-Request-Id
string

This request’s id, for support and for matching against error.request_id.

The X-API-Key header is missing or invalid.

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
docs_url
required
string format: uri
request_id
required
string
stored_commence_times

Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.

Array<integer>
valid_bookmakers

Valid case-sensitive book keys on INVALID_BOOKMAKER.

Array<string>
current_plan

403 only: the plan on the presented key.

string
required_plan

403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.

string
Examples

No X-API-Key header sent

{
"error": {
"code": "MISSING_KEY",
"message": "X-API-Key header is missing.",
"docs_url": "https://oddslink.app/docs/errors/#missing-key",
"request_id": "req_01hz8k4a1f3w7x2y"
}
}
x-requests-used
integer

Requests used this billing period.

x-requests-remaining
integer

Requests remaining this billing period.

x-requests-last
integer

What this one call cost against the allowance (0 for a free call).

X-RateLimit-Limit
integer

This plan’s speed limit, in requests per second.

X-RateLimit-Remaining
integer

Requests left in the current one-second window.

X-RateLimit-Reset
integer

Seconds until the speed-limit window resets.

X-Request-Id
string

This request’s id, for support and for matching against error.request_id.

The key’s plan does not include in-play odds (Growth plan and up). A started fixture asked for by id and every /live list are refused. Upcoming lists exclude started fixtures for every plan.

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
docs_url
required
string format: uri
request_id
required
string
stored_commence_times

Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.

Array<integer>
valid_bookmakers

Valid case-sensitive book keys on INVALID_BOOKMAKER.

Array<string>
current_plan

403 only: the plan on the presented key.

string
required_plan

403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.

string
Example
{
"error": {
"code": "PLAN_REQUIRED",
"message": "In-play odds require the Growth plan or above.",
"docs_url": "https://oddslink.app/docs/errors/#plan-required",
"request_id": "req_01hz8k4c6l8b2c7d",
"current_plan": "starter",
"required_plan": "growth"
}
}
x-requests-used
integer

Requests used this billing period.

x-requests-remaining
integer

Requests remaining this billing period.

x-requests-last
integer

What this one call cost against the allowance (0 for a free call).

X-RateLimit-Limit
integer

This plan’s speed limit, in requests per second.

X-RateLimit-Remaining
integer

Requests left in the current one-second window.

X-RateLimit-Reset
integer

Seconds until the speed-limit window resets.

X-Request-Id
string

This request’s id, for support and for matching against error.request_id.

The sport key does not exist.

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
docs_url
required
string format: uri
request_id
required
string
stored_commence_times

Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.

Array<integer>
valid_bookmakers

Valid case-sensitive book keys on INVALID_BOOKMAKER.

Array<string>
current_plan

403 only: the plan on the presented key.

string
required_plan

403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.

string
Example
{
"error": {
"code": "UNKNOWN_SPORT",
"message": "Unknown sport key: basketbal_nba",
"docs_url": "https://oddslink.app/docs/errors/#unknown-sport",
"request_id": "req_01hz8k4d4j6z0a5b"
}
}
x-requests-used
integer

Requests used this billing period.

x-requests-remaining
integer

Requests remaining this billing period.

x-requests-last
integer

What this one call cost against the allowance (0 for a free call).

X-RateLimit-Limit
integer

This plan’s speed limit, in requests per second.

X-RateLimit-Remaining
integer

Requests left in the current one-second window.

X-RateLimit-Reset
integer

Seconds until the speed-limit window resets.

X-Request-Id
string

This request’s id, for support and for matching against error.request_id.

A parameter was well-formed but not valid (an unknown market or bookmaker key, for example).

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
docs_url
required
string format: uri
request_id
required
string
stored_commence_times

Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.

Array<integer>
valid_bookmakers

Valid case-sensitive book keys on INVALID_BOOKMAKER.

Array<string>
current_plan

403 only: the plan on the presented key.

string
required_plan

403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.

string
Example
{
"error": {
"code": "INVALID_MARKET",
"message": "Invalid markets: not_a_market",
"docs_url": "https://oddslink.app/docs/errors/#invalid-market",
"request_id": "req_01hz8k4e5k7a1b6c"
}
}
x-requests-used
integer

Requests used this billing period.

x-requests-remaining
integer

Requests remaining this billing period.

x-requests-last
integer

What this one call cost against the allowance (0 for a free call).

X-RateLimit-Limit
integer

This plan’s speed limit, in requests per second.

X-RateLimit-Remaining
integer

Requests left in the current one-second window.

X-RateLimit-Reset
integer

Seconds until the speed-limit window resets.

X-Request-Id
string

This request’s id, for support and for matching against error.request_id.

Either the plan’s speed limit or its monthly allowance was exceeded. error.code tells you which. Only the calls that count against the allowance can answer ALLOWANCE_SPENT.

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
docs_url
required
string format: uri
request_id
required
string
stored_commence_times

Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.

Array<integer>
valid_bookmakers

Valid case-sensitive book keys on INVALID_BOOKMAKER.

Array<string>
current_plan

403 only: the plan on the presented key.

string
required_plan

403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.

string
Examples

Too many requests this second (Retry-After is set)

{
"error": {
"code": "SPEED_LIMIT",
"message": "Speed limit exceeded: 10 requests/second on the Growth plan.",
"docs_url": "https://oddslink.app/docs/errors/#speed-limit",
"request_id": "req_01hz8k4f6l8b2c7d"
}
}
x-requests-used
integer

Requests used this billing period.

x-requests-remaining
integer

Requests remaining this billing period.

x-requests-last
integer

What this one call cost against the allowance (0 for a free call).

X-RateLimit-Limit
integer

This plan’s speed limit, in requests per second.

X-RateLimit-Remaining
integer

Requests left in the current one-second window.

X-RateLimit-Reset
integer

Seconds until the speed-limit window resets.

X-Request-Id
string

This request’s id, for support and for matching against error.request_id.

Retry-After
integer

Seconds to wait before retrying on 429 SPEED_LIMIT or 503 ODDS_UNAVAILABLE.

No built prices are available yet. Retry after the indicated number of seconds.

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
docs_url
required
string format: uri
request_id
required
string
stored_commence_times

Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.

Array<integer>
valid_bookmakers

Valid case-sensitive book keys on INVALID_BOOKMAKER.

Array<string>
current_plan

403 only: the plan on the presented key.

string
required_plan

403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.

string
Example
{
"error": {
"code": "ODDS_UNAVAILABLE",
"message": "No built prices are available yet.",
"docs_url": "https://oddslink.app/docs/errors/#odds-unavailable",
"request_id": "req_example"
}
}
<<
Retry-After
integer

Seconds to wait before retrying on 429 SPEED_LIMIT or 503 ODDS_UNAVAILABLE.

Something failed on our side.

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
docs_url
required
string format: uri
request_id
required
string
stored_commence_times

Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.

Array<integer>
valid_bookmakers

Valid case-sensitive book keys on INVALID_BOOKMAKER.

Array<string>
current_plan

403 only: the plan on the presented key.

string
required_plan

403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.

string
Example
{
"error": {
"code": "INTERNAL_ERROR",
"message": "Something went wrong on our side. It has been logged.",
"docs_url": "https://oddslink.app/docs/errors/#internal-error",
"request_id": "req_01hz8k4h8n0d4e9f"
}
}
x-requests-used
integer

Requests used this billing period.

x-requests-remaining
integer

Requests remaining this billing period.

x-requests-last
integer

What this one call cost against the allowance (0 for a free call).

X-RateLimit-Limit
integer

This plan’s speed limit, in requests per second.

X-RateLimit-Remaining
integer

Requests left in the current one-second window.

X-RateLimit-Reset
integer

Seconds until the speed-limit window resets.

X-Request-Id
string

This request’s id, for support and for matching against error.request_id.