Endpoint reference
Find routes, request rules, response fields, and error actions.
The API uses JSON over HTTPS. Add /api/v1 to the origin shown in Developer. Some guides abbreviate routes, such as /projects. Add the /api/v1 prefix once when you build a request URL. Full paths, such as /api/v1/projects, already include it.
Download the OpenAPI 3.1 description for complete endpoint schemas and current permissions. OpenAPI is a machine-readable HTTP interface description.
Find a resource
| Task | Guide |
|---|---|
| Projects, sequences, render estimates, and outputs | Create your first video |
| Upload reservations and asset preparation | Uploads |
| Compositions, captions, AI video, and voiceovers | Create and edit content |
| Editor mutations and searches | Editor tool reference |
| Provider connections, imports, publishing, and team controls | Connect, import, and publish |
| Jobs, retries, credits, and signed events | Jobs and webhooks |
| File sizes, output limits, and feature availability | Limits and recovery |
Requests and responses
Send Content-Type: application/json for a body. JSON bodies must be at most 1 MiB (1,048,576 bytes). Successful responses contain data and requestId. Errors contain error.code, error.message, and requestId. Save the request ID when you need help with a failed request.
Creation, changes, paid work, and retries need Idempotency-Key. This is a request token that prevents duplicate operations. Use a new token for each intended operation. If a request times out, send the same token and body again. The identity includes workspace, method, path, and token. Keys in one workspace share this identity. Changed input returns 409 idempotency_conflict. Never use a new token to bypass an unknown result.
curl "$SOVRAN_API_ORIGIN/api/v1/projects" \
-H "Authorization: Bearer $SOVRAN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: project-2026-10-04-001" \
--data '{"name":"My API project"}'Lists and pagination
Paged lists use limit from 1 to 100 and an opaque cursor from nextCursor. The default limit is 50. Project composition lists use a default limit of 100. Keep requesting the returned cursor until nextCursor is null. Do not build or change cursor values yourself.
curl "$SOVRAN_API_ORIGIN/api/v1/projects?limit=10" \
-H "Authorization: Bearer $SOVRAN_API_KEY"Use the same page controls for project compositions. This request returns at most one item.
curl "$SOVRAN_API_ORIGIN/api/v1/projects/$PROJECT_ID/compositions?limit=1" \
-H "Authorization: Bearer $SOVRAN_API_KEY"A populated page can return a cursor for more items.
{
"data": {
"items": [{
"id": "<COMPOSITION_UUID>",
"projectId": "<PROJECT_UUID>",
"title": "Example composition",
"updatedAt": "2026-10-05T10:00:00.000Z",
"composition": {
"version": 1, "aspectRatio": "9:16", "backgroundColor": "#000000",
"durationInFrames": 30, "fps": 30, "width": 1080, "height": 1920,
"overlays": []
}
}],
"nextCursor": "1"
},
"requestId": "<REQUEST_UUID>"
}An empty page has no next cursor.
{
"data": { "items": [], "nextCursor": null },
"requestId": "<REQUEST_UUID>"
}Handle HTTP errors
| Status | Next action |
|---|---|
400 or 422 | Correct the input identified by the error details. |
401 | Check the host and key. Replace an expired or revoked key in Developer. |
403 | Check permissions, the creator's role, and the active paid plan. |
404 | Check the resource ID and the key's workspace. |
409 | Read error.code. Read current revisions or selection data before changing input. For an uncertain charge or provider result, follow job recovery. |
413 | Reduce the body or file to the permitted size. |
429 | Wait for the duration in Retry-After. Reuse the same token and body for the same operation. |
503 | Check availability. For a temporary read failure, wait and read again. For a mutation, keep the same token and body. |
Workspace keys share request counters. Current tier limits apply to ordinary requests, uploads, rendering, and AI work. An unavailable limit service returns 503.
All operations
Use this table to find each endpoint and its required permissions. Some operations also check the saved job, selected tool, or provider connection.
| Method | Endpoint | Action | Permissions |
|---|---|---|---|
DELETE | /api/v1/assets/{assetId} | Delete an asset after impact checks | read, delete |
DELETE | /api/v1/assets/{assetId}/captions/{language} | Delete captions with a revision check | read, delete |
DELETE | /api/v1/avatars/{avatarId}/voiceovers/{voiceoverId}/approval | Revoke an avatar voice approval | read, delete |
DELETE | /api/v1/avatars/{resourceId} | Delete the saved voice or disable the avatar | read, delete |
DELETE | /api/v1/cloud-drive/dropbox/folder-syncs/{syncId} | Disconnect a saved Dropbox folder with its revision | read, delete |
DELETE | /api/v1/compositions/{compositionId} | Delete an editor composition after impact checks | read, delete |
DELETE | /api/v1/dictionary/{resourceId} | Delete a dictionary rule | read, delete |
DELETE | /api/v1/projects/{projectId} | Delete a project after active-work guards | read, delete |
DELETE | /api/v1/projects/{projectId}/auto-edit-templates/{resourceId} | Delete auto-edit-templates with its revision | read, delete |
DELETE | /api/v1/projects/{projectId}/briefs/{resourceId} | Delete briefs with its revision | read, delete |
DELETE | /api/v1/projects/{projectId}/messaging/{resourceId} | Delete messaging with its revision | read, delete |
DELETE | /api/v1/projects/{projectId}/messaging-templates/{resourceId} | Delete messaging-templates with its revision | read, delete |
DELETE | /api/v1/projects/{projectId}/naming-fields/{resourceId} | delete project naming-fields | read, delete |
DELETE | /api/v1/projects/{projectId}/naming-templates/{resourceId} | delete project naming-templates | read, delete |
DELETE | /api/v1/projects/{projectId}/research/facebook/saves/{collection}/{savedId} | Delete saved research with a revision check | read, delete |
DELETE | /api/v1/projects/{projectId}/research/tiktok/saves/{collection}/{savedId} | Delete saved research with a revision check | read, delete |
DELETE | /api/v1/sequences/{sequenceId} | Delete a sequence | read, delete |
DELETE | /api/v1/voice-clones/{resourceId} | Delete the saved voice or disable the avatar | read, delete |
DELETE | /api/v1/workspace/invitations/{resourceId} | Revoke an invitation | read, delete |
DELETE | /api/v1/workspace/members/{resourceId} | Remove a member and revoke cloud access | read, delete |
GET | /api/v1/ad-launches/meta | List meta ad-launches | read |
GET | /api/v1/ad-launches/meta/{jobId} | Read meta ad-launches results | read |
GET | /api/v1/ad-launches/tiktok | List tiktok ad-launches | read |
GET | /api/v1/ad-launches/tiktok/{jobId} | Read tiktok ad-launches results | read |
GET | /api/v1/ai-video-models | List ai-video-models | read |
GET | /api/v1/ai-videos/{resourceId} | Read ai-videos and verified output availability | read |
GET | /api/v1/assets/{assetId} | Read an asset | read |
GET | /api/v1/assets/{assetId}/captions | List captions and signed SRT URLs | read |
GET | /api/v1/assets/{assetId}/captions/{language} | Read captions for one language | read |
GET | /api/v1/assets/{assetId}/delete-impact | Read asset deletion impact | read |
GET | /api/v1/assets/{assetId}/media | Get a short-lived source or thumbnail URL | read |
GET | /api/v1/assets/{assetId}/transcript | Read timed transcript passages | read |
GET | /api/v1/auto-edits/{resourceId} | Read auto-edits and verified output availability | read |
GET | /api/v1/avatar-videos/{resourceId} | Read avatar-videos and verified output availability | read |
GET | /api/v1/avatars | List avatars | read |
GET | /api/v1/avatars/{avatarId}/images/{imageId}/media | Read a signed avatar image URL | read |
GET | /api/v1/avatars/{resourceId} | Read avatars | read |
GET | /api/v1/cloud-drive/dropbox/exports | List dropbox exports | read |
GET | /api/v1/cloud-drive/dropbox/exports/{jobId} | Read dropbox exports | read |
GET | /api/v1/cloud-drive/dropbox/folder-syncs | List creator-owned saved Dropbox folders | read |
GET | /api/v1/cloud-drive/dropbox/folder-syncs/{syncId} | Read a saved Dropbox folder and its bounded progress | read |
GET | /api/v1/cloud-drive/dropbox/folder-syncs/{syncId}/files | List saved file states for one Dropbox folder | read |
GET | /api/v1/cloud-drive/dropbox/imports | List dropbox imports | read |
GET | /api/v1/cloud-drive/dropbox/imports/{jobId} | Read dropbox imports | read |
GET | /api/v1/cloud-drive/dropbox/syncs | List dropbox syncs | read |
GET | /api/v1/cloud-drive/dropbox/syncs/{jobId} | Read dropbox syncs | read |
GET | /api/v1/cloud-drive/google_drive/exports | List google_drive exports | read |
GET | /api/v1/cloud-drive/google_drive/exports/{jobId} | Read google_drive exports | read |
GET | /api/v1/cloud-drive/google_drive/imports | List google_drive imports | read |
GET | /api/v1/cloud-drive/google_drive/imports/{jobId} | Read google_drive imports | read |
GET | /api/v1/cloud-drive/google_drive/syncs | Google Drive folder sync is discontinued (discontinued) | read |
GET | /api/v1/cloud-drive/google_drive/syncs/{jobId} | Google Drive folder sync is discontinued (discontinued) | read |
GET | /api/v1/compositions/{compositionId} | Read an editor composition | read |
GET | /api/v1/compositions/{compositionId}/delete-impact | Read guarded composition deletion impact | read |
GET | /api/v1/dictionary | List dictionary | read |
GET | /api/v1/integrations | Read connection and publishing capability flags | read |
GET | /api/v1/integrations/dropbox/accounts | Read dropbox accounts | read |
GET | /api/v1/integrations/dropbox/connections | Read dropbox connections | read |
GET | /api/v1/integrations/google_drive/accounts | Read google_drive accounts | read |
GET | /api/v1/integrations/google_drive/connections | Read google_drive connections | read |
GET | /api/v1/integrations/meta/accounts | Read meta accounts | read |
GET | /api/v1/integrations/meta/connections | Read meta connections | read |
GET | /api/v1/integrations/tiktok/accounts | Read tiktok accounts | read |
GET | /api/v1/integrations/tiktok/connections | Read tiktok connections | read |
GET | /api/v1/jobs/{jobId} | Read a job, child counts, output references, and safe errors | read |
GET | /api/v1/music | List active music catalog tracks | read |
GET | /api/v1/projects | List workspace projects | read |
GET | /api/v1/projects/{projectId} | Read a project | read |
GET | /api/v1/projects/{projectId}/ai-videos | List ai-videos | read |
GET | /api/v1/projects/{projectId}/assets | List project assets and preparation status | read |
GET | /api/v1/projects/{projectId}/auto-edit-templates | List auto-edit-templates | read |
GET | /api/v1/projects/{projectId}/auto-edit-templates/{resourceId} | Read auto-edit-templates | read |
GET | /api/v1/projects/{projectId}/auto-edits | List auto-edits | read |
GET | /api/v1/projects/{projectId}/avatar-videos | List avatar-videos | read |
GET | /api/v1/projects/{projectId}/briefs | List briefs | read |
GET | /api/v1/projects/{projectId}/briefs/{resourceId} | Read briefs | read |
GET | /api/v1/projects/{projectId}/clips | List clips | read |
GET | /api/v1/projects/{projectId}/compositions | List version 1 editor compositions | read |
GET | /api/v1/projects/{projectId}/insights | Read saved Meta performance insights | read |
GET | /api/v1/projects/{projectId}/insights/ads | Read saved Meta ads performance | read |
GET | /api/v1/projects/{projectId}/insights/hooks | Read saved Meta hooks performance | read |
GET | /api/v1/projects/{projectId}/messaging | List messaging | read |
GET | /api/v1/projects/{projectId}/messaging/{resourceId} | Read messaging | read |
GET | /api/v1/projects/{projectId}/messaging-templates | List messaging-templates | read |
GET | /api/v1/projects/{projectId}/messaging-templates/{resourceId} | Read messaging-templates | read |
GET | /api/v1/projects/{projectId}/naming-fields | Read project naming-fields | read |
GET | /api/v1/projects/{projectId}/naming-templates | Read project naming-templates | read |
GET | /api/v1/projects/{projectId}/research/facebook | Read saved facebook research | read |
GET | /api/v1/projects/{projectId}/research/facebook/saves/{collection} | List saved research in one collection | read |
GET | /api/v1/projects/{projectId}/research/facebook/saves/{collection}/{savedId} | Read one saved research item | read |
GET | /api/v1/projects/{projectId}/research/tiktok | Read saved tiktok research | read |
GET | /api/v1/projects/{projectId}/research/tiktok/saves/{collection} | List saved research in one collection | read |
GET | /api/v1/projects/{projectId}/research/tiktok/saves/{collection}/{savedId} | Read one saved research item | read |
GET | /api/v1/projects/{projectId}/sequences | List project sequences | read |
GET | /api/v1/projects/{projectId}/settings | Read project settings | read |
GET | /api/v1/projects/{projectId}/voiceovers | List voiceovers | read |
GET | /api/v1/publications/meta | List meta publications | read |
GET | /api/v1/publications/meta/{jobId} | Read meta publications results | read |
GET | /api/v1/publications/tiktok | List tiktok publications | read |
GET | /api/v1/publications/tiktok/{jobId} | Read tiktok publications results | read |
GET | /api/v1/renders/{renderId}/outputs | Read durable outputs and short-lived media URLs | read |
GET | /api/v1/sequences/{sequenceId} | Read a sequence | read |
GET | /api/v1/sequences/{sequenceId}/combinations | Read the clip selection manifest and fingerprint | read |
GET | /api/v1/sequences/{sequenceId}/compositions | Read compositions with saved sequence timeline edits | read |
GET | /api/v1/sequences/{sequenceId}/smart-variations | List Smart analyses | read |
GET | /api/v1/sequences/{sequenceId}/smart-variations/{resourceId} | Read a saved Smart analysis | read |
GET | /api/v1/uploads/{uploadId} | Read an upload reservation | read |
GET | /api/v1/usage | Read paid plan status, API eligibility, and existing feature balances | read |
GET | /api/v1/voice-clones | List voice-clones | read |
GET | /api/v1/voice-clones/{resourceId} | Read voice-clones | read |
GET | /api/v1/voice-clones/{resourceId}/media | Read a signed voice preview URL | read |
GET | /api/v1/voiceovers/{resourceId} | Read voiceovers and verified output availability | read |
GET | /api/v1/voices | List voices | read |
GET | /api/v1/workspace | Read workspace details | read |
GET | /api/v1/workspace/invitations | List workspace/invitations | read |
GET | /api/v1/workspace/members | List workspace/members | read |
PATCH | /api/v1/assets/{assetId} | Rename an asset | read, write |
PATCH | /api/v1/assets/{assetId}/transcript | Save transcript text with revision checks | read, write |
PATCH | /api/v1/avatars/{resourceId} | Rename the saved voice or avatar | read, write |
PATCH | /api/v1/cloud-drive/dropbox/folder-syncs/{syncId} | Pause or activate a saved Dropbox folder with its revision | read, write |
PATCH | /api/v1/dictionary/{resourceId} | Update a dictionary rule | read, write |
PATCH | /api/v1/projects/{projectId} | Update a project with its revision | read, write |
PATCH | /api/v1/projects/{projectId}/auto-edit-templates/{resourceId} | Replace auto-edit-templates with its revision | read, write |
PATCH | /api/v1/projects/{projectId}/briefs/{resourceId} | Replace briefs with its revision | read, write |
PATCH | /api/v1/projects/{projectId}/messaging/{resourceId} | Replace messaging with its revision | read, write |
PATCH | /api/v1/projects/{projectId}/messaging-templates/{resourceId} | Replace messaging-templates with its revision | read, write |
PATCH | /api/v1/projects/{projectId}/naming-fields/{resourceId} | patch project naming-fields | read, write |
PATCH | /api/v1/projects/{projectId}/naming-templates/{resourceId} | patch project naming-templates | read, write |
PATCH | /api/v1/projects/{projectId}/research/facebook/saves/{collection}/{savedId} | Update saved research notes with a revision check | read, write |
PATCH | /api/v1/projects/{projectId}/research/tiktok/saves/{collection}/{savedId} | Update saved research notes with a revision check | read, write |
PATCH | /api/v1/projects/{projectId}/settings | Save project settings | read, write |
PATCH | /api/v1/sequences/{sequenceId} | Update sequence name or description | read, write |
PATCH | /api/v1/voice-clones/{resourceId} | Rename the saved voice or avatar | read, write |
PATCH | /api/v1/workspace | Rename workspace as its owner | read, write |
PATCH | /api/v1/workspace/members/{resourceId} | Change a member role with an expected role | read, write |
POST | /api/v1/ad-launches/meta | Accept meta ad-launches | read, publish |
POST | /api/v1/ad-launches/meta/{jobId}/retry | Require Meta Ads Manager review before a new ad request | read, publish |
POST | /api/v1/ad-launches/tiktok | Accept tiktok ad-launches | read, publish |
POST | /api/v1/ad-launches/tiktok/{jobId}/retry | Retry eligible tiktok ad-launches | read, publish |
POST | /api/v1/assets/{assetId}/tags | Add or remove asset tags | read, write |
POST | /api/v1/assets/{assetId}/transcript | Request transcript preparation | read, generate |
POST | /api/v1/avatars | Create an avatar from verified project images | read, write |
POST | /api/v1/cloud-drive/dropbox/exports | Accept dropbox exports | read, write |
POST | /api/v1/cloud-drive/dropbox/exports/{jobId}/retry | Retry eligible dropbox exports | read, write |
POST | /api/v1/cloud-drive/dropbox/folder-syncs | Connect a saved Dropbox folder without importing old files | read, write |
POST | /api/v1/cloud-drive/dropbox/folder-syncs/{syncId}/run | Accept one changes poll or one explicit bounded scan | read, write |
POST | /api/v1/cloud-drive/dropbox/imports | Accept dropbox imports | read, write |
POST | /api/v1/cloud-drive/dropbox/imports/{jobId}/retry | Retry eligible dropbox imports | read, write |
POST | /api/v1/cloud-drive/dropbox/syncs | Accept dropbox syncs | read, write |
POST | /api/v1/cloud-drive/dropbox/syncs/{jobId}/retry | Retry eligible dropbox syncs | read, write |
POST | /api/v1/cloud-drive/dropbox/syncs/{jobId}/stop | Stop bounded Dropbox work after plan expiry | read, write |
POST | /api/v1/cloud-drive/google_drive/exports | Accept google_drive exports | read, write |
POST | /api/v1/cloud-drive/google_drive/exports/{jobId}/retry | Retry eligible google_drive exports | read, write |
POST | /api/v1/cloud-drive/google_drive/imports | Accept google_drive imports | read, write |
POST | /api/v1/cloud-drive/google_drive/imports/{jobId}/retry | Retry eligible google_drive imports | read, write |
POST | /api/v1/cloud-drive/google_drive/syncs | Google Drive folder sync is discontinued (discontinued) | read, write |
POST | /api/v1/compositions/{compositionId}/ai-actions | Accept an AI edit plan for customer review | read, generate |
POST | /api/v1/compositions/{compositionId}/ai-actions/apply | Apply a reviewed saved plan with a revision check | read, write, generate |
POST | /api/v1/compositions/{compositionId}/ai-tools | Run an editor search, caption tool, or saved mutation job | read, generate + tool permissions |
POST | /api/v1/compositions/{compositionId}/background-removals | Remove one video background and apply its saved output | read, write, generate |
POST | /api/v1/compositions/{compositionId}/render-estimate | Estimate one version 1 composition output | read |
POST | /api/v1/compositions/{compositionId}/renders | Accept one frozen composition export | read, generate |
POST | /api/v1/dictionary | Create a dictionary rule | read, write |
POST | /api/v1/dictionary/apply | Apply frozen rules to 1–100 explicit transcripts | read, write |
POST | /api/v1/jobs/{jobId}/retry | Retry eligible confirmed failed work | read + saved job permissions |
POST | /api/v1/projects | Create a project | read, write |
POST | /api/v1/projects/{projectId}/ai-videos | Accept ai-videos | read, generate |
POST | /api/v1/projects/{projectId}/auto-edit-templates | Create auto-edit-templates | read, write |
POST | /api/v1/projects/{projectId}/auto-edits | Accept auto-edits | read, generate |
POST | /api/v1/projects/{projectId}/avatar-videos | Accept avatar-videos | read, generate |
POST | /api/v1/projects/{projectId}/briefs | Create briefs | read, write |
POST | /api/v1/projects/{projectId}/clips | Accept clips | read, generate |
POST | /api/v1/projects/{projectId}/compositions | Create a version 1 editor composition | read, write |
POST | /api/v1/projects/{projectId}/insights/sync | Refresh one linked Meta account with no media downloads | read, write |
POST | /api/v1/projects/{projectId}/messaging | Create messaging | read, write |
POST | /api/v1/projects/{projectId}/messaging/generate | Generate hooks, scripts, or test groups | read, generate |
POST | /api/v1/projects/{projectId}/messaging-templates | Create messaging-templates | read, write |
POST | /api/v1/projects/{projectId}/naming-fields | Save project naming-fields | read, write |
POST | /api/v1/projects/{projectId}/naming-templates | Save project naming-templates | read, write |
POST | /api/v1/projects/{projectId}/research/facebook/{savedId}/adapt | Adapt frozen research text to project context | read, generate |
POST | /api/v1/projects/{projectId}/research/facebook/{savedId}/transcript | Transcribe a bounded research video with saved audio | read, generate |
POST | /api/v1/projects/{projectId}/research/facebook/saves | Save one server selected research result | read, write |
POST | /api/v1/projects/{projectId}/research/facebook/search | Query Facebook companies or one bounded ad page | read, generate |
POST | /api/v1/projects/{projectId}/research/tiktok/{savedId}/adapt | Adapt frozen research text to project context | read, generate |
POST | /api/v1/projects/{projectId}/research/tiktok/{savedId}/transcript | Transcribe a bounded research video with saved audio | read, generate |
POST | /api/v1/projects/{projectId}/research/tiktok/saves | Save one server selected research result | read, write |
POST | /api/v1/projects/{projectId}/research/tiktok/search | Query TikTok trends | read, generate |
POST | /api/v1/projects/{projectId}/sequences | Create a sequence | read, write |
POST | /api/v1/projects/{projectId}/uploads | Reserve a signed direct upload | read, write |
POST | /api/v1/projects/{projectId}/voiceovers | Accept voiceovers | read, generate |
POST | /api/v1/publications/meta | Accept meta publications | read, publish |
POST | /api/v1/publications/meta/{jobId}/retry | Retry eligible meta publications | read, publish |
POST | /api/v1/publications/tiktok | Accept tiktok publications | read, publish |
POST | /api/v1/publications/tiktok/{jobId}/retry | Retry eligible tiktok publications | read, publish |
POST | /api/v1/sequences/{sequenceId}/render-estimate | Estimate finished outputs and render credits | read |
POST | /api/v1/sequences/{sequenceId}/renders | Accept a frozen background render batch | read, generate |
POST | /api/v1/sequences/{sequenceId}/smart-variations | Accept a bounded Smart analysis | read, generate |
POST | /api/v1/uploads/{uploadId}/complete | Verify stored path, size, and MIME type | read, write |
POST | /api/v1/voice-clones | Reserve a voice sample upload or selected project video | read, generate |
POST | /api/v1/voice-clones/{resourceId}/cancel | Cancel a voice clone and its saved sample | read, delete |
POST | /api/v1/voice-clones/{resourceId}/run | Verify the saved sample and accept voice cloning | read, generate |
POST | /api/v1/workspace/invitations | Create and email an invitation | read, write |
POST | /api/v1/workspace/invitations/{resourceId}/resend | Resend an invitation to its expected address | read, write |
PUT | /api/v1/assets/{assetId}/captions/{language} | Save an SRT file with a revision check | read, write |
PUT | /api/v1/assets/{assetId}/tags | Replace asset tags | read, write |
PUT | /api/v1/avatars/{avatarId}/voiceovers/{voiceoverId}/approval | Record approval after reviewing the voice preview | read, write |
PUT | /api/v1/compositions/{compositionId} | Replace an editor composition with its revision | read, write |
PUT | /api/v1/sequences/{sequenceId}/configuration | Replace sequence configuration with a revision check | read, write |
Admin tools, workers, provider callbacks, checkout, and account deletion are outside this API. Connect provider accounts in the dashboard.