Rate Limits

Understand API request limits and how to handle them

Rate Limits

The Blitz Rocket API enforces rate limits to ensure fair usage and protect service stability. Rate limits are applied per API key and vary by endpoint.

Default Limits

Endpoint CategoryLimitWindow
General endpoints100 requests1 minute
Contest entry creation5 requests15 minutes (per IP + contest)
Email/phone verification10 requests15 minutes (per IP + email)
Entry lookup20 requests5 minutes (per IP)

Rate Limit Headers

When you approach or exceed rate limits, the API returns a 429 Too Many Requests status code:

{
  "success": false,
  "error": "Rate limit exceeded. Please try again later."
}

Best Practices

  • Cache responses where possible to reduce the number of API calls
  • Implement exponential backoff when you receive a 429 response
  • Batch operations instead of making many individual requests
  • Use webhooks for real-time updates instead of polling endpoints

Example: Exponential Backoff

async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status === 429) {
      const delay = Math.pow(2, attempt) * 1000;
      await new Promise((resolve) => setTimeout(resolve, delay));
      continue;
    }

    return response;
  }
  throw new Error("Max retries exceeded");
}
import time
import requests

def fetch_with_retry(url, headers, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers)

        if response.status_code == 429:
            delay = (2 ** attempt)
            time.sleep(delay)
            continue

        return response

    raise Exception("Max retries exceeded")