Rate Limits
Rate limits protect the API from abuse and ensure fair usage across all users.
Limits by Plan
| Plan | Monthly Requests | Burst Rate |
|---|---|---|
| Starter | 10,000 | 10/minute |
| Pro | 100,000 | 1,000/minute |
| Enterprise | 1,000,000 | 1,000/minute |
Rate Limit Responses
When you exceed your rate limit, the API returns a 429 Too Many Requests status code.
{
"type": "https://tools.ietf.org/html/rfc6585#section-4",
"title": "Too Many Requests",
"status": 429,
"detail": "Rate limit exceeded. Please try again later."
}
Response Headers
Every API response includes headers indicating your current rate limit status:
| Header | Description | Example |
|---|---|---|
X-RateLimit-Limit | Maximum requests allowed in the current window | 1000 |
X-RateLimit-Remaining | Requests remaining in the current window | 742 |
X-RateLimit-Reset | Unix timestamp (seconds) when the current window resets | 1739404800 |
When a 429 response is returned, an additional header is included:
| Header | Description | Example |
|---|---|---|
Retry-After | Seconds to wait before making another request | 30 |
Example Response Headers
HTTP/1.1 200 OK
Content-Type: application/json
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 742
X-RateLimit-Reset: 1739404800
Using Rate Limit Headers
Monitor X-RateLimit-Remaining to proactively manage your request volume instead of waiting for 429 errors:
const response = await fetch(url, { headers: { "X-API-Key": apiKey } });
const remaining = parseInt(response.headers.get("X-RateLimit-Remaining"));
const resetAt = parseInt(response.headers.get("X-RateLimit-Reset"));
if (remaining < 10) {
const waitMs = (resetAt * 1000) - Date.now();
console.warn(`Only ${remaining} requests left. Window resets in ${Math.ceil(waitMs / 1000)}s`);
}
if (response.status === 429) {
const retryAfter = parseInt(response.headers.get("Retry-After"));
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
// Retry the request
}
Best Practices
tip
- Cache responses when the same coordinates are requested frequently
- Use exponential backoff when receiving 429 responses
- Monitor usage in your dashboard to anticipate when you're approaching limits
- Monitor response headers to detect approaching limits before hitting them
- Upgrade your plan if you consistently need more requests
Need More?
If your application requires higher limits than the Enterprise plan provides, contact us to discuss custom arrangements.