FanDuel API endpoint
Returns the Sportsbook homepage's featured events with their markets and current American, decimal and fractional odds, grouped by the homepage's tabs. Filter with `tab`, `competition_id` and `market_type`.
/fanduel/sportsbook/homeReturns the events and markets featured on the Sportsbook homepage, with current American, decimal and fractional odds. Events are ordered by start time; markets by the Sportsbook's own order.
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.tabs (with slug, event_count, market_count), competitions, events[].markets[].runners[], and market_types.side is HOME, AWAY, OVER or UNDER when the Sportsbook labels it; handicap is the spread or total line. Odds fields are omitted for a suspended selection.404 when the page has no content right now; 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 71 checked | Values in the sample |
|---|---|---|
| event_id | 71 | |
| name | 71 | “NFL Futures” and 70 other values |
| event_type_id | 71 | |
| competition_id | 71 | |
| open_date | 71 | 2026-03-06 to 2026-11-01 |
| in_play | 71 | true in 0 of 71 |
| markets | 71 | median 3 entries |
| video_available | 15 | true in 15 of 15 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| 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/home?state=ar&exclude_markets=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"state": "nj",
"page_type": "HOMEPAGE",
"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",
"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": 34100802,
"name": "NFL Futures",
"event_type_id": 6423,
"competition_id": 12721217,
"open_date": "2026-03-06T18:48:05.000Z",
"in_play": false
}
],
"market_types": [
{
"type": "REGULAR_SEASON_WINS_SGP",
"count": 5
},
{
"type": "MATCH_HANDICAP_(2-WAY)",
"count": 3
},
{
"type": "MONEY_LINE",
"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 | ||||
| data.competitions[].competition_id | integer | No | ||||
| data.competitions[].event_type_id | integer | No | ||||
| data.competitions[].name | string | No | ||||
| data.competitions[].region | string | No | ||||
| 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 | ||||
| data.events[].competition_id | integer | No | ||||
| data.events[].event_id | integer | No | ||||
| data.events[].event_type_id | integer | No | ||||
| data.events[].in_play | boolean | No | ||||
| data.events[].markets | array | No | ||||
| data.events[].markets[].betting_type | string | No | ||||
| data.events[].markets[].in_play | boolean | No | ||||
| data.events[].markets[].market_id | string | No | ||||
| data.events[].markets[].market_time | string | No | ||||
| data.events[].markets[].name | string | No | ||||
| data.events[].markets[].runners | array | No | ||||
| data.events[].markets[].runners[].abbreviation | string | No | ||||
| data.events[].markets[].runners[].american_odds | integer | No | ||||
| data.events[].markets[].runners[].decimal_odds | number | No | ||||
| data.events[].markets[].runners[].fractional_odds | string | No | ||||
| data.events[].markets[].runners[].handicap | number | No | ||||
| data.events[].markets[].runners[].is_player | boolean | No | ||||
| data.events[].markets[].runners[].jersey_number | string | No | ||||
| data.events[].markets[].runners[].logo_url | string | No | ||||
| data.events[].markets[].runners[].name | string | No | ||||
| data.events[].markets[].runners[].previous_american_odds | integer | No | PreviousAmericanOdds and PreviousDecimalOdds are the price immediately before the current one, present once the price has moved. The Sportsbook keeps a single previous price, not a series. | |||
| data.events[].markets[].runners[].previous_decimal_odds | number | No | ||||
| data.events[].markets[].runners[].selection_id | integer | No | ||||
| data.events[].markets[].runners[].side | string | No | ||||
| data.events[].markets[].runners[].status | string | No | ||||
| data.events[].markets[].same_game_parlay_eligible | boolean | No | ||||
| data.events[].markets[].status | string | No | ||||
| data.events[].markets[].type | string | No | ||||
| data.events[].name | string | No | ||||
| data.events[].open_date | string | No | ||||
| data.events[].video_available | boolean | No | ||||
| 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 | ||||
| data.tabs[].event_count | integer | No | ||||
| data.tabs[].id | string | No | ||||
| data.tabs[].live_count | integer | No | ||||
| data.tabs[].market_count | integer | No | ||||
| data.tabs[].slug | string | No | ||||
| data.tabs[].title | string | No | ||||
| 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/home?state=ar&exclude_markets=true" \
-H "x-api-key: $CRAWLORA_API_KEY"