GET /v1/renders/:id

Poll an async render job.

Retrieve the status and result URL of an async render job.

GET/v1/renders/:idAuth required

Response — completed

json
{
  "id": "d1e2f3a4-5b6c-7d8e-9f0a-b1c2d3e4f5a6",
  "status": "succeeded",
  "format": "pdf",
  "scale": "1",
  "result_url": "https://cdn.pixldocs.com/renders/...",
  "error": null,
  "credits_used": 1,
  "queued_at":   "2026-07-08T12:34:56Z",
  "started_at":  "2026-07-08T12:34:56Z",
  "finished_at": "2026-07-08T12:34:58Z"
}

Response — still running

scale comes back as a string, not a number — compare it as "1". error is present and null on success, so you can read it without checking for the key first.

json
{ "id": "d1e2f3a4-...", "status": "queued",     "finished_at": null }
json
{ "id": "d1e2f3a4-...", "status": "processing", "started_at": "2026-07-08T12:34:56Z", "finished_at": null }

Response — failed

json
{
  "id": "d1e2f3a4-...",
  "status": "failed",
  "error":  "Font 'Custom Font' failed to load",
  "finished_at": "2026-07-08T12:34:58Z"
}

Status values

queued → processing → succeeded or failed. Poll the job until it leaves the first two. Treat the result_url as the thing with a lifetime, not the job record: download the file when the job succeeds rather than assuming the link will still serve bytes days later.

Jobs are scoped to the workspace that owns the API key — an unknown, expired or foreign job id all return the same 404 render_not_found, so a key cannot probe for jobs it does not own. Branch on that code, not on not_found.