TOURNAMENTSUITE
TOURNAMENTSUITE
Developer Documentation
Get StartedPaginationResponse CodesRate LimitsWebhooks
Overview

Rate Limits

How API rate limits work on Tournament Suite and how to stay within them.

API requests made with a project API key are capped by your project's plan tier. The limit is a single per-minute request budget for the key — it is not split into separate read and write allowances. Your current plan tier and usage are visible in the Platform developer dashboard under Settings → Developer.

Rate limit headers

Most responses include headers from a general, platform-wide request throttle that runs independently of the plan-tier check described above:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the current window
X-RateLimit-RemainingRequests remaining in the current window

This general throttle does not report a reset time. It is unrelated to your project's plan-tier budget: when your project's API key exceeds its own per-minute plan-tier limit, the API responds with a plain 429 Too Many Requests and does not populate any X-RateLimit-* headers on that response. Don't rely on these headers to predict a plan-tier 429 — use the retry pattern below instead.

Handling rate limits

async function fetchWithRetry(url: string, headers: Record<string, string>) {
  const response = await fetch(url, { headers });

  if (response.status === 429) {
    // No reset-time header is available on a plan-tier 429 — back off with a fixed delay.
    await new Promise(resolve => setTimeout(resolve, 1000));
    return fetchWithRetry(url, headers); // retry once
  }

  return response;
}

Staying within limits

  • Cache read responses. Tournament structures, brackets, and participant lists change infrequently between updates. A short TTL cache (30–60 seconds) dramatically reduces read volume.
  • Use webhooks instead of polling. Subscribe to events rather than repeatedly calling the same endpoint to detect changes. See Webhooks.
  • Batch writes where possible. Some endpoints accept arrays; use them instead of making one request per item.

Per-key rate limit overrides

An organizer can configure a lower rate limit directly on an individual API key (separate from the project's plan-tier limit). If a key has its own limit configured, requests made with that key can receive a 429 Too Many Requests from the per-key limit even while the project's overall plan-tier budget still has headroom. If you see unexpected 429 responses on a specific key, check that key's configuration in the developer dashboard before assuming the project has hit its plan-tier limit.

Sandbox environment

Your developer account can have one active sandbox environment for testing, separate from your production API key. You can view your sandbox's status and usage from the developer dashboard today; creating or resetting a sandbox through the API is not yet available. The sandbox does not have a documented rate-limit budget of its own — it is intended for development and testing rather than production traffic.

Need higher limits?

For programs with unusual traffic patterns — large registration windows, broadcast-day bursts, or partner integrations with large user bases — contact us to discuss a custom Enterprise rate-limit profile.

Was this helpful?

Response Codes

HTTP status codes returned by the Tournament Suite API and how to handle them.

Webhooks

Register endpoints to receive real-time event notifications from Tournament Suite.

On this page

Rate limit headersHandling rate limitsStaying within limitsPer-key rate limit overridesSandbox environmentNeed higher limits?