# List Render Jobs

> List your workspace's async render jobs, newest first, with optional status filter and cursor pagination.

- **URL**: https://orshot.com/docs/api-reference/async-render-jobs-list

---

List the [async render jobs](https://orshot.com/docs/api-reference/async-render-start) in your workspace, newest first.

```markdown tab="Endpoint"
GET https://api.orshot.com/v1/studio/render-jobs?status=processing&limit=20
```

## Query parameters

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `status` | string | Optional filter: `queued`, `processing`, `succeeded`, `failed`, or `canceled`. An unknown value answers `400` (`invalid-status-filter`). |
| `limit` | number | How many to return. Default `20`, max `100`. |
| `cursor` | number | For the next page, pass the `next_cursor` from the previous response. |

## Response

`data` is an array of [job objects](https://orshot.com/docs/api-reference/async-render-start#the-job-object), newest first. `pagination.next_cursor` is the id to pass as `cursor` for the next (older) page; it is `null` on the last page.

```js {5}
{
  "data": [
    { "id": 1208, "status": "queued",     "finished": false, "created_at": "…" },
    { "id": 1207, "status": "processing", "finished": false, "created_at": "…" },
    { "id": 1206, "status": "succeeded",  "finished": true,  "result": { … }, "created_at": "…" }
  ],
  "pagination": { "has_more": true, "next_cursor": 1206 }
}
```

## Paging through every job

```js
let cursor;
do {
  const url = new URL("https://api.orshot.com/v1/studio/render-jobs");
  url.searchParams.set("limit", "100");
  if (cursor) url.searchParams.set("cursor", cursor);
  const res = await fetch(url, { headers: { Authorization: "Bearer <ORSHOT_API_KEY>" } });
  const { data, pagination } = await res.json();
  // …process data…
  cursor = pagination.next_cursor;
} while (cursor);
```