OpenOddsAPI API Get started

Platform

Rate limits

Burst and daily limits, plus the headers that tell you where you stand.

Limits

LimitValueScope
Burst60 requests/minutePer API key, rolling window
Daily10,000 requests/dayPer API key, UTC day
Sandbox burst30 requests/minuteTest keys only
NOTEHitting the daily limit returns 429 rate_limit_exceeded with a Retry-After header counting down to midnight UTC. Contact support to raise your quota.

Response headers

Every response includes your current usage for the rolling minute:

  • X-RateLimit-Limit — requests allowed per minute.
  • X-RateLimit-Remaining — requests left in the current window.
  • X-RateLimit-Reset — Unix timestamp when the window resets.

Handling 429s

Back off for the full Retry-After window, then continue. Do not retry immediately in a tight loop — that compounds the pressure that caused the 429.

JavaScript
async function getOdds(url, key) {
  const res = await fetch(url, {
    headers: { "X-API-Key": key }
  });
  if (res.status === 429) {
    const retryAfter = Number(res.headers.get("retry-after")) || 1;
    await new Promise((r) => setTimeout(r, retryAfter * 1000));
    return getOdds(url, key);
  }
  return res.json();
}

Odds refresh every 30 seconds. Polling the odds endpoint more than twice per minute returns the same payload — cache for 30 seconds instead. See Get Odds.

OpenOddsAPI API — Documentation v1Examples use illustrative data