Skip to main content

Rate Limits

Rate limits protect the API from abuse and ensure fair usage across all users.

Limits by Plan

PlanMonthly RequestsBurst Rate
Starter10,00010/minute
Pro100,0001,000/minute
Enterprise1,000,0001,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:

HeaderDescriptionExample
X-RateLimit-LimitMaximum requests allowed in the current window1000
X-RateLimit-RemainingRequests remaining in the current window742
X-RateLimit-ResetUnix timestamp (seconds) when the current window resets1739404800

When a 429 response is returned, an additional header is included:

HeaderDescriptionExample
Retry-AfterSeconds to wait before making another request30

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.