Limits and quotas
Daily / monthly caps, max PDF size, max render timeout, and how 429 responses are shaped.
Quota by plan
| Plan | Cap | Window | Rate-limit header |
|---|---|---|---|
| Anonymous trial | 3 | per day, per IP | X-RateLimit-Day-Limit: 3 |
| Signed-in Free | up to your DeepSyte plan | per month | X-RateLimit-Remaining |
| Solo ($9/mo) | 500 | per month | X-RateLimit-Remaining |
The anonymous limit is IP-hashed — we don't store your IP, just a SHA-256 hash. Signing up replaces it with a per-account quota.
Headers on 429
When you hit a cap, the response is:
HTTP/1.1 429 Too Many Requests
Retry-After: 86400
X-RateLimit-Day-Limit: 3
X-RateLimit-Day-Remaining: 0
{
"error": "You've hit the free trial limit of 3 PDFs per day. Sign up free for more.",
"limit": 3,
"window": "daily",
"dayRemaining": 0,
"dayLimit": 3
}Render limits
| Limit | Value | Notes |
|---|---|---|
| Max URL length | 2048 bytes | Browser standard. |
| Render timeout | 30s | Per page navigation. Adjustable on Solo+. |
| Total job timeout | 5 min | Hard wall — captures past this are killed. |
| Max PDF size | 50 MB | Larger pages get truncated; consider maxHeight. |
If a render times out the row is marked failed with an error message
(errorMessage on the row). The same fields populate the
screenshot.failed webhook payload.
Concurrent jobs
Free and Solo plans share a single BullMQ queue with FIFO ordering. Solo gets a priority weight so its jobs jump ahead. Sustained high concurrency isn't oversold — if you need a guaranteed concurrency floor, talk to us about Team / Agency.
