Props
Player props require the Growth plan or above (x-plan-min: growth in the OpenAPI file). GET /v1/sports/{sport}/props covers one or more fixtures in a sport at once; GET /v1/sports/{sport}/events/{id}/props scopes the same shape to one fixture.
The markets parameter is required
Unlike the odds endpoints, markets is required here: there is no default set of props. GET /v1/markets lists every prop key, named like player_pass_yds or player_anytime_td.
One row per player, stat and line
Each row's outcomes[] holds every side for that one line together: an Over and an Under for a numeric prop, or a single Yes for a binary one such as anytime touchdown.
Example
GET
/v1/sports/americanfootball_nfl/props?markets=player_anytime_td,player_pass_ydsGET/v1/sports/americanfootball_nfl/events/nfl:falcons-panthers:2026-09-20/props?markets=player_anytime_td,player_pass_ydscurl "https://oddslink.app/v1/sports/americanfootball_nfl/props?markets=player_anytime_td,player_pass_yds" \
-H "X-API-Key: ok_live_..."import requests
resp = requests.get(
"https://oddslink.app/v1/sports/americanfootball_nfl/props",
params={"markets": "player_anytime_td,player_pass_yds"},
headers={"X-API-Key": "ok_live_..."},
timeout=10,
)
resp.raise_for_status()
data = resp.json()
print(resp.headers["x-requests-remaining"])const res = await fetch(
"https://oddslink.app/v1/sports/americanfootball_nfl/props?markets=player_anytime_td,player_pass_yds",
{ headers: { "X-API-Key": "ok_live_..." } }
);
if (!res.ok) throw new Error((await res.json()).error.code);
const data = await res.json();package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET",
"https://oddslink.app/v1/sports/americanfootball_nfl/props?markets=player_anytime_td,player_pass_yds", nil)
req.Header.Set("X-API-Key", "ok_live_...")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$ch = curl_init("https://oddslink.app/v1/sports/americanfootball_nfl/props?markets=player_anytime_td,player_pass_yds");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-API-Key: ok_live_..."],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);curl "https://oddslink.app/v1/sports/americanfootball_nfl/events/nfl:falcons-panthers:2026-09-20/props?markets=player_anytime_td,player_pass_yds" \
-H "X-API-Key: ok_live_..."import requests
resp = requests.get(
"https://oddslink.app/v1/sports/americanfootball_nfl/events/nfl:falcons-panthers:2026-09-20/props",
params={"markets": "player_anytime_td,player_pass_yds"},
headers={"X-API-Key": "ok_live_..."},
timeout=10,
)
resp.raise_for_status()
data = resp.json()
print(resp.headers["x-requests-remaining"])const res = await fetch(
"https://oddslink.app/v1/sports/americanfootball_nfl/events/nfl:falcons-panthers:2026-09-20/props?markets=player_anytime_td,player_pass_yds",
{ headers: { "X-API-Key": "ok_live_..." } }
);
if (!res.ok) throw new Error((await res.json()).error.code);
const data = await res.json();package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET",
"https://oddslink.app/v1/sports/americanfootball_nfl/events/nfl:falcons-panthers:2026-09-20/props?markets=player_anytime_td,player_pass_yds", nil)
req.Header.Set("X-API-Key", "ok_live_...")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$ch = curl_init("https://oddslink.app/v1/sports/americanfootball_nfl/events/nfl:falcons-panthers:2026-09-20/props?markets=player_anytime_td,player_pass_yds");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-API-Key: ok_live_..."],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);200 OKresponse.json
[
{
"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": []
}
]{
"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": []
}