Rate Limits
Overview
Section titled “Overview”Rate limits are enforced per API key at the Nginx gateway. Limits apply independently per region — a request to US and JP each count against their respective region limits.
Tier Limits
Section titled “Tier Limits”| Tier | Requests/min | Requests/sec | Concurrent Streams |
|---|---|---|---|
| Basic | 100 | 2 | 1 |
| Pro | 120,000 | 200 | 10 |
| Quant | Unlimited | Unlimited | Unlimited |
Protocol-Specific Limits
Section titled “Protocol-Specific Limits”JSON-RPC
Section titled “JSON-RPC”- Global Nginx limit: 5,000 req/s per API key
- Tier-specific limits apply within the global cap
- Batch requests count as one request but are limited to 100 calls per batch
- Streaming RPCs count as one request at connection time
- Individual messages within a stream are not rate-limited
- Connection limits per tier apply
Unified Stream (SSE)
Section titled “Unified Stream (SSE)”- SSE connections count against concurrent stream limits
- Event throughput is not rate-limited once connected
- Reconnect attempts count as new requests
Disk-Sync WebSocket
Section titled “Disk-Sync WebSocket”- Quant only — no rate limits
- One connection per API key
Rate Limit Headers
Section titled “Rate Limit Headers”Rate-limited responses include:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per window |
X-RateLimit-Remaining | Remaining requests in window |
X-RateLimit-Reset | Unix timestamp when window resets |
Retry-After | Seconds until next request allowed (on 429) |
429 Response
Section titled “429 Response”{ "error": "rate_limit_exceeded", "message": "Rate limit exceeded. Retry after 1 second.", "retry_after": 1}Best Practices
Section titled “Best Practices”- Use streaming protocols (gRPC, SSE, WebSocket) instead of polling
- Implement exponential backoff on 429 responses
- Cache responses client-side where appropriate
- Use the region closest to your infrastructure to avoid wasted round-trips