Skip to content

Player props for one fixture

GET
/v1/sports/{sport}/events/{id}/props
curl --request GET \
--url 'https://oddslink.app/v1/sports/americanfootball_nfl/events/nfl%3Afalcons-panthers%3A2026-09-20/props?markets=player_anytime_td%2Cplayer_pass_yds&bookmakers=draftkings%2Cfanduel&oddsFormat=american&dateFormat=iso' \
--header 'X-API-Key: <X-API-Key>'

The same row shape as listProps, scoped to exactly one fixture. Growth plan and up.

sport
required
string

A sport key, for example americanfootball_nfl or soccer_epl.

Example
americanfootball_nfl
id
required
string

A fixture id, as returned by GET /v1/sports/{sport}/events. Treat as opaque.

Example
nfl:falcons-panthers:2026-09-20
markets
required
string

Comma-separated player-prop market keys, for example player_pass_yds or player_anytime_td. Required: there is no default set of props. GET /v1/markets lists every prop key.

Example
player_anytime_td,player_pass_yds
bookmakers
string

Comma-separated book keys. Defaults to every book when omitted.

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

One number per price.

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 (iso) or integer unix seconds (unix).

This fixture’s props.

Media typeapplication/json
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, always with a Z.

string format: date-time
home_team
required
string
away_team
required
string
props
required
Array<object>
object
bookmaker
required
object
key
required
string
title
required
string
last_update
required
Any of:
Any of:

ISO-8601 UTC, always with a Z.

string format: date-time
player
required
string
stat
required

A market key, period suffix included, for example player_pass_yds.

string
point

The line for this stat. Absent for a binary (Yes/No) prop.

number
outcomes
required
Array<object>
>= 1 items
object
name
required

Over, Under, Yes or No today. More sides may be added.

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
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, as an exchange like Kalshi reports it. More kinds may be added.

string
amount
required
number
unmatched_bookmakers
required
Array<string>
Examples
Exampleprops

NFL anytime-TD and passing-yards props for one fixture

{
"id": "nfl:falcons-panthers:2026-09-20",
"sport_key": "americanfootball_nfl",
"sport_title": "NFL",
"commence_time": "2026-09-20T17:00:00Z",
"home_team": "Atlanta Falcons",
"away_team": "Carolina Panthers",
"props": [
{
"bookmaker": {
"key": "betrivers",
"title": "BetRivers",
"last_update": "2026-09-18T18:07:25Z"
},
"player": "Bijan Robinson",
"stat": "player_anytime_td",
"outcomes": [
{
"name": "Yes",
"price": -195
}
]
},
{
"bookmaker": {
"key": "bovada",
"title": "Bovada",
"last_update": "2026-09-18T18:07:31Z"
},
"player": "Bryce Young",
"stat": "player_pass_yds",
"point": 224.5,
"outcomes": [
{
"name": "Over",
"price": -115
},
{
"name": "Under",
"price": -105
}
]
}
],
"unmatched_bookmakers": []
}
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
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 API key (or session) 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
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 props (Growth plan and up).

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
docs_url
required
string format: uri
request_id
required
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": "Props require the Growth plan or above.",
"docs_url": "https://oddslink.app/docs/errors/#plan-required",
"request_id": "req_01hz8k4c3h5y9z4a",
"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, or the fixture id within it, 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
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 fixture with this id under this sport key

{
"error": {
"code": "UNKNOWN_EVENT",
"message": "Unknown fixture id for americanfootball_nfl: nfl:falcons-panthers:2026-09-27",
"docs_url": "https://oddslink.app/docs/errors/#unknown-event",
"request_id": "req_01hz8k4d6m8b2c7d"
}
}
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 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
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
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 (429 SPEED_LIMIT only).

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
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.