API 레퍼런스 · Media

Video generation

Start rendering a short clip — async, poll for the result.

POST/v1/videos/generationsper second by engine × resolution × sound — e.g. seedance-2-0-mini 9/s at 480p · veo-3-1 106/s with sound · eroq-motion-one 60 flat / clip

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.

요청 본문

promptstring필수

The shot: subject, action, dialogue in quotes. @Name mentions bind to your cast and elements.

modelstring

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.

secondsinteger

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.

durationstring

Legacy shorthand (3s/5s/8s/10s) — ignored when seconds is present.

resolutionstring

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.

aspectstring

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.

audioboolean

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.

referencesarray

Picture URLs. On engines with image→video (/v1/engines startFrame) the first one IS the first frame; elsewhere they join the reference pictures.

end_referencestring

END-frame picture — engines flagged in /v1/engines endFrame (Seedance, Veo, Kling, Hailuo) render the journey to it. Ignored elsewhere.

elementsarray

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).

seedinteger

Reproducibility seed — engines flagged in /v1/engines seed; ignored elsewhere.

negative_promptstring

What to steer away from — native on engines flagged in /v1/engines negative (Veo, Kling); ignored elsewhere.

shotstring

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_typestring

Film look: noir, documentary, music-video, commercial, arthouse, horror, romance.

erastring

Period look, 1920s → futuristic.

tempostring

Pacing: calm, dreamy, dynamic, tense, chaotic.

camera_typestring

Gear look: 35mm, imax, vhs, drone, gopro, cctv, smartphone.

lensstring

Glass: clean-sharp, anamorphic, vintage-anamorphic, soft-portrait, macro, fisheye.

aperturestring

Depth of field: f1-4 (wide open), f4, f11 (deep focus).

lightingstring

Lighting: silhouette, practicals, window-light, overhead-fall, contre-jour, soft-cross, neon-glow.

palettestring

Color: neon-noir, candy-pop, film-warm, nostalgic-blue, emerald, pastel-dawn, monochrome, sepia, industrial-fog, twilight, blood-gold, bleach-bypass.

storeboolean

Unlock a permanent public static URL for the clip. +2 credits per started 10MB. Default false.

folder_idstring

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.

privateboolean

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.

advancedboolean

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…"
  ]
}'
/v1/videos/generations
→ POST /v1/videos/generations
실행을 눌러 보세요 — 문서에 담긴 데이터로 실제 요청과 응답을 그대로 재현해요. 키도, 요청도, 요금도 없어요.

응답

200 · application/json
{
  "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 }
}