Veedio

Idea to video

A bare idea, expanded into an angle and then a script.

Requiressource.text
  • voice: auto
  • captions: bold-center
  • music: uplifting
  • style: auto
  • ratio: 9:16

Build your request

Only the parameters that apply to idea-to-video are shown. Everything but the source has a default.

View as Markdown (for LLMs)

source what the video is made from

required

source.textstringRequired
A subject, not a brief. Two or three words is enough — the writer picks the angle before it writes anything.
source.urlstring
Only `article-to-video` reads a URL. Sent here, it is treated as the text of the script.

general what it is called

titlestringdefault Untitled video
Up to 120 characters. Shown in the app, and used as the caption when you publish without one.
formatstringdefault story
Which kind of video. Added September 2026; leave it out and the request is exactly what it was before. A `clip` takes prompt-to-video or idea-to-video (or just a photoUrl) and a clip length for targetSeconds — 5, 8, 10, 15 — is charged its exact price up front, is refunded if its take fails, and is on Starter and up. It answers 400 while Clip mode is switched off on the deployment.
  • storyA narrated script cut into scenes. Every workflow and field on this page.
  • clipOne short AI shot with its own sound. See sound and tier.
  • chatA fake text-message conversation, bubble by bubble on a phone (added October 2026). prompt-to-video or idea-to-video writes it; script-to-video with participants and messages takes it as given. See voiceMode. 9:16 only; priced up front; answers 400 while chat videos are switched off.
  • redditA Reddit post card, then the story read out with pop captions over a background loop (added October 2026). script-to-video reads source.text word for word; article-to-video reads a public Reddit post's own text; prompt-to-video writes one. See layout and backgroundId. 9:16 only; priced up front; answers 400 while Reddit videos are switched off.
soundstringdefault native
For a clip: where its sound comes from. Ignored for a story.
  • nativeThe video model records the sound, dialogue included. No music unless musicTrack is sent.
  • musicThe shot, silent, under musicTrack.
  • voiceoverA line written for the shot, narrated in voice, over musicTrack.
tierstringdefault standard
For a clip: which video model makes the shot, and so its price. Ignored for a story.
  • fastThe cheapest, up to 8 seconds (5 is shot as 6).
  • standardUp to 15 seconds.
  • cinematicUp to 15 seconds, the richest look. Pro and up.
photoAttestedbooleandefault false
For a clip from a photoUrl: true confirms the photo is of you, or of someone who gave you permission to use it. A photo clip without it answers 400 before anything is charged, and a photo that looks like it shows anyone under 18 is refused whatever it says. Ignored for a story.
voiceModestringdefault voices
For a chat: whether the messages are read out. Ignored for every other format.
  • voicesEach person's messages in their own voice (see participants). Base price plus narration.
  • silentNobody reads them; each message lands with a ding. The base price alone.
