FanDuel API endpoint
Lists the 17 fantasy projection tables of FanDuel Research (numberFire) for MLB, NBA, NFL, NHL and golf: each table's sport, projection type, the position tabs it offers (with the player positions each tab keeps), whether it takes a scope, a slate or a golf event. Use it to find the valid `type`, `position` and `scope` values for the projections route.
/fanduel/research/projection-tablesLists the fantasy projection tables FanDuel Research (numberFire) publishes, and what each accepts. Read it before calling projections: the types, position tabs and scopes differ by sport.
sport (optional): mlb, nba, nfl, nhl, golf. Omit it for every table. Any other value returns 400.type is one of DAILY, WEEKLY, YEARLY, REMAINING, PPR, SEASON_STATS. Sports and types: mlb has DAILY, WEEKLY, YEARLY, REMAINING; nba has DAILY, WEEKLY, YEARLY, REMAINING, SEASON_STATS; nfl has DAILY, WEEKLY, REMAINING, PPR (the NFL season-long table is WEEKLY; it has no YEARLY); nhl has DAILY, YEARLY, REMAINING; golf has DAILY.positions are the tabs of the table: slug is the value for the position parameter, label the tab's name, player_kind the kind of player the service sends (MLB_BATTER, MLB_PITCHER, NHL_SKATER, NHL_GOALIE, NBA_PLAYER, NFL_SKILL, NFL_KICKER, NFL_D_ST, NFL_IDP, GOLF_PLAYER), matches the listed player positions the tab keeps, and default marks the tab used when position is omitted. A tab with no matches keeps the players whose listed position equals its label.WEEKLY and REMAINING tables also answer the idp tab (individual defensive players), which the site does not show as a tab.scopes is TOTAL and PER_GAME for the NBA tables that take a scope (WEEKLY, YEARLY, REMAINING, SEASON_STATS) and empty for every other table.needs_slate is true for the DAILY tables (they need a slate_id from projection-slates); needs_event is true for golf only.Data is read from the FanDuel Research site's own public service and is shown as published at the time of the request; it is not betting advice. 503 on upstream failure.
| Field | In the sample | Value in the sample |
|---|---|---|
| count | Has a value | 5 |
| sports | Has a value | 5 entries |
| types | Has a value | 6 entries |
| tables | Has a value | 5 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| sport | string | No | Keep only this sport's tables Allowed values: mlb, nba, nfl, nhl, golf. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/fanduel/research/projection-tables?sport=mlb" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"count": 1,
"sports": [
"mlb",
"nba",
"nfl",
"nhl",
"golf"
],
"types": [
"DAILY",
"WEEKLY",
"YEARLY",
"REMAINING",
"PPR",
"SEASON_STATS"
],
"tables": [
{
"sport": "nba",
"table": "season-stats",
"name": "NBA Season Stats",
"type": "SEASON_STATS",
"positions": [
{
"slug": "all",
"label": "All",
"player_kind": "NBA_PLAYER",
"default": true
},
{
"slug": "guards",
"label": "Guards",
"player_kind": "NBA_PLAYER",
"matches": [
"SG",
"PG"
],
"default": false
}
],
"scopes": [
"TOTAL",
"PER_GAME"
],
"needs_slate": false,
"needs_event": false
}
],
"fetched_at": "2026-10-24T05:20:00Z"
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/fanduel.researchProjectionTablesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | fanduel.ResearchProjectionTablesResponse | No | ||||
| data.count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.sports | array | No | ||||
| data.tables | array | No | ||||
| data.tables[].name | string | No | ||||
| data.tables[].needs_event | boolean | No | ||||
| data.tables[].needs_slate | boolean | No | ||||
| data.tables[].positions | array | No | ||||
| data.tables[].positions[].default | boolean | No | ||||
| data.tables[].positions[].label | string | No | ||||
| data.tables[].positions[].matches | array | No | ||||
| data.tables[].positions[].player_kind | string | No | ||||
| data.tables[].positions[].slug | string | No | ||||
| data.tables[].scopes | array | No | ||||
| data.tables[].sport | string | No | ||||
| data.tables[].table | string | No | ||||
| data.tables[].type | string | No | ||||
| data.types | array | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/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/research/projection-tables?sport=mlb" \
-H "x-api-key: $CRAWLORA_API_KEY"