Explainer video

A narrated explainer video planned from your topic, script or material, rendered to MP4 with captions.

  • Price5 credits (50p) per storyboard
  • Typical time2 min to 15 min
  • Scopemedia:write
  • Runs asA background job
Try it

Run explainer video in the sandbox

No key and nothing to pay. The sandbox returns a realistic example in a couple of seconds; no AI runs and no data is kept.

What the video explains.
Who it is for, for example 'Year 10 science'.
What a viewer should understand afterwards.
Anything else the planner should know.
Your own narration script. When given, the video is built around these words.
Material the facts must come from (up to 10,000 words).
About 45, 75 or 120 seconds.
Render video.mp4 and captions.vtt. False returns the storyboard only.
  1. Queued202 and a job id, straight away
  2. ProcessingPoll, stream or wait for a webhook
  3. SucceededResult and files on the job
Every AI request runs as a background job, so nothing times out.

Plans a storyboard from EduMark's reviewed animation library, records an AI voice-over and, with auto_render (the default), renders video.mp4 and captions.vtt on EduMark's render workers. storyboard.json is always saved. Facts come only from the material you send; without material the planner sticks to well-established facts and lists anything it could not support in notes. Scenes that cannot be drawn are left out. Rendering takes roughly as long as the video plays, after planning.

Requires media:write. Costs 5 credits per storyboard. Send a unique Idempotency-Key; reuse it with the identical body when retrying. Returns 202 with a job: poll GET /jobs/{job_id}, stream GET /jobs/{job_id}/events, or use a signed webhook.

Explainer video

POST/v1/videos

Scope media:write

Headers

Explainer video: headers
FieldDetails
Idempotency-KeystringRequiredA unique key per new operation; reuse it with the identical body when retrying.
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Request body

Explainer video: request body
FieldDetails
topicstring, optionalWhat the video explains.Up to 300 characters
audiencestring, optionalWho it is for, for example 'Year 10 science'.Up to 300 characters
objectivestring, optionalWhat a viewer should understand afterwards.Up to 600 characters
notesstring, optionalAnything else the planner should know.Up to 2,000 characters
scriptstring, optionalYour own narration script. When given, the video is built around these words.Up to 12,000 characters
source_textstring, optionalMaterial the facts must come from (up to 10,000 words).Up to 60,000 characters
documentFileReference or DocumentInput, optionalA PDF, DOCX or TXT the facts must come from.
file_iddocument.file_idstringRequiredThe id returned by POST /v1/files, after POST /v1/files/{id}/complete reported ready.When sending FileReferencePattern ^file_[a-f0-9]{32}$
filenamedocument.filenamestringRequiredWhen sending DocumentInputUp to 200 characters
base64document.base64stringRequiredWhen sending DocumentInputUp to 27,962,028 characters
mime_typedocument.mime_typestring, optionalWhen sending DocumentInputUp to 150 characters
lengthenumAbout 45, 75 or 120 seconds.One of short, standard, longDefault "standard"
aspectenumOne of 16:9, 1:1, 9:16Default "16:9"
voiceenumOne of alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse, marin, cedarDefault "cedar"
auto_renderbooleanRender video.mp4 and captions.vtt. False returns the storyboard only.Default true

Responses

StatusMeaning
202Successful Response
400Request rejected. Inspect error.code and request_id; failed work is not billed.
401Request rejected. Inspect error.code and request_id; failed work is not billed.
402Request rejected. Inspect error.code and request_id; failed work is not billed.
403Request rejected. Inspect error.code and request_id; failed work is not billed.
404Request rejected. Inspect error.code and request_id; failed work is not billed.
409Request rejected. Inspect error.code and request_id; failed work is not billed.
410Request rejected. Inspect error.code and request_id; failed work is not billed.
413Request rejected. Inspect error.code and request_id; failed work is not billed.
415Request rejected. Inspect error.code and request_id; failed work is not billed.
422Validation Error
429Request rejected. Inspect error.code and request_id; failed work is not billed.
503Request rejected. Inspect error.code and request_id; failed work is not billed.