---
title: "Get render job status"
method: GET
path: "/api/jobs/{id}"
tags: ["Render"]
---

# Get render job status

`GET /api/jobs/{id}`

## Request

- Base URL: `https://api.zvid.io`
- URL: `https://api.zvid.io/api/jobs/{id}`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Retrieve the status, progress, and result of a render job by ID.

## Path parameters

- `id` string, required

## Response `200`

Render job found

- RenderJobStatus
  - `id` string, required: Job identifier
  - `state` string, nullable, required: Queue states include waiting, prioritized, active, delayed, completed and failed. Treat completed/failed as terminal; keep polling other states with bounded backoff.
  - `progress` union, required: A percentage or phase object. The structured progress field is percentage, not percent.
    - number
    - object
      - `phase` string
      - `percentage` number
      - `message` string
  - `result` union: Usually an object with url while queue data is available. Persisted history can return the output URL string. Handle both shapes. Null after output expiry; completed history remains available.
    - string
    - object
      - `url` string
      - `thumbnailUrl` string, nullable
      - `type` 'video' | 'image'
      - `duration` number, nullable
      - `size` number, nullable
  - `failedReason` string, nullable: Failure reason if the job failed
  - `ts` RenderJobTimestamps, required
    - `created` union, required
      - integer: Unix milliseconds while job data is in the queue.
      - string, date-time: ISO date-time when served from persisted job history.
    - `updated` union, required
      - integer: Unix milliseconds while job data is in the queue.
      - string, date-time: ISO date-time when served from persisted job history.
    - `finished` union, required
      - integer: Unix milliseconds while job data is in the queue.
      - string, date-time: ISO date-time when served from persisted job history.
  - `outputExpiresAt` string, date-time, nullable: Availability deadline based on the plan recorded for this render, starting at completion. URLs are withheld after this time.
  - `outputExpiredAt` string, date-time, nullable: When expiration cleanup was recorded. Check outputExpiresAt even while cleanup is pending.
  - `outputCleanupStatus` string, nullable: Output cleanup progress; failed storage deletion or cache purges are retried.

## Other responses

- `400`: Invalid job ID
- `401`: Authentication required
- `403`: Access denied – job does not belong to the authenticated user
- `404`: Job not found
- `500`: Internal server error

---

[API](https://skmtc.dev/zvid/apis/zvid-api.md) · [All operations](https://skmtc.dev/zvid/apis/zvid-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zvid/apis/zvid-api/revisions/8a665b293b37?raw)
