Limits
Every limit that applies to the API, in one place.
Conversion endpoints
/quickjob | /longjob | /bulkjob | |
|---|---|---|---|
| Mode | Synchronous, returns the PDF | Asynchronous, one document | Asynchronous, many documents |
| Input types | html, markdown, image, url | html, markdown, url | html or markdown bundles |
| Pages per PDF | 25 | 100 | 100 |
| Pages per job | 25 | 100 | 200 across all files |
| Request timeout | 30 seconds | Returns immediately after the page check | Returns immediately |
| Content size | 5 MB | 5 MB | See bulk limits below |
If a PDF exceeds the page limit the request fails with PAGE_LIMIT_EXCEEDED rather than being truncated.
Images
| Limit | Value |
|---|---|
| Formats | PNG and JPEG |
| Images per request | 25 (each image becomes one page, so the page limit applies) |
| Size per image | 5 MB |
| Total upload | 10 MB |
| Dimensions | 10,000 × 10,000 pixels |
Images that fail validation are skipped; if at least one image is usable the PDF is still produced, and X-PDF-Pages tells you how many were included.
URL input
| Limit | Value |
|---|---|
| Scheme | https:// only |
| Reachability | Must be public; private and internal addresses are rejected |
| Response time | 10 seconds |
| Response size | 5 MB |
| Redirects | 5 |
| Content types | HTML, Markdown, PNG, JPEG |
The page is fetched and converted from its returned content, so references that rely on the original location may not resolve.
Bulk conversion
| Limit | Value |
|---|---|
| Bundle types | html (.html, .htm), markdown (.md, .markdown) |
| ZIP upload | 50 MB |
| Inline upload (multipart or base64) | 4 MB of files |
| Uncompressed archive | 300 MB, up to 1000 entries |
| Convertible file size | 10 MB each |
| Files per job | 200 |
| Pages per job | 200 |
| Active bulk jobs per account | 2 |
PDF merge and split
Instant (/pdf/merge, /pdf/split) | Background job (/pdf/jobs) | |
|---|---|---|
| Upload size | 4 MB in total | 150 MB per file, 150 MB in total |
| Files in a merge | 20 | 100 |
| Pages processed | 500 | 5000 |
| Files from one split | 100 | 500 |
| Total output size | 300 MB | 1 GB |
| Time limit | 25 seconds | 15 minutes |
| Active jobs per account | — | 2 |
| Output retention | 7 days | 7 days |
| Uploaded files kept | — | Until the job finishes, at most 1 day |
Output and retention
| Value | |
|---|---|
| Generated files kept | 30 days (merge and split outputs: 7 days) |
| Download link validity | 1 hour, reissue with GET /jobs/{job_id}/download |
| Job records | Kept indefinitely |
| Webhook delivery history | Kept indefinitely |
Webhooks
| Limit | Value |
|---|---|
| Webhooks per account | 5 on the standard plan (your plan's max_webhooks) |
| Delivery attempts | 4 (initial attempt plus 3 retries) |
| Retry delays | 1s, 2s, 4s |
| Request timeout | 10 seconds |
Rate limits
The standard paid plan has no per-account rate limit. Two limits still apply:
- The platform throttles very high request rates and returns
429 Too Many Requests. - Bulk conversion allows 2 active jobs per account, and merge/split allows another 2.
Plans that define rate_limit_per_minute return 403 RATE_LIMIT_EXCEEDED when exceeded, with a retry_after value in the error details.
Credits
PDFs are charged per successfully generated document at your plan's price. Failed and skipped files are not charged. Requests are rejected with 403 INSUFFICIENT_CREDITS when your balance cannot cover the work — for bulk jobs, the whole archive is checked before any rendering starts.
Next Steps
- Error handling — every error code and what to do about it
- Bulk conversion guide