FanDuel API endpoint
Lists the public promotions the Sportsbook shows to an anonymous visitor on its homepage, a league page or a sport page, with each promotion's tags, offer link, end time and artwork, and the carousel placement that orders them. Offers differ by `state` and by page. `tags` is the census of promotion tags on the page and is always unfiltered, so valid `tag` values are discoverable.
/fanduel/sportsbook/promotionscontext (optional, default home): which page's promotions to list. One of home, league, sport. Any other value returns 400.custom_page_id (required for context=league): league page id such as nfl, nba, mlb, ncaaf, ncaab, nhl, wnba, pga, ncaaw (see the sports route). Sending it with another context returns 400. The upstream does not reject an unknown page: it returns the generic offers, so check the id against the sports route.event_type_id (required for context=sport): sport id, the same values as the sport route (6423 American Football, 1 Soccer, 7522 Basketball, 3 Golf, 7511 Baseball, 7524 Ice Hockey, 2 Tennis, 26420387 Mixed Martial Arts, 2593174 Table Tennis, 3503 Darts, 6 Boxing, 5 Rugby Union, 4 Cricket, 8 Motor Sport, 1477 Rugby League, 6422 Snooker, 468328 Handball, 28608997 Lacrosse, and 998917 Volleyball, 4726642 Surfing, 10 Special Bets, 2378961 Politics; availability differs by market, and Volleyball is also offered in NJ, PA, CO and AZ). Any other value returns 400.tag (optional, repeatable or comma-separated): keep only promotions carrying one of these tags, for example nfl or basketball. The tags present are listed in the response tags with counts, so values are discoverable; tags is always the unfiltered census.state (optional, default nj): market to query. 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.promotions follow the Sportsbook's own carousel order (placements), then any unplaced offers by promo code. tags on a promotion are the Sportsbook's labels: sport (basketball, soccer), league (nfl, ncaaf), and offer kind (national-acq-offer, ftd-growth).button_url is the offer's call-to-action link (a login or sign-up page); ends_at is the offer's end time when it has one; image_url is the banner artwork.promotions list is a valid answer; 503 on upstream failure.| Field | Filled in, of 6 checked | Values in the sample |
|---|---|---|
| promo_code | 6 | |
| name | 6 | median 102 characters |
| title | 6 | “New User Bet & Get” and 5 other values |
| tags | 6 | median 2 entries |
| products | 6 | median 1 entry |
| button_text | 6 | “Join Now” and 4 other values |
| button_url | 6 | account.sportsbook.fanduel.com and 3 other hosts |
| ends_at | 6 | 2026-10-25 to 2027-04-04 |
| image_url | 6 | d1m565i184w2i9.cloudfront.net |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| context | string | No | Which page's promotions: `home` (default), `league` or `sport` Allowed values: home, league, sport. | ||
| custom_page_id | string | No | League page id, required for `context=league` (for example `nfl`) | ||
| event_type_id | string | No | Sport id, required for `context=sport`: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404 Allowed values: 6423, 1, 7522, 3, 7511, 7524, 2, 26420387, 2593174, 3503, 6, 5, 4, 8, 1477, 6422, 468328, 28608997, 998917, 4726642, 10, 2378961. | ||
| tag | string | No | Keep only promotions with one of these tags (repeat the parameter or comma-separate), for example `nfl` or `basketball`; valid tags are listed in the response `tags` | ||
| state | string | No | Market to query (offers 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. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/fanduel/sportsbook/promotions?context=home&event_type_id=6423&state=ar" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"state": "nj",
"context": "league",
"custom_page_id": "nfl",
"promotions": [
{
"promo_code": "ACQSCB1G100ST",
"name": "New Customers Bet $1+ and Get $100 in Bonus Bets if 1+ point is scored in the Seahawks vs Chiefs Game.",
"title": "New User Bet & Get",
"tags": [
"nfl",
"american-football"
],
"products": [
"SPORTSBOOK"
],
"button_text": "Join Now",
"button_url": "https://account.sportsbook.fanduel.com/join",
"ends_at": "2026-10-26T00:00:00.000Z",
"image_url": "https://d1m565i184w2i9.cloudfront.net/cpp/fd/2026/10/15/2026-10-15_19-04-49_1400x400.jpg"
},
{
"promo_code": "RAF092126STAT",
"name": "Invite your friends to join FanDuel from anywhere and earn Bonus Bets!",
"title": "Refer-A-Friend Get Bonus Bets",
"tags": [
"soccer",
"basketball",
"golf",
"mlb",
"nhl",
"nfl",
"baseball",
"nba",
"ice-hockey",
"ncaaf",
"tennis"
],
"products": [
"SPORTSBOOK"
],
"button_text": "Invite friends",
"button_url": "https://sportsbook.fanduel.com/refer",
"ends_at": "2027-01-01T04:59:00.000Z",
"image_url": "https://d1m565i184w2i9.cloudfront.net/cpp/fd/2026/9/29/2026-09-29_18-53-56_1400x400.jpg"
}
],
"placements": [
{
"placement": "nflCustomPageCarousel",
"promo_codes": [
"ACQSCB1G100ST",
"RAF092126STAT"
]
}
],
"tags": [
{
"tag": "nfl",
"count": 4
},
{
"tag": "american-football",
"count": 3
},
{
"tag": "baseball",
"count": 1
},
{
"tag": "basketball",
"count": 1
}
],
"fetched_at": "2026-10-23T02:27:30Z"
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/fanduel.sportsbookPromotionsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | fanduel.SportsbookPromotionsResponse | No | ||||
| data.context | string | No | ||||
| data.custom_page_id | string | No | ||||
| data.event_type_id | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.placements | array | No | ||||
| data.placements[].placement | string | No | ||||
| data.placements[].promo_codes | array | No | ||||
| data.promotions | array | No | ||||
| data.promotions[].button_text | string | No | ||||
| data.promotions[].button_url | string | No | ||||
| data.promotions[].ends_at | string | No | ||||
| data.promotions[].image_url | string | No | ||||
| data.promotions[].name | string | No | ||||
| data.promotions[].products | array | No | ||||
| data.promotions[].promo_code | string | No | ||||
| data.promotions[].tags | array | No | ||||
| data.promotions[].title | string | No | ||||
| data.state | string | No | ||||
| data.tags | array | No | ||||
| data.tags[].count | integer | No | ||||
| data.tags[].tag | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/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/promotions?context=home&event_type_id=6423&state=ar" \
-H "x-api-key: $CRAWLORA_API_KEY"