Rate Limits by Plan — Requests and Objects

Based on your plan, your key is limited to a number of requests per minute. Exceed it and you receive a 429 with a Retry-After header until the minute resets.

Request limits

  • Lite plan: 10 requests per minute
  • Base plan: 60 requests per minute
  • Platform plan: 600 requests per minute

Object limits

There is no monthly object cap on any plan. Objects served are counted per day and reported in /account/usage for your own tracking. Each response counts as a minimum of 1 object.

How the counter works

The counter is atomic. The limit is enforced by the increment itself, so 60 simultaneous requests on a 10/min key serve exactly 10 — it cannot be raced open. A rejected request is still counted for the minute (so hammering is never free) but is never billed: usage billing is a separate meter charged only after a request is served.

Every response carries x-ratelimit-limit and x-ratelimit-remaining. Windows are fixed epoch minutes.

Strategies to avoid rate limiting

  1. Avoid frequent calls to endpoints whose data rarely changes (teams, players, stats) — cache them.
  2. Poll at the source cadence (~2 minutes), not faster.
  3. Use query params to focus on only the data you need.
  4. Check /account/usage.

Response filtering notice

When your key's plan causes data to be filtered from a response (league scope, bookmaker cap, fair odds), the response carries a notice field saying what was withheld:

{
  "success": true,
  "data": [...],
  "nextCursor": "afl_2026-09-12_brisbane_lions_vs_adelaide_crows",
  "notice": "Response is missing 3 events and 15 bookmaker odds. Upgrade your API key to access all data from this query."
}

Checking your rate limit usage

fetch("https://api.sockodds.com/v2/account/usage", { headers: { "X-Api-Key": "YOUR_TOKEN" } });
{
  "success": true,
  "data": [
    {
      "keyID": "5fb8c85833e6dcf5",
      "customerID": null,
      "email": "you@example.com",
      "isActive": true,
      "tier": "base",
      "rateLimits": {
        "per-minute": {
          "max-requests": 60,
          "current-requests": 1,
          "max-entities": null,
          "current-entities": null
        },
        "per-day": {
          "max-requests": null,
          "current-requests": 12,
          "max-entities": null,
          "current-entities": 240
        }
      }
    }
  ]
}
Need help?FAQ · Email · Contact