FanDuel API endpoint
Returns an event's play-by-play feed. The `feed` object keeps the provider's sport-specific structure (drives and plays for football). `available` is false until play-by-play exists for the event.
/fanduel/sportsbook/event/play-by-playReturns an event's play-by-play feed. The feed object keeps the provider's sport-specific structure (drives and plays with down, distance, clock and description for football) because it differs by sport.
event_id (required): numeric event id from any events listing (events[].event_id).current (optional, true or false, default false): return only the play in progress instead of every drive, a much smaller payload for polling a live game. The response echoes it as current.available is false with no feed until play-by-play exists for the event.404 for an unknown event; 503 on upstream failure.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 | In the sample | Value in the sample |
|---|---|---|
| event_id | Has a value | |
| current | Has a value | false |
| status | Has a value | “scheduled” |
| available | Has a value | false |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| event_id | integer | Yes | Event id from any Sportsbook events listing | 35605985 | |
| current | boolean | No | Return only the play in progress (a much smaller payload for polling a live game); default false | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/fanduel/sportsbook/event/play-by-play?event_id=35605985¤t=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"event_id": 36194357,
"status": "inprogress",
"available": true,
"feed": {
"drives": [
{
"inProgress": true,
"key": "3-4",
"plays": [
{
"clock": "1st - 04:25",
"description": "S.Crossan punts 44 yards to KENN 36, Center-LIB. B.Munroe returned punt from the KENN 36. Tackled by LIB at KENN 40.",
"endSituation": {
"isRedZone": false,
"location": "1st & 10 | KENN 40",
"possession": "home"
},
"isRedZone": false,
"key": "4",
"location": "4th & 14 | LIB 20",
"period": 1,
"players": [
{
"id": "team",
"stats": [
"tackles",
"defTackles"
]
}
],
"team": "away",
"yards": 4
}
],
"score": {
"away": 7,
"home": 0
},
"subTitle": "4 plays, -4 yards",
"team": "away",
"yards": -4
}
],
"score": {
"away": 7,
"break": {
"text": "TV Timeout",
"type": "timeout"
},
"clock": "1st - 04:16",
"home": 0,
"isRedZone": false,
"location": "1st & 10 | KENN 40",
"possession": "home",
"scorePerPeriod": {
"Q1": {
"away": 7,
"home": 0
}
},
"timeoutsRemaining": {
"away": 3,
"home": 3
},
"timeoutsTotal": 3
}
},
"fetched_at": "2026-10-22T23:53:07Z"
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/fanduel.sportsbookPlayByPlayResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | fanduel.SportsbookPlayByPlayResponse | No | ||||
| data.available | boolean | No | ||||
| data.current | boolean | No | ||||
| data.event_id | integer | No | ||||
| data.feed | object | No | ||||
| data.fetched_at | string | No | ||||
| data.status | 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/event/play-by-play?event_id=35605985¤t=true" \
-H "x-api-key: $CRAWLORA_API_KEY"