Errors & limits
Response headers
Every metered response includes your current quota and rate-limit state:
| Header | Meaning |
|---|---|
X-Quota-Limit | Monthly screenshot allowance for your plan. |
X-Quota-Used / X-Quota-Remaining | Usage this period. |
X-Quota-Reset | When the quota resets (ISO 8601). |
X-RateLimit-* | Per-minute burst limit state. |
Plans & quotas
| Plan | Screenshots / month | Adds |
|---|---|---|
| Free | 20 | Full-page & viewport, devices, blocking, sharable links, PNG/JPEG/WEBP |
| Starter | 2,000 | Dark mode rendering, PDF export, batch screenshots |
| Pro | 10,000 | Website time-travel (evolution), high-resolution options, click & hide elements |
| Scale | 100,000 | Custom JS/CSS injection |
A batch or web-archive request charges one unit per URL / per period.
Plan-gated options
Some options require a minimum plan. Requests using an option outside your plan return 403 FEATURE_NOT_IN_PLAN with the required plan in error.details.requiredPlan. GET /usage lists your plan's features.
| Options | Requires |
|---|---|
darkMode, darkModeCSS, darkModeInvertImages | Starter+ |
format: "pdf" | Starter+ |
Batch endpoints (/batch/*) | Starter+ |
Monitor endpoints (/monitors/* — change monitoring) | Starter+ |
Web-archive endpoints (/web-archive/* — website time-travel) | Pro+ |
viewport.deviceScaleFactor > 1, or a viewport larger than 1920×1080 | Pro+ |
hideSelectors, interactions | Pro+ |
ai (OCR / extraction / analysis — plus a monthly AI-call quota) | Pro+ |
scripts, styles | Scale |
Error codes
Errors return a consistent shape:
{ "success": false, "error": { "code": "...", "message": "..." } }| Status | Code | Meaning |
|---|---|---|
| 401 | UNAUTHORIZED | Missing or invalid API key / signature. |
| 403 | FEATURE_NOT_IN_PLAN | An option used requires a higher plan — see plan-gated options. |
| 400 | VALIDATION_ERROR | Bad options, or a URL resolving to a private/blocked address. |
| 429 | RATE_LIMITED | Too many requests this minute. |
| 429 | QUOTA_EXCEEDED | Monthly quota reached — upgrade your plan. |
| 429 | AI_QUOTA_EXCEEDED | Monthly AI-call quota reached (Pro 1,000 / Scale 10,000; resets on the 1st, UTC). |
| 500 | SERVER_ERROR | Capture failed unexpectedly; retry. |