# Get a Render Job

> Poll a single async render job by id until it finalizes, then read its result or its actionable error.

- **URL**: https://orshot.com/docs/api-reference/async-render-job-get

---

Fetch one [async render job](https://orshot.com/docs/api-reference/async-render-start) by id. Poll it until `finished` is `true`, then read `result` (on success) or `error` (on failure).

```markdown tab="Endpoint"
GET https://api.orshot.com/v1/studio/render-jobs/:id
```

## Poll for the result

```js {8}
let job;
do {
  await new Promise((r) => setTimeout(r, 5000));
  const res = await fetch(`https://api.orshot.com/v1/studio/render-jobs/${id}`, {
    headers: { Authorization: "Bearer <ORSHOT_API_KEY>" },
  });
  job = await res.json();
} while (!job.finished);

if (job.status === "succeeded") {
  // job.result.data.content → the rendered file URL
} else {
  // job.error tells you what to fix; job.error_code is stable for branching
}
```

The response is the [job object](https://orshot.com/docs/api-reference/async-render-start#the-job-object). Polling does **not** count against your render rate limit; a sensible interval is 3 to 10 seconds.

Job records expire **7 days** after creation. The rendered file itself is
unaffected by job expiry, only the job row is removed.

- A job id that does not exist in your workspace answers `404` (`job-not-found`). Job ids are workspace-scoped, so a foreign id is never distinguishable from a missing one.
- A non-integer id answers `400` (`invalid-job-id`).