Referencia de la API · Media
Video generation
Start rendering a short clip — async, poll for the result.
Video is slow by nature (one to five minutes, longer for 20–30 s takes), so this endpoint is asynchronous: the call charges, starts the render and answers 202 immediately with a job id. Poll GET /v1/videos/generations/{id} every few seconds until status is succeeded or failed.
The money guarantee is unchanged: credits are charged at submit, and a render that fails — or never completes within its engine's window — refunds itself automatically. You only ever pay for a delivered clip.
Pick THE engine with model: Seedance, Veo, Sora, Kling, Hailuo, Wan, Runway and Grok Imagine, plus Motion One, our own uncensored engine. The third-party engines are moderated upstream by their providers; a refused prompt answers 400 content_blocked and bills nothing. Premium engines are plan-gated (403 plan_required before any charge) — GET /v1/engines lists what each engine takes and what your plan unlocks.
Engines are billed per second of clip, by resolution and — where it costs extra upstream — sound; a few also bill per picture sent. GET /v1/models quotes every rate; the response's usage.credits_spent is always the exact charge. Every knob is clamped to the engine BEFORE pricing: an unserved resolution renders (and bills) at the engine's default, a non-native aspect at its nearest native ratio.
Your cast and elements (elements) ride as numbered reference pictures on engines that read them (references in /v1/engines — up to six on Seedance): each character's look sheet holds its identity, @Name in the prompt binds to it. A start frame (references[0], on engines with image→video) takes over the clip instead — the cast then rides as text. With sound on, a cast member's voice rides along: Seedance 2.x and Hailuo 3 hear the voice sample itself (voice in /v1/engines), the others get a description of it. Write dialogue in quotes: @Mina says "we made it".
The finished clip is persisted to your library and served as a short-lived signed URL (or store: true for a permanent public URL, 2 credits / started 10MB on top). private: true returns the clip inline once and keeps nothing on our side.
Cuerpo de la solicitud
The shot: subject, action, dialogue in quotes. @Name mentions bind to your cast and elements.
Video engine id — see GET /v1/models (kind video) and GET /v1/engines. Default seedance-2-0-mini (every account; a 5-second 480p clip fits in the welcome credits). Retired ids (seedance-1-lite, kling-2-5-turbo, veo-3-fast, hailuo-02, eroq-h3-video…) render on the model that replaced them. An engine not live on this deployment answers 503 model_unavailable.
Clip length, 1–30. Your PLAN caps it (10s pay-as-you-go, 15/20/30s on Hobby/Creator/Studio+) and the engine's grid snaps it (e.g. Veo 4/6/8, Sora 4–20 by 4, Seedance 2.5 4–30) — billing always matches the clip that renders.
Legacy shorthand (3s/5s/8s/10s) — ignored when seconds is present.
480p, 720p, 768p, 1080p or 2K — each engine serves a subset (see /v1/engines resolutions); anything else renders at the engine's default. Priced per second per resolution.
16:9, 9:16, 1:1, 21:9, 4:3 or 3:4 — a native parameter on every engine that has it (/v1/engines aspects); a ratio the engine lacks renders at its nearest native one.
Render the soundtrack with the picture — dialogue, ambience, effects (engines flagged in /v1/engines audio). Default on where supported; some engines bill sound per second.
Picture URLs. On engines with image→video (/v1/engines startFrame) the first one IS the first frame; elsewhere they join the reference pictures.
END-frame picture — engines flagged in /v1/engines endFrame (Seedance, Veo, Kling, Hailuo) render the journey to it. Ignored elsewhere.
Cast and ingredients, in order — characters as char:<id>, elements by id, previous image renders as creation:<id>, storage uploads as upload:<id>. Their look sheets/photos ride as numbered reference pictures up to the engine's budget (the rest ride as text); characters must carry an accepted look sheet or the call answers 422 sheet_required (see /v1/sheets).
Reproducibility seed — engines flagged in /v1/engines seed; ignored elsewhere.
What to steer away from — native on engines flagged in /v1/engines negative (Veo, Kling); ignored elsewhere.
Camera move, 24 in the library: static, slow-pan, push-in, tracking, orbit, handheld, close-up, wide, pull-back, dolly-zoom, crane-up, crane-down, whip-pan, fpv, aerial-pullback, pov, snorricam, bullet-time, slider, roll, dutch-angle, overhead, crash-zoom, steadicam.
Film look: noir, documentary, music-video, commercial, arthouse, horror, romance.
Period look, 1920s → futuristic.
Pacing: calm, dreamy, dynamic, tense, chaotic.
Gear look: 35mm, imax, vhs, drone, gopro, cctv, smartphone.
Glass: clean-sharp, anamorphic, vintage-anamorphic, soft-portrait, macro, fisheye.
Depth of field: f1-4 (wide open), f4, f11 (deep focus).
Lighting: silhouette, practicals, window-light, overhead-fall, contre-jour, soft-cross, neon-glow.
Color: neon-noir, candy-pop, film-warm, nostalgic-blue, emerald, pastel-dawn, monochrome, sepia, industrial-fog, twilight, blood-gold, bleach-bypass.
Unlock a permanent public static URL for the clip. +2 credits per started 10MB. Default false.
Library folder the clip lands in — one of yours (GET /v1/folders). Omitted = the Library root; an unknown id answers 404 folder_not_found before anything is billed.
Do not retain on our side: the clip is returned once (inline) but NEVER stored — no CDN upload, no creation row, nothing kept in our database. (Prompt retention upstream follows the per-model privacy value — see /v1/engines.) Default false.
Advanced mode (eroq-motion-one only): the prompt rides RAW — no director rack folding, no directives, no enhancement. 400 advanced_requires_comfy on any other model.
curl https://eroq.ai/v1/videos/generations \
-H "Authorization: Bearer $EROQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0-mini",
"prompt": "@Mina crosses the neon rooftop and says \"we made it\"",
"seconds": 5,
"resolution": "480p",
"aspect": "9:16",
"shot": "push-in",
"lighting": "neon-glow",
"elements": [
"char:3f1c…"
]
}'Respuesta
{
"id": "b7e6c2d4-…",
"object": "video.generation",
"status": "processing",
"created": 1756118400,
"model": "seedance-2-0-mini",
"duration": "5s",
"poll": "/v1/videos/generations/b7e6c2d4-…",
"usage": { "credits_spent": 45, "credits_remaining": 887 }
}