v1 API is Deprecated
The v1 API (/api/v1/*) has been deprecated and retired. All new integrations and existing clients must use the /api/v2/* endpoints (e.g. POST /api/v2/generate) or /api/v3/*.
The V3 Cinematic Video API enables long-form multi-scene video generation (up to 300s) with AI director camera controls (dolly_in, orbit, crane_up), 2.39:1 anamorphic framing, character persistence, and real-time SSE progress streaming.
For AI agents, LLMs, and automated tooling. These files are always available at the root of the site.
Full machine-parseable spec with schemas, examples, and error definitions for the full API surface.
Open SpecDiscovery file for AI agents. Like robots.txt but for LLMs β lists capabilities and links.
Open IndexComplete plain-text API reference. One file an agent can ingest to fully integrate.
Pick your language tab to view integration samples. Every example returns immediately with a job_id β use it to stream real-time SSE progress or poll for completion.v3: 5-minute continuous cinematic video Β· 2.39:1 / 4:3 Β· ARRI & Panavision camera physics Β· SSE streaming
Create an API key from your dashboard to get started.
Keys stay server-side only.
Set your API key as an environment variable in your runtime.
export PEAKMV_API_KEY="peak_..."Direct a long-form cinematic video (up to 300s) with camera physics and aspect ratio control. Monitor via real-time SSE stream or polling.
// Run on your server; keep the API key private.const headers = { Authorization: 'Bearer ' + process.env.PEAKMV_API_KEY, 'Content-Type': 'application/json', 'Idempotency-Key': crypto.randomUUID()};const res = await fetch('https://peakmv.com/api/v3/generate', { method: 'POST', headers, body: JSON.stringify({ prompt: 'Maya discovers a missing letter, follows its clues, and reunites two sisters.', duration_seconds: 60, aspect_ratio: '16:9', video_quality: '1080p', characters: [{ name: 'Maya', face_image_url: 'https://example.com/maya.jpg', description: 'Red coat, short dark hair' }] // Add audio: { url: 'https://example.com/song.mp3', start_sec: 0 } // to replace generated scene sound with your soundtrack. })});if (!res.ok) throw new Error(await res.text());const job = await res.json();console.log('Quoted credits:', job.cost);while (true) { const response = await fetch(job.status_url, { headers }); if (!response.ok) throw new Error(await response.text()); const status = await response.json(); if (status.status === 'failed') throw new Error(status.error); if (status.status === 'ready') { console.log(status.video_url); break; } await new Promise(resolve => setTimeout(resolve, 3000));}Include your API key in the Authorization header as a Bearer token.
Authorization: Bearer peak_...promptduration_seconds60.aspect_ratio2.39:1 (Anamorphic Cinema), 16:9 (Widescreen), 4:3 (Academy Classic), 9:16 (Vertical), 1:1 (Square). Default: 2.39:1.camera_rigcamera_body: arri_alexa_65, panavision_millennium_xl2, red_v_raptor, imax_70mm, sony_venice_2, bolex_16mmlens_system: panavision_c_series, cooke_s4, arri_master_primecamera_motion: dolly_in, orbit, crane_up, tracking_shot, staticshutter_angle: 180deg_standard, 90deg_crispfilm_stock: kodak_vision3_500t, fujifilm_eterna, kodak_tri_x_bwcharactersname, description, optional face_image_url.video_quality1080p (Full HD) or 4k (Master). Default: 1080p.audio_urljob_idstatus_urlstream_urlcostvideo_url// Poll with the job_id from POST /generate responseconst jobId = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890'; // from job_idconst res = await fetch(`https://peakmv.com/api/v3/jobs/${jobId}`, {headers: { Authorization: `Bearer ${process.env.PEAKMV_API_KEY}` }});const job = await res.json();// job.video_url -> https://auth.peakmv.com/.../vid.mp4// job.status -> 'ready' | 'processing' | 'queued'
Video generation is async (2-20 minutes). After submitting, poll the status_url every 5-10 seconds.
/v3/jobs/{id}Primary polling endpoint. Returns status, video_url (when ready), and error (when failed).
// Response when ready
{
"id": "a1b2c3d4-...",
"status": "ready",
"video_url": "https://auth.peakmv.com/.../video.mp4",
"created_at": "2026-02-21T12:00:00Z",
"duration_seconds": 185,
"clips_generated": 6
}/v3/projects/{id}Same as /jobs but also includes a shareable project_page_url.
// Response when ready
{
"id": "a1b2c3d4-...",
"status": "ready",
"video_url": "https://auth.peakmv.com/.../video.mp4",
"duration_seconds": 185,
"project_page_url": "https://peakmv.com/project/a1b2...",
"created_at": "2026-02-21T12:00:00Z"
}Credits are deducted upon job submission. The V3 Cinematic Video API supports continuous multi-scene generation up to 300 seconds (5 minutes). View full pricing & margins β
V3 image-first pricing: Nano Banana 2 keyframes and a shared continuity reference feed LTX 2.3 Fast. Native scene audio or uploaded music is included. Quotes account for every image and each clipβs six-second minimum. Native 4K uses its actual provider rate. V2 has a separate calculator.
429 response:/v1/*, /v2/*, and /v3/* endpoints.400{"error": "prompt is required"}401{"error": "Invalid or inactive API Key"}402{"error": "Insufficient credits",
"required": 14, "available": 5.5}404{"error": "Project not found"}429retry_after_seconds, then retry.{"error": "Rate limit exceeded",
"retry_after_seconds": 42}500{"error": "Server Error"}429 (after waiting) and 500 (with backoff). Never retry 400/401/402 β fix the request instead. Never retry a successful POST /generate β you will be charged again.