---
title: "Generate an AI Video"
method: POST
path: "/ai/video"
tags: ["AI Generation"]
---

# Generate an AI Video

`POST /ai/video`

Generate a short clip from a prompt, animate an image, or make a photo speak. Billed in AI credits per second; returns a job to poll.

## Request body

- object
  - `prompt` string — What to generate. Optional when you only animate an image or make it speak.
  - `imageRef` string — Reference image: the first frame to animate, or the portrait for speech. An https URL, a data URI, a brand asset reference like `brand:image:123`, or a `gen://` reference.
  - `lastImageRef` string — Reference image for the last frame of a transition.
  - `references` unknown[] — Extra style or product images, same formats as `imageRef`.
    - unknown
  - `script` string — Text the person should say. Runs through text to speech first (1 AI credit per 10 seconds).
  - `voice` string — Voice id for the script. See the voice catalog on the audio endpoints.
  - `audio` string — Your own audio track instead of a script.
  - `consent` boolean — Required for speech. Confirms you may use this person's likeness.
  - `duration` number — Any whole number of seconds from 3 to 15, capped by your plan. Default 5. Speech follows the audio length.
  - `preset` string — Role preset id from [List AI Presets](/docs/api-reference/ai-presets-list). Default `cinematic-scene`.
  - `look` string — Look preset id from [List AI Presets](/docs/api-reference/ai-presets-list).
  - `aspect` string — `1:1`, `16:9`, `9:16`, `4:3` or `3:4`.
  - `fullHd` boolean — 1080p output at 2x credits.
  - `fresh` boolean — Skip the cache and generate a new take.
  - `sync` boolean — Wait for the result instead of returning a job (up to 120 seconds).
  - `webhook_url` string — Called with the job when it finishes.

## Response `200`

Successful response

- object

## Other responses

- `400` — The request was malformed or a parameter was invalid.
- `401` — Authentication is required and was not supplied.
- `402` — The workspace has no credits left. Either the render needs credits it does not have, or the key was paused after repeatedly calling with none (`code: api_key_paused`). That one resumes by itself on the first request we can accept.
- `403` — The API key is missing, invalid, or not permitted to perform this action.
- `404` — The requested route or resource does not exist.
- `429` — The workspace rate limit was exceeded. Retry after the interval given by the Retry-After header.
- `500` — An unexpected error occurred on our side.

## Changes

- **2026-09-09** `5673eb45cfa7` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/orshot/apis/orshot-api/changes/ai/video/post.md)

---

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