FanDuel API endpoint
Refreshes the current prices of up to 70 markets by market id, using the price feed the Sportsbook itself polls. Returns each market's status and every selection's American, decimal and fractional odds in the order requested; market ids the Sportsbook returns nothing for are listed in `missing`. Get market ids from the event and page routes (`markets[].market_id`).
/fanduel/sportsbook/market-pricesRefreshes the current prices of up to 70 markets by market id, using the price feed the Sportsbook itself polls while a market is on screen. Cheaper than reloading a page when you track a fixed set of markets.
market_id (required, repeatable or comma-separated): market ids such as 734.191539418, 1 to 70 distinct values, taken from markets[].market_id of the event and page routes. A malformed id or more than 70 ids returns 400.state (optional, default nj): U.S. market whose Sportsbook host is queried. 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.previous_american_odds and previous_decimal_odds once its price has moved: the price immediately before the current one. The route asks the price service for it (priceHistory=1), which fills it for live markets; it is the price just before the latest move, so two moves between two calls leave only the later one. The Sportsbook keeps a single previous price, not a series, so there is no history to order.missing rather than failing the request; if none of the ids is known, markets is empty and missing lists them all.runners carry selection_id, handicap, status and the three odds formats; join them to a page response by selection_id.bet_delay_seconds is the in-play bet acceptance delay when the market has one.The route is read-only and needs no account. Data is shown as the Sportsbook publishes it at the moment of the request and is not a betting recommendation.
| Field | Filled in, of 1 checked | Values in the sample |
|---|---|---|
| market_id | 1 | |
| status | 1 | “OPEN” |
| betting_type | 1 | “FIXED_ODDS” |
| in_play | 1 | true in 0 of 1 |
| bet_delay_seconds | 1 | 4 |
| runners | 1 | median 2 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| market_id | string | Yes | Market id such as `734.191539418`; repeat the parameter or comma-separate, 1 to 70 ids | 734.168824006 | |
| 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. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/fanduel/sportsbook/market-prices?market_id=734.168824006&state=ar" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"state": "nj",
"markets": [
{
"market_id": "734.191539418",
"status": "OPEN",
"betting_type": "MOVING_HANDICAP",
"in_play": false,
"same_game_parlay_eligible": true,
"bet_delay_seconds": 4,
"runners": [
{
"selection_id": 50204,
"handicap": 3,
"status": "ACTIVE",
"american_odds": -115,
"decimal_odds": 1.869565217391304,
"fractional_odds": "100/115"
},
{
"selection_id": 50194,
"handicap": -3,
"status": "ACTIVE",
"american_odds": -105,
"decimal_odds": 1.952380952380952,
"fractional_odds": "100/105"
}
]
},
{
"market_id": "734.192539109",
"status": "OPEN",
"betting_type": "MOVING_HANDICAP",
"in_play": false,
"same_game_parlay_eligible": true,
"bet_delay_seconds": 6,
"runners": [
{
"selection_id": 50204,
"handicap": 1.5,
"status": "ACTIVE",
"american_odds": -178,
"decimal_odds": 1.561797752808989,
"fractional_odds": "100/178"
},
{
"selection_id": 50194,
"handicap": -1.5,
"status": "ACTIVE",
"american_odds": 144,
"decimal_odds": 2.44,
"fractional_odds": "144/100"
}
]
}
],
"missing": [
"734.1"
],
"fetched_at": "2026-10-23T00:03:05Z"
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/fanduel.sportsbookMarketPricesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | fanduel.SportsbookMarketPricesResponse | No | ||||
| data.fetched_at | string | No | ||||
| data.markets | array | No | ||||
| data.markets[].bet_delay_seconds | integer | No | ||||
| data.markets[].betting_type | string | No | ||||
| data.markets[].in_play | boolean | No | ||||
| data.markets[].market_id | string | No | ||||
| data.markets[].runners | array | No | ||||
| data.markets[].runners[].american_odds | integer | No | ||||
| data.markets[].runners[].decimal_odds | number | No | ||||
| data.markets[].runners[].fractional_odds | string | No | ||||
| data.markets[].runners[].handicap | number | No | ||||
| data.markets[].runners[].previous_american_odds | integer | No | PreviousAmericanOdds and PreviousDecimalOdds are the price immediately before the current one, present once the price has moved. | |||
| data.markets[].runners[].previous_decimal_odds | number | No | ||||
| data.markets[].runners[].selection_id | integer | No | ||||
| data.markets[].runners[].status | string | No | ||||
| data.markets[].same_game_parlay_eligible | boolean | No | ||||
| data.markets[].status | string | No | ||||
| data.missing | array | No | ||||
| data.state | 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/market-prices?market_id=734.168824006&state=ar" \
-H "x-api-key: $CRAWLORA_API_KEY"