Video generation API
Describe a clip in plain words, choose a model, a duration and a frame shape, and get back an MP4 file with a soundtrack. OmevAI plans the shots and camera movement from your description; you choose only what is listed below. The price is known before you start, and you pay only for a clip that is delivered.
The Video API is switched on per key. Write to support@omev.be to enable it. The same models are available in the web cabinet, see Video generation in the cabinet.
Video is asynchronous: create a job, check its status, download the finished file. All calls
use the usual host https://llmapi.omev.be and your OmevAI API key.
Models and prices
model | Best for | Duration | resolution | You can send | Price per second |
|---|---|---|---|---|---|
omev-video-lite | simple scenes, low price | 4–12 s | 768p | text; text and a first frame | $0.039 |
omev-video | people, complex motion, camera movement, several actions | 4–15 s | 720p (default), 1080p | text; text and a first frame | 720p $0.069 · 1080p $0.135 |
omev-video-premium | premium quality, clips up to 30 s | 4–30 s | 720p (default), 1080p | text; text and a first frame; text and up to 5 reference images | text or first frame: 720p $0.075 · 1080p $0.15; with reference images: 720p $0.11 · 1080p $0.22 |
Frame shapes (aspect_ratio): omev-video-lite takes 16:9, 21:9, 4:3, 1:1, 3:4,
9:16; omev-video and omev-video-premium take 16:9, 4:3, 1:1, 3:4, 9:16.
The price of a clip is the price per second multiplied by the duration you order. An
8-second omev-video clip in 720p costs 8 × $0.069 = $0.552, in 1080p $1.08. An 8-second
omev-video-premium clip in 720p costs $0.60 from text or a first frame and $0.88 with
reference images.
1. Create a job
curl -sS https://llmapi.omev.be/v1/videos/generations \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omev-video",
"duration": 8,
"resolution": "720p",
"aspect_ratio": "9:16",
"prompt": "A ceramic mug on a wooden table in morning light, the camera slowly circles the mug",
"idempotency_key": "order-2026-10-12-0001"
}'
| Field | Required | Values |
|---|---|---|
model | yes | omev-video-lite, omev-video or omev-video-premium |
prompt | yes | the description of the clip, up to 4,000 characters |
duration | yes | whole seconds within the model's range |
aspect_ratio | no | a frame shape the model takes, default 16:9 |
resolution | no | 720p or 1080p for omev-video and omev-video-premium; omev-video-lite is always 768p |
image | no | a public https link to the first frame (all three models); it must open without a login |
references | no | up to 5 public https links to reference images: a character, a product, a logo or a style; omev-video-premium only, and not together with image |
idempotency_key | recommended | your own order number, up to 100 characters; repeating it returns the same job and does not charge again |
seed, fps, steps, cfg and provider are not accepted (400): OmevAI chooses them.
The answer is 202 with the job:
{
"id": "vid_0f3c2a9e8b7d4c6a1e5f2b3c",
"object": "video.generation",
"model": "omev-video",
"status": "queued",
"duration": 8,
"aspect_ratio": "9:16",
"resolution": "720p",
"price_usd": 0.552,
"access_token": "…"
}
Before the job starts, the price is reserved on the key's balance. When the clip is
delivered it is charged; when the generation fails the reservation is released. Keep id
and access_token: the token is needed to read the status and download the file. If the
answer was lost, send the same request with the same idempotency_key to get the same id
and token.
2. Check the status
curl -sS https://llmapi.omev.be/v1/videos/generations/$ID \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "X-Omev-Video-Token: $TOKEN"
Without the token, or with another job's token, the answer is 404. Poll every 10–15 seconds.
status | Meaning |
|---|---|
queued, preprocessing | the job is accepted and the description is being turned into a shot plan |
generating | the clip is being made; phase shows provider_queued (waiting for a slot), generating or saving |
processing | a rare extra check on our side; keep polling |
succeeded | done: video.url is the download link |
failed | not done: error.code and error.message say why; the reservation is released |
3. Download the clip
curl -sS -L -o clip.mp4 https://llmapi.omev.be/v1/videos/generations/$ID/content \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "X-Omev-Video-Token: $TOKEN"
The answer is the MP4 file with a soundtrack. Download it as soon as the job succeeds and keep it in your own storage.
Full cycle in Python
import os, time, requests
BASE = "https://llmapi.omev.be"
auth = {"Authorization": f"Bearer {os.environ['OMEV_API_KEY']}"}
job = requests.post(f"{BASE}/v1/videos/generations", headers=auth, timeout=60, json={
"model": "omev-video-lite", "duration": 6, "aspect_ratio": "1:1",
"prompt": "A cup of hot coffee, steam rising, soft light",
"idempotency_key": "order-0002"}).json()
read = {**auth, "X-Omev-Video-Token": job["access_token"]}
while True:
status = requests.get(f"{BASE}/v1/videos/generations/{job['id']}", headers=read, timeout=60).json()
if status["status"] in ("succeeded", "failed"):
break
time.sleep(15)
if status["status"] == "succeeded":
clip = requests.get(f"{BASE}{status['video']['url']}", headers=read, timeout=600)
open("clip.mp4", "wb").write(clip.content)
else:
print(status["error"])
Free lookups
GET /v1/videos/models: the models with their durations, resolutions, frame shapes and prices per second.GET /v1/videos/price?model=omev-video&duration=8&resolution=1080p: the price of one clip, for example{"price_usd": 1.08, "per_second_usd": 0.135, …}. Foromev-video-premiumwith reference images add&references=1.
Time and limits
- A 4-second clip usually takes about 2 minutes with
omev-video-liteandomev-video-premiumand 10–20 seconds withomev-video. Longer clips take longer. - An account can have up to 2 unfinished video jobs at a time; a third one answers
429. - Regenerating and rating a clip are available in the web cabinet. Through the API, create a new job for a new attempt.
- Requests that break the content policy are refused before any charge.
Errors
| Code | Meaning | What to do |
|---|---|---|
400 | a duration outside the model's range, a frame shape or resolution the model does not take, a first frame together with reference images, reference images for a model other than omev-video-premium, or a parameter that is not accepted | correct the request using error.message |
401 | missing or invalid API key | check the key |
402 | the key's balance is lower than the price of the clip | top up the balance |
403 | video is not enabled for the key | write to support |
404 | unknown job, or a missing or wrong X-Omev-Video-Token | check the id and the token |
409 | the idempotency_key was already used with other parameters, or the combination is temporarily unavailable | use a new order number; for unavailability, retry later |
429 | 2 video jobs are already running | wait until one of them ends |
5xx | temporary error | retry with the same idempotency_key after 10–30 seconds |
See Errors and retries for the common format.