Skip to content

Making videos

Every video starts with one call: POST /v1/render. This page explains the choices you make in that call. For every field and its limits, see the Create render reference.

Send one of these.

A brief is a plain-language description of the video, up to 4,000 characters. Reignitor plans the scenes, writes the narration and starts the render.

{
"brief": "A 30 second advert for Northwind Coffee's weekly subscription. Show the beans, the roasting, and a happy customer opening the box.",
"kind": "ad",
"duration_sec": 30,
"brand_name": "Northwind Coffee",
"category": "coffee"
}

Fields that shape the plan:

Field Default What it does
kind ad ad for an advert, training for a training video.
duration_sec 20 for ad, 60 for training Target total length, 5 to 120 seconds.
narrator true false makes a video with no voice-over.
brand_name none The brand name the planner should use.
category none The product category, for example coffee or saas.
title written for you A title for the video.

Planning spends credits. If planning fails you get 502 PLAN_FAILED and the planning credits are refunded. If you send plan_notes back to a person, they explain anything the planner flagged in its own plan.

A scene_plan is your own list of 1 to 12 scenes, rendered in order, as given. Use it when you already know what each scene should show and say.

{
"title": "Northwind launch",
"scene_plan": [
{
"type": "motion",
"role": "hook",
"prompt": "Fresh coffee, delivered weekly",
"script": "Fresh coffee, delivered every week.",
"motion": { "beat": "hook" }
},
{
"type": "t2v_fast",
"role": "body",
"prompt": "Slow close-up of coffee beans tumbling out of a kraft paper bag onto a wooden table, soft morning light",
"script": "Roasted in small batches, a few days before it reaches you."
},
{
"type": "motion",
"role": "cta",
"prompt": "Order at northwind.example",
"script": "Order today.",
"motion": { "beat": "cta" }
}
]
}

Scene types:

type What it renders
motion Crisp animated text, numbers, steps or a logo. Use it for anything that must be readable.
t2v_fast Generated footage of people, places or objects, from prompt.
i2v_fast Generated footage that starts from an image: the scene’s ref_image_url, or your product photo.
s2v A presenter talking to camera. Needs a face.
walk_talk A presenter walking and talking. Needs a face.
footage Your own clip from video_url, played as-is.

Each scene takes a prompt (what the camera sees, or the on-screen copy for motion) and an optional script (the narrator’s line). The full list of scene fields is in the reference.

An API render never picks up a brand on its own, even if your account has brand kits. You choose the brand in each request:

  • brand_logo_url: your logo, as a public https URL or a data URI.
  • brand_colors: optional, up to 12 hex colours, such as ["#3B2416", "#F4E9DC"].
{
"brief": "A 20 second advert for Northwind Coffee.",
"brand_logo_url": "https://example.com/northwind-logo.png",
"brand_colors": ["#3B2416", "#F4E9DC"]
}

Without a logo, the video renders with no logo and no end card. To say so explicitly, send brand_enabled: false.

product_image_url is a photo of your product (a public https URL or a data URI). It keeps the product the same in every scene, instead of letting the model invent one.

Some formats sell a product and need a photo. If you set such a route (for example product-ad, unboxing, ugc-ad or app-demo) and the plan shows the product, a render with no photo is refused with 400 PRODUCT_IMAGE_REQUIRED. To render without one on purpose, send product_enabled: false.

s2v and walk_talk scenes show a person talking. They need a face: avatar_preset_id for the whole video, or ref_image_url on the scene. A plan with a talking scene and no face is refused with 400 PRESENTER_REQUIRED. To let Reignitor use a stock presenter, send presenter_enabled: false.

When you set a route and send no brand, no product photo and no presenter, and the plan would generate all of its pictures, the render is refused with 422 NO_ANCHOR. Without an anchor the model invents the product and the people, and they will not match your brand.

Add one of the three, or send product_enabled: false or presenter_enabled: false to render anyway.

Field Values Default
aspect 9:16, 16:9, 1:1, 4:5, 4:3, 3:4 9:16
quality draft, standard, premium draft
language a language code, such as en, fr, de en
art_style cinematic, stop_motion, mascot, watercolour, whimsy_3d cinematic
music_style upbeat-tech, cinematic-epic, lo-fi-chill, corporate-pop set by the format
voice_preset_id a narrator voice ID a default voice
upscale true or false set by the format and quality

Higher quality and upscale cost more credits and take longer.

Set kind: "training" with a brief to plan a training video instead of an advert. The planner writes steps and a recap, and uses motion scenes for on-screen instructions.

{
"brief": "How to reset a password in the Acme admin panel. Three steps, then a recap.",
"kind": "training",
"duration_sec": 60,
"aspect": "16:9",
"brand_logo_url": "https://example.com/acme-logo.png"
}

Send an Idempotency-Key header with a unique value, such as a UUID, on every render. If your request times out and you retry with the same key, Reignitor refuses the repeat and does not render or charge a second time.

  • The repeat is refused, so it does not return the original job_id. Save the job_id from the first response whenever you get one.
  • With a scene_plan, the repeat returns 409 DUPLICATE_REQUEST.
  • With a brief, the repeat can return 402 with the message This request was already submitted. Treat it the same as a 409.
  • Use a new key for each new video. Reusing a key for a different video refuses that video.

Without the header, every call is a new render and a new charge.

The render response has a watermarked field. Videos made on the Agency plan are not watermarked.

When the job succeeds, video_url on GET /v1/job/{id} is a direct link to the MP4. Download it and keep your own copy.