Rate limits and plan limits
Size limits keep each render inside the memory of one Cloudflare Worker. Over a rate limit you get 429 with Retry-After. Over a size limit you get 400 or 413 with the limit in the message.
Limits by plan
| Free | Starter | Pro | Business | |
|---|---|---|---|---|
| Credits a month | 100 | 2,000 | 5,000 | 25,000 |
| API calls a minute, per key | 30 | 120 | 300 | 600 |
| Jobs running at once | 5 | 20 | 50 | 100 |
| Templates | 5 | 50 | No limit | No limit |
| AI templates a month | 3 | 30 | 100 | 500 |
| Members | 1 | 1 | 3 | 10 |
| Files kept | 30 days | 365 days | 365 days | 365 days |
Rate limits
- Each API key may make the plan's number of calls in each 60 seconds, on every route. An MCP connection has the same limit as a key.
- Over the limit, the answer is 429
rate_limitedwithRetry-After: 60. POST /v1/previewwith a key counts toward the key's limit. Without a key it allows 30 a minute per IP address.- Signed link views are not counted per key.
- In the editor, a signed-in person has a limit of their own: 300 requests a minute on every plan. API keys keep the plan's limit above.
- Many renders of one workspace at the same moment can get 429
busywithRetry-After: 1.
HTTP/1.1 429 Too Many RequestsRetry-After: 60 {"error": {"code": "rate_limited", "message": "this key may make 30 requests a minute on the Free plan", "request_id": "req_…"}}Running jobs
Jobs are async renders (queued or rendering) and batches (running or making their ZIP). A batch is one job, whatever its rows. Sync renders and signed links are not jobs. When the workspace has as many jobs as its plan allows, a new job answers 429 rate_limited with Retry-After: 10.
Request limits
| Limit | Value | Over it |
|---|---|---|
| POST /v1/render body | 1 MB | 413 too_large |
| POST /v1/batch body | 12 MB | 413 too_large |
| Template routes body (a scene) | 2 MB | 413 too_large |
| POST /v1/preview body | 1 MB | 413 too_large |
| metadata of a render | 4,096 characters of JSON | 400 invalid_param |
| Sizes in one render or batch | 20 | 400 invalid_request |
| Sync render | at most 5 sizes and, for a PDF, at most 10 pages | Answered as a job (202) |
| Rows in a batch | 10,000 | 400 invalid_request (JSON rows) or invalid_csv (a CSV) |
| One batch row | 32,768 characters of JSON | 400 invalid_param |
| Files in a batch ZIP | 65,535 | 400 invalid_param |
| Pages of a PDF from a signed link | 10 | 400 too_many_pages |
| A value in POST /v1/links | 2,048 characters | 400 invalid_request |
| Idempotency-Key | 255 visible ASCII characters | 400 invalid_request |
| webhook_url and webhook URLs | 2,048 characters | 400 invalid_request |
| Preview image | 600 px on its long side | Made smaller |
| AI description | 3 to 500 characters | 400 invalid_request |
File and image limits
| Limit | Value |
|---|---|
| Uploaded image | 20 MB and 16 megapixels |
| Uploaded CSV | 5 MB |
| Image at a URL in data or a template | 20 MB and 16 megapixels; PNG, JPEG, GIF or WebP |
| Different image URLs in one render | 20 (400 limit; upload more images as assets) |
| Uploaded files in one workspace | 500 MB on Free, 10 GB on paid plans (402 plan_limit) |
| CSV at csv_url | 5 MB |
| Time for a URL to answer | 10 seconds |
| Redirects a URL may make | 3 (webhooks: none) |
Output limits
| Limit | Value | Over it |
|---|---|---|
| Pixels of one image (width × height × scale²) | 8,294,400 (3840 × 2160) | 400 limit |
| Decoded input images in one render, together | 16 megapixels | 400 limit |
| Memory one render may need | about 96 MB | 400 limit |
| Chinese, Japanese or Korean fonts in one render | 1 | 400 invalid_param |
| Pages of a PDF | 100 | 400 invalid_scene |
A 2000 × 2000 template at scale 2 is over the pixel limit. A PDF and an SVG are vector files, so the pixel limit applies only to their image parts.
Template limits
| Limit | Value |
|---|---|
| Canvas width and height | 1 to 10,000 px |
| Pages | 100 |
| Sizes, with main | 20 |
| Layers in the whole scene | 2,000 |
| Groups inside groups | 8 deep |
| Characters in one text layer | 10,000 |
| Characters in all text layers together | 100,000 |
| Chart series | 20 |
| Chart values or points per series, and labels | 1,000 |
| QR code value | 2,000 characters |
| Barcode value | 80 characters |
| Fonts loaded ahead (fonts) | 20 |
Every field's own range is on the Templates and JSON page.
Seen MintRender used for content that breaks our terms? Report it. Questions about the API: support@mintrender.com, with the request id.