Skip to main content

Rate Limits

The Developer API enforces rate limits to ensure fair usage and system stability.
LimitValueDescription
Requests per minute100Maximum API requests per API key within a 60-second window
Concurrent render jobs5–50Maximum running jobs per organization (depends on plan, see below)
Max items per bulk job100Maximum documents in a single bulk render request
Max image upload size25 MBMaximum file size for temporary image uploads
Max bulk file upload size10 MBMaximum CSV/JSON file size for bulk render
Max tool file upload size50 MBMaximum file size for tool file uploads
When rate limits are exceeded, you’ll receive a 429 Too Many Requests response:
{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please wait before making more requests.",
  "error": "Too Many Requests"
}

Credit Costs

Each API operation consumes credits from your organization’s balance.
OperationCredit Cost
Image uploadFree
Single render5 credits
Bulk render (per item)4 credits
Tool file uploadFree
Tool PDF action1 credit

TTLs (Time-To-Live)

Download your rendered files within 1 hour of job completion. After that, both the job record and the download URL expire.
ResourceTTLDescription
Temporary images24 hoursImages uploaded via /images endpoint
Render jobs1 hourJob metadata and download availability
Download URLs1 hourPre-signed S3 URLs for file downloads
Tool files60 minutesFiles uploaded for PDF tools (input and output)

Cleanup Schedule

The API runs automatic cleanup to remove expired resources:
  • Expired temporary images are deleted from storage (every 60 minutes)
  • Completed render jobs older than 1 hour are removed (every 60 minutes)
  • Expired tool files and completed tool jobs are removed (every 10 minutes)
  • Associated files are permanently deleted

Concurrent Job Limits

The maximum number of concurrent render jobs depends on your subscription plan:
PlanConcurrent Job Limit
Free5
Pro50
Team50
This limit includes:
  • Single render jobs (each counts as 1)
  • Bulk render jobs (each counts as 1, regardless of item count)
If you hit this limit, you’ll receive:
{
  "statusCode": 400,
  "message": "Maximum concurrent jobs limit reached (50). Please wait for existing jobs to complete.",
  "error": "Bad Request"
}

Best Practices

When you receive a 429 response, wait before retrying. Start with 1 second and double the wait time for each subsequent retry, up to a maximum of 60 seconds.
Download completed renders immediately after job completion. The 1-hour TTL is a hard limit — files are permanently deleted after expiration.
Check your credit balance before submitting large bulk jobs. Use the billing endpoints to verify sufficient credits are available.
Instead of polling, provide a webhookUrl when creating bulk jobs to receive instant completion notifications.
For bulk renders, group up to 100 items per job to minimize API calls while staying within limits.

Summary Table

CategoryLimitValue
Rate LimitRequests/minute100
Rate LimitWindow duration60 seconds
ConcurrencyMax parallel jobs5 (Free) · 50 (Pro/Team)
BulkMax items/job100
UploadMax image size25 MB
UploadMax bulk file size10 MB
UploadMax tool file size50 MB
TTLTemporary images24 hours
TTLRender jobs1 hour
TTLDownload URLs1 hour
TTLTool files60 minutes
CreditsImage uploadFree
CreditsSingle render5
CreditsBulk render/item4
CreditsTool file uploadFree
CreditsTool PDF action1