participantsarray
For a chat: exactly two people, `[{"name": "Mom", "side": "left", "voiceId": "bella"}, {"name": "Me", "side": "right", "voiceId": "josh"}]` — one each side (`right` is the phone's owner), different names, a catalog voice each. With messages, the thread is made as given; without, the writer names them and the voices are kept by side.
messagesarray
For a chat from script-to-video: 2 to 40 messages, `[{"from": "Mom", "text": "why is there a llama", "delaySec": 0.8}]` — each from one of the participants, at most 280 characters, with the pause before it (0-4 seconds). Priced by the length it will run.
layoutstringdefault full
For a Reddit story: where the background loop goes. Ignored for every other format.
  • fullThe loop fills the frame; the card and captions sit over it.
  • splitThe loop in the bottom half; the card and captions above it.
backgroundIdstring
For a Reddit story: which background loop, by id — one of the deployment's owned loops, or a generated one (aurora, sunset, ocean, ember) when its renderer draws them. Left out, one is picked for the video. An unknown id answers 400.

format the shape of the script

no preset by default

presetstring
A tool page's slug — `top-5-video-generator`, `storytime-video-generator`, `explainer-video-generator` and 187 others at https://www.veedio.co/tools. The page's format brief is put in front of your source before the script is written, so the video comes out in that shape. The brief itself is resolved here from the slug and is never accepted as text; an unknown slug answers 400. Each page's own brief is quoted verbatim at https://www.veedio.co/tools/{slug}/llms.txt.

voice who narrates it

auto by default

voicestringdefault auto
The narrator. Scene length is this voice's real duration, not an estimate. All five speak every one of the 29 languages — set `language` and the same voice reads it.
  • rachelWarm, conversational
  • adamDeep, documentary
  • bellaMature, reassuring, confident
  • joshCasual, young male
  • elliSoft, storytelling
  • liamEnergetic social media creator
  • jessicaPlayful, bright, warm
  • lauraEnthusiastic, quirky
  • charlieConfident, hyped
  • willRelaxed optimist
  • chrisCharming, down-to-earth
  • rogerLaid-back, casual
  • riverRelaxed, neutral, informative
  • matildaKnowledgeable, upbeat explainer
  • aliceClear, engaging educator
  • lilyVelvety, cinematic
  • georgeWarm, captivating storyteller
  • danielSteady broadcaster
  • brianDeep, resonant, comforting
  • ericSmooth, trustworthy

captions the burned-in captions

bold-center by default

captionStylestringdefault bold-center
Captions are word-timed from the voice model's own character alignment and burned into the MP4. `none` renders the video without them.
  • bold-centerBig white text in the lower third
  • popA few words at a time, the spoken word in yellow, lower third
  • highlightWord-by-word yellow highlight, lower third
  • bounceOne big word at a time, each popping in, lower third
  • karaokeThe line fills in as it's spoken, lower third
  • neonA few words at a time, the spoken word big and green, lower third
  • boxedClean sentence case on a dark box, lower third
  • subtleSmall caption near the bottom
  • noneNo captions

music the bed under the voice

uplifting by default

musicTrackstringdefault uplifting
A licensed track, ducked under the narration and loudness-normalised with it. `none` leaves the voice alone.
  • noneSilence
  • scoreOriginal music composed for this video
  • upliftingBright, motivational
  • lofiCalm, chill
  • cinematicTense, epic
  • trapPunchy, modern

visual style how every frame looks

auto by default

visualStylestringdefault auto
Appended to the image prompt for every scene, so the whole video holds one look. Applies to generated frames; see mediaType for stock footage.
  • cinematicCinematic
  • 3d3D render
  • animeAnime
  • documentaryDocumentary
  • retroRetro
  • toyToy bricks
  • voxelVoxel world
  • clayClaymation
  • comicComic
  • watercolorWatercolor

media what fills each scene

animated stills by default on paid plans, stills on Free

mediaTypestringdefault animated on paid plans, still on Free
What each scene is made of. The credit per scene follows the choice; the deposit and the settlement both use it. `animated` and `filmed` need a paid plan and answer 403 on Free. `stock` is offered only where the deployment has a Pexels key, and answers 400 otherwise.
  • animatedA frame is drawn for the scene, then the video model sets it in motion.
  • filmedThe video model shoots the scene from the script itself. Several times the credit of animated.
  • stillA drawn frame with a slow pan. The cheapest.
  • stockReal footage from Pexels, matched to a search the script writer wrote for the line.
  • avatarA presenter: a lifelike avatar speaks the line to camera, lip-synced to the narration. Pro plan and up. Send `avatarId` with it — one of the presenter ids from `GET /api/avatars`.
avatarIdstring
For `avatar`: which presenter, by the provider's avatar id. The create form lists them; through the API, `GET /api/avatars` does (a signed-in session, not a key).
soundEffectsbooleandefault false
A generated sound effect under each scene, cued by the script writer and mixed under the narration. 2 credits a scene. Mini and up; answers 403 on Free.
photoUrlstring
An http(s) link to a picture the video opens on: scene one uses it as its frame instead of a drawn one, set in motion by whatever the media type does. Any public JPEG, PNG or WebP; private addresses are refused.
qualitystringdefault standard
The model tier. `pro` draws frames with the sharper image model (3 more a scene) and, for `animated` and `filmed`, sets them moving with the premium video model (38 more). It does nothing for stock footage.
  • standardThe fast image model, and Wan 2.2 for motion.
  • proA sharper, slower image model, and a premium video model for motion — Seedance unless motionModel says otherwise.
motionModelstringdefault kling
Which premium video model animates the scenes at `pro` quality. Ignored at `standard`. Choosing one needs the Pro plan or above and answers 403 below it; leaving it out is every plan's right. The credit per scene follows the clip the model is asked for, priced at its longest: Seedance — the default — adds 5 for ten seconds, Kling 38 for ten, Veo 45 for eight. A shorter scene is charged pro rata.
  • seedanceSeedance 1.0 Pro Fast. Quick, cinematic motion, and the default.
  • klingKling 2.5 Turbo Pro. Smooth and faithful to the still.
  • veoVeo 3.1 Fast. The most lifelike, and the dearest.

language what it is said in

English by default

languagestringdefault en
The narration and caption language. The script is written in it and the voice speaks it; image prompts stay in English. Every language is on every plan.
  • enEnglish
  • esSpanish
  • pt-BRPortuguese (Brazil)
  • frFrench
  • deGerman
  • itItalian
  • nlDutch
  • plPolish
  • svSwedish
  • daDanish
  • fiFinnish
  • csCzech
  • skSlovak
  • roRomanian
  • elGreek
  • bgBulgarian
  • hrCroatian
  • ukUkrainian
  • ruRussian
  • trTurkish
  • arArabic
  • hiHindi
  • taTamil
  • idIndonesian
  • msMalay
  • filFilipino
  • jaJapanese
  • koKorean
  • zhChinese (Mandarin)

length how long it runs

a minute by default

targetSecondsintegerdefault 60
How long the script should run: 30, 60, 90 or 180. The scene range the writer is asked for follows it, and so does the deposit. Over 60 needs a paid plan and answers 403 on Free. A single video may cost at most 2190 credits, whatever the length.
  • 30One idea, fast.
  • 60The standard short.
  • 90Room for a list or a story with a turn.
  • 180An explainer or a mini documentary.

aspect ratio the output shape

9:16 by default

aspectRatiostringdefault 9:16
The render is 1080-class in every ratio, with no watermark on any plan.
  • 9:16Vertical — TikTok, Reels, Shorts
  • 1:1Square — Feed posts
  • 16:9Landscape — YouTube
Show the Idea to video example as

Credits

A generation costs 3 credits plus a charge per scene that follows what fills it: 2 for a still or stock footage, 13 for a scene the video model sets in motion. A 5-scene short is 13 credits with stills and 138 animated. Quote a job before you run it with POST /api/v1/credits/estimate — it takes the same body as the create call and charges nothing.

Estimate credits

POST https://www.veedio.co/api/v1/videos

The smallest request that works

Two fields. Everything else falls back to the defaults above.

JSON

{
  "workflow": "idea-to-video",
  "source": {
    "text": "morning routines"
  }
}

Good to know

  • Use prompt-to-video instead when you already know the angle: this workflow chooses one for you, and two calls with the same idea will not produce the same video.
  • This is the workflow behind a daily channel — the same subject each day, a different angle each time.
  • The idea is still capped at 5,000 characters, but anything past a sentence is better sent as a prompt.

Recipes

Payloads worth stealing

Each one is a complete body for this endpoint.

One a day, from a topic list

The CLI equivalent of this call, as a cron line: `veedio create --idea "$(shuf -n1 ~/topics.txt)" --wait --json`.

JSON

{
  "workflow": "idea-to-video",
  "source": {
    "text": "underrated productivity habits"
  },
  "musicTrack": "lofi"
}

For agents

The same page as markdown: https://www.veedio.co/docs/workflows/idea-to-video.md