FanDuel API endpoint
Returns a featured league page (for example nfl, nba, mlb) with its events, markets and odds, grouped by the page's tabs such as Games, Player Props, Win Totals or Super Bowl. `custom_page_id` values come from the sports route's `popular_links`; an unknown id returns 404.
/fanduel/sportsbook/leagueReturns a featured league page with its events, markets and odds. Tabs follow the Sportsbook page: for example the NFL page offers games, player-props, win-totals, playoffs, super-bowl, awards, nfl-draft, weekly-specials and a current-week tab.
custom_page_id (required): league page id. Verified on 2026-10-23: nfl, nba, mlb, ncaaf, ncaab, nhl, wnba, pga, ncaaw, each with events and tabs. Tournament and event pages appear and disappear during the year (ryder-cup and wimbledon still answered on that date but had no events and so return 404); list the current ids with the sports route (popular_links entries of kind custom_page). An unknown or empty page returns 404; a malformed id returns 400.state (optional, default nj): U.S. market whose Sportsbook host is queried. Prices and the markets offered can differ by state. One of ar, az, co, ct, dc, ia, il, in, ks, ky, la, ma, md, mi, mo, mr, nc, nj, ny, oh, on, pa, pr, tn, va, vt, wv, wy. Any other value returns 400.tab (optional): show only one tab of the page. Use a tabs[].slug value from the response (the lowercase, hyphenated tab title such as games, player-props, win-totals). Tabs are specific to the page, so the valid set is whatever the response lists; an unknown slug returns 400 naming the page's tabs.competition_id (optional): keep only events of this competition id, taken from the response competitions.market_type (optional, repeatable or comma-separated): keep only markets of these types, for example MONEY_LINE. The values present on the page are listed in the response market_types (with counts); a type the page lacks yields events with no markets. market_types is always the unfiltered census so you can discover values.exclude_markets (optional, true or false, default false): return events without their markets for a compact event listing.tab selects the events and markets that tab shows. Page tabs are built from the Sportsbook's own card layout, so the valid slugs differ by league and by week; read them from tabs[].slug.default_tab is the tab the Sportsbook opens first.503 on upstream failure.state (for example the NFL league page lists 34 market types in nj and 25 in ny, va and vt); compare states with the same state value.The route is read-only and needs no account. Odds are shown as the Sportsbook publishes them for the chosen state at the moment of the request and are not a betting recommendation.
| Field | Filled in, of 31 checked | Values in the sample |
|---|---|---|
| event_id | 31 | |
| name | 31 | “NFL Draft” and 30 other values |
| event_type_id | 31 | |
| competition_id | 31 | |
| open_date | 31 | 2025-04-25 to 2030-12-01 |
| in_play | 31 | true in 0 of 31 |
| markets | 31 | median 3 entries |
| video_available | 12 | true in 12 of 12 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| custom_page_id | string | Yes | League page id such as `nfl`, `nba`, `mlb`, `ncaaf`, `ncaab`, `nhl`, `wnba`, `pga`, `ncaaw`. Tournament and event pages appear and disappear during the year, and a retired page returns 404; list the current ones with the sports route | nfl | |
| state | string | No | U.S. market to query (prices and offered markets differ by state); default nj Allowed values: ar, az, co, ct, dc, ia, il, in, ks, ky, la, ma, md, mi, mo, mr, nc, nj, ny, oh, on, pa, pr, tn, va, vt, wv, wy. | ||
| tab | string | No | Show only one tab of this page: a tab slug from the response `tabs[].slug` (the lowercase-hyphenated tab title, such as `games` or `player-props`). An unknown slug returns 400 listing the page's tabs | ||
| competition_id | integer | No | Keep only events of this competition id (from the response `competitions`) | ||
| market_type | string | No | Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets | ||
| exclude_markets | boolean | No | Return events without their markets (a cheap event listing); `market_types` is still returned | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/fanduel/sportsbook/league?custom_page_id=nfl&state=ar&exclude_markets=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"state": "nj",
"page_type": "CUSTOM",
"custom_page_id": "nfl",
"title": "NFL Betting | FanDuel Sportsbook",
"description": "Bet on pro football with FanDuel! Join today for NFL live betting, odds, parlays, moneylines and more!",
"default_tab": "games",
"selected_tab": "games",
"tabs": [
{
"id": "1676",
"title": "Games",
"slug": "games",
"event_count": 3,
"market_count": 9
},
{
"id": "100",
"title": "Win Totals",
"slug": "win-totals",
"event_count": 1,
"market_count": 5
},
{
"id": "559",
"title": "Player Props",
"slug": "player-props",
"event_count": 2,
"market_count": 3
}
],
"competitions": [
{
"competition_id": 12282733,
"name": "NFL",
"event_type_id": 6423
}
],
"events": [
{
"event_id": 36190129,
"name": "New England Patriots @ Chicago Bears",
"event_type_id": 6423,
"competition_id": 12282733,
"open_date": "2026-10-23T00:16:00.000Z",
"in_play": false,
"video_available": true,
"markets": [
{
"market_id": "734.191539413",
"name": "Moneyline",
"type": "MONEY_LINE",
"betting_type": "ODDS",
"status": "OPEN",
"in_play": false,
"same_game_parlay_eligible": true,
"market_time": "2026-10-23T00:16:00.000Z",
"runners": [
{
"selection_id": 50204,
"name": "New England Patriots",
"abbreviation": "NE Patriots",
"side": "AWAY",
"handicap": 0,
"status": "ACTIVE",
"american_odds": 134,
"decimal_odds": 2.34,
"fractional_odds": "134/100",
"logo_url": "https://assets.sportsbook.fanduel.com/images/team/nfl/new_england_patriots.png"
},
{
"selection_id": 50194,
"name": "Chicago Bears",
"abbreviation": "CHI Bears",
"side": "HOME",
"handicap": 0,
"status": "ACTIVE",
"american_odds": -158,
"decimal_odds": 1.632911392405063,
"fractional_odds": "100/158",
"logo_url": "https://assets.sportsbook.fanduel.com/images/team/nfl/chicago_bears.png"
}
]
},
{
"market_id": "734.191539418",
"name": "Spread",
"type": "MATCH_HANDICAP_(2-WAY)",
"betting_type": "MOVING_HANDICAP",
"status": "OPEN",
"in_play": false,
"same_game_parlay_eligible": true,
"market_time": "2026-10-23T00:16:00.000Z",
"runners": [
{
"selection_id": 50204,
"name": "New England Patriots",
"abbreviation": "NE Patriots",
"side": "AWAY",
"handicap": 3,
"status": "ACTIVE",
"american_odds": -115,
"decimal_odds": 1.869565217391304,
"fractional_odds": "100/115",
"logo_url": "https://assets.sportsbook.fanduel.com/images/team/nfl/new_england_patriots.png"
},
{
"selection_id": 50194,
"name": "Chicago Bears",
"abbreviation": "CHI Bears",
"side": "HOME",
"handicap": -3,
"status": "ACTIVE",
"american_odds": -105,
"decimal_odds": 1.952380952380952,
"fractional_odds": "100/105",
"logo_url": "https://assets.sportsbook.fanduel.com/images/team/nfl/chicago_bears.png"
}
]
}
]
}
],
"market_types": [
{
"type": "MATCH_HANDICAP_(2-WAY)",
"count": 3
},
{
"type": "MONEY_LINE",
"count": 3
},
{
"type": "TOTAL_POINTS_(OVER/UNDER)",
"count": 3
}
],
"fetched_at": "2026-10-22T23:53:07Z"
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/fanduel.sportsbookPageResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | fanduel.SportsbookPageResponse | No | ||||
| data.competition_id | integer | No | ||||
| data.competitions | array | No | SportsbookCompetition record, 4 fields: competition_id, event_type_id, name, region. Described under FanDuel Sportsbook homepage odds API. | |||
| data.custom_page_id | string | No | ||||
| data.default_tab | string | No | ||||
| data.description | string | No | ||||
| data.event_type_id | integer | No | ||||
| data.events | array | No | SportsbookEvent record, 31 fields: competition_id, event_id, event_type_id, in_play, markets, name, open_date, video_available. Described under FanDuel Sportsbook homepage odds API. | |||
| data.fetched_at | string | No | ||||
| data.market_types | array | No | ||||
| data.market_types[].count | integer | No | ||||
| data.market_types[].type | string | No | ||||
| data.page_type | string | No | ||||
| data.selected_tab | string | No | ||||
| data.state | string | No | ||||
| data.tabs | array | No | SportsbookTab record, 6 fields: event_count, id, live_count, market_count, slug, title. Described under FanDuel Sportsbook homepage odds API. | |||
| data.title | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/fanduel/sportsbook/league?custom_page_id=nfl&state=ar&exclude_markets=true" \
-H "x-api-key: $CRAWLORA_API_KEY"