Skip to main content
Use asynchronous execution when you need to capture long pages, process batches, or avoid holding a request open while rendering.

Submit a background capture

You can also use POST /v1/screenshot?mode=async. The query override selects asynchronous mode even if the body contains sync: true. An unfinished submission returns HTTP 202 with a job ID and a relative poll URL. A reused request that has already completed can return its terminal capture result immediately, so handle both 200 and 202.

Poll the job

Use the submitting API key with jobs:read scope:
Poll about once per second initially, then increase the interval if the job remains pending. Apply an overall deadline appropriate to your workflow and respect Retry-After on 429 responses. Polling requests themselves are rate limited. A successful lookup has this shape:
Values are illustrative. Timestamps use Unix milliseconds. Treat progress as informational; it can be a number, string, or null. Do not infer completion from progress alone.

Timeouts and recovery

A client timeout stops your client from waiting. It does not cancel the capture. Keep the job ID or idempotency key and look up the original work before starting another capture. If submission returns an error with error.details.job_id, reconcile that job first. With an idempotency key, use request recovery. Download results promptly; job and artifact retention are not permanent-storage guarantees. For background notification, configure webhooks. The Node.js and Python examples handle both direct completion and job polling.