API reference
Search players
Players on the rosters we hold, with team, position and headshot. Free on every plan.
GET
/odds/v1/players- Cost
- 0 tokens
- Authentication
- X-API-Key, demo key works
Parameters
sportstringoptionalA sport key, e.g. basketball. One of sport or league is required.leaguestringoptionalOur league key (nba, a_league, atp_shanghai, formula_1) or a roster key. One of sport or league is required.teamstringoptionalA team_id from /teams, a team name, or an abbreviation such as MIA.qstringoptionalName contains, 2 to 80 characters. Case and accent insensitive.limitintegeroptional1 to 500 per page.Default:100offsetintegeroptionalWhere the page starts. Pass next_offset back until it is null.Default:0
Request
curl -s "https://api.b337.ai/odds/v1/players?sport=basketball&q=curry" \
-H "X-API-Key: demo"import requests
resp = requests.get(
"https://api.b337.ai/odds/v1/players",
params={"sport": "basketball", "q": "curry"},
headers={"X-API-Key": "demo"},
timeout=10,
)
resp.raise_for_status()
print(resp.json())// Node 18+, saved as an .mjs file
const res = await fetch("https://api.b337.ai/odds/v1/players?sport=basketball&q=curry", {
headers: { "X-API-Key": "demo" },
});
console.log(await res.json());Response
200 OK
{
"count": 2, "total": 2, "offset": 0, "next_offset": null, "leagues": ["nba"],
"data": [
{"player_id": "nba:espn:2326307", "name": "Seth Curry", "sport": "basketball", "league": "nba",
"team": null, "team_abbr": null, "position": "G", "jersey": null,
"headshot_url": null, "profile_url": null},
{"player_id": "nba:espn:3975", "name": "Stephen Curry", "sport": "basketball", "league": "nba",
"team": "Golden State Warriors", "team_abbr": "GS", "position": "G", "jersey": "30",
"headshot_url": "https://api.b337.ai/odds/v1/media/player/nba:espn:3975", "profile_url": null}
],
"generated_at": "2026-10-06T00:00:00Z"
}Fields
- One row per person per roster.
player_idis stable: store it. See team_id and player_id. - Rosters held: NFL, NBA, NHL, MLB, AFL, NRL, EPL, A-League, La Liga, Serie A, Bundesliga, Ligue 1, Champions League, Europa League, MLS, UFC, PFL, ONE, ATP, WTA, golf, F1, boxing and darts.
team,team_abbr,positionandjerseyarenullwhere the source has none (tennis, golf and combat sports have no team).headshot_urlandprofile_urlarenullwhere we hold none. See logos and headshots.- Paging:
totalis every match; passnext_offsetback asoffsetuntil it isnull. - It costs 0 tokens on every plan, the demo key included.
Without sport or league the call is a 400. Use q for a name search; it needs at least 2 characters.