projectId, and the dashboard shows the same projects your integration creates.
Create a project
mediaType is video or audio. A video project also needs videoPath, the
production path that fits the work — general fits anything. title is
optional; an untitled project is valid. Projects are private to their creator
unless you set visibility to workspace.
201 with the new project:
Idempotency-Key is required. Retrying with the same key and body returns the
same project, so a timeout never creates a duplicate.
Specialist video paths include talking-head, faceless-explainer,
product-demo, interview-podcast, course-video, how-to-video,
chess-video and more; the reference
lists every value.
Keep related work together
Pass the sameprojectId to each related call. The script, render and thumbnail
land in one project you can read back in a single request:
projectId it filed the work under, so
you can confirm where it went.
List projects
GET /v1/projects lists active projects visible to the key’s user. Use
status=archived or status=all to include archived ones, and page with
cursor:
hasMore is true when it only passed over other
members’ private projects. Keep following nextCursor until it is null — see
Pagination.
Rename or archive a project
PATCH /v1/projects/{projectId} takes title, status, or both. Archiving hides
a project from the default list and is reversible; there is no API call that
permanently deletes a project and the renders you paid for.
{"status": "active"} to restore it. Sending an empty title returns the
project to untitled.
Variations of a proven format
When a project holds a reference you have broken down — its hook, beats, pacing and call to action — you can ask for up to 1,000 script variants of that format, varying the axes you list:hooks, angles, presenters, voices,
languages, aspects, products and music.
1
Propose the batch
The proposal does not start anything. It returns a quote for the whole batch
— variants × the per-variant price — and a signed
approval.approval.2
Approve it
Send the
approval.approval value unchanged to POST /v1/sigma/approvals
to start the batch. If the workspace’s auto-approval threshold covers the
price, the batch starts immediately and the response carries
approval.autoApproved. Only variants not already covered by an identical
earlier output are charged, and a variant that fails is refunded.3
Follow progress and keep the good ones
Read the batch until
batch.status is complete, paging variants with
cursor. Then approve or reject variants by id; approving saves each
ready variant as a project script.variations_propose, sigma_approve,
variations_get and variations_review.
Translate a composition
Translate a cut into up to 10 languages at once. Each language lands in the project as its own editable composition,<title> · <Language>, with the dub’s
own words as its transcript:
languages are the provider’s codes (es, fr, pt-BR, ja, …; 108 in
all). output is dub (the default) or subtitles, the cheaper path that
keeps the original audio. A dub clones each speaker’s voice unless you pass
voiceIdentityId; timing: "direct" translates literally in that chosen
voice; lipSync re-syncs the mouth. compositionId picks the composition
(the project’s first when omitted).
Like a variation batch, this only proposes. The answer carries the quote,
every language at its per-minute price, and a signed approval.approval. Send
that to POST /v1/sigma/approvals to start it: it is charged then, and a
language that fails is refunded. Follow each language with:
status (ready when its composition is done), what it was
charged and targetCompositionId. Over MCP the same steps are
translations_propose, sigma_approve and translations_list.