Limits by tier
| Tier | Requests/min | Requests/month | Max perPage |
|---|---|---|---|
| Free | 10 | 100 | 10 |
| Starter | 30 | 5,000 | 50 |
| Pro | 60 | 25,000 | 500 |
| Business | 120 | 100,000 | 500 |
Response headers
Metered/v1 responses include rate-limit and quota headers. The public /v1/health endpoint is outside this middleware chain.
| Header | Description |
|---|---|
X-RateLimit-Limit | Max requests per minute for your tier |
X-Quota-Limit | Included quota for the active quota window |
X-Quota-Used | Requests used in the active quota window |
X-Quota-Remaining | Requests remaining in base quota (can be 0 during overage) |
X-Quota-Overage-Limit | Hard limit including overage headroom (paid tiers only) |
X-Request-Id | Unique 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 a429 status with a Retry-After header:
Retry-After header rather than a dedicated JSON field.
Best practices:
- Read the
Retry-Afterheader and wait before retrying - Implement exponential backoff for repeated 429s
- 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:X-Quota-* response headers included on every API response.