Getting started
Rate limits
By default you can make 3,600 requests per hour. Every response tells you how many you have left.
Default limit
The limit applies per account, across all of its tokens, and resets every hour. Every call made with your token counts, whether it succeeds or fails.
| Plan | Requests / hour | Sports | Average rate |
|---|---|---|---|
| Trial | 1,800 | All sports | 1 every 2 s |
| Single sport | 3,600 | 1 sport | 1 every 1 s |
| All sports | 3,600 | All 28 sports | 1 every 1 s |
| Scale | 200,000 | All 28 sports | 1 every 18 ms |
Rate limit headers
Every response, successful or not, includes three headers:
| Header | Example | Description |
|---|---|---|
| X-RateLimit-Limit | 3600 | Requests allowed per hour. |
| X-RateLimit-Remaining | 3412 | Requests left in the current hour. |
| X-RateLimit-Reset | 1789243200 | UTC epoch, in seconds, when the limit resets. |
Response headers
HTTP/1.1 200 OK
Content-Type: application/json
X-RateLimit-Limit: 3600
X-RateLimit-Remaining: 3412
X-RateLimit-Reset: 1789243200When you hit the limit
Once X-RateLimit-Remaining reaches zero, calls return TOO_MANY_REQUESTS until the time in X-RateLimit-Reset.
application/json
{
"success": 0,
"error": "TOO_MANY_REQUESTS"
}Wait for the reset
Retrying immediately keeps failing. Sleep until
X-RateLimit-Reset, then resume at a lower rate.Volume add-ons
If 3,600 requests per hour is not enough, add volume to your plan. The add-on replaces your hourly limit and shows in X-RateLimit-Limit right away. See Pricing.
| Requests / hour | Price / month | Average rate |
|---|---|---|
| 200,000 | $50 | 1 every 18 ms |
| 500,000 | $120 | 1 every 7 ms |
| 1,000,000 | $220 | 1 every 4 ms |
| 3,000,000 | $600 | 1 every 1 ms |
Polling guidance
- Use the lists to find what changed. One call to
/v3/events/inplayreturns score and timer for every live event. Fetch details only for the events you follow. - Fetch odds incrementally. On
/v2/event/odds, passsince_timewith the lastadd_timeyou stored andodds_marketwith the keys you use. - Walk history by day. The pager stops at page 100. On
/v3/events/ended, usedayinstead of paging further. - Stop at final statuses. When an event's
time_statusis final, fetch it once more and stop polling. See time_status. - Back off on errors. Wait for the reset on
TOO_MANY_REQUESTS, and retryINTERNAL_SERVER_ERRORwith exponential backoff.
