Rate Limits & Errors
Understand quotas, status codes, and how to handle errors gracefully.
Rate limits
| Tier | Daily limit | Per key |
|---|---|---|
| Free | 10,000 calls/day | Yes |
Limits reset at midnight UTC. Usage counts are tracked per API key, not per account. You can monitor your current usage on the dashboard.
Rate limit headers
Every response includes rate limit headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Daily request quota |
X-RateLimit-Remaining | Requests remaining today |
X-RateLimit-Reset | Unix timestamp when the quota resets |
Error responses
Errors return JSON with a consistent structure:
{
"error": {
"code": 429,
"message": "Rate limit exceeded. Resets at midnight UTC."
}
} Status codes
| Code | Meaning | Action |
|---|---|---|
200 | Success | Parse the response body |
403 | Invalid or missing API key | Check that the x-api-key header or api_key query param is present and valid |
404 | No data for cell or zone | Verify the H3 index is resolution 6, or the zone ID is valid |
429 | Rate limit exceeded | Back off and retry after the reset time in X-RateLimit-Reset |
Best practices
- Cache responses on your end according to the
Cache-Controlheaders - Check
X-RateLimit-Remainingto avoid hitting 429s - Implement exponential backoff on 429 responses
- Use a single API key per application, not per end-user