Skip to main content

Limits by tier

TierRequests/minRequests/monthMax perPage
Free1010010
Starter305,00050
Pro6025,000500
Business120100,000500

Response headers

Metered /v1 responses include rate-limit and quota headers. The public /v1/health endpoint is outside this middleware chain.
X-RateLimit-Limit: 60
X-Quota-Limit: 25000
X-Quota-Used: 142
X-Quota-Remaining: 24858
X-Quota-Overage-Limit: 50000
X-Request-Id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
HeaderDescription
X-RateLimit-LimitMax requests per minute for your tier
X-Quota-LimitIncluded quota for the active quota window
X-Quota-UsedRequests used in the active quota window
X-Quota-RemainingRequests remaining in base quota (can be 0 during overage)
X-Quota-Overage-LimitHard limit including overage headroom (paid tiers only)
X-Request-IdUnique request ID for log correlation
X-Quota-Overage-Limit is only present for paid tiers. When X-Quota-Used exceeds X-Quota-Limit, you are in the overage zone — requests continue but incur per-request charges. Requests are blocked at the hard limit. See Pricing for overage rates. Free anonymous quotas reset on the 1st of each calendar month. Paid customer quotas and overage counters follow the active Polar subscription billing period, so usage aligns with the billing invoice rather than a calendar-month boundary.

Handling 429 responses

When you exceed the rate limit, the API returns a 429 status with a Retry-After header:
{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit of 60 requests per minute exceeded. Retry after 60 seconds.",
    "status": 429
  }
}
The wait time is exposed in the Retry-After header rather than a dedicated JSON field. Best practices:
  1. Read the Retry-After header and wait before retrying
  2. Implement exponential backoff for repeated 429s
  3. Use the SDK, which handles retries automatically

Quota exceeded

Paid tiers have overage headroom — requests continue past the base quota and are billed at your tier’s overage rate, up to the overage cap. Once the hard limit is reached:
{
  "error": {
    "code": "QUOTA_EXCEEDED",
    "message": "Monthly quota of 5000 requests plus overage cap exceeded. Resets at the end of the current billing period (2026-06-02T12:00:00.000Z).",
    "status": 429
  }
}
Free-tier users are blocked at 100 requests with no overage:
{
  "error": {
    "code": "QUOTA_EXCEEDED",
    "message": "Monthly quota of 100 requests exceeded. Resets on the 1st of next month.",
    "status": 429
  }
}
Check your current usage with the X-Quota-* response headers included on every API response.