Rate Limits

Default Limits

  • 1,000 requests per hour per API key
  • Rate limits reset every hour based on your first request

Rate Limit Headers

Rate limit information is included in all API responses:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed per hour
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when limit resets

Handling Rate Limits

When rate limited, you'll receive a 429 Too Many Requests response:

{
  "error": "Rate limit exceeded. Try again in 1234 seconds."
}

The response includes a Retry-After header indicating how many seconds to wait.

Best Practices

  • Cache responses when possible to reduce API calls
  • Implement exponential backoff when retrying failed requests
  • Monitor your usage using the rate limit headers
  • Batch operations where the API supports it

Example: Handling Rate Limits

Python:

import requests
import time

def make_request(url, headers):
    response = requests.get(url, headers=headers)
    
    if response.status_code == 429:
        retry_after = int(response.headers.get('Retry-After', 60))
        print(f"Rate limited. Waiting {retry_after} seconds...")
        time.sleep(retry_after)
        return make_request(url, headers)
    
    return response

JavaScript:

async function makeRequest(url, headers) {
  const response = await fetch(url, { headers });
  
  if (response.status === 429) {
    const retryAfter = parseInt(response.headers.get('Retry-After') || '60');
    console.log(`Rate limited. Waiting ${retryAfter} seconds...`);
    await new Promise(r => setTimeout(r, retryAfter * 1000));
    return makeRequest(url, headers);
  }
  
  return response;
}