Skip to content

List fixtures in play, no prices

GET
/v1/sports/{sport}/events/live
curl --request GET \
--url 'https://oddslink.app/v1/sports/nfl/events/live?league=epl&tournament=atp_beijing&dateFormat=iso&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
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.

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 for this sport.

Media typeapplication/json
Array<object>
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
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
}
]
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.

The plan’s speed limit was exceeded; wait Retry-After seconds. A call that does not count against the allowance is never refused for a spent allowance.

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": "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_01hz8k4f7m9c3d8f"
}
}
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.

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.