---
title: "List your video generations"
method: GET
path: "/api/v1/video-generations"
tags: ["Videos"]
---

# List your video generations

`GET /api/v1/video-generations`

## Request

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

Your jobs, newest first, optionally filtered by `state` and `source`. Cursor-paginated (see the pagination convention): pass `next_cursor` back as `cursor` until it is `null`.

## Query parameters

- `limit` integer
- `cursor` string
- `state` 'pending' | 'running' | 'storing' | 'succeeded' | 'failed' | 'blocked' | 'cancelled'
- `source` 'api' | 'studio' | 'agent'

## Response `200`

A page of jobs.

- ListVideoGenerationsResponse200
  - `data` object[], required
    - `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
  - `next_cursor` string, nullable, required

## Other responses

- `401`: Missing or invalid credentials.
- `403`: The API key lacks the `ai:generate` scope.
- `405`: The path does not serve this HTTP method.
- `422`: A malformed `cursor`, `limit`, `state` or `source`.
- `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/d437aaac22ac?raw)
