---
title: "Poll a video generation job"
method: GET
path: "/v1/jobs/{jobId}"
tags: ["generation"]
---

# Poll a video generation job

`GET /v1/jobs/{jobId}`

## Request

- Base URL: `https://varosity.ai/api`
- URL: `https://varosity.ai/api/v1/jobs/{jobId}`
- Auth: HTTP bearer

Poll a job submitted via POST /v1/video/generate. Handles billing debit, webhook dispatch, and observability on the first 'succeeded' poll, so keep polling even if you use webhooks. Poll every 2–5 seconds. A finished Varosity Credits render that the balance cannot cover is held: status stays 'rendering' (or 'queued') with code 'insufficient_credits' and an error message naming the amount. Top up and poll again to release it; it is kept for 24 hours.

## Path parameters

- `jobId` string, uuid, required

## Response `200`

Current job status

- object
  - `ok` boolean
  - `jobId` string, uuid
  - `status` 'queued' | 'rendering' | 'succeeded' | 'failed' | 'canceled'
  - `outputUrl` string, uri, nullable
  - `thumbnailUrl` string, uri, nullable
  - `error` string, nullable: Failure reason, or for a held render what it costs and how to release it.
  - `code` 'insufficient_credits': Present only when a finished render is held for payment.
  - `costCents` integer, nullable

## Other responses

- `401`: Unauthorized
- `404`: Job not found

## Changes

- **2026-10-20** `81d0169a4897`: 1 info
  - added the optional property `code` to the response with the `200` status

[Operation history](https://skmtc.dev/varosity/apis/varosity-ai-api/changes/v1/jobs/:jobId/get.md)

---

[API](https://skmtc.dev/varosity/apis/varosity-ai-api.md) · [All operations](https://skmtc.dev/varosity/apis/varosity-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/varosity/apis/varosity-ai-api/revisions/81d0169a4897?raw)
