General
What is the difference between V1 and V2?
What is the difference between V1 and V2?
moneyline, spread, and total objects. V2 uses a market-based model where each market type (moneyline, spread, total, player props, etc.) is a separate entry with participants, lines, and prices nested inside. V2 is recommended for all new integrations — it supports player props, alternate lines, and new market types that V1 cannot represent. See the V1 to V2 Migration Guide for a detailed comparison.What does the 0.0001 sentinel value mean?
What does the 0.0001 sentinel value mean?
0.0001 means the sportsbook has taken the line off the board — it is temporarily unavailable. This is not an error. Common causes include pending injury news, line recalculation, or approaching game time. Display it as “Off Board” or “N/A” and never use it in calculations. See Sentinel Values and Errors — The 0.0001 Sentinel Value for handling guidance.How do I filter events or markets by sport?
How do I filter events or markets by sport?
sport_id as a path parameter when calling event endpoints: GET /api/v2/sports/{sportID}/events/{date}. For market discovery, use GET /api/v2/sports/{sportID}/markets/{date} to see which markets have active pricing for a sport on a given date. See Sport IDs for the full list of sport identifiers.Should I use WebSocket or REST polling?
Should I use WebSocket or REST polling?
Which sports support player props?
Which sports support player props?
GET /api/v2/sports/{sportID}/markets/{date} to check which prop markets are active for a sport on a given day. See the Market IDs reference for prop market IDs like Player Points (29), Player Rebounds (35), and Player Assists (39).Data & IDs
How are soccer event IDs generated?
How are soccer event IDs generated?
What are season-specific sport IDs?
What are season-specific sport IDs?
23, NBA Playoffs is 24, NFL Preseason is 25, NHL Preseason is 27, and MLB Playoffs is 31. This lets you filter or subscribe to specific parts of a season independently. Season-specific sports share the same data model and endpoints as their parent sport. See the full list of season-specific IDs.How do I get futures / championship odds?
How do I get futures / championship odds?
GET /api/v2/sports/{sportID}/futures — futures (outrights) are served as competition events with their own stable event_id, separate from the dated game endpoints. Championship winner boards are live for NFL, MLB, NCAAF, NHL, NBA, NCAAB, WNBA, and EPL, plus per-tournament PGA Tour golf (sport ID 40) and Formula 1 season championships (sport ID 41). Futures are in early access and require an Ultra plan or higher on API keys. See the Futures guide for the data model, window semantics, and the delta polling recipe.How do I get historical or closing lines?
How do I get historical or closing lines?
GET /api/v2/events/{eventID}/openers for the first recorded prices and GET /api/v2/events/{eventID}/closing for the latest recorded prices at or before the event’s scheduled start. Openers and history can contain data before, during, or after an event when prices were recorded. A pre-start closing response is provisional and may change until the scheduled start.For full price history, use GET /api/v2/events/{eventID}/markets/history, which returns history rows newest first, or GET /api/v2/events/{eventID}/markets/{marketID}/history, which returns chart-ready series. Pass participant_id to isolate a selection. History access is subject to the plan’s history window.See the Historical Odds guide, opening prices reference, closing prices reference, Events reference, and Markets reference for details.What is liquidity_usd on a price object?
What is liquidity_usd on a price object?
liquidity_usd is a USD reading on supported V2 price objects. The meaning depends on the affiliate:- Kalshi (affiliate 25) and Polymarket (affiliate 26): approximate resting order-book depth.
- Pinnacle (affiliate 3): the book’s max stake for that price.
Billing & Plans
What happens when I upgrade my plan?
What happens when I upgrade my plan?
How do I downgrade my plan?
How do I downgrade my plan?
Can I pay weekly instead of monthly?
Can I pay weekly instead of monthly?
X-Datapoints-Period header reads weekly on these plans. See Weekly Billing.Is there a free trial?
Is there a free trial?
2026-09-07T18:00:00Z receive a no-card, seven-day evaluation from account creation with current-season completed-game stats and current-season aggregates. After it ends, the fixed sample and stats catalog remain free; ongoing access to current-season completed-game stats and season aggregates starts on Starter. Every paid tier is also available on weekly billing for short-term use. See Stats Access and Weekly Billing.Why can't I cancel or create new API keys?
Why can't I cancel or create new API keys?
Integration
How do rate limits work and how do I stay under them?
How do rate limits work and how do I stay under them?
X-Datapoints, X-Datapoints-Used, X-Datapoints-Remaining, X-Tier, and X-Rate-Limit. To stay efficient: use delta endpoints instead of repeated full snapshots, filter by market_ids and affiliate_ids, cache reference data, and use WebSocket on real-time tiers when you need live updates. When you get a 429, read Retry-After and the billing headers to determine whether you hit a short burst throttle or a usage cap. See Rate Limits and the Efficient Polling guide.Do WebSocket messages count toward usage?
Do WebSocket messages count toward usage?
game_stats frame costs one stats data point per changed team or player stat row; a zero-row completion marker or invalidation fallback costs one. Keep subscriptions narrow by filtering to the sports, markets, events, and sportsbooks you actually need.How does the delta cursor work?
How does the delta cursor work?
/api/v2/markets/delta(price changes) takes an integer cursor. Bootstrap it from the integermeta.delta_last_idin a/api/v2/sports/{id}/events/{date}response, then follow the integermeta.delta_last_idreturned by each markets-delta response. This is the endpoint for odds polling./api/v2/delta(full event-object changes — status, scores, the whole event) takes an ordered UUID cursor (e.g.11f1-23b3-f4d42784-8057-a3a997572248) that is only returned by/api/v2/delta’s own responses. The events snapshot does not provide it, and passing the integer cursor here returns a400.
last_id=0 — cursors that fall too far behind the current head are rejected; always seed from a fresh events snapshot. Each delta entry contains the full updated object, so replace (don’t merge) in your local cache. See the Efficient Polling guide for the complete flow.Can I use an MCP server to query the docs from my editor?
Can I use an MCP server to query the docs from my editor?
Where can I find SDKs or client libraries?
Where can I find SDKs or client libraries?