Skip to main content
Rate limits are applied per client IP address using a token bucket algorithm.

Rate limit response

When you exceed the rate limit, the API returns 429 Too Many Requests:
{
  "errors": [
    {
      "code": "RATE_LIMIT_EXCEEDED",
      "detail": "Too many requests. Please try again later.",
      "status": 429
    }
  ]
}

Handling rate limits

Back off and retry with exponential delay:
import asyncio
import httpx

async def request_with_backoff(client: httpx.AsyncClient, url: str, **kwargs):
    max_retries = 3
    for attempt in range(max_retries):
        response = await client.get(url, **kwargs)
        if response.status_code != 429:
            return response
        wait = 2 ** attempt  # 1s, 2s, 4s
        await asyncio.sleep(wait)
    return response

Best practices

  • Batch where possible. Fewer large requests beat many small ones.
  • Cache responses that don’t change frequently (e.g., party details, wallet balance).
  • Implement exponential backoff on 429 responses.