Create render
const url = 'https://reignitor.com/v1/render';const options = { method: 'POST', headers: { 'Idempotency-Key': '5f0c1c2e-6a8b-4d3e-b1f2-0a9c8d7e6f54', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"brief":"A 20 second advert for Northwind Coffee, a small-batch roaster. Warm, early-morning mood. End on the line \"Roasted this week, at your door by Friday.\"","kind":"ad","duration_sec":20,"aspect":"9:16","quality":"standard","brand_logo_url":"https://example.com/northwind-logo.png","brand_colors":["#3B2416","#F4E9DC"]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://reignitor.com/v1/render \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Idempotency-Key: 5f0c1c2e-6a8b-4d3e-b1f2-0a9c8d7e6f54' \ --data '{ "brief": "A 20 second advert for Northwind Coffee, a small-batch roaster. Warm, early-morning mood. End on the line \"Roasted this week, at your door by Friday.\"", "kind": "ad", "duration_sec": 20, "aspect": "9:16", "quality": "standard", "brand_logo_url": "https://example.com/northwind-logo.png", "brand_colors": [ "#3B2416", "#F4E9DC" ] }'Starts a video render and returns a job_id straight away (HTTP 202). The video
renders in the background; poll Get job
or subscribe to the video.completed webhook.
Send one of:
brief: a plain-language description. Reignitor plans the scenes for you, then renders them. Planning spends credits; if planning fails you are refunded.scene_plan: your own list of scenes, rendered as given.
Brand. An API render never picks up a brand on its own. To brand the video,
send brand_logo_url (and optionally brand_colors). Without it, the video has no
logo and no end card.
Idempotency. Send an Idempotency-Key header with a unique value per render.
If the same key is sent again, the repeat is refused and nothing is rendered or
charged twice. Keep the job_id from the first response.
The render spends your account’s credits. credits_used in the response is what
this render cost.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Header Parameters
Section titled “Header Parameters”A unique value you choose for this render, such as a UUID. A repeat of the same key is refused and not charged again. Only the first 80 characters are used.
Example
5f0c1c2e-6a8b-4d3e-b1f2-0a9c8d7e6f54Request Bodyrequired
Section titled “Request Bodyrequired”Send brief or scene_plan. At least one is required.
object
What the video is about, in plain language. Reignitor writes the scene plan.
Your own scenes, rendered as given. When set, brief planning is skipped.
One scene of a scene_plan. The fields below are the ones Reignitor reads.
Scenes are rendered in order.
object
motion: crisp animated text, numbers, steps or a logo. Best for anything readable.t2v_fast: generated footage of people, places or objects, fromprompt.i2v_fast: generated footage that starts from an image (ref_image_url, or your product photo).s2v: a presenter talking to camera. Needs a face (seeavatar_preset_idorref_image_url).walk_talk: a presenter walking and talking. Needs a face.footage: your own clip fromvideo_url, played as-is.
What the camera sees. For a motion scene, the on-screen copy.
The narrator’s line for this scene. Omit for no narration.
The scene’s job in the story, such as hook, body, proof, cta, intro, step or recap.
Target length of the scene in seconds.
For motion scenes only.
object
The animation layout for this scene.
Art direction for this scene only. Overrides the render’s art_style.
An image to start from, or the face for a presenter scene. A public http(s) URL or a data URI.
For footage scenes only. A public http(s) URL of your clip.
A short sound-effect cue for this scene.
With brief, whether to plan an advert or a training video.
A title for the video. With brief, one is written for you if omitted.
With brief, the target total length in seconds. Defaults to 20 for ad and 60 for training.
With brief, whether the video has a narrator.
With brief, the brand name for the planner to use.
With brief, the product category, for example coffee or saas.
Language for narration and captions, as a language code.
Render quality. Higher quality costs more credits and takes longer.
An advert format, as in the app. One of commercial, product-film,
product-ad, brand-advert, film-advert, brand-mascot-ad, story,
character-story, place-film, explainer, training, motion-film,
app-demo, website, narrator, ugc-ad, testimonial, walk-talk,
unboxing, short, youtube-short, stylized-world, frozen-frame.
Product formats need product_image_url or product_enabled: false.
The production style. Usually leave unset and let route decide.
One of cinematic, stop_motion, mascot, watercolour, whimsy_3d. Unknown values fall back to cinematic.
Upscale the finished video. Defaults depend on the format and quality.
One of your brand kits. Its colours and fonts enrich the brand. For now, send it
together with brand_logo_url: a brand_kit_id on its own is refused with
422 BRAND_REQUIRED.
Your logo, as a public http(s) URL or a data URI. Brands the video without a saved kit.
Brand colours as hex strings, used with brand_logo_url.
Set false to render with no brand at all.
Your product photo, as a public http(s) URL or a data URI. Keeps the product the same in every scene.
Set false to render a product format with no product photo, on purpose.
A narrator voice.
A presenter face for s2v and walk_talk scenes.
Set false to allow presenter scenes with no face chosen. A stock presenter is used.
Send brief or scene_plan. At least one is required.
object
What the video is about, in plain language. Reignitor writes the scene plan.
Your own scenes, rendered as given. When set, brief planning is skipped.
One scene of a scene_plan. The fields below are the ones Reignitor reads.
Scenes are rendered in order.
object
motion: crisp animated text, numbers, steps or a logo. Best for anything readable.t2v_fast: generated footage of people, places or objects, fromprompt.i2v_fast: generated footage that starts from an image (ref_image_url, or your product photo).s2v: a presenter talking to camera. Needs a face (seeavatar_preset_idorref_image_url).walk_talk: a presenter walking and talking. Needs a face.footage: your own clip fromvideo_url, played as-is.
What the camera sees. For a motion scene, the on-screen copy.
The narrator’s line for this scene. Omit for no narration.
The scene’s job in the story, such as hook, body, proof, cta, intro, step or recap.
Target length of the scene in seconds.
For motion scenes only.
object
The animation layout for this scene.
Art direction for this scene only. Overrides the render’s art_style.
An image to start from, or the face for a presenter scene. A public http(s) URL or a data URI.
For footage scenes only. A public http(s) URL of your clip.
A short sound-effect cue for this scene.
With brief, whether to plan an advert or a training video.
A title for the video. With brief, one is written for you if omitted.
With brief, the target total length in seconds. Defaults to 20 for ad and 60 for training.
With brief, whether the video has a narrator.
With brief, the brand name for the planner to use.
With brief, the product category, for example coffee or saas.
Language for narration and captions, as a language code.
Render quality. Higher quality costs more credits and takes longer.
An advert format, as in the app. One of commercial, product-film,
product-ad, brand-advert, film-advert, brand-mascot-ad, story,
character-story, place-film, explainer, training, motion-film,
app-demo, website, narrator, ugc-ad, testimonial, walk-talk,
unboxing, short, youtube-short, stylized-world, frozen-frame.
Product formats need product_image_url or product_enabled: false.
The production style. Usually leave unset and let route decide.
One of cinematic, stop_motion, mascot, watercolour, whimsy_3d. Unknown values fall back to cinematic.
Upscale the finished video. Defaults depend on the format and quality.
One of your brand kits. Its colours and fonts enrich the brand. For now, send it
together with brand_logo_url: a brand_kit_id on its own is refused with
422 BRAND_REQUIRED.
Your logo, as a public http(s) URL or a data URI. Brands the video without a saved kit.
Brand colours as hex strings, used with brand_logo_url.
Set false to render with no brand at all.
Your product photo, as a public http(s) URL or a data URI. Keeps the product the same in every scene.
Set false to render a product format with no product photo, on purpose.
A narrator voice.
A presenter face for s2v and walk_talk scenes.
Set false to allow presenter scenes with no face chosen. A stock presenter is used.
Examples
From a brief
{ "brief": "A 20 second advert for Northwind Coffee, a small-batch roaster. Warm, early-morning mood. End on the line \"Roasted this week, at your door by Friday.\"", "kind": "ad", "duration_sec": 20, "aspect": "9:16", "quality": "standard", "brand_logo_url": "https://example.com/northwind-logo.png", "brand_colors": [ "#3B2416", "#F4E9DC" ]}A training video from a brief
{ "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"}From your own scene plan
{ "title": "Northwind launch", "aspect": "9:16", "quality": "draft", "brand_logo_url": "https://example.com/northwind-logo.png", "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" } } ]}Responses
Section titled “ Responses ”The render has started.
object
How many scenes will render.
Credits this render spent.
Path of the job to poll, relative to the host.
With brief, notes from the planner’s review of its own plan. Only present when there are notes.
Example
{ "job_id": "7d2e4b10-5c3a-4f8e-a1b2-9c0d8e7f6a54", "status": "starting", "title": "Northwind Coffee, at your door by Friday", "scenes": 4, "credits_used": 12, "watermarked": false, "poll_url": "/v1/job/7d2e4b10-5c3a-4f8e-a1b2-9c0d8e7f6a54", "note": "Render started. Poll poll_url, or subscribe to video.completed via POST /api/webhooks/hooks."}The request was refused before anything was charged. Common code values:
CONTENT_BLOCKED, PRODUCT_IMAGE_REQUIRED, PRESENTER_REQUIRED,
UNSUPPORTED_MODEL. A body that fails validation has error: "Validation failed"
and a detail string instead of a code.
Every error has a human-readable error. Most also have a machine-readable code.
object
A message you can show to a person.
A stable code to branch on. Not every error has one.
Extra context for some codes, such as retryAfter or usage figures.
Seconds to wait before retrying. Present on some RATE_LIMITED errors.
object
Every problem found, as field: message, separated by ; .
Examples
Body failed validation
{ "error": "Validation failed", "detail": "body: brief or scene_plan required"}A talking scene with no face
{ "error": "Add your presenter before you render — this advert has a scene of someone talking to camera and no face is attached.", "code": "PRESENTER_REQUIRED"}A product format with no product photo
{ "error": "This format sells your product — upload a product photo on the Product node first.", "code": "PRODUCT_IMAGE_REQUIRED"}The key is missing, malformed, unknown or revoked.
Every error has a human-readable error. Most also have a machine-readable code.
object
A message you can show to a person.
A stable code to branch on. Not every error has one.
Extra context for some codes, such as retryAfter or usage figures.
Seconds to wait before retrying. Present on some RATE_LIMITED errors.
Examples
No key, or not an emp_ key
{ "error": "Unauthorized", "code": "NO_API_KEY"}Unknown or revoked key
{ "error": "Invalid or revoked API key", "code": "INVALID_API_KEY"}Payment or plan problem. code is one of PLAN_UPGRADE_REQUIRED,
INSUFFICIENT_CREDITS, NO_CREDITS, ABUSE_CAP_EXCEEDED (monthly usage limit
reached), STORAGE_FULL or UPGRADE_REQUIRED.
Every error has a human-readable error. Most also have a machine-readable code.
object
A message you can show to a person.
A stable code to branch on. Not every error has one.
Extra context for some codes, such as retryAfter or usage figures.
Seconds to wait before retrying. Present on some RATE_LIMITED errors.
Example
{ "error": "Insufficient credits", "code": "INSUFFICIENT_CREDITS"}The account that owns the key is suspended.
Every error has a human-readable error. Most also have a machine-readable code.
object
A message you can show to a person.
A stable code to branch on. Not every error has one.
Extra context for some codes, such as retryAfter or usage figures.
Seconds to wait before retrying. Present on some RATE_LIMITED errors.
Example
{ "error": "Account suspended", "code": "ACCOUNT_SUSPENDED"}A named resource was not found (for example CANVAS_NOT_FOUND).
Every error has a human-readable error. Most also have a machine-readable code.
object
A message you can show to a person.
A stable code to branch on. Not every error has one.
Extra context for some codes, such as retryAfter or usage figures.
Seconds to wait before retrying. Present on some RATE_LIMITED errors.
Examplegenerated
{ "error": "example", "code": "example", "details": "example", "retryAfter": 1, "feature": "example", "plan": "example"}This Idempotency-Key was already used. Nothing new was rendered or charged.
Every error has a human-readable error. Most also have a machine-readable code.
object
A message you can show to a person.
A stable code to branch on. Not every error has one.
Extra context for some codes, such as retryAfter or usage figures.
Seconds to wait before retrying. Present on some RATE_LIMITED errors.
Example
{ "error": "This request was already submitted. Check your renders for the job it created.", "code": "DUPLICATE_REQUEST"}This render would cost more than the per-render limit. Use fewer scenes or a lower quality.
Every error has a human-readable error. Most also have a machine-readable code.
object
A message you can show to a person.
A stable code to branch on. Not every error has one.
Extra context for some codes, such as retryAfter or usage figures.
Seconds to wait before retrying. Present on some RATE_LIMITED errors.
Example
{ "error": "This render would cost more than the per-render cap. Reduce scene count or quality tier.", "code": "REQUEST_COST_TOO_HIGH"}The render has nothing real to anchor it. code is BRAND_REQUIRED or
NO_ANCHOR. Add a brand, a product photo or a presenter, or opt out with
product_enabled: false or presenter_enabled: false.
Every error has a human-readable error. Most also have a machine-readable code.
object
A message you can show to a person.
A stable code to branch on. Not every error has one.
Extra context for some codes, such as retryAfter or usage figures.
Seconds to wait before retrying. Present on some RATE_LIMITED errors.
Example
{ "error": "Add your brand before you render — a logo, or pick one.", "code": "BRAND_REQUIRED"}A rate limit or the concurrent-render limit was hit. code is RATE_LIMITED or
CONCURRENT_LIMIT. For RATE_LIMITED, wait the number of seconds in retryAfter
(or details.retryAfter) before trying again.
Every error has a human-readable error. Most also have a machine-readable code.
object
A message you can show to a person.
A stable code to branch on. Not every error has one.
Extra context for some codes, such as retryAfter or usage figures.
Seconds to wait before retrying. Present on some RATE_LIMITED errors.
Examples
{ "error": "Rate limit exceeded", "retryAfter": 37, "code": "RATE_LIMITED"}{ "error": "Too many renders in flight", "code": "CONCURRENT_LIMIT"}Something went wrong on our side.
Every error has a human-readable error. Most also have a machine-readable code.
object
A message you can show to a person.
A stable code to branch on. Not every error has one.
Extra context for some codes, such as retryAfter or usage figures.
Seconds to wait before retrying. Present on some RATE_LIMITED errors.
Example
{ "error": "Something went wrong handling that request."}Planning from the brief failed. Any credits spent on planning were refunded.
Every error has a human-readable error. Most also have a machine-readable code.
object
A message you can show to a person.
A stable code to branch on. Not every error has one.
Extra context for some codes, such as retryAfter or usage figures.
Seconds to wait before retrying. Present on some RATE_LIMITED errors.
Example
{ "error": "Planner returned no usable scenes", "code": "PLAN_FAILED"}Rendering is paused or a dependency is down. Nothing was charged. Try again later.
Possible code values include USAGE_CHECK_UNAVAILABLE, DB_UNAVAILABLE,
FEATURE_NOT_AVAILABLE, GLOBAL_KILL_SWITCH, FEATURE_KILL_SWITCH and
USER_KILL_SWITCH.
Every error has a human-readable error. Most also have a machine-readable code.
object
A message you can show to a person.
A stable code to branch on. Not every error has one.
Extra context for some codes, such as retryAfter or usage figures.
Seconds to wait before retrying. Present on some RATE_LIMITED errors.
Examplegenerated
{ "error": "example", "code": "example", "details": "example", "retryAfter": 1, "feature": "example", "plan": "example"}