---
title: "Make a clip with any video model"
method: POST
path: "/v1/ai/models/video"
tags: ["Video"]
---

# Make a clip with any video model

`POST /v1/ai/models/video`

## Request

- Base URL: `https://apihub.co.il`
- URL: `https://apihub.co.il/v1/ai/models/video`
- Auth: HTTP bearer

One request shape for every video model — pick it by `model` (ids in `GET /v1/ai/models/catalog`). What you send decides the mode: a prompt alone (text to video), `image_url` (first frame), `image_url` + `last_frame_url`, `reference_images`, or `video_url` — each model takes the ones its catalog entry lists, and its own lengths and resolutions (a value it does not make is refused with the ones it does, before anything is charged).

The model runs at its maker's own API. A refusal at the start (busy, unavailable, the model not open to us) is answered 503 and nothing is charged; a backup route (Higgsfield, fal) runs the same model — never another one — only while the admin setting source_models_backups allows it (off by default). A model that puts a person's picture into motion (`consent_required` in the catalog: kling-motion-control, genjutsu-motion-transfer, genjutsu-object-swap) follows the face-swap rules: the picture is checked first — a public figure or a minor is refused — and a real person's likeness runs only with the customer's own consent declaration (`consent`, as for POST /v1/ai/face-swap); a drawing or a mascot needs none. Every clip is marked as AI-generated inside the file. The result is our copy, kept 24 hours.

Asynchronous: wait with `x-wait-ms` or poll `GET /v1/executions/{id}`. Price: per generated second by resolution (a few models: per clip) — see `POST /v1/ai/models/video/estimate`. A refused or failed request is not charged.

**Billing:** Per generated second, by model and resolution (sound included where the model makes it). A refused or failed request is not charged. · **Rate limit:** 20/min · **Asynchronous**

## Headers

- `Idempotency-Key` string
- `X-Tag` string
- `x-wait-ms` integer

## Request body

- object
  - `seed` integer
  - `audio` boolean: Sound made with the clip (ambience, effects, speech) — models with sound only; omitted = the model's default
  - `model` string, required: A video model id from GET /v1/ai/models/catalog — e.g. kling-3.0, wan-3.0, seedance-2.5, minimax-h3, ltx-2.5-fast
  - `route` 'auto' | 'direct' | 'higgsfield' | 'fal': Team accounts only (ignored for others): where the model runs for a comparison — the maker directly, or a backup route (Higgsfield, fal) even while the backups are off for customers
  - `style` string: Models with styles only (genjutsu-restyle): a style preset's id or name — the catalog lists them under `styles`
  - `prompt` string: What happens in the clip: subject, action, camera, light. Required except for models that only work on a video you send
  - `consent` object: The rights / consent declaration for this likeness (or send consent_id)
    - `basis` 'own' | 'consent' | 'licensed': own = it is you / your content · consent = the person gave explicit permission · licensed = you hold the rights to this content
    - `locale` 'he' | 'en' | 'ru' | 'uk': Language the statement was shown in
    - `subject` 'self' | 'other': self = your own face / voice / video · other = another person who agreed
    - `accepted` true, required: You accept the consent statement for this scope (GET the text in the docs or the dashboard)
    - `subject_name` string: Required for `other`: the person's full name
  - `duration` integer: Seconds. Each model has its own lengths (see the catalog); omitted = the model's default. Every generated second is billed
  - `image_url` string, uri: First frame (image-to-video). The clip keeps the picture's look
  - `video_url` string, uri: A video the model works on: the clip to edit, restyle or upscale, or the motion to copy — models that take a video only. Its length is the clip's (duration is not asked)
  - `consent_id` string: A consent you recorded before (the dashboard records one when you tick the box)
  - `resolution` '480p' | '720p' | '1080p' | '2k' | '4k': Omitted = the model's default (usually 720p). Higher costs more per second
  - `aspect_ratio` '9:16' | '16:9' | '1:1' | '4:3' | '3:4' | '21:9'
  - `last_frame_url` string, uri: Last frame (needs image_url): the clip moves from the first picture to this one — models with first+last frame only
  - `negative_prompt` string: What to keep out of the clip (models that take it)
  - `reference_images` string[]: People, products or places to put in the clip (not a start frame) — models with references only; each model takes its own maximum

## Response `200`

Completed (or 202 while processing)

- object
  - `id` string: Execution id — stable across internal retries; use it with GET /v1/executions/{id}
  - `status` 'pending' | 'processing' | 'completed' | 'partial' | 'failed' | 'cancelled' | 'timeout'
  - `operation` string
  - `tag` string, nullable: Your X-Tag, if sent
  - `created_at` string, date-time
  - `completed_at` string, date-time, nullable
  - `output` object: Operation result (see each operation). While a Studio render is processing: `stage` (queued · transcribing · downloading · preparing · cleaning_voice · mixing_audio · rendering · finishing), `phase` (the engine's: download · prepare · voice · audio · encode · qa · upload, or null), `progress` (a percent, 0–100) and `progress_fraction` (0–1), `eta_seconds` (seconds left, never below 0) and `estimate_seconds`
  - `error` string, nullable
  - `usage` object
    - `credits_charged` number, nullable
    - `credits_reserved` number
    - `estimated_credits` number
    - `cost_source` 'provider_reported' | 'calculated' | 'estimated' | 'null', nullable
    - `provider_usage` object, nullable: Normalised consumption, e.g. { VIDEO_SECOND: 22.4 }
  - `balance` object
    - `available` number
    - `reserved` number

## Other responses

- `202`: Processing — poll GET /v1/executions/{id}
- `400`: Invalid input
- `402`: Insufficient credits / project budget
- `404`: Resource not found (or not yours)
- `429`: Rate limited
- `503`: Service temporarily paused

---

[API](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai.md) · [All operations](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/llms.txt) · [OpenAPI document](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/revisions/a8caa42835ce?raw)
