Limits and timeouts
The limits that apply to every request, and how the server behaves when it is busy.
Per request
| Limit | Value | Notes |
|---|---|---|
| Request body | 10 MB | HTML, embedded images and parameters together. Larger requests get 413. |
| Render time | 30 seconds | Includes loading the page and its resources. The timeout parameter can lower it, not raise it. |
PDF delay | 10,000 ms | Milliseconds, as in PDFShift. |
Screenshot delay | 30 s | Seconds, as in ScreenshotOne. Counts towards the 30-second render time. |
| Viewport | up to 10,000 px | Width and height; device_scale_factor up to 4. |
| Pages in a PDF | no fixed limit | Bounded by the render time. Several hundred simple pages render well within it. |
Concurrency and the queue
The server renders several documents at the same time. Requests beyond that wait in a short queue and are processed in order, so a burst of requests is smoothed out rather than refused. If the queue itself is full, the answer is 429: wait a moment and retry.
For batch jobs, send a handful of requests in parallel (four is a good start) instead of hundreds at once. That keeps each request fast and avoids 429 answers.
Typical render times
Measured in Jeddah, on the server itself, without network time:
| Job | Time |
|---|---|
| One-page Arabic PDF from HTML | about 0.1 to 0.4 s |
| Screenshot of a static page | about 0.3 to 1 s |
Screenshot of a news site with block_cookie_banners | about 4 to 9 s |
Page built with JavaScript, wait_until=networkidle | about 10 to 20 s |
Pages you load by URL dominate the time: their scripts, images and third-party calls. HTML sources with embedded or nearby resources are the fastest.
Monthly allowance
Each plan includes a number of renders per month; one PDF or one screenshot is one render, whatever its size or number of pages. See pricing. Unused renders do not carry over. The allowance resets on the first day of each month (UTC).
Every response tells you where you stand: X-Quota-Limit is your monthly allowance and X-Quota-Remaining the renders left before this request. When nothing is left, requests are refused with 402 until the new month or a plan change. Only successful renders are counted.