Errors & limits

Response headers

Every metered response includes your current quota and rate-limit state:

HeaderMeaning
X-Quota-LimitMonthly screenshot allowance for your plan.
X-Quota-Used / X-Quota-RemainingUsage this period.
X-Quota-ResetWhen the quota resets (ISO 8601).
X-RateLimit-*Per-minute burst limit state.

Plans & quotas

PlanScreenshots / monthAdds
Free20Full-page & viewport, devices, blocking, sharable links, PNG/JPEG/WEBP
Starter2,000Dark mode rendering, PDF export, batch screenshots
Pro10,000Website time-travel (evolution), high-resolution options, click & hide elements
Scale100,000Custom 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.

OptionsRequires
darkMode, darkModeCSS, darkModeInvertImagesStarter+
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×1080Pro+
hideSelectors, interactionsPro+
ai (OCR / extraction / analysis — plus a monthly AI-call quota)Pro+
scripts, stylesScale

Error codes

Errors return a consistent shape:

{ "success": false, "error": { "code": "...", "message": "..." } }
StatusCodeMeaning
401UNAUTHORIZEDMissing or invalid API key / signature.
403FEATURE_NOT_IN_PLANAn option used requires a higher plan — see plan-gated options.
400VALIDATION_ERRORBad options, or a URL resolving to a private/blocked address.
429RATE_LIMITEDToo many requests this minute.
429QUOTA_EXCEEDEDMonthly quota reached — upgrade your plan.
429AI_QUOTA_EXCEEDEDMonthly AI-call quota reached (Pro 1,000 / Scale 10,000; resets on the 1st, UTC).
500SERVER_ERRORCapture failed unexpectedly; retry.