---
title: "Get a video generation"
method: GET
path: "/api/v1/video-generations/{id}"
tags: ["Videos"]
---

# Get a video generation

`GET /api/v1/video-generations/{id}`

## Request

- Base URL: `https://your-deployment.example.com`
- URL: `https://your-deployment.example.com/api/v1/video-generations/{id}`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Returns one job you requested. Each read signs a fresh `output.url` (valid 15 minutes, see `expires_at`).

## Path parameters

- `id` string, required

## Response `200`

The job.

- GetVideoGenerationResponse200
  - `id` string, required
  - `object` 'video_generation', required
  - `state` 'pending' | 'running' | 'storing' | 'succeeded' | 'failed' | 'blocked' | 'cancelled', required
  - `model` string, required
  - `mode` 'text_to_video' | 'image_to_video', required
  - `prompt` string, required
  - `duration_seconds` number, required
  - `aspect_ratio` '16:9' | '9:16' | '1:1' | '4:3' | '3:4' | '3:2' | '2:3' | '21:9', required
  - `resolution` '360p' | '480p' | '720p' | '1080p' | '4k', required
  - `source` 'api' | 'studio' | 'agent', required
  - `progress` number, nullable, required
  - `error` object, nullable, required
    - `code` 'content_blocked' | 'provider_timeout' | 'provider_error' | 'region_unavailable' | 'output_too_large' | 'input_image_not_found' | 'cancelled', required
    - `message` string, required
  - `output` object, nullable, required
    - `availability` 'ready' | 'pending_scan' | 'unavailable', required: `ready`: url is set. `pending_scan`: the saved file is still being scanned; re-fetch the job until it changes (self-hosted installs can stay here for up to ~30 minutes). `unavailable`: the file was blocked by the scan or deleted and url will never be set; stop polling.
    - `url` string, nullable, required: Signed download URL, valid until expires_at; re-fetch the job for a fresh one. Set only when availability is `ready`, otherwise null.
    - `expires_at` string, nullable, required: ISO 8601. When url stops working; null whenever url is.
    - `content_type` string, required
    - `duration_seconds` number, required
    - `file_id` string, nullable, required: The Files entry, or null when the clip was stored outside Files.
  - `credits` object, required
    - `reserved` number, nullable, required
    - `settled` number, nullable, required
  - `created_at` string, required
  - `updated_at` string, required

## Other responses

- `401`: Missing or invalid credentials.
- `403`: The API key lacks the `ai:generate` scope.
- `404`: No video generation with that id was requested by the caller (a malformed id is also a 404).
- `405`: The path does not serve this HTTP method.
- `422`: Request failed validation.
- `429`: Per-user rate limit exceeded.

---

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