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.

Rate limits by plan
PlanRequests / hourSportsAverage rate
Trial1,800All sports1 every 2 s
Single sport3,6001 sport1 every 1 s
All sports3,600All 28 sports1 every 1 s
Scale200,000All 28 sports1 every 18 ms

Rate limit headers

Every response, successful or not, includes three headers:

Rate limit headers
HeaderExampleDescription
X-RateLimit-Limit3600Requests allowed per hour.
X-RateLimit-Remaining3412Requests left in the current hour.
X-RateLimit-Reset1789243200UTC 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: 1789243200

When 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.

Volume add-ons
Requests / hourPrice / monthAverage rate
200,000$501 every 18 ms
500,000$1201 every 7 ms
1,000,000$2201 every 4 ms
3,000,000$6001 every 1 ms

Polling guidance

  • Use the lists to find what changed. One call to /v3/events/inplay returns score and timer for every live event. Fetch details only for the events you follow.
  • Fetch odds incrementally. On /v2/event/odds, pass since_time with the last add_time you stored and odds_market with the keys you use.
  • Walk history by day. The pager stops at page 100. On /v3/events/ended, use day instead of paging further.
  • Stop at final statuses. When an event's time_status is final, fetch it once more and stop polling. See time_status.
  • Back off on errors. Wait for the reset on TOO_MANY_REQUESTS, and retry INTERNAL_SERVER_ERROR with exponential backoff.