Rate Limits & Quotas
Understand the limits that apply to your API usage.
Rate limits
The API allows 60 requests per minute per team. The limit is shared by every token and every member of the team, and it applies across all endpoints combined.
Response headers
Every API response includes headers showing your current rate limit status:
X-RateLimit-Limit: maximum requests allowed per minute (60)X-RateLimit-Remaining: requests remaining in the current windowX-RateLimit-Reset: when the current window ends, as a Unix timestamp in seconds
Exceeding the limit
If you exceed the rate limit, the API returns a 429 Too Many Requests response. Its Retry-After header gives the number of seconds to wait before retrying.
{
"message": "Too Many Requests."
}Monthly quotas
Each plan includes a monthly quota of PDF generations. It resets on the first day of each month; unused generations do not roll over. One PDF costs one credit, whether it comes from a template or from raw HTML (POST /api/v1/html-to-pdf). A merge of N documents costs N credits. Exporting a PDF from the editor is free.
| Plan | Monthly quota |
|---|---|
| Discovery | 100 PDFs |
| Basic | 5,000 PDFs |
| Pro | 15,000 PDFs |
Reaching your quota
Past the quota, generation carries on with prepaid credits:
- The first time a paying account (Basic or Pro) crosses its quota, it receives a one-off welcome pack of 1,000 PDFs. Discovery accounts do not get it.
- Credit packs then take over: 1,000 PDFs for $5, bought from Settings → Billing. They never expire.
- When both the quota and the credits are used up, the API answers
402 Payment Required. The body gives the current usage and apurchase_url.
Quota notifications
You receive an email when your usage reaches:
- 80% and 95% of your monthly quota
- 90% and 95% of your prepaid credits
Monitoring usage
You can track your usage in two ways:
- Dashboard: view real-time usage statistics in your dashboard
- API: call
GET /api/v1/usagefor programmatic access (see Templates API)
Every PDF generation response also includes a usage object with your current consumption.
Best practices
- Implement retry logic with exponential backoff for 429 responses (rate limit), but not for 402: a refused render will not succeed on retry
- Cache generated PDFs on your side when the same document is requested multiple times
- Monitor your usage via the API or dashboard to anticipate quota limits
- Use the
urloutput format to avoid transferring large base64 payloads
