Skip to content

Create render

POST
/v1/render
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.

Idempotency-Key
string
<= 80 characters

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-0a9c8d7e6f54
Media typeapplication/json
Any of:

Send brief or scene_plan. At least one is required.

object
brief
required

What the video is about, in plain language. Reignitor writes the scene plan.

string
>= 1 characters <= 4000 characters
scene_plan

Your own scenes, rendered as given. When set, brief planning is skipped.

Array<object>
>= 1 items <= 12 items

One scene of a scene_plan. The fields below are the ones Reignitor reads. Scenes are rendered in order.

object
type
required
  • motion: crisp animated text, numbers, steps or a logo. Best for anything readable.
  • t2v_fast: generated footage of people, places or objects, from prompt.
  • 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 (see avatar_preset_id or ref_image_url).
  • walk_talk: a presenter walking and talking. Needs a face.
  • footage: your own clip from video_url, played as-is.
string
Allowed values: motion t2v_fast i2v_fast s2v walk_talk footage
prompt
required

What the camera sees. For a motion scene, the on-screen copy.

string
>= 1 characters <= 2000 characters
script

The narrator’s line for this scene. Omit for no narration.

string
<= 2000 characters
role

The scene’s job in the story, such as hook, body, proof, cta, intro, step or recap.

string
<= 32 characters
duration

Target length of the scene in seconds.

number
>= 3 <= 10
motion

For motion scenes only.

object
beat

The animation layout for this scene.

string
Allowed values: full hook prompt dashboard dash grid explode reveal logo logo3d warp stat cta fx
art_style

Art direction for this scene only. Overrides the render’s art_style.

string
Allowed values: cinematic stop_motion mascot watercolour whimsy_3d
ref_image_url

An image to start from, or the face for a presenter scene. A public http(s) URL or a data URI.

string
video_url

For footage scenes only. A public http(s) URL of your clip.

string
<= 2000 characters
sfx

A short sound-effect cue for this scene.

string
<= 300 characters
key
additional properties
any
kind

With brief, whether to plan an advert or a training video.

string
default: ad
Allowed values: ad training
title

A title for the video. With brief, one is written for you if omitted.

string
<= 200 characters
duration_sec

With brief, the target total length in seconds. Defaults to 20 for ad and 60 for training.

number
>= 5 <= 120
narrator

With brief, whether the video has a narrator.

boolean
default: true
brand_name

With brief, the brand name for the planner to use.

string
<= 80 characters
category

With brief, the product category, for example coffee or saas.

string
<= 60 characters
language

Language for narration and captions, as a language code.

string
default: en >= 2 characters <= 10 characters
quality

Render quality. Higher quality costs more credits and takes longer.

string
default: draft
Allowed values: draft standard premium
aspect
string
default: 9:16
Allowed values: 9:16 16:9 1:1 4:5 4:3 3:4
route

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.

string
<= 64 characters
service

The production style. Usually leave unset and let route decide.

string
Allowed values: ugc advert talking_head product story short repurpose product_film
art_style

One of cinematic, stop_motion, mascot, watercolour, whimsy_3d. Unknown values fall back to cinematic.

string
<= 40 characters
music_style
string
Allowed values: upbeat-tech cinematic-epic lo-fi-chill corporate-pop
upscale

Upscale the finished video. Defaults depend on the format and quality.

boolean
brand_kit_id

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.

string format: uuid
brand_logo_url

Your logo, as a public http(s) URL or a data URI. Brands the video without a saved kit.

string
>= 1 characters <= 5000000 characters
brand_colors

Brand colours as hex strings, used with brand_logo_url.

Array<string>
<= 12 items
brand_enabled

Set false to render with no brand at all.

boolean
product_image_url

Your product photo, as a public http(s) URL or a data URI. Keeps the product the same in every scene.

string
>= 1 characters <= 5000000 characters
product_enabled

Set false to render a product format with no product photo, on purpose.

boolean
voice_preset_id

A narrator voice.

string format: uuid
avatar_preset_id

A presenter face for s2v and walk_talk scenes.

string format: uuid
presenter_enabled

Set false to allow presenter scenes with no face chosen. A stock presenter is used.

boolean
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"
]
}

The render has started.

Media typeapplication/json
object
job_id
required
string format: uuid
status
required
string
Allowed value: starting
title
string | null
scenes

How many scenes will render.

integer
credits_used
required

Credits this render spent.

number
watermarked
required
boolean
poll_url
required

Path of the job to poll, relative to the host.

string
plan_notes

With brief, notes from the planner’s review of its own plan. Only present when there are notes.

Array<string>
note
string
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.

Media typeapplication/json
One of:

Every error has a human-readable error. Most also have a machine-readable code.

object
error
required

A message you can show to a person.

string
code

A stable code to branch on. Not every error has one.

string
details

Extra context for some codes, such as retryAfter or usage figures.

retryAfter

Seconds to wait before retrying. Present on some RATE_LIMITED errors.

integer
feature
string
plan
string
key
additional properties
any
Examples

Body failed validation

{
"error": "Validation failed",
"detail": "body: brief or scene_plan required"
}

The key is missing, malformed, unknown or revoked.

