- Data-point billing tracks how much data you consume across REST and WebSocket traffic.
- Per-second throttling protects the platform from bursty request patterns.
How Usage Is Enforced
1. Data points
Most API endpoints return anX-Datapoints header. That number represents how many billable data points the response consumed. Successful non-billable sample and catalog responses can omit this header; its absence on another response does not prove that the request was free.
For event responses, each returned event costs one events data point plus one scores data point, plus one odds data point per returned price. A price is a market price at one sportsbook; count each returned price object. Events carrying live_game_state (available on Ultra and above) cost one additional scores point.
Results sweep example
Passhide_closed=true to exclude closed prices while keeping events and scores:
YYYY-MM-DD with a completed date inside your history window. When all prices are closed and no live_game_state is returned, each game costs two data points, with status, final score, per-period scores, and overtime included. A completed baseball slate checked on September 8, 2026 returned eleven finals and zero price objects: 11 × 2 = 22 data points for events and scores. Verify the returned prices and X-Datapoints for your request, and add one point for each event carrying live_game_state.
For one completed game, GET /api/v2/events/{eventID}?hide_closed=true is two data points under the same conditions. See Scores and Results for examples and checks before grading.
Omitting
market_ids does not mean “no odds”: the default is 1,2,3, or 1,2,3,563 for soccer and NHL. While games are still open, market_ids=1 with a single affiliate_ids value and main_line=true keeps a game to roughly four data points, depending on how many prices are returned. Add one more point if live_game_state is present, and use X-Datapoints to confirm the cost.- large snapshots across many sportsbooks and markets cost more than narrow, filtered responses
- delta endpoints are usually much cheaper than repeatedly fetching full event payloads
- WebSocket messages are also metered as data points, even though they do not increment the HTTP request counter
2. Burst throttling
Every key also has a per-second request ceiling. This is separate from billing and exists to prevent request storms. If you exceed that burst limit, the API returns429 Too Many Requests with a short Retry-After value, usually 1.
3. WebSocket behavior
WebSocket traffic does not increment your HTTP request counter, but it is still part of your metered usage. Treat subscriptions the same way you treat REST queries: filter aggressively and only subscribe to the sports, events, markets, and books you actually need. Agame_stats frame costs one stats data point for each changed row across team_stats[].stats and player_stats[].stats; a zero-row terminal completion marker or invalidation fallback costs one stats data point. Heartbeats and in-band usage metadata are free.
Current API Tier Defaults
Sportsbook coverage, periods, history access, and other entitlements also vary by tier. Two to be aware of: player prop markets require Starter or higher (Free keys do not receive them), and live game state, play-by-play, and live game-stat streams require Ultra or higher. The live response headers are the best way to confirm what a specific API key can access right now. New-account stats access uses separate effective feature fields; see Stats Access.
History window
Your plan’s history window applies to any request that names a date, includingGET /api/v2/sports/{sportID}/events/{date}.
Higher tiers offer deeper windows; see the API pricing page for those plans.
The cutoff is floored to midnight UTC. The
offset parameter does not shift it. A request outside the window returns 403 Forbidden with this body shape:
earliest_available_date and history_days_limit from the response instead of calculating the boundary yourself. For older results, fetching by event ID is the supported path. Save the event_id values from event responses so you can use GET /api/v2/events/{eventID} later; see Scores and Results.
Weekly Billing
Every paid API tier is also available on a weekly billing cadence for workloads that don’t need a month-long commitment — for example, covering a single tournament or a few weeks of a season. Weekly plans are priced at a premium over the equivalent monthly plan (the commitment ladder is weekly > monthly > annual). On a weekly plan, your included data points are a proportional weekly share of the tier’s monthly allowance (monthly × 12 ÷ 52 — e.g. Starter weekly includes5,769,231 data points per week), metered over your 7-day billing window. Overage beyond the weekly allowance is billed at the same per-data-point rates as the monthly tier.
The primary usage headers tell you which window applies to your key: X-Datapoints-Period reports weekly on weekly-billed plans (with X-Datapoints-Reset marking the end of the current 7-day window), monthly on monthly and annual plans, and daily on the Free tier. Free responses also include companion X-Datapoints-Monthly-* headers so you can monitor both enforced windows.
Usage Headers
Metered responses include usage and entitlement headers you can surface in logs, dashboards, and upgrade prompts.On
429 responses caused by billing caps, the billing headers remain useful. Read Retry-After and the X-Datapoints-* headers before deciding whether to retry or upgrade.Understanding 429 Too Many Requests
Not every 429 means the same thing. There are three common cases.
1. Burst rate limit exceeded
You sent too many requests in a short interval for your tier.- Look at
Retry-Afterbefore retrying. - Queue or batch work instead of firing many concurrent requests.
- Switch recurring update loops to delta polling or WebSocket where appropriate.
2. Daily data-point cap reached
This is the free-tier hard cap.Retry-Aftertells you how long until the next daily window begins.X-Datapoints-Remainingwill be0.- The fix is to wait for reset or move to a paid plan.
3. Monthly data-point cap reached
This appears when a Free key reaches its200,000 UTC calendar-month cap, or when a paid account reaches a configured monthly hard cap.
- Treat this as a billing-window issue, not a short retry.
- Read
Retry-AfterandX-Datapoints-Monthly-Reseton Free keys; paid plans useX-Datapoints-Reset. - If this is unexpected on a paid account, contact support with the response headers.
Best Practices
Filter aggressively
The biggest usage lever is almost always response shape. Start every integration by narrowing:market_idsaffiliate_idsevent_idsmain_line=truehide_closed_markets=1where available
Use delta endpoints for ongoing updates
Instead of fetching the full event list repeatedly, bootstrap once and poll:GET /api/v2/deltafor changed event objectsGET /api/v2/markets/deltafor individual price changes
Use WebSocket on real-time tiers
For live screens, line-movement monitoring, and live box scores, WebSocket is usually the best delivery model once your plan includes it. It avoids HTTP burst limits, but you should still keep subscriptions tight because pushed messages are metered.Cache reference data
Sports, affiliates, teams, and market definitions change far less often than live odds. Cache them locally and refresh on a longer interval.Alert before users run out
If you are building on behalf of end users or internal analysts, instrument alerts when usage reaches70%, 85%, and 100% of included data points. The headers above make this straightforward.
Need More Throughput?
If your workload needs more data points, higher burst limits, or real-time access, contact support at [email protected] or use your dashboard. Include:- Your API key (or the email associated with your account)
- Your current tier
- Approximate data-point volume per day or month
- Required requests-per-second ceiling
- Whether you need WebSocket, historical data, or broader sportsbook coverage
- A short description of your application or workload