NEWVeo 3.1 & Kling 2.5 now live on the API
NEWVeo 3.1 & Kling 2.5 now live on the API
Unified media API

Create a task

POST/v1/videos

Create an async task here: submit, get a task_id, then poll for the result.

Request body (VideoRequest)

FieldTypeRequiredDescription
modelstringRequiredPublic model name — see Models
promptstringRequiredText prompt
secondsstring | numberOptionalVideo duration, accepts "8" or 8 (default 4, range 1–60). Ignored by image models
sizestringOptionalPixel size WxH, e.g. 1024x1024 / 1280x720. Aspect ratio is inferred from size — no separate aspect_ratio needed; supported sizes on each model page
tierstringOptionalResolution/quality tier: images 1k/2k/4k, veo video 720p/1080p/4k. Defaults per model
reference_imagesstring[]OptionalReference images (https URL or base64 data URL). Counts per model page
metadataobjectOptionalCustom/extension parameter container: top-level fields stay stable, model-specific params go here. Used by omni: metadata.first_last_frame (bool, first/last frame), metadata.source_video_url (string, video-edit source). Pass via extra_body with the OpenAI SDK
Request example
json
{
  "model": "gpt-image-2",
  "prompt": "a neon fox, cinematic",
  "seconds": "8",
  "size": "1024x1024",
  "tier": "2k",
  "reference_images": ["https://.../ref.png"]
}

Response (normalized task object)

FieldTypeRequiredDescription
idstringAlwaysPublic task ID task_xxxx, used to query/download
task_idstringAlwaysSame as id, legacy alias (deprecated)
objectstringAlwaysAlways "video" (even for image tasks)
modelstringAlwaysPublic model name
statusstringAlwaysqueued / in_progress / completed / failed
progressnumberAlwaysProgress 0–100
created_atnumberAlwaysCreated time (Unix seconds)
completed_atnumberOptionalCompleted time, returned only when present
expires_atnumberOptionalExpiry time, returned only when present
output_urlstringOptionalUnified download URL, only after completion: {base}/v1/videos/{task_id}/content
errorobjectOptional{message, code} on failure, omitted otherwise
Response example
json
{
  "id": "task_xxxxxxxx",
  "task_id": "task_xxxxxxxx",
  "object": "video",
  "model": "gpt-image-2",
  "status": "queued",
  "progress": 0,
  "created_at": 1700000000,
  "seconds": "8",
  "size": "1024x1024"
}
Create a task · API Docs — Aurora AI