API reference

Check job status

GET/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.

response · completed
{
  "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"
}
response · failed
{
  "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_url is 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.