# Get a render

`GET https://api.vidmoat.com/v1/renders/{id}`

- Scope: `render.read`
- Cost: Free

Poll a job: PENDING, then PROCESSING, then COMPLETED or FAILED, with progress 0 to 100 and the download URL on completion.

> **Note.** Poll every few seconds, not every few hundred milliseconds: the rate limiter does not distinguish an eager poller from an attack. Subscribe to render.completed and render.failed in the Webhooks console instead.

### Path parameters

- `id` (string, required): The render job id.

## Response

Returns `200`.

### Response fields

- `render` (object): The job.
  - `id` (string): Render job id.
  - `projectId` (string): The project rendered.
  - `status` (enum): Where the job is. One of `PENDING`, `PROCESSING`, `COMPLETED`, `FAILED`, `CANCELLED`.
  - `progress` (integer): 0 to 100.
  - `format` (string): `mp4`, `webm` or `gif`.
  - `resolution` (string): `full` or `half`.
  - `quality` (string): `draft`, `standard` or `high`.
  - `url` (string or null): The download URL once `COMPLETED`.
  - `error` (string or null): Why it failed, when `FAILED`.
  - `createdAt` (string): ISO 8601 time.
  - `updatedAt` (string): ISO 8601 time.

## Errors

Besides the errors any request can get ([authentication](https://developer.vidmoat.com/developer/docs/authentication#when-a-request-is-refused), [rate limits](https://developer.vidmoat.com/developer/docs/rate-limits)):

| Status | Code | When |
| --- | --- | --- |
| 404 | [`not_found`](https://developer.vidmoat.com/developer/docs/errors#not_found) | No such job, or not yours. |

## Request examples

```bash curl
curl https://api.vidmoat.com/v1/renders/$JOB_ID \
  -H "Authorization: Bearer $VIDMOAT_KEY"
```

```js Node
const JOB_ID = 'YOUR_JOB_ID';

const res = await fetch(`https://api.vidmoat.com/v1/renders/${JOB_ID}`, {
  headers: {
    Authorization: `Bearer ${process.env.VIDMOAT_KEY}`,
  },
});
const data = await res.json();
if (!res.ok) throw new Error(data.error?.message ?? `HTTP ${res.status}`);
console.log(data);
```

```python Python
import os
import requests

JOB_ID = "YOUR_JOB_ID"

res = requests.get(
    f"https://api.vidmoat.com/v1/renders/{JOB_ID}",
    headers={"Authorization": f"Bearer {os.environ['VIDMOAT_KEY']}"},
    timeout=60,
)
res.raise_for_status()
print(res.json())
```

## Example response

```json
{
  "render": {
    "id": "clx9abc123", "projectId": "cm1abc", "status": "PROCESSING", "progress": 42,
    "format": "mp4", "resolution": "full", "quality": "standard",
    "url": null, "error": null,
    "createdAt": "2026-10-03T12:00:00.000Z", "updatedAt": "2026-10-03T12:00:31.000Z"
  }
}
```

---

Source: https://developer.vidmoat.com/developer/docs/api/renders/get-render
Previous: [List renders](https://developer.vidmoat.com/developer/docs/api/renders/list-renders.md)
Next: [Preview a project](https://developer.vidmoat.com/developer/docs/api/renders/get-preview.md)
All documentation: https://developer.vidmoat.com/llms-full.txt
