Video Generation

Generate AI videos from text prompts using Google Veo 3.1 — the latest video generation model from Google DeepMind.

⏱️ Processing Time
Videos take 45 seconds to 5 minutes to generate depending on the model. Use wait: true for sync mode, or poll the job status endpoint.
POST/v1/videos/generations

Request Body

ParameterTypeRequiredDescription
modelstringNoModel to use (default: veo-3.1-fast-low)
promptstringYesText description of the video
orientationstringNoVideo orientation (landscape, portrait)
waitbooleanNoWait for completion (true) or return job ID (false)

Available Video Models

Model IDProviderSpeedQuality
veo-3.1Google DeepMind~2-5 minHighest
veo-3.1-fastGoogle DeepMind~1-2 minHigh
veo-3.1-fast-lowGoogle DeepMind~45s ⚡Good (recommended)
grok-imagine-1.0-videoxAI~1-2 minGood

Sync Mode (wait for result)

cURL
curl https://api.zora.io.vn/v1/videos/generations \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "veo-3.1-fast-low", "prompt": "Ocean waves crashing on a beach at sunset, cinematic 4K", "orientation": "landscape", "wait": true }'

Response (200)

JSON
{ "id": "vid_lxyz789", "status": "completed", "video_url": "https://storage.googleapis.com/...", "elapsed": 45, "model": "veo-3.1-fast-low" }

Async Mode (poll for result)

cURL — Start
curl https://api.zora.io.vn/v1/videos/generations \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "veo-3.1-fast-low", "prompt": "A golden retriever puppy running through a garden" }'

Response (202)

JSON
{ "id": "vid_lxyz789", "status": "processing", "model": "veo-3.1-fast-low" }
GET/v1/videos/generations/:id
Poll until status is "completed" or "failed"

Poll Response

JSON
// Processing { "id": "vid_lxyz789", "status": "processing", "elapsed": 30 } // Completed { "id": "vid_lxyz789", "status": "completed", "video_url": "https://storage.googleapis.com/...", "elapsed": 45 }

Python Example

Python
import requests, time API = "https://api.zora.io.vn/v1" HEADERS = { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" } # Start video generation resp = requests.post(f"{API}/videos/generations", headers=HEADERS, json={ "model": "veo-3.1-fast-low", "prompt": "A cat sleeping on a cozy blanket, 4K cinematic" }) job = resp.json() job_id = job["id"] print(f"Job started: {job_id}") # Poll for completion while True: status = requests.get(f"{API}/videos/generations/{job_id}", headers=HEADERS).json() if status["status"] == "completed": print(f"Video URL: {status['video_url']}") break elif status["status"] == "failed": print(f"Failed: {status.get('error')}") break time.sleep(10) print(f" Waiting... {status.get('elapsed', '?')}s")