Veedio

Article to video

A link, read and turned into a short: an article, a video, a post, a thread or a PDF.

Requiressource.url
  • voice: rachel
  • captions: bold-center
  • music: uplifting
  • style: cinematic
  • ratio: 9:16

Build your request

Only the parameters that apply to article-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.urlstringRequired
An http(s) URL, up to 2,000 characters. It is fetched and the script is held to what it says: an article or product page (title, outline and text), a YouTube video (its captions, or its description), a post on X, a Reddit thread (the post and top comments), a LinkedIn post, or a PDF (its text). In the app the read happens before the job is queued, so an unreadable link answers 400 with the reason; through the API it happens in the worker, so the generation fails with that reason instead.
source.textstring
Ignored by this workflow unless `source.url` is missing, in which case the text is read as the URL.

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.

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 50 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

rachel by default

voicestringdefault rachel
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
  • bellaBright, energetic
  • joshCasual, young male
  • elliSoft, storytelling

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
  • highlightWord-by-word yellow highlight, 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
  • upliftingBright, motivational
  • lofiCalm, chill
  • cinematicTense, epic
  • trapPunchy, modern

visual style how every frame looks

cinematic by default

visualStylestringdefault cinematic
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. Starter 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 1600 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 Article 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 68 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": "article-to-video",
  "source": {
    "url": "https://en.wikipedia.org/wiki/Honey"
  }
}

Good to know

  • The page is really fetched. readSource() picks a reader from the link — article, YouTube transcript, X, Reddit, TikTok, Instagram, LinkedIn or PDF — and the script writer is told to use only what that page says.
  • A page behind a login, a paywall or a hard bot wall cannot be read. For those, paste the text into script-to-video instead: it costs the same and says what you meant.
  • http(s) only. A URL sent in source.text is still read as the source for this workflow.

Recipes

Payloads worth stealing

Each one is a complete body for this endpoint.

Newsroom cut

Documentary look, deeper narrator, cinematic bed — closer to a news short than a TikTok.

JSON

{
  "workflow": "article-to-video",
  "source": {
    "url": "https://example.com/blog/quarterly-update"
  },
  "visualStyle": "documentary",
  "voice": "adam",
  "musicTrack": "cinematic"
}