Skip to main content
These all answer synchronously: you send a body, you wait, you get the result. There is no job to poll. They are slow by nature — some hold a model for minutes — so set a generous client timeout rather than a short one with retries.

Starting from nothing

text.script and video.remix are the pair worth telling apart. text.script watches one video and researches around it, fact-checking its own claims as it writes and returning a claim ledger with the script. video.remix reads up to ten references — URLs it transcribes for you, or transcripts you send — and synthesises one original script across them. One is depth on a single source; the other is synthesis across many.
The response carries the brief under research, with its sources. Everything in this family returns its payload under a field named for what it produced — script, research, paraphrase, questions, solution, outline, copy.

Starting from something you already wrote

text.paraphrase and text.copywrite also look alike and are not. paraphrase restyles long-form as long-form — same material, new tone, audience and register, with preserveKeywords for terms that must survive verbatim. copywrite rewrites content down into one platform’s native post, with that platform’s conventions, length ceiling and hashtag habits. text.article is the one that turns a finished script into something publishable: it carries the citations through and returns Schema.org markup alongside the prose, under jsonLd.

Working from a transcript

text.localize and video.moments each take their transcript one of two ways: transcript sent inline, or assetId naming one this workspace has already had transcribed. Send exactly one — not both, and not neither. Both would leave it ambiguous which was translated and which was priced, and those must be the same thing.
Both are priced off the transcript, so the response tells you what was counted: languageMinutes for localize, transcriptMinutes for moments. Cue and segment timings are validated — an end earlier than its start is refused rather than rendered.

The two that are not text

They belong here because they are synchronous and file into the same project:
  • POST /v1/image/thumbnail — a platform-sized thumbnail from a title, with the brief LLM-refined first. Only title is required, but contentSummary is the biggest lever on quality after subject: a thumbnail written from a title alone is guessing at the content. Returns thumbnail.url.
  • POST /v1/audio/music — music from weighted prompts, up to three minutes. Returns music.url and the blocks you were billed for.
Both return a URL you fetch directly, the same rule as renders.

Prices are live, not in this table

Deliberately absent above. GET /v1/capabilities reads the same table the charge is taken from, so it cannot disagree with your invoice — and it tells you which of these this deployment actually serves:
Every response carries credits — what was actually taken, not what was quoted — and creditBalance after it. A call that fails, including one whose engine answered 200 carrying nothing usable, is free.

From a document to a video

Once you have the writing, this is how it becomes a narrated file.

Errors

The pairs that share a status code and call for opposite responses.