---
title: "Create a video job"
method: POST
path: "/videos"
---

# Create a video job

`POST /videos`

## Request

- Base URL: `https://www.ninjachat.ai/api/v1`
- URL: `https://www.ninjachat.ai/api/v1/videos`
- Auth: HTTP bearer

Submit an async video job. Poll GET /videos/{id}, or register a signed webhook (POST /webhooks or https://www.ninjachat.ai/developers/webhooks) for video.completed / video.failed.

## Headers

- `Idempotency-Key` string

## Request body

- VideoCreateRequest
  - `prompt` string, required
  - `model` 'nova-reel' | 'runway-gen4.5' | 'flux-3-video' | 'minimax-h3' | 'hailuo-2.3' | 'hailuo-2.3-fast' | 'happyhorse-1.1' | 'ray-3.2' | 'seedance-2.5' | 'seedance-2' | 'seedance-2.0-fast' | 'seedance-2-mini' | 'seedance-2.0' | 'seedance-1.5-pro' | 'seedance-lite' | 'seedance-pro' | 'grok-imagine-video' | 'grok-imagine-video-1.5' | 'kling-2.5-turbo' | 'kling-3' | 'kling-3-pro' | 'kling-3-turbo' | 'kling-3-omni' | 'wan-2.7' | 'wan-2.7-i2v' | 'wan-2.7-r2v' | 'wan-2.6' | 'wan-2.6-i2v' | 'wan-2.2-t2v-a14b' | 'fast-wan-2.2' | 'fast-wan-qad' | 'pruna-p-video' | 'pixverse-6' | 'pixverse-6-i2v' | 'cosmos-3-nano' | 'cosmos-3-super' | 'vidu-q3' | 'veo-3.1' | 'veo-3.1-fast' | 'gemini-omni-flash' | 'kling-video' | 'google-veo-2' | 'google-veo-3-fast' | 'google-veo-3.1' | 'google-veo-3.1-fast' | 'google-veo' | 'seedance-2-video' | 'seedance-video'
  - `duration` integer
  - `aspect_ratio` '16:9' | '9:16' | '1:1'
  - `image_url` string, uri
  - `end_image_url` string, uri
  - `reference_images` string[]
  - `reference_video` string, uri
  - `reference_audio` string, uri
  - `generate_audio` boolean
  - `negative_prompt` string
  - `watermark` boolean
  - `video_id` string: Revise a finished clip in place instead of starting from scratch: the id returned by POST /videos. The prompt then describes the change (task edit, the default) or what happens next (task extend). Only gemini-omni-flash clips can be revised, and model must match the clip; leave model out to inherit it.
  - `task` 'edit' | 'extend': With video_id: edit keeps the clip's length and changes its content; extend appends duration seconds (3–10) of new footage, up to 40 seconds total. Defaults to edit.

## Response `200`

Queued video job.

- VideoCreateResponse
  - `cost` object
    - `this_request` string, required
    - `per_image` string
    - `per_video` string
    - `images` integer
  - `balance` string
  - `metadata` object
    - `latency_ms` number, required
    - `group` string
    - `search_depth` string
    - `results_count` integer
  - `message` string
  - `id` string, required
  - `object` 'video', required
  - `status` 'queued', required
  - `model` string, required
  - `cost_usd` number, required
  - `request_id` string, required
  - `trace_request_id` string: Original request receipt ID, also returned in X-Request-ID. Use id or request_id to poll the video job.

## Other responses

- `400`: Invalid or unsupported request parameter.
- `401`: Missing or invalid API key.
- `402`: Insufficient balance or project spend limit reached.
- `429`: Rate limit exceeded.
- `500`: Gateway error.

---

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