Check job status
/api/v1/screenshots/{job_uuid}Returns the current state of a job. Poll every 5 seconds until status is completed or failed. A failed capture still answers 200: the success field describes the capture, not the call, and only transport and admission problems answer with an error status.
{
"success": true,
"job_uuid": "a818dd25-d93e-4148-8aed-9ebb109ceeda",
"status": "completed",
"url": "https://example.com",
"final_url": "https://example.com/",
"page_title": "Example Domain",
"mode": "viewport",
"width": 1280,
"height": 800,
"format": "png",
"image_url": "https://previewapi.dev/storage/screenshots/a818dd25.png",
"image_width": 1280,
"image_height": 800,
"image_bytes": 184223,
"duration_ms": 3410,
"cost_credits": 1,
"credit_state": "consumed",
"error": null,
"error_code": null,
"created_at": "2026-08-05T09:12:44Z",
"completed_at": "2026-08-05T09:12:48Z"
}{
"success": false,
"job_uuid": "a818dd25-d93e-4148-8aed-9ebb109ceeda",
"status": "failed",
"url": "https://example.com",
"final_url": null,
"page_title": null,
"mode": "viewport",
"width": 1280,
"height": 800,
"format": "png",
"image_url": null,
"image_width": null,
"image_height": null,
"image_bytes": null,
"duration_ms": 30112,
"cost_credits": 0,
"credit_state": "refunded",
"error": "The page did not finish loading in time.",
"error_code": "PAGE_TIMEOUT",
"created_at": "2026-08-05T09:12:44Z",
"completed_at": "2026-08-05T09:13:14Z"
}Polling guidance
- Poll every 5 seconds. That is the interval the dashboard uses.
- Stop polling on
completed,failed, or after 2 minutes. image_urlis stable for the life of the image, so it can be stored or hotlinked — but see retention below.
Image retention
Stored images are swept after the service's retention window, 14 days at present. Nothing on the job body changes when that happens — image_url is still there and the job still reads completed; the URL simply starts answering 404. So copy the image into your own storage if you need it for longer, rather than waiting for a field to tell you it has gone.
What the capture cost is on the body, not only on your account: cost_credits is what was actually charged and credit_state is where that credit sits — consumed for a completed capture, refunded for a failed one, reserved while it runs. A failed job therefore reports cost_credits: 0. See Credits.