Video Generations
Endpoints
Video Generations
Generate video clips. Asynchronous — returns 202 with a job_id; poll GET /v1/jobs/ for the result.
POST
Video Generations
Async endpoint. The request returns immediately with a
Same response shape. Poll every 2–5 seconds until
The
When
Replaying this exact request returns the same job — no new charge.
job_id; the actual generation runs in the background and is charged on success only. Billed per second of generated footage.
Request body
Fal-routed:
kling-2.5-pro, kling-3-pro, kling-3-pro-audio, seedance-2-pro, seedance-2-fast. MiniMax: hailuo-02-512p, hailuo-02-768p, hailuo-02-1080p. Google Vertex AI: veo-3-fast, veo-3 (720p silent / 1080p+audio). See Video Generation.Vertex AI video SKUs (
veo-3-*) also accept the same model id on POST /v1/genmedia/jobs — same billing, same response shape. /v1/videos/generations is the OpenAI-style alias.Text prompt describing the desired video. Maximum 4000 characters.
Clip length in seconds. Range 1–10. Each second is billed at the model’s per-second rate.
HTTPS URL of a starting frame. When present, Kyma routes the request to the model’s image-to-video variant — the image becomes the first frame and the prompt drives the motion. Optional; all five models accept it.
Client-supplied key (≤128 chars) to make the request safe to retry. Repeated POSTs with the same
(api_key, idempotency_key) pair return the same job — no duplicate charge, no duplicate generation.Pass-through model-specific parameters (e.g.
seed, aspect_ratio). Forwarded to the underlying provider unchanged.Response
202 Accepted for new jobs, 200 OK if the same idempotency_key is replayed.
Job ID. Use it to poll
GET /v1/jobs/{id}.One of:
pending, processing, succeeded, failed, refunded, expired.Hold amount placed at submit time (USD) —
per_second_usd × duration. Refunded if the job fails.Final billed amount once the job succeeds.
null until then.Poll for the result
status is succeeded, failed, refunded, or expired. Most clips complete within 1–3 minutes; the runner times out at 10 minutes.
output.url points to a Vercel Blob URL hosted by Kyma — the original upstream URL is rehosted so it remains stable after the upstream TTL expires.
Errors
| Status | error.code | When |
|---|---|---|
400 | invalid_model | Model is not a supported video model |
400 | invalid_prompt | Missing prompt or > 4000 chars |
400 | invalid_duration | duration is outside 1–10 |
401 | auth_error | Missing or invalid API key |
402 | insufficient_balance | Hold could not be placed |
413 | invalid_request | Request body > 25 MB |
429 | rate_limited | Tier limit exceeded |
500 | db_error / provider_error | Internal failure — hold is fully refunded |
status becomes failed or refunded, no charge is made and the held funds are returned to your balance via a hold_release ledger entry.