> ## Documentation Index
> Fetch the complete documentation index at: https://docs.craftkit.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a render

> GET /v1/renders/:id — poll a render's status and retrieve the download URL when ready.

<Info>**GET** `https://api.craftkit.dev/v1/renders/:id`</Info>

Returns the current state of a render. Valid for your project key **indefinitely** — the durable
record for offline-replay flows. Poll this until `status` is terminal.

## Authorization

<ParamField header="Authorization" type="string" required>
  `Bearer ck_live_…` — must be the project that owns the render.
</ParamField>

## Path parameters

<ParamField path="id" type="string" required>The render id.</ParamField>

## Response

<ResponseField name="id" type="string" />

<ResponseField name="status" type="string">`queued` · `rendering` · `succeeded` · `failed`. See [the enum](/guides/render-lifecycle#status-enum).</ResponseField>

<ResponseField name="pollUrl" type="string" />

<ResponseField name="downloadUrl" type="string | null">Populated when `succeeded`. Permanent public URL — see [durability](/guides/render-lifecycle#downloadurl-durability).</ResponseField>
<ResponseField name="errorMessage" type="string | null">Set when `failed`.</ResponseField>

<ResponseField name="createdAt" type="string" />

<ResponseField name="completedAt" type="string | null" />

<ResponseField name="durationMs" type="number | null" />

## Errors

<ResponseField name="404 not_found">No render with that id in this key's project.</ResponseField>

```bash cURL theme={null}
curl https://api.craftkit.dev/v1/renders/$RENDER_ID \
  -H "Authorization: Bearer $CRAFTKIT_API_KEY"
```

```json 200 theme={null}
{
  "id": "…",
  "status": "succeeded",
  "pollUrl": "https://api.craftkit.dev/v1/renders/…",
  "downloadUrl": "https://…/renders/…/….pdf",
  "errorMessage": null,
  "createdAt": "2026-06-05T10:00:00.000Z",
  "completedAt": "2026-06-05T10:00:03.120Z",
  "durationMs": 3120
}
```
