FanDuel API endpoint
Returns a page of FanDuel Research articles (predictions, picks, prop bets, guides), newest first, without their bodies: title, description, sport, author, publish time, link, thumbnail and tags. Filter by sport, sub-category (needs a sport; cannot be combined with a date window), team (needs a sport), author, hero type and publish window. Page with `cursor` while `has_more` is true; the service reports no total.
/fanduel/research/articlessport (optional): casino, nascar, ncaab, f1, ufc, boxing, ncaaf, womenssoccer, tv-and-podcast, nba, pga, tennis, nhl, mma, soccer, fanduel-sportsbook-promo-codes, sports-betting-101, horse-racing, wnba, predicts, mlb, canada, nfl. Default all sports. Any other value returns 400.exclude_sport (optional, repeatable or comma-separated): drop these sports, same slugs.sub_category (optional): a topic slug from the sub-categories route. Needs sport, must belong to it, and cannot be combined with published_after or published_before (the service rejects that pair). Anything else returns 400 and lists the sport's topics.player (optional): a player's number_fire_id (subject.number_fire_id of a player-news item); keeps the articles about that player, newest first. The sport is optional, but an id of another sport (an NFL player with sport=nba) or an unknown id returns 400. Only the id is sent: the service ignores a position, a zero id and a position on its own, and returns unfiltered articles for them. It combines with team (the pair returned the intersection), and with the other filters.team (optional): a team's number_fire_id from the sports route. Needs sport. A team of another sport returns 400; the service itself would silently ignore an unknown team and return unfiltered articles.author (optional): an author id (a UUID) from the authors route.hero_type (optional): IMAGE, JWPLAYER. Any other value returns 400.published_after, published_before (optional): RFC 3339 times or YYYY-MM-DD dates; published_before must not be earlier. A window with one open side is filled so the service accepts it.hide_deprioritized (optional): true hides content the site ranks down, which also reorders the list; false is the default behavior.limit (optional): 1 to 50; default 20. Other values return 400 (the service would silently fall back to 50).cursor (optional): the previous response's next_cursor. A malformed or foreign cursor returns 400.totalCount only echoes the page size, so use has_more and next_cursor to page.title filter is not offered: the service answers an error for every title value tried.sport slugs casino, predicts and horse-racing return those topics' articles, which is how the Casino and Predicts coverage on the Research site is reached.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 | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| id | 40 | |
| slug | 40 | |
| title | 40 | median 67 characters |
| sub_heading | 6 | “Dolphins vs Jets: 5 Best Bets and Player Props for Sunday’s…” and 5 other values |
| description | 40 | median 103 characters |
| url | 40 | fanduel.com |
| sport | 40 | |
| author | 40 | |
| published_at | 40 | 2026-10-20 to 2026-10-25 |
| updated_at | 40 | 2026-10-20 to 2026-10-25 |
| thumbnail_url | 40 | cdn.sanity.io |
| hero_type | 40 | IMAGE in all 40 |
| tags | 38 | median 3 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| sport | string | No | Sport or topic slug from the `sports` route; default all sports Allowed values: casino, nascar, ncaab, f1, ufc, boxing, ncaaf, womenssoccer, tv-and-podcast, nba, pga, tennis, nhl, mma, soccer, fanduel-sportsbook-promo-codes, sports-betting-101, horse-racing, wnba, predicts, mlb, canada, nfl. | ||
| exclude_sport | string | No | Drop these sports (repeat the parameter or comma-separate), same slugs as `sport` | ||
| sub_category | string | No | Topic slug from the `sub-categories` route; needs `sport` and must belong to it | ||
| team | integer | No | A team's `number_fire_id` from the `sports` route (`sport` selects the list); needs `sport`. An id of another sport returns `400` | ||
| player | integer | No | A player's `number_fire_id` (`subject.number_fire_id` of the `player-news` route); keeps articles about that player. An unknown id, or one of a different `sport`, returns `400` Minimum: 1. | ||
| author | string | No | Author id (a UUID) from the `authors` route | ||
| hero_type | string | No | Hero media: `IMAGE` or `JWPLAYER` (video) Allowed values: IMAGE, JWPLAYER. | ||
| published_after | string | No | Earliest publish time, RFC 3339 or `YYYY-MM-DD` | ||
| published_before | string | No | Latest publish time, RFC 3339 or `YYYY-MM-DD`; not earlier than `published_after` | ||
| hide_deprioritized | boolean | No | `true` to hide content the site ranks down; it also reorders the list | ||
| limit | integer | No | Articles per page, 1 to 50; default 20 Minimum: 1. Maximum: 50. | ||
| cursor | string | No | Continue from the previous response's `next_cursor` | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/fanduel/research/articles?sport=casino&hero_type=IMAGE&hide_deprioritized=true&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"articles": [
{
"id": "b593a932-8d2a-43f4-a291-1fb2451bb07f",
"slug": "3-best-nfl-touchdown-bets-for-week-7",
"title": "3 Best NFL Touchdown Bets for Week 7",
"description": "NFL touchdown picks for this week. What are the best TD bets for Week 7?",
"url": "https://www.fanduel.com/research/3-best-nfl-touchdown-bets-for-week-7",
"sport": {
"slug": "nfl",
"name": "NFL"
},
"author": {
"id": "7d2d1f13-3b6c-4d4c-bc55-0989c764f095",
"name": "FanDuel Staff",
"slug": "fanduel-staff"
},
"published_at": "2026-10-23T17:53:51Z",
"updated_at": "2026-10-23T17:53:52Z",
"thumbnail_url": "https://cdn.sanity.io/images/pbwem9y5/ch_production/73bcd370913f4dd4f935a6fe6dac557512b76588-5161x3441.jpg?rect=242,0,4714,2556&w=332&h=180",
"hero_type": "IMAGE",
"tags": [
{
"name": "NFL",
"type": "sport"
}
]
}
],
"has_more": true,
"next_cursor": "13fa142b-a502-4a0c-b23a-30f0e69ab2e1",
"fetched_at": "2026-10-23T19:14:41Z"
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/fanduel.researchArticlesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | fanduel.ResearchArticlesResponse | No | ||||
| data.articles | array | No | ||||
| data.articles[].author | fanduel.ResearchAuthorRef | No | ||||
| data.articles[].author.id | string | No | ||||
| data.articles[].author.name | string | No | ||||
| data.articles[].author.slug | string | No | ||||
| data.articles[].description | string | No | ||||
| data.articles[].hero_type | string | No | ||||
| data.articles[].id | string | No | ||||
| data.articles[].published_at | string | No | ||||
| data.articles[].slug | string | No | ||||
| data.articles[].sport | fanduel.ResearchSportRef | No | ||||
| data.articles[].sport.name | string | No | ||||
| data.articles[].sport.slug | string | No | ||||
| data.articles[].sub_heading | string | No | ||||
| data.articles[].tags | array | No | ||||
| data.articles[].tags[].name | string | No | ||||
| data.articles[].tags[].type | string | No | ||||
| data.articles[].thumbnail_url | string | No | ||||
| data.articles[].title | string | No | ||||
| data.articles[].updated_at | string | No | ||||
| data.articles[].url | string | No | ||||
| data.fetched_at | string | No | ||||
| data.has_more | boolean | No | ||||
| data.next_cursor | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/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/articles?sport=casino&hero_type=IMAGE&hide_deprioritized=true&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"