Media typeapplication/json

Every error has a human-readable error. Most also have a machine-readable code.

object
error
required

A message you can show to a person.

string
code

A stable code to branch on. Not every error has one.

string
details

Extra context for some codes, such as retryAfter or usage figures.

retryAfter

Seconds to wait before retrying. Present on some RATE_LIMITED errors.

integer
feature
string
plan
string
key
additional properties
any
Examples

No key, or not an emp_ key

{
"error": "Unauthorized",
"code": "NO_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.

Media typeapplication/json

Every error has a human-readable error. Most also have a machine-readable code.

object
error
required

A message you can show to a person.

string
code

A stable code to branch on. Not every error has one.

string
details

Extra context for some codes, such as retryAfter or usage figures.

retryAfter

Seconds to wait before retrying. Present on some RATE_LIMITED errors.

integer
feature
string
plan
string
key
additional properties
any
Example
{
"error": "Insufficient credits",
"code": "INSUFFICIENT_CREDITS"
}

The account that owns the key is suspended.

Media typeapplication/json

Every error has a human-readable error. Most also have a machine-readable code.

object
error
required

A message you can show to a person.

string
code

A stable code to branch on. Not every error has one.

string
details

Extra context for some codes, such as retryAfter or usage figures.

retryAfter

Seconds to wait before retrying. Present on some RATE_LIMITED errors.

integer
feature
string
plan
string
key
additional properties
any
Example
{
"error": "Account suspended",
"code": "ACCOUNT_SUSPENDED"
}

A named resource was not found (for example CANVAS_NOT_FOUND).

Media typeapplication/json

Every error has a human-readable error. Most also have a machine-readable code.

object
error
required

A message you can show to a person.

string
code

A stable code to branch on. Not every error has one.

string
details

Extra context for some codes, such as retryAfter or usage figures.

retryAfter

Seconds to wait before retrying. Present on some RATE_LIMITED errors.

integer
feature
string
plan
string
key
additional properties
any
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.

Media typeapplication/json

Every error has a human-readable error. Most also have a machine-readable code.

object
error
required

A message you can show to a person.

string
code

A stable code to branch on. Not every error has one.

string
details

Extra context for some codes, such as retryAfter or usage figures.

retryAfter

Seconds to wait before retrying. Present on some RATE_LIMITED errors.

integer
feature
string
plan
string
key
additional properties
any
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.

Media typeapplication/json

Every error has a human-readable error. Most also have a machine-readable code.

object
error
required

A message you can show to a person.

string
code

A stable code to branch on. Not every error has one.

string
details

Extra context for some codes, such as retryAfter or usage figures.

retryAfter

Seconds to wait before retrying. Present on some RATE_LIMITED errors.

integer
feature
string
plan
string
key
additional properties
any
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.

Media typeapplication/json

Every error has a human-readable error. Most also have a machine-readable code.

object
error
required

A message you can show to a person.

string
code

A stable code to branch on. Not every error has one.

string
details

Extra context for some codes, such as retryAfter or usage figures.

retryAfter

Seconds to wait before retrying. Present on some RATE_LIMITED errors.

integer
feature
string
plan
string
key
additional properties
any
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.

Media typeapplication/json

Every error has a human-readable error. Most also have a machine-readable code.

object
error
required

A message you can show to a person.

string
code

A stable code to branch on. Not every error has one.

string
details

Extra context for some codes, such as retryAfter or usage figures.

retryAfter

Seconds to wait before retrying. Present on some RATE_LIMITED errors.

integer
feature
string
plan
string
key
additional properties
any
Examples
{
"error": "Rate limit exceeded",
"retryAfter": 37,
"code": "RATE_LIMITED"
}

Something went wrong on our side.

Media typeapplication/json

Every error has a human-readable error. Most also have a machine-readable code.

object
error
required

A message you can show to a person.

string
code

A stable code to branch on. Not every error has one.

string
details

Extra context for some codes, such as retryAfter or usage figures.

retryAfter

Seconds to wait before retrying. Present on some RATE_LIMITED errors.

integer
feature
string
plan
string
key
additional properties
any
Example
{
"error": "Something went wrong handling that request."
}

Planning from the brief failed. Any credits spent on planning were refunded.

Media typeapplication/json

Every error has a human-readable error. Most also have a machine-readable code.

object
error
required

A message you can show to a person.

string
code

A stable code to branch on. Not every error has one.

string
details

Extra context for some codes, such as retryAfter or usage figures.

retryAfter

Seconds to wait before retrying. Present on some RATE_LIMITED errors.

integer
feature
string
plan
string
key
additional properties
any
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.

Media typeapplication/json

Every error has a human-readable error. Most also have a machine-readable code.

object
error
required

A message you can show to a person.

string
code

A stable code to branch on. Not every error has one.

string
details

Extra context for some codes, such as retryAfter or usage figures.

retryAfter

Seconds to wait before retrying. Present on some RATE_LIMITED errors.

integer
feature
string
plan
string
key
additional properties
any
Examplegenerated
{
"error": "example",
"code": "example",
"details": "example",
"retryAfter": 1,
"feature": "example",
"plan": "example"
}