FECINE / DEVELOPERS
Developer console
FECINE OPEN API v1.1.0

API reference

Build your production workflow with FECINE. From screenplay to final cut, one API.

01

Authenticate

Use your FECINE API key as a Bearer token. Reading these docs needs no account.

02

Create and run

Create a work, upload scripts and materials, then add characters, background scenes, props and grids. Create episodes and scenes, attach references and generate scene videos. Select a take for each scene, then export the final cut. Wait for each generation job to finish and send the latest revision when editing. To build a structure from uploaded scripts, explicitly run the build operation.

03

Collect results

Poll the job or receive a webhook. Use asset IDs to retrieve signed download links.

Your first request
curl -X GET 'https://YOUR_FECINE_HOST/api/v1/capabilities' \
  -H 'Authorization: Bearer YOUR_FECINE_API_KEY'
GET /api/v1/capabilities
REFERENCE

API reference

FECINE error. Include request_id when contacting support.

Copy the JSON example and replace IDs, URLs and content with your actual values.

Capabilities

GET/api/v1/capabilitiesSee what you can do right now

Lists available operations, models, upload formats and production limits for the current API environment.

Required scope: projects:read

Parameters

No parameters

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "items": [
      {
        "studio_workflow": {
          "equivalent": false,
          "stages": [
            "script"
          ],
          "project_access": "read_only",
          "gaps": [
            "example"
          ]
        },
        "template_id": "example",
        "template_version": 1,
        "enabled": false,
        "stages": [
          "example"
        ],
        "output_profiles": [
          "example"
        ],
        "unsupported_reasons": [
          "example"
        ],
        "max_shots": 1,
        "max_episode_seconds": 1,
        "upload_mime_types": [
          "example"
        ],
        "max_upload_bytes": 1
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

Projects & resources

GET/api/v1/worksList your projects

Lists accessible projects. Filter by state and use cursor and limit to page through results.

Required scope: projects:read

Parameters

NameTypeRequiredDescription
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100
statequerystring—
  • Allowed values: active, archived

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "name": "example",
        "revision": 1,
        "state": "active",
        "created_at": "2026-09-20T00:00:00Z",
        "client_reference": "example"
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/worksCreate a new project

Creates a project with the supplied name. Use the returned project ID to add material and start production.

Required scope: projects:write

Parameters

NameTypeRequiredDescription
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
namestring*
  • Minimum length: 1 characters
  • Maximum length: 80 characters
client_referencestring—
  • Maximum length: 128 characters
Your first request · JSON
{
  "name": "example"
}

Responses

HTTP 201 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "name": "example",
    "revision": 1,
    "state": "active",
    "created_at": "2026-09-20T00:00:00Z",
    "client_reference": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{project_id}View a project

Returns a project’s name, state and current revision. Read this before submitting changes or production requests.

Required scope: projects:read

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "name": "example",
    "revision": 1,
    "state": "active",
    "created_at": "2026-09-20T00:00:00Z",
    "client_reference": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PATCH/api/v1/works/{project_id}Edit a project

Changes a project’s name or switches its state between active and archived. Send the latest ETag in If-Match.

Required scope: projects:write

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
If-Matchheaderstring*Use the latest ETag, including quotes.

Request body

NameTypeRequiredDescription
namestring—
  • Minimum length: 1 characters
  • Maximum length: 80 characters
statestring—
  • Allowed values: active, archived
Your first request · JSON
{}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "name": "example",
    "revision": 1,
    "state": "active",
    "created_at": "2026-09-20T00:00:00Z",
    "client_reference": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{project_id}/resourcesList the material you uploaded

Lists a project’s script, character, scene, prop, episode and shot records. Use kind to select a resource type.

Required scope: projects:read

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100
kindquerystring—
  • Allowed values: script, character, scene, prop, episode, shot

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "work_id": "11111111-1111-4111-8111-111111111111",
        "revision": 1,
        "content": {
          "kind": "script",
          "name": "example",
          "data": {
            "language": "example"
          }
        },
        "created_at": "2026-09-20T00:00:00Z"
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{project_id}/resourcesAdd material such as scripts and images

Adds a structured resource to a project using kind and data, such as script text or a shot definition. Upload file bytes through /uploads.

Required scope: projects:write

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
kindstring*kind = script
  • Fixed value: script
namestring*kind = script
  • Minimum length: 1 characters
  • Maximum length: 80 characters
dataobject*kind = scriptProvide exactly one of text or source_asset_id.
data.textstring—kind = script
  • Minimum length: 1 characters
  • Maximum length: 900000 characters
data.source_asset_idstring—kind = script
  • Format: UUID
data.languagestring*kind = script
  • Minimum length: 2 characters
  • Maximum length: 16 characters
kindstring*kind = character
  • Fixed value: character
namestring*kind = character
  • Minimum length: 1 characters
  • Maximum length: 80 characters
dataobject*kind = character
data.descriptionstring*kind = character
  • Maximum length: 4000 characters
data.reference_asset_idsarray—kind = character
  • Default: []
  • Maximum items: 8 items
kindstring*kind = scene
  • Fixed value: scene
namestring*kind = scene
  • Minimum length: 1 characters
  • Maximum length: 80 characters
dataobject*kind = scene
data.descriptionstring*kind = scene
  • Maximum length: 4000 characters
data.reference_asset_idsarray—kind = scene
  • Default: []
  • Maximum items: 8 items
kindstring*kind = prop
  • Fixed value: prop
namestring*kind = prop
  • Minimum length: 1 characters
  • Maximum length: 80 characters
dataobject*kind = prop
data.descriptionstring*kind = prop
  • Maximum length: 4000 characters
data.reference_asset_idsarray—kind = prop
  • Default: []
  • Maximum items: 8 items
kindstring*kind = episode
  • Fixed value: episode
namestring*kind = episode
  • Minimum length: 1 characters
  • Maximum length: 80 characters
dataobject*kind = episode
data.script_resource_idstring*kind = episode
  • Format: UUID
data.sequenceinteger*kind = episode
  • Minimum: 1
  • Maximum: 100
data.raw_contentstring—kind = episode
  • Maximum length: 20000 characters
data.descriptionstring—kind = episode
  • Maximum length: 4000 characters
kindstring*kind = shot
  • Fixed value: shot
namestring*kind = shot
  • Minimum length: 1 characters
  • Maximum length: 80 characters
dataobject*kind = shot
data.episode_idstring*kind = shot
  • Format: UUID
data.scene_idstring—kind = shot
  • Format: UUID
data.character_idsarray—kind = shot
  • Default: []
  • Maximum items: 8 items
data.prop_idsarray—kind = shot
  • Default: []
  • Maximum items: 8 items
data.descriptionstring*kind = shot
  • Maximum length: 4000 characters
data.video_promptoneOf—kind = shot
data.sequenceinteger—kind = shot
  • Minimum: 1
  • Maximum: 100
data.duration_secondsinteger*kind = shot
  • Minimum: 1
  • Maximum: 60
data.selected_image_asset_idstring—kind = shot
  • Format: UUID
data.selected_video_asset_idstring—kind = shot
  • Format: UUID
Your first request · JSON
{
  "kind": "script",
  "name": "example",
  "data": {
    "language": "example"
  }
}

Responses

HTTP 201 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "content": {
      "kind": "script",
      "name": "example",
      "data": {
        "language": "example"
      }
    },
    "created_at": "2026-09-20T00:00:00Z"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{project_id}/resources/{resource_id}View one piece of material

Returns the kind, data and revision of one resource identified by resource_id within the project.

Required scope: projects:read

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
resource_idpathstring*
  • Format: UUID

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "content": {
      "kind": "script",
      "name": "example",
      "data": {
        "language": "example"
      }
    },
    "created_at": "2026-09-20T00:00:00Z"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PATCH/api/v1/works/{project_id}/resources/{resource_id}Edit material

Updates a resource’s kind and data. Send its latest ETag in If-Match to protect against conflicting edits.

Required scope: projects:write

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
resource_idpathstring*
  • Format: UUID
If-Matchheaderstring*Use the latest ETag, including quotes.

Request body

NameTypeRequiredDescription
kindstring*kind = script
  • Fixed value: script
namestring*kind = script
  • Minimum length: 1 characters
  • Maximum length: 80 characters
dataobject*kind = scriptProvide exactly one of text or source_asset_id.
data.textstring—kind = script
  • Minimum length: 1 characters
  • Maximum length: 900000 characters
data.source_asset_idstring—kind = script
  • Format: UUID
data.languagestring*kind = script
  • Minimum length: 2 characters
  • Maximum length: 16 characters
kindstring*kind = character
  • Fixed value: character
namestring*kind = character
  • Minimum length: 1 characters
  • Maximum length: 80 characters
dataobject*kind = character
data.descriptionstring*kind = character
  • Maximum length: 4000 characters
data.reference_asset_idsarray—kind = character
  • Default: []
  • Maximum items: 8 items
kindstring*kind = scene
  • Fixed value: scene
namestring*kind = scene
  • Minimum length: 1 characters
  • Maximum length: 80 characters
dataobject*kind = scene
data.descriptionstring*kind = scene
  • Maximum length: 4000 characters
data.reference_asset_idsarray—kind = scene
  • Default: []
  • Maximum items: 8 items
kindstring*kind = prop
  • Fixed value: prop
namestring*kind = prop
  • Minimum length: 1 characters
  • Maximum length: 80 characters
dataobject*kind = prop
data.descriptionstring*kind = prop
  • Maximum length: 4000 characters
data.reference_asset_idsarray—kind = prop
  • Default: []
  • Maximum items: 8 items
kindstring*kind = episode
  • Fixed value: episode
namestring*kind = episode
  • Minimum length: 1 characters
  • Maximum length: 80 characters
dataobject*kind = episode
data.script_resource_idstring*kind = episode
  • Format: UUID
data.sequenceinteger*kind = episode
  • Minimum: 1
  • Maximum: 100
data.raw_contentstring—kind = episode
  • Maximum length: 20000 characters
data.descriptionstring—kind = episode
  • Maximum length: 4000 characters
kindstring*kind = shot
  • Fixed value: shot
namestring*kind = shot
  • Minimum length: 1 characters
  • Maximum length: 80 characters
dataobject*kind = shot
data.episode_idstring*kind = shot
  • Format: UUID
data.scene_idstring—kind = shot
  • Format: UUID
data.character_idsarray—kind = shot
  • Default: []
  • Maximum items: 8 items
data.prop_idsarray—kind = shot
  • Default: []
  • Maximum items: 8 items
data.descriptionstring*kind = shot
  • Maximum length: 4000 characters
data.video_promptoneOf—kind = shot
data.sequenceinteger—kind = shot
  • Minimum: 1
  • Maximum: 100
data.duration_secondsinteger*kind = shot
  • Minimum: 1
  • Maximum: 60
data.selected_image_asset_idstring—kind = shot
  • Format: UUID
data.selected_video_asset_idstring—kind = shot
  • Format: UUID
Your first request · JSON
{
  "kind": "script",
  "name": "example",
  "data": {
    "language": "example"
  }
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "content": {
      "kind": "script",
      "name": "example",
      "data": {
        "language": "example"
      }
    },
    "created_at": "2026-09-20T00:00:00Z"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{project_id}/workflowRead Studio production data

Returns the project’s script, episodes, designs, scenes, assets, takes and cut selections together with the latest revision.

Required scope: projects:read

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "api_runs": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "state": "example",
        "created_at": "example",
        "completed_at": "example",
        "total_steps": 0,
        "completed_steps": 0,
        "error_code": "example"
      }
    ],
    "work_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example",
    "trash": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "entity_type": "asset",
        "name": "example",
        "deleted_at": "example"
      }
    ],
    "assets": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "name": "example",
        "kind": "example",
        "media_type": "example",
        "status": "example",
        "mime": "example",
        "lineage_id": "11111111-1111-4111-8111-111111111111",
        "version": 1,
        "is_current_version": false
      }
    ],
    "settings": {
      "title": "example",
      "tags": [
        "example"
      ],
      "cover": "example",
      "aspect": "example",
      "resolution": "example",
      "style": "example",
      "style_prompt": "example",
      "state": "example"
    },
    "script": {
      "text": "example",
      "logline": "example",
      "synopsis": "example"
    },
    "episodes": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "number": 1,
        "title": "example",
        "raw_content": "example",
        "description": "example"
      }
    ],
    "designs": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "kind": "character",
        "name": "example",
        "description": "example",
        "tags": [
          "example"
        ],
        "primary_asset_id": "11111111-1111-4111-8111-111111111111"
      }
    ],
    "scenes": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "episode_id": "11111111-1111-4111-8111-111111111111",
        "number": 1,
        "heading": "example",
        "description": "example",
        "video_prompt": "example"
      }
    ],
    "scene_designs": [
      {
        "scene_id": "11111111-1111-4111-8111-111111111111",
        "design_id": "11111111-1111-4111-8111-111111111111",
        "kind": "example",
        "position": 1
      }
    ],
    "takes": [
      {
        "scene_id": "11111111-1111-4111-8111-111111111111",
        "asset_id": "11111111-1111-4111-8111-111111111111",
        "position": 1
      }
    ],
    "cut_selections": [
      {
        "scene_id": "11111111-1111-4111-8111-111111111111",
        "asset_id": "11111111-1111-4111-8111-111111111111"
      }
    ],
    "design_assets": [
      {
        "design_id": "11111111-1111-4111-8111-111111111111",
        "asset_id": "11111111-1111-4111-8111-111111111111",
        "kind": "example",
        "name": "example",
        "position": 1
      }
    ]
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{project_id}/script/analysesAnalyze the Studio script

Analyzes the project script into production structure. Provide script_text to update the script before analysis, or omit it to use the saved script. Track the returned job with getJob.

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
modelstring—
  • Minimum length: 1 characters
  • Maximum length: 200 characters
script_textstring—
  • Minimum length: 1 characters
  • Maximum length: 5000000 characters
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

POST/api/v1/works/{project_id}/script/buildsBuild production from script

Send verified script_asset_ids and revision to build the screenplay, references and storyboard. full_rebuild replaces existing structure. Generate images and videos separately. Charges reported input and output tokens at the same prices as Studio. No per-request credit budget is required. GET /jobs/{job_id} → output_asset_ids.

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
modelstring—
  • Minimum length: 1 characters
  • Maximum length: 200 characters
script_asset_idsarray—
  • Default: []
material_scopestring—
  • Allowed values: unclassified, all
  • Default: "unclassified"
preprocessobject—
preprocess.ignoreAttachmentsboolean—
  • Default: true
preprocess.discardKeywordsarray—
  • Default: ["提示词","prompt","Midjourney","Stable Diffusion","DALL-E","Image1","Image2","正向提示词","负向提示词","视觉描述","出图要求","技术规格","画面描述","镜头提示词","请生成","角色三视图","服装本体展示","局部材质与细节放大"]
  • Maximum items: 100 items
preprocess.keepLabelsarray—
  • Default: ["资产名称","资产ID","资产版本","关联角色资产名称","关联角色资产ID","关联场景资产名称","关联场景资产ID","关联道具资产名称","关联道具资产ID","服装变体ID","服装名称","道具资产ID","道具名称","场景资产ID","场景名称","宫格图ID","集数","主题","场景","角色名称","用途"]
  • Maximum items: 100 items
rebuild_policystring*
  • Fixed value: full_rebuild
Your first request · JSON
{
  "revision": 1,
  "rebuild_policy": "full_rebuild"
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

GET/api/v1/works/{project_id}/libraryList shared library assets

Lists assets available to import into the project. scope=personal lists your own library; scope=studio, the default, lists the shared library.

Required scope: assets:read

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
limitinteger—
  • Minimum: 1
  • Maximum: 100
cursorstring—
scopestring—
  • Allowed values: studio, personal

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "name": "example",
        "kind": "example",
        "media_type": "example",
        "mime": "example",
        "version": 1,
        "is_current_version": false
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{project_id}/importsImport an asset into a project

Copies the asset identified by asset_id from a personal or shared library into the project. Returns the project-owned copy; later source changes do not affect it.

Required scope: assets:write, assets:read, projects:write

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
asset_idstring*
  • Format: UUID
Your first request · JSON
{
  "revision": 1,
  "asset_id": "11111111-1111-4111-8111-111111111111"
}

Responses

HTTP 201 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "state": "pending",
    "mime_type": "example",
    "size_bytes": 0,
    "download_url": "example",
    "expires_at": "2026-09-20T00:00:00Z"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{project_id}/script/draftsGenerate screenplay draft

Send instructions, optional source_text, revision and max_output_tokens. Saves a new script asset without replacing the existing screenplay. Charges reported input and output tokens at the same prices as Studio. No per-request credit budget is required. GET /jobs/{job_id} → output_asset_ids.

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
modelstring—
  • Minimum length: 1 characters
  • Maximum length: 200 characters
instructionsstring*
  • Minimum length: 1 characters
  • Maximum length: 8000 characters
source_textstring—
  • Maximum length: 50000 characters
max_output_tokensinteger—
  • Default: 2048
  • Minimum: 256
  • Maximum: 8192
Your first request · JSON
{
  "revision": 1,
  "instructions": "example"
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/charactersCharacter · Read (list)

Character · Read (list). GET /api/v1/works/{work_id}/characters. GET

Required scope: projects:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "kind": "character",
        "name": "example",
        "description": "example",
        "tags": [
          "example"
        ],
        "primary_asset_id": "11111111-1111-4111-8111-111111111111"
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/charactersCharacter · Create

Character · Create. POST /api/v1/works/{work_id}/characters. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
namestring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
descriptionstring—
  • Maximum length: 4000 characters
tagsarray—
  • Maximum items: 8 items
revisioninteger*
Your first request · JSON
{
  "name": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/characters/{reference_id}Character · Read

Character · Read. GET /api/v1/works/{work_id}/characters/{reference_id}. GET

Required scope: projects:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "kind": "character",
    "name": "example",
    "description": "example",
    "tags": [
      "example"
    ],
    "primary_asset_id": "11111111-1111-4111-8111-111111111111"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PATCH/api/v1/works/{work_id}/characters/{reference_id}Character · Update

Character · Update. PATCH /api/v1/works/{work_id}/characters/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
namestring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
descriptionstring—
  • Maximum length: 4000 characters
tagsarray—
  • Maximum items: 8 items
revisioninteger*
Your first request · JSON
{
  "name": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

DELETE/api/v1/works/{work_id}/characters/{reference_id}Character · Delete

Character · Delete. DELETE /api/v1/works/{work_id}/characters/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PUT/api/v1/works/{work_id}/characters/{reference_id}/primary-imageCharacter · Set reference image

Character · Set reference image. PUT /api/v1/works/{work_id}/characters/{reference_id}/primary-image. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
asset_idstring*
  • Format: UUID
current_asset_idoneOf*
revisioninteger*
Your first request · JSON
{
  "asset_id": "11111111-1111-4111-8111-111111111111",
  "current_asset_id": "11111111-1111-4111-8111-111111111111",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/characters/{reference_id}/image-generationsCharacter · Generate reference image

Character · Generate reference image. POST /api/v1/works/{work_id}/characters/{reference_id}/image-generations. revision + Idempotency-Key → GET /api/v1/jobs/{job_id}

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
variantsinteger—
  • Default: 1
  • Minimum: 1
  • Maximum: 4
modelstring—
  • Default: "image-standard"
  • Minimum length: 1 characters
  • Maximum length: 200 characters
promptstring—
  • Minimum length: 1 characters
  • Maximum length: 20000 characters
aspect_ratiostring—
image_sizestring—
  • Maximum length: 40 characters
qualitystring—
  • Allowed values: low, medium, high
backgroundstring—
  • Allowed values: auto, opaque, transparent
output_formatstring—
  • Allowed values: png, jpeg
reference_asset_idsarray—
  • Default: []
  • Maximum items: 16 items
slotstring—
  • Allowed values: primary, variant
  • Default: "primary"
variant_namestring—
  • Minimum length: 1 characters
  • Maximum length: 80 characters
current_asset_idstring—
  • Format: UUID
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

PUT/api/v1/works/{work_id}/scenes/{scene_id}/references/characters/{reference_id}Character · Attach to scene

Character · Attach to scene. PUT /api/v1/works/{work_id}/scenes/{scene_id}/references/characters/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

DELETE/api/v1/works/{work_id}/scenes/{scene_id}/references/characters/{reference_id}Character · Detach from scene

Character · Detach from scene. DELETE /api/v1/works/{work_id}/scenes/{scene_id}/references/characters/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/background-scenesBackground scene · Read (list)

Background scene · Read (list). GET /api/v1/works/{work_id}/background-scenes. GET

Required scope: projects:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "kind": "character",
        "name": "example",
        "description": "example",
        "tags": [
          "example"
        ],
        "primary_asset_id": "11111111-1111-4111-8111-111111111111"
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/background-scenesBackground scene · Create

Background scene · Create. POST /api/v1/works/{work_id}/background-scenes. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
namestring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
descriptionstring—
  • Maximum length: 4000 characters
tagsarray—
  • Maximum items: 8 items
revisioninteger*
Your first request · JSON
{
  "name": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/background-scenes/{reference_id}Background scene · Read

Background scene · Read. GET /api/v1/works/{work_id}/background-scenes/{reference_id}. GET

Required scope: projects:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "kind": "character",
    "name": "example",
    "description": "example",
    "tags": [
      "example"
    ],
    "primary_asset_id": "11111111-1111-4111-8111-111111111111"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PATCH/api/v1/works/{work_id}/background-scenes/{reference_id}Background scene · Update

Background scene · Update. PATCH /api/v1/works/{work_id}/background-scenes/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
namestring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
descriptionstring—
  • Maximum length: 4000 characters
tagsarray—
  • Maximum items: 8 items
revisioninteger*
Your first request · JSON
{
  "name": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

DELETE/api/v1/works/{work_id}/background-scenes/{reference_id}Background scene · Delete

Background scene · Delete. DELETE /api/v1/works/{work_id}/background-scenes/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PUT/api/v1/works/{work_id}/background-scenes/{reference_id}/primary-imageBackground scene · Set reference image

Background scene · Set reference image. PUT /api/v1/works/{work_id}/background-scenes/{reference_id}/primary-image. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
asset_idstring*
  • Format: UUID
current_asset_idoneOf*
revisioninteger*
Your first request · JSON
{
  "asset_id": "11111111-1111-4111-8111-111111111111",
  "current_asset_id": "11111111-1111-4111-8111-111111111111",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/background-scenes/{reference_id}/image-generationsBackground scene · Generate reference image

Background scene · Generate reference image. POST /api/v1/works/{work_id}/background-scenes/{reference_id}/image-generations. revision + Idempotency-Key → GET /api/v1/jobs/{job_id}

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
variantsinteger—
  • Default: 1
  • Minimum: 1
  • Maximum: 4
modelstring—
  • Default: "image-standard"
  • Minimum length: 1 characters
  • Maximum length: 200 characters
promptstring—
  • Minimum length: 1 characters
  • Maximum length: 20000 characters
aspect_ratiostring—
image_sizestring—
  • Maximum length: 40 characters
qualitystring—
  • Allowed values: low, medium, high
backgroundstring—
  • Allowed values: auto, opaque, transparent
output_formatstring—
  • Allowed values: png, jpeg
reference_asset_idsarray—
  • Default: []
  • Maximum items: 16 items
slotstring—
  • Allowed values: primary, variant
  • Default: "primary"
variant_namestring—
  • Minimum length: 1 characters
  • Maximum length: 80 characters
current_asset_idstring—
  • Format: UUID
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

PUT/api/v1/works/{work_id}/scenes/{scene_id}/references/background-scenes/{reference_id}Background scene · Attach to scene

Background scene · Attach to scene. PUT /api/v1/works/{work_id}/scenes/{scene_id}/references/background-scenes/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

DELETE/api/v1/works/{work_id}/scenes/{scene_id}/references/background-scenes/{reference_id}Background scene · Detach from scene

Background scene · Detach from scene. DELETE /api/v1/works/{work_id}/scenes/{scene_id}/references/background-scenes/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/propsProp · Read (list)

Prop · Read (list). GET /api/v1/works/{work_id}/props. GET

Required scope: projects:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "kind": "character",
        "name": "example",
        "description": "example",
        "tags": [
          "example"
        ],
        "primary_asset_id": "11111111-1111-4111-8111-111111111111"
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/propsProp · Create

Prop · Create. POST /api/v1/works/{work_id}/props. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
namestring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
descriptionstring—
  • Maximum length: 4000 characters
tagsarray—
  • Maximum items: 8 items
revisioninteger*
Your first request · JSON
{
  "name": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/props/{reference_id}Prop · Read

Prop · Read. GET /api/v1/works/{work_id}/props/{reference_id}. GET

Required scope: projects:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "kind": "character",
    "name": "example",
    "description": "example",
    "tags": [
      "example"
    ],
    "primary_asset_id": "11111111-1111-4111-8111-111111111111"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PATCH/api/v1/works/{work_id}/props/{reference_id}Prop · Update

Prop · Update. PATCH /api/v1/works/{work_id}/props/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
namestring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
descriptionstring—
  • Maximum length: 4000 characters
tagsarray—
  • Maximum items: 8 items
revisioninteger*
Your first request · JSON
{
  "name": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

DELETE/api/v1/works/{work_id}/props/{reference_id}Prop · Delete

Prop · Delete. DELETE /api/v1/works/{work_id}/props/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PUT/api/v1/works/{work_id}/props/{reference_id}/primary-imageProp · Set reference image

Prop · Set reference image. PUT /api/v1/works/{work_id}/props/{reference_id}/primary-image. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
asset_idstring*
  • Format: UUID
current_asset_idoneOf*
revisioninteger*
Your first request · JSON
{
  "asset_id": "11111111-1111-4111-8111-111111111111",
  "current_asset_id": "11111111-1111-4111-8111-111111111111",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/props/{reference_id}/image-generationsProp · Generate reference image

Prop · Generate reference image. POST /api/v1/works/{work_id}/props/{reference_id}/image-generations. revision + Idempotency-Key → GET /api/v1/jobs/{job_id}

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
variantsinteger—
  • Default: 1
  • Minimum: 1
  • Maximum: 4
modelstring—
  • Default: "image-standard"
  • Minimum length: 1 characters
  • Maximum length: 200 characters
promptstring—
  • Minimum length: 1 characters
  • Maximum length: 20000 characters
aspect_ratiostring—
image_sizestring—
  • Maximum length: 40 characters
qualitystring—
  • Allowed values: low, medium, high
backgroundstring—
  • Allowed values: auto, opaque, transparent
output_formatstring—
  • Allowed values: png, jpeg
reference_asset_idsarray—
  • Default: []
  • Maximum items: 16 items
slotstring—
  • Allowed values: primary, variant
  • Default: "primary"
variant_namestring—
  • Minimum length: 1 characters
  • Maximum length: 80 characters
current_asset_idstring—
  • Format: UUID
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

PUT/api/v1/works/{work_id}/scenes/{scene_id}/references/props/{reference_id}Prop · Attach to scene

Prop · Attach to scene. PUT /api/v1/works/{work_id}/scenes/{scene_id}/references/props/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

DELETE/api/v1/works/{work_id}/scenes/{scene_id}/references/props/{reference_id}Prop · Detach from scene

Prop · Detach from scene. DELETE /api/v1/works/{work_id}/scenes/{scene_id}/references/props/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/gridsGrid · Read (list)

Grid · Read (list). GET /api/v1/works/{work_id}/grids. GET

Required scope: projects:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "kind": "character",
        "name": "example",
        "description": "example",
        "tags": [
          "example"
        ],
        "primary_asset_id": "11111111-1111-4111-8111-111111111111"
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/gridsGrid · Create

Grid · Create. POST /api/v1/works/{work_id}/grids. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
namestring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
descriptionstring—
  • Maximum length: 4000 characters
tagsarray—
  • Maximum items: 8 items
revisioninteger*
Your first request · JSON
{
  "name": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/grids/{reference_id}Grid · Read

Grid · Read. GET /api/v1/works/{work_id}/grids/{reference_id}. GET

Required scope: projects:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "kind": "character",
    "name": "example",
    "description": "example",
    "tags": [
      "example"
    ],
    "primary_asset_id": "11111111-1111-4111-8111-111111111111"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PATCH/api/v1/works/{work_id}/grids/{reference_id}Grid · Update

Grid · Update. PATCH /api/v1/works/{work_id}/grids/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
namestring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
descriptionstring—
  • Maximum length: 4000 characters
tagsarray—
  • Maximum items: 8 items
revisioninteger*
Your first request · JSON
{
  "name": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

DELETE/api/v1/works/{work_id}/grids/{reference_id}Grid · Delete

Grid · Delete. DELETE /api/v1/works/{work_id}/grids/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PUT/api/v1/works/{work_id}/grids/{reference_id}/primary-imageGrid · Set reference image

Grid · Set reference image. PUT /api/v1/works/{work_id}/grids/{reference_id}/primary-image. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
asset_idstring*
  • Format: UUID
current_asset_idoneOf*
revisioninteger*
Your first request · JSON
{
  "asset_id": "11111111-1111-4111-8111-111111111111",
  "current_asset_id": "11111111-1111-4111-8111-111111111111",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/grids/{reference_id}/image-generationsGrid · Generate reference image

Grid · Generate reference image. POST /api/v1/works/{work_id}/grids/{reference_id}/image-generations. revision + Idempotency-Key → GET /api/v1/jobs/{job_id}

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
variantsinteger—
  • Default: 1
  • Minimum: 1
  • Maximum: 4
modelstring—
  • Default: "image-standard"
  • Minimum length: 1 characters
  • Maximum length: 200 characters
promptstring—
  • Minimum length: 1 characters
  • Maximum length: 20000 characters
aspect_ratiostring—
image_sizestring—
  • Maximum length: 40 characters
qualitystring—
  • Allowed values: low, medium, high
backgroundstring—
  • Allowed values: auto, opaque, transparent
output_formatstring—
  • Allowed values: png, jpeg
reference_asset_idsarray—
  • Default: []
  • Maximum items: 16 items
slotstring—
  • Allowed values: primary, variant
  • Default: "primary"
variant_namestring—
  • Minimum length: 1 characters
  • Maximum length: 80 characters
current_asset_idstring—
  • Format: UUID
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

PUT/api/v1/works/{work_id}/scenes/{scene_id}/references/grids/{reference_id}Grid · Attach to scene

Grid · Attach to scene. PUT /api/v1/works/{work_id}/scenes/{scene_id}/references/grids/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

DELETE/api/v1/works/{work_id}/scenes/{scene_id}/references/grids/{reference_id}Grid · Detach from scene

Grid · Detach from scene. DELETE /api/v1/works/{work_id}/scenes/{scene_id}/references/grids/{reference_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
reference_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/episodesEpisode · Read (list)

Episode · Read (list). GET /api/v1/works/{work_id}/episodes. GET

Required scope: projects:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "number": 1,
        "title": "example",
        "raw_content": "example",
        "description": "example"
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/episodesCreate episode

Create episode. POST /api/v1/works/{work_id}/episodes. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
titlestring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
numberinteger—
raw_contentstring—
  • Maximum length: 20000 characters
descriptionstring—
  • Maximum length: 4000 characters
revisioninteger*
Your first request · JSON
{
  "title": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/episodes/{episode_id}Episode · Read

Episode · Read. GET /api/v1/works/{work_id}/episodes/{episode_id}. GET

Required scope: projects:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
episode_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "number": 1,
    "title": "example",
    "raw_content": "example",
    "description": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PATCH/api/v1/works/{work_id}/episodes/{episode_id}Episode · Update

Episode · Update. PATCH /api/v1/works/{work_id}/episodes/{episode_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
episode_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
titlestring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
numberinteger—
raw_contentstring—
  • Maximum length: 20000 characters
descriptionstring—
  • Maximum length: 4000 characters
revisioninteger*
Your first request · JSON
{
  "title": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

DELETE/api/v1/works/{work_id}/episodes/{episode_id}Episode · Delete

Episode · Delete. DELETE /api/v1/works/{work_id}/episodes/{episode_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
episode_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/episodes/{episode_id}/scenesScene · Read (list)

Scene · Read (list). GET /api/v1/works/{work_id}/episodes/{episode_id}/scenes. GET

Required scope: projects:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
episode_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "episode_id": "11111111-1111-4111-8111-111111111111",
        "number": 1,
        "heading": "example",
        "description": "example",
        "video_prompt": "example"
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/episodes/{episode_id}/scenesCreate scene

Create scene. POST /api/v1/works/{work_id}/episodes/{episode_id}/scenes. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
episode_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
headingstring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
numberinteger—
descriptionstring—
  • Maximum length: 4000 characters
video_promptoneOf—
revisioninteger*
Your first request · JSON
{
  "heading": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/episodes/{episode_id}/scenes/{scene_id}Scene · Read

Scene · Read. GET /api/v1/works/{work_id}/episodes/{episode_id}/scenes/{scene_id}. GET

Required scope: projects:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
episode_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "episode_id": "11111111-1111-4111-8111-111111111111",
    "number": 1,
    "heading": "example",
    "description": "example",
    "video_prompt": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PATCH/api/v1/works/{work_id}/episodes/{episode_id}/scenes/{scene_id}Scene · Update

Scene · Update. PATCH /api/v1/works/{work_id}/episodes/{episode_id}/scenes/{scene_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
episode_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
headingstring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
numberinteger—
descriptionstring—
  • Maximum length: 4000 characters
video_promptoneOf—
revisioninteger*
Your first request · JSON
{
  "heading": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/archive-importsImport ZIP archive

Import ZIP archive. POST /api/v1/works/{work_id}/archive-imports. Use a verified ZIP asset_id and current revision. Preserves the archive and uses the same name-based material update rules as Studio. Check imported, failed and asset_ids on completion. Creation requires jobs:create, assets:read, assets:write and projects:write. Idempotency-Key; GET /api/v1/works/{work_id}/archive-imports/{import_id}

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
asset_idstring*
  • Format: UUID
Your first request · JSON
{
  "revision": 1,
  "asset_id": "11111111-1111-4111-8111-111111111111"
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "progress": {
      "phase": "extracting",
      "current": 0,
      "total": 0
    },
    "imported": 0,
    "failed": 0,
    "asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

GET/api/v1/works/{work_id}/archive-imports/{import_id}Get archive import

Get archive import. GET /api/v1/works/{work_id}/archive-imports/{import_id}. Use a verified ZIP asset_id and current revision. Preserves the archive and uses the same name-based material update rules as Studio. Check imported, failed and asset_ids on completion. Creation requires jobs:create, assets:read, assets:write and projects:write. jobs:read

Required scope: jobs:read

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
import_idpathstring*
  • Format: UUID

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "progress": {
      "phase": "extracting",
      "current": 0,
      "total": 0
    },
    "imported": 0,
    "failed": 0,
    "asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/uploadsPrepare file batch upload

Prepare file batch upload. POST /api/v1/works/{work_id}/uploads. Idempotency-Key + files (1–20) → PUT upload_url → POST /api/v1/uploads/{upload_id}/complete

Required scope: assets:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
filesarray*
  • Maximum items: 20 items
files[].filenamestring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
files[].mime_typestring*
  • Allowed values: text/plain, text/markdown, application/vnd.openxmlformats-officedocument.wordprocessingml.document, image/png, image/jpeg, image/webp, image/avif, audio/wav, application/zip
files[].size_bytesinteger*
  • Maximum: 1073741824
files[].sha256string*
Your first request · JSON
{
  "files": [
    {
      "filename": "example",
      "mime_type": "text/plain",
      "size_bytes": 1,
      "sha256": "example"
    }
  ]
}

Responses

HTTP 201 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "items": [
      {
        "filename": "example",
        "ticket": {
          "id": "11111111-1111-4111-8111-111111111111",
          "asset_id": "11111111-1111-4111-8111-111111111111",
          "upload_url": "example",
          "method": "PUT",
          "content_type": "example",
          "expires_at": "2026-09-20T00:00:00Z"
        }
      }
    ]
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

DELETE/api/v1/works/{work_id}/scenes/{scene_id}Scene · Delete

Scene · Delete. DELETE /api/v1/works/{work_id}/scenes/{scene_id}. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PUT/api/v1/works/{work_id}/episodes/{episode_id}/scene-orderReorder scenes

Reorder scenes. PUT /api/v1/works/{work_id}/episodes/{episode_id}/scene-order. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
episode_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
scene_idsarray*
  • Maximum items: 500 items
revisioninteger*
Your first request · JSON
{
  "scene_ids": [
    "11111111-1111-4111-8111-111111111111"
  ],
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PUT/api/v1/works/{work_id}/scriptSave script

Save script. PUT /api/v1/works/{work_id}/script. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
textstring*
  • Maximum length: 5000000 characters
revisioninteger*
Your first request · JSON
{
  "text": "example",
  "revision": 1
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/scenes/{scene_id}/video-generationsGenerate scene video

Generate scene video. POST /api/v1/works/{work_id}/scenes/{scene_id}/video-generations. revision + Idempotency-Key → GET /api/v1/jobs/{job_id}

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
anchor_asset_idstring—
  • Format: UUID
reference_asset_idsarray—
  • Maximum items: 12 items
modelstring—
  • Default: "video-standard"
  • Minimum length: 1 characters
  • Maximum length: 200 characters
promptstring—
  • Minimum length: 1 characters
  • Maximum length: 10000 characters
duration_secondsinteger*
  • Minimum: 1
  • Maximum: 60
resolutionstring*
  • Minimum length: 1 characters
  • Maximum length: 20 characters
aspect_ratiostring*
  • Minimum length: 1 characters
  • Maximum length: 20 characters
generate_audioboolean—
Your first request · JSON
{
  "revision": 1,
  "duration_seconds": 1,
  "resolution": "example",
  "aspect_ratio": "example"
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

PUT/api/v1/works/{work_id}/scenes/{scene_id}/selected-takeSelect final take

Select final take. PUT /api/v1/works/{work_id}/scenes/{scene_id}/selected-take. revision + Idempotency-Key

Required scope: projects:write

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
scene_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
take_idoneOf*
Your first request · JSON
{
  "revision": 1,
  "take_id": "11111111-1111-4111-8111-111111111111"
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{work_id}/exportsExport final video

Export final video. POST /api/v1/works/{work_id}/exports. revision + Idempotency-Key → GET /api/v1/jobs/{job_id}

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
work_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
allow_partialboolean—
  • Default: true
selectionsarray—
  • Maximum items: 200 items
selections[].scene_idstring*
  • Format: UUID
selections[].asset_idstring*
  • Format: UUID
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

Legacy integration API
POST/api/v1/works/{project_id}/plansCheck the plan and the credits it will cost

Check what will be produced and how many credits it will cost, without starting the actual production.

Required scope: runs:write

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
template_idstring*
  • Fixed value: episode-production
template_versionnumber*
  • Fixed value: 1
project_revisioninteger*
episode_idsarray*Episode IDs must be unique.
  • Maximum items: 10 items
modestring*
  • Allowed values: reviewed, automatic
output_profilestring*
  • Allowed values: sandbox-episode-v1, episode-standard-v1
Your first request · JSON
{
  "template_id": "episode-production",
  "template_version": 1,
  "project_revision": 1,
  "episode_ids": [
    "11111111-1111-4111-8111-111111111111"
  ],
  "mode": "reviewed",
  "output_profile": "sandbox-episode-v1"
}

Responses

HTTP 201 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "project_revision": 1,
    "template_id": "example",
    "template_version": 1,
    "executable": false,
    "expires_at": "2026-09-20T00:00:00Z",
    "budget_ceiling": {
      "currency": "example",
      "micro_units": "example"
    },
    "steps": [
      {
        "stage_key": "example",
        "target_ids": [
          "11111111-1111-4111-8111-111111111111"
        ],
        "depends_on": [
          "example"
        ],
        "requires_review": false,
        "max_cost": {
          "currency": "example",
          "micro_units": "example"
        }
      }
    ],
    "unsupported_reasons": [
      "example"
    ]
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{project_id}/runsStart production

Starts production from an existing plan_id and returns a run ID. Use getRun to track its state and results.

Required scope: runs:write

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
plan_idstring*
  • Format: UUID
client_referencestring—
  • Maximum length: 128 characters
Your first request · JSON
{
  "plan_id": "11111111-1111-4111-8111-111111111111"
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "plan_id": "11111111-1111-4111-8111-111111111111",
    "version": 1,
    "state": "queued",
    "client_reference": "example",
    "created_at": "2026-09-20T00:00:00Z",
    "completed_at": "2026-09-20T00:00:00Z",
    "budget_remaining": {
      "currency": "example",
      "micro_units": "example"
    },
    "committed_cost": {
      "currency": "example",
      "micro_units": "example"
    },
    "unresolved_cost": {
      "currency": "example",
      "micro_units": "example"
    },
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ]
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

POST/api/v1/works/{project_id}/workflow/commandsEdit Studio production

Edits production data, such as scripts, scenes, designs or selected takes. Choose an operation and send its input with the latest revision.

Required scope: projects:write

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*operation = design.asset.set
operationstring*operation = design.asset.set
  • Fixed value: design.asset.set
inputobject*operation = design.asset.set
input.idstring*operation = design.asset.set
  • Format: UUID
input.asset_idstring*operation = design.asset.set
  • Format: UUID
input.kindstring*operation = design.asset.set
  • Allowed values: primary, variant
input.current_asset_idoneOf*operation = design.asset.set
input.namestring—operation = design.asset.set
  • Minimum length: 1 characters
  • Maximum length: 80 characters
revisioninteger*operation = asset.delete
operationstring*operation = asset.delete
  • Fixed value: asset.delete
inputobject*operation = asset.delete
input.idstring*operation = asset.delete
  • Format: UUID
revisioninteger*operation = trash.restore
operationstring*operation = trash.restore
  • Fixed value: trash.restore
inputobject*operation = trash.restore
input.idstring*operation = trash.restore
  • Format: UUID
input.entity_typestring*operation = trash.restore
  • Allowed values: asset, design
revisioninteger*operation = scene.duplicate
operationstring*operation = scene.duplicate
  • Fixed value: scene.duplicate
inputobject*operation = scene.duplicate
input.idstring*operation = scene.duplicate
  • Format: UUID
revisioninteger*operation = project.settings.update
operationstring*operation = project.settings.update
  • Fixed value: project.settings.update
inputobject*operation = project.settings.update
input.titlestring*operation = project.settings.update
  • Minimum length: 1 characters
  • Maximum length: 120 characters
input.tagsarray*operation = project.settings.update
  • Maximum items: 8 items
input.coverstring*operation = project.settings.update
  • Allowed values: amber, indigo, teal, rust, moss, ink, sage, bone, wine, wash, blush, void
input.aspectstring*operation = project.settings.update
  • Allowed values: 16:9, 9:16, 1:1, 4:3, 21:9
input.resolutionstring*operation = project.settings.update
  • Allowed values: 480p, 720p, 1080p, 2k
input.stylestring*operation = project.settings.update
  • Allowed values: realistic_general, realistic_urban, realistic_cinematic, 2d_japanese_manga, 2d_korean_urban, 2d_korean, 2d_otome, 2d_chinese_manga, 2d_classical, 3d_chinese, 3d_xianxia, 3d_cartoon, cg_general, cg_cyberpunk, ink_gongbi, custom
input.style_promptstring*operation = project.settings.update
  • Maximum length: 1000 characters
revisioninteger*operation = project.rename
operationstring*operation = project.rename
  • Fixed value: project.rename
inputobject*operation = project.rename
input.titlestring*operation = project.rename
  • Minimum length: 1 characters
  • Maximum length: 120 characters
revisioninteger*operation = project.state.set
operationstring*operation = project.state.set
  • Fixed value: project.state.set
inputobject*operation = project.state.set
input.statestring*operation = project.state.set
  • Allowed values: active, archived
revisioninteger*operation = script.update
operationstring*operation = script.update
  • Fixed value: script.update
inputobject*operation = script.update
input.textstring*operation = script.update
  • Maximum length: 5000000 characters
revisioninteger*operation = script.bible.update
operationstring*operation = script.bible.update
  • Fixed value: script.bible.update
inputobject*operation = script.bible.update
input.loglinestring*operation = script.bible.update
  • Maximum length: 500 characters
input.synopsisstring*operation = script.bible.update
  • Maximum length: 4000 characters
revisioninteger*operation = episode.save
operationstring*operation = episode.save
  • Fixed value: episode.save
inputobject*operation = episode.save
input.idstring—operation = episode.save
  • Format: UUID
input.titlestring*operation = episode.save
  • Minimum length: 1 characters
  • Maximum length: 200 characters
input.numberinteger—operation = episode.save
input.raw_contentstring—operation = episode.save
  • Maximum length: 20000 characters
input.descriptionstring—operation = episode.save
  • Maximum length: 4000 characters
revisioninteger*operation = episode.delete
operationstring*operation = episode.delete
  • Fixed value: episode.delete
inputobject*operation = episode.delete
input.idstring*operation = episode.delete
  • Format: UUID
revisioninteger*operation = scene.save
operationstring*operation = scene.save
  • Fixed value: scene.save
inputobject*operation = scene.save
input.idstring—operation = scene.save
  • Format: UUID
input.episode_idstring*operation = scene.save
  • Format: UUID
input.headingstring*operation = scene.save
  • Minimum length: 1 characters
  • Maximum length: 200 characters
input.numberinteger—operation = scene.save
input.descriptionstring—operation = scene.save
  • Maximum length: 4000 characters
input.video_promptoneOf—operation = scene.save
revisioninteger*operation = scene.delete
operationstring*operation = scene.delete
  • Fixed value: scene.delete
inputobject*operation = scene.delete
input.idstring*operation = scene.delete
  • Format: UUID
revisioninteger*operation = scene.reorder
operationstring*operation = scene.reorder
  • Fixed value: scene.reorder
inputobject*operation = scene.reorder
input.episode_idstring*operation = scene.reorder
  • Format: UUID
input.scene_idsarray*operation = scene.reorder
  • Maximum items: 500 items
revisioninteger*operation = design.save
operationstring*operation = design.save
  • Fixed value: design.save
inputobject*operation = design.save
input.idstring—operation = design.save
  • Format: UUID
input.kindstring*operation = design.save
  • Allowed values: character, scene, prop, grid
input.namestring*operation = design.save
  • Minimum length: 1 characters
  • Maximum length: 200 characters
input.descriptionstring—operation = design.save
  • Maximum length: 4000 characters
input.tagsarray—operation = design.save
  • Maximum items: 8 items
revisioninteger*operation = design.delete
operationstring*operation = design.delete
  • Fixed value: design.delete
inputobject*operation = design.delete
input.idstring*operation = design.delete
  • Format: UUID
revisioninteger*operation = design.voice.set
operationstring*operation = design.voice.set
  • Fixed value: design.voice.set
inputobject*operation = design.voice.set
input.idstring*operation = design.voice.set
  • Format: UUID
input.asset_idoneOf*operation = design.voice.set
revisioninteger*operation = design.asset.detach
operationstring*operation = design.asset.detach
  • Fixed value: design.asset.detach
inputobject*operation = design.asset.detach
input.idstring*operation = design.asset.detach
  • Format: UUID
input.asset_idstring*operation = design.asset.detach
  • Format: UUID
input.kindstring*operation = design.asset.detach
  • Allowed values: primary, variant, voice
revisioninteger*operation = design.asset.restore
operationstring*operation = design.asset.restore
  • Fixed value: design.asset.restore
inputobject*operation = design.asset.restore
input.idstring*operation = design.asset.restore
  • Format: UUID
input.current_asset_idstring*operation = design.asset.restore
  • Format: UUID
input.restore_asset_idstring*operation = design.asset.restore
  • Format: UUID
input.kindstring*operation = design.asset.restore
  • Allowed values: primary, variant
revisioninteger*operation = design.variant.rename
operationstring*operation = design.variant.rename
  • Fixed value: design.variant.rename
inputobject*operation = design.variant.rename
input.idstring*operation = design.variant.rename
  • Format: UUID
input.asset_idstring*operation = design.variant.rename
  • Format: UUID
input.namestring*operation = design.variant.rename
  • Minimum length: 1 characters
  • Maximum length: 80 characters
revisioninteger*operation = scene.design.attach
operationstring*operation = scene.design.attach
  • Fixed value: scene.design.attach
inputobject*operation = scene.design.attach
input.scene_idstring*operation = scene.design.attach
  • Format: UUID
input.design_idstring*operation = scene.design.attach
  • Format: UUID
revisioninteger*operation = scene.design.detach
operationstring*operation = scene.design.detach
  • Fixed value: scene.design.detach
inputobject*operation = scene.design.detach
input.scene_idstring*operation = scene.design.detach
  • Format: UUID
input.design_idstring*operation = scene.design.detach
  • Format: UUID
revisioninteger*operation = cut.take.select
operationstring*operation = cut.take.select
  • Fixed value: cut.take.select
inputobject*operation = cut.take.select
input.scene_idstring*operation = cut.take.select
  • Format: UUID
input.asset_idoneOf*operation = cut.take.select
revisioninteger*operation = take.delete
operationstring*operation = take.delete
  • Fixed value: take.delete
inputobject*operation = take.delete
input.scene_idstring*operation = take.delete
  • Format: UUID
input.asset_idstring*operation = take.delete
  • Format: UUID
Your first request · JSON
{
  "revision": 1,
  "operation": "design.asset.set",
  "input": {
    "id": "11111111-1111-4111-8111-111111111111",
    "asset_id": "11111111-1111-4111-8111-111111111111",
    "kind": "primary",
    "current_asset_id": "11111111-1111-4111-8111-111111111111"
  }
}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "work_id": "11111111-1111-4111-8111-111111111111",
    "changed_id": "11111111-1111-4111-8111-111111111111",
    "revision": 1,
    "studio_url": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/works/{project_id}/cut/exportsExport Studio cut

Joins selected scene videos in episode and scene order. Use selections to choose takes explicitly and allow_partial to permit missing scenes. Track the export with getJob.

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
allow_partialboolean—
  • Default: true
selectionsarray—
  • Maximum items: 200 items
selections[].scene_idstring*
  • Format: UUID
selections[].asset_idstring*
  • Format: UUID
Your first request · JSON
{
  "revision": 1
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

POST/api/v1/works/{project_id}/storyboard/videosGenerate storyboard scene video

Generates a video take for scene_id using the selected model, duration and resolution. anchor_asset_id can specify the starting image. Track the returned job with getJob.

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
scene_idstring*
  • Format: UUID
anchor_asset_idstring—
  • Format: UUID
reference_asset_idsarray—
  • Maximum items: 12 items
modelstring—
  • Default: "video-standard"
  • Minimum length: 1 characters
  • Maximum length: 200 characters
promptstring—
  • Minimum length: 1 characters
  • Maximum length: 10000 characters
duration_secondsinteger*
  • Minimum: 1
  • Maximum: 60
resolutionstring*
  • Minimum length: 1 characters
  • Maximum length: 20 characters
aspect_ratiostring*
  • Minimum length: 1 characters
  • Maximum length: 20 characters
generate_audioboolean—
Your first request · JSON
{
  "revision": 1,
  "scene_id": "11111111-1111-4111-8111-111111111111",
  "duration_seconds": 1,
  "resolution": "example",
  "aspect_ratio": "example"
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

POST/api/v1/works/{project_id}/designs/imagesGenerate character, setting, prop or grid images

Generates one to four images for design_id, using a prompt and optional reference images. Choose a primary or variant slot and track the job with getJob.

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
project_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
revisioninteger*
design_idstring*
  • Format: UUID
variantsinteger—
  • Default: 1
  • Minimum: 1
  • Maximum: 4
modelstring—
  • Default: "image-standard"
  • Minimum length: 1 characters
  • Maximum length: 200 characters
promptstring—
  • Minimum length: 1 characters
  • Maximum length: 20000 characters
aspect_ratiostring—
image_sizestring—
  • Maximum length: 40 characters
qualitystring—
  • Allowed values: low, medium, high
backgroundstring—
  • Allowed values: auto, opaque, transparent
output_formatstring—
  • Allowed values: png, jpeg
reference_asset_idsarray—
  • Default: []
  • Maximum items: 16 items
slotstring—
  • Allowed values: primary, variant
  • Default: "primary"
variant_namestring—
  • Minimum length: 1 characters
  • Maximum length: 80 characters
current_asset_idstring—
  • Format: UUID
Your first request · JSON
{
  "revision": 1,
  "design_id": "11111111-1111-4111-8111-111111111111"
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

Uploads

POST/api/v1/uploadsGet an address to upload a file to

Registers file metadata and returns an upload_url. PUT the file bytes there, then call the upload completion endpoint. Supports TXT, Markdown, DOCX, PNG, JPEG, WebP, AVIF, WAV and ZIP. Byte limits share Studio settings: read upload_limits from GET /capabilities. Scripts allow up to 5,000,000 characters. Filenames cannot contain path separators. WAV must use PCM or IEEE float.

Required scope: assets:write

Parameters

NameTypeRequiredDescription
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
project_idstring*
  • Format: UUID
filenamestring*
  • Minimum length: 1 characters
  • Maximum length: 200 characters
mime_typestring*
  • Allowed values: text/plain, text/markdown, application/vnd.openxmlformats-officedocument.wordprocessingml.document, image/png, image/jpeg, image/webp, image/avif, audio/wav, application/zip
size_bytesinteger*
  • Maximum: 1073741824
sha256string*
Your first request · JSON
{
  "project_id": "11111111-1111-4111-8111-111111111111",
  "filename": "example",
  "mime_type": "text/plain",
  "size_bytes": 1,
  "sha256": "example"
}

Responses

HTTP 201 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "asset_id": "11111111-1111-4111-8111-111111111111",
    "upload_url": "example",
    "method": "PUT",
    "content_type": "example",
    "expires_at": "2026-09-20T00:00:00Z"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/uploads/{upload_id}/completeTell us the file is fully uploaded

Validates the uploaded file against its declared metadata and returns the asset that can be used in production.

Required scope: assets:write

Parameters

NameTypeRequiredDescription
upload_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

Your first request · JSON
{}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "state": "pending",
    "mime_type": "example",
    "size_bytes": 0,
    "download_url": "example",
    "expires_at": "2026-09-20T00:00:00Z"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PUT/api/v1/uploads/{upload_id}/contentUpload the file contents

Sends the raw file bytes for an existing upload ticket as application/octet-stream. Call completeUpload after the transfer succeeds.

Required scope: assets:write

Parameters

NameTypeRequiredDescription
upload_idpathstring*
  • Format: UUID

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "uploaded": true
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

Assets & results

GET/api/v1/assets/{asset_id}View a result file and its download link

Returns asset metadata and a signed download_url when available. Use that URL to download the file before it expires.

Required scope: assets:read

Parameters

NameTypeRequiredDescription
asset_idpathstring*
  • Format: UUID

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "state": "pending",
    "mime_type": "example",
    "size_bytes": 0,
    "download_url": "example",
    "expires_at": "2026-09-20T00:00:00Z"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/downloads/{asset_id}Download the finished file

Downloads the file bytes using the complete signed download_url returned by getAsset. The link expires after five minutes.

Parameters

NameTypeRequiredDescription
asset_idpathstring*
  • Format: UUID
expiresquerystring*
signaturequerystring*

Responses

HTTP 200 File bytes

application/octet-stream · File bytes

Error responses · error.code ↗

Try it out

Production runs

GET/api/v1/runsList your production runs

Lists production runs, with filters for project, state, client_reference and date range.

Required scope: runs:read

Parameters

NameTypeRequiredDescription
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100
project_idquerystring—
  • Format: UUID
statequerystring—
  • Allowed values: queued, running, awaiting_review, stopping, paused, needs_attention, partially_succeeded, succeeded, failed, cancelled
client_referencequerystring—
  • Minimum length: 1 characters
  • Maximum length: 128 characters
fromquerystring—
  • Format: Date and time with timezone
toquerystring—
  • Format: Date and time with timezone

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "work_id": "11111111-1111-4111-8111-111111111111",
        "plan_id": "11111111-1111-4111-8111-111111111111",
        "version": 1,
        "state": "queued",
        "client_reference": "example",
        "created_at": "2026-09-20T00:00:00Z",
        "completed_at": "2026-09-20T00:00:00Z",
        "budget_remaining": {
          "currency": "example",
          "micro_units": "example"
        },
        "committed_cost": {
          "currency": "example",
          "micro_units": "example"
        },
        "unresolved_cost": {
          "currency": "example",
          "micro_units": "example"
        },
        "output_asset_ids": [
          "11111111-1111-4111-8111-111111111111"
        ]
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/runs/{run_id}Check how a run is going

Returns the current state, version and available results of a production run. Use its version when submitting a decision.

Required scope: runs:read

Parameters

NameTypeRequiredDescription
run_idpathstring*
  • Format: UUID

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "plan_id": "11111111-1111-4111-8111-111111111111",
    "version": 1,
    "state": "queued",
    "client_reference": "example",
    "created_at": "2026-09-20T00:00:00Z",
    "completed_at": "2026-09-20T00:00:00Z",
    "budget_remaining": {
      "currency": "example",
      "micro_units": "example"
    },
    "committed_cost": {
      "currency": "example",
      "micro_units": "example"
    },
    "unresolved_cost": {
      "currency": "example",
      "micro_units": "example"
    },
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ]
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/runs/{run_id}/stepsSee progress step by step

Lists the individual steps of a run so you can see which stages are waiting, running or finished.

Required scope: runs:read

Parameters

NameTypeRequiredDescription
run_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "run_id": "11111111-1111-4111-8111-111111111111",
        "stage_key": "example",
        "target_id": "11111111-1111-4111-8111-111111111111",
        "job_id": "11111111-1111-4111-8111-111111111111",
        "state": "blocked",
        "output_asset_ids": [
          "11111111-1111-4111-8111-111111111111"
        ],
        "error_code": "example",
        "ordinal": 1
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/runs/{run_id}/eventsSee what happened during a run

Lists recorded events for a run, such as state changes and review requests, to trace what happened during production.

Required scope: runs:read

Parameters

NameTypeRequiredDescription
run_idpathstring*
  • Format: UUID
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "items": [
      {
        "event_id": "11111111-1111-4111-8111-111111111111",
        "run_id": "11111111-1111-4111-8111-111111111111",
        "sequence": 1,
        "type": "run.state_changed",
        "state": "queued",
        "step_id": "11111111-1111-4111-8111-111111111111",
        "created_at": "2026-09-20T00:00:00Z"
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/runs/{run_id}/decisionsApprove or stop a run

Submits a decision for a run: approve, stop, resume, cancel_remaining or retry_result. Send its latest version as expected_version. retry_result resumes result polling for a saved video task. Send the latest expected_version and step_id. It retains the original job and credit hold without generating again. Only recoverable videos within 24 hours of run admission are supported. Other unknown results or usage require operator review.

Required scope: runs:write

Parameters

NameTypeRequiredDescription
run_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
actionstring*retry_result resumes result polling for an accepted Studio video on the original reservation; requires step_id and expected_version. It never resubmits generation. Unconfirmed usage without a saved video task requires operator review.
  • Allowed values: approve, stop, resume, cancel_remaining, retry_result
expected_versioninteger*
step_idstring—
  • Format: UUID
selected_asset_idsarray—
  • Maximum items: 10 items
Your first request · JSON
{
  "action": "approve",
  "expected_version": 1
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "plan_id": "11111111-1111-4111-8111-111111111111",
    "version": 1,
    "state": "queued",
    "client_reference": "example",
    "created_at": "2026-09-20T00:00:00Z",
    "completed_at": "2026-09-20T00:00:00Z",
    "budget_remaining": {
      "currency": "example",
      "micro_units": "example"
    },
    "committed_cost": {
      "currency": "example",
      "micro_units": "example"
    },
    "unresolved_cost": {
      "currency": "example",
      "micro_units": "example"
    },
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ]
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

Workflow functions

GET/api/v1/jobs/{job_id}Check a job and its result

Returns a job’s current state and output asset IDs. Once complete, use getAsset to retrieve its result files.

Required scope: jobs:read

Parameters

NameTypeRequiredDescription
job_idpathstring*
  • Format: UUID

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/jobs/{job_id}/buildRead build progress and sources

Returns a script build job’s stage, progress messages and source documents, including the text prepared for processing.

Required scope: jobs:read, assets:read

Parameters

NameTypeRequiredDescription
job_idpathstring*
  • Format: UUID

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "state": "example",
    "stage": "example",
    "messages": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "role": "assistant",
        "stage": "example",
        "content": "example",
        "status": "streaming",
        "seq": 1,
        "created_at": "example",
        "updated_at": "example"
      }
    ],
    "sources": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "name": "example",
        "filterMode": "prompt_index",
        "sourceText": "example",
        "llmText": "example",
        "originalChars": 1,
        "preparedChars": 1
      }
    ]
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

Legacy integration API
POST/api/v1/jobsRun a single feature right away

Run just one feature instead of the whole production. analyze_script reads the script and creates shots, generate_image makes character, scene, prop and shot images, generate_video makes the video for a shot whose image you picked, and assemble_video joins an episode whose shots all have a video. Always send the project’s latest revision. Live requests reserve credits up front.

Required scope: jobs:create

Parameters

NameTypeRequiredDescription
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
project_idstring*
  • Format: UUID
project_revisioninteger*
target_idstring*
  • Format: UUID
typestring*
  • Allowed values: analyze_script, generate_image, generate_video, assemble_video
profile_idstring*
  • Maximum length: 100 characters
client_referencestring—
  • Maximum length: 128 characters
Your first request · JSON
{
  "project_id": "11111111-1111-4111-8111-111111111111",
  "project_revision": 1,
  "target_id": "11111111-1111-4111-8111-111111111111",
  "type": "analyze_script",
  "profile_id": "example"
}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "state": "queued",
    "output_asset_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

Request logs

GET/api/v1/requestsList the requests you sent

Lists API request logs with HTTP status and duration. Filter by project and date range to investigate calls.

Required scope: requests:read

Parameters

NameTypeRequiredDescription
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100
fromquerystring—
  • Format: Date and time with timezone
toquerystring—
  • Format: Date and time with timezone
project_idquerystring—
  • Format: UUID
run_idquerystring—
  • Format: UUID
job_idquerystring—
  • Format: UUID
key_idquerystring—
  • Format: UUID
status_codequeryinteger—
  • Minimum: 100
  • Maximum: 599
methodquerystring—
  • Allowed values: GET, POST, PATCH, PUT
route_templatequerystring—
  • Minimum length: 1 characters
  • Maximum length: 300 characters

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "items": [
      {
        "request_id": "11111111-1111-4111-8111-111111111111",
        "created_at": "2026-09-20T00:00:00Z",
        "method": "GET",
        "route_template": "example",
        "status_code": 100,
        "duration_ms": 0,
        "actor_kind": "api_key",
        "work_id": "11111111-1111-4111-8111-111111111111",
        "run_id": "11111111-1111-4111-8111-111111111111",
        "job_id": "11111111-1111-4111-8111-111111111111",
        "replayed": false,
        "error_code": "example"
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

GET/api/v1/requests/{request_id}View one request you sent

Looks up one API call by request_id, including its HTTP status, duration and associated run or job.

Required scope: requests:read

Parameters

NameTypeRequiredDescription
request_idpathstring*
  • Format: UUID

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "request_id": "11111111-1111-4111-8111-111111111111",
    "created_at": "2026-09-20T00:00:00Z",
    "method": "GET",
    "route_template": "example",
    "status_code": 100,
    "duration_ms": 0,
    "actor_kind": "api_key",
    "work_id": "11111111-1111-4111-8111-111111111111",
    "run_id": "11111111-1111-4111-8111-111111111111",
    "job_id": "11111111-1111-4111-8111-111111111111",
    "replayed": false,
    "error_code": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

Usage

GET/api/v1/usageCheck your credit usage

Returns usage totals for the requested period, including reserved and settled amounts.

Required scope: usage:read

Parameters

No parameters

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "period_start": "2026-09-20T00:00:00Z",
    "period_end": "2026-09-20T00:00:00Z",
    "as_of": "2026-09-20T00:00:00Z",
    "http_requests": 0,
    "runs": 0,
    "jobs": 0,
    "reserved": {
      "currency": "example",
      "micro_units": "example"
    },
    "committed": {
      "currency": "example",
      "micro_units": "example"
    },
    "unresolved": {
      "currency": "example",
      "micro_units": "example"
    },
    "remaining": {
      "currency": "example",
      "micro_units": "example"
    },
    "amount_basis": "partner_limit",
    "billing_mode": "pilot"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

Webhooks

GET/api/v1/webhook-endpointsList your webhook addresses

Lists registered webhook URLs and their event subscriptions and enabled state.

Required scope: webhooks:read

Parameters

NameTypeRequiredDescription
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "url": "example",
        "work_ids": [
          "11111111-1111-4111-8111-111111111111"
        ],
        "events": [
          "run.state_changed"
        ],
        "enabled": false,
        "verified": false,
        "secret_version": 1,
        "created_at": "2026-09-20T00:00:00Z"
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/webhook-endpointsAdd a webhook address

Registers a webhook URL to receive the selected production events for the specified projects.

Required scope: webhooks:write

Parameters

NameTypeRequiredDescription
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

NameTypeRequiredDescription
urlstring*
  • Format: uri
  • Maximum length: 2000 characters
project_idsarray*
  • Maximum items: 100 items
eventsarray*
  • Maximum items: 4 items
Your first request · JSON
{
  "url": "example",
  "project_ids": [
    "11111111-1111-4111-8111-111111111111"
  ],
  "events": [
    "run.state_changed"
  ]
}

Responses

HTTP 201 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "endpoint": {
      "id": "11111111-1111-4111-8111-111111111111",
      "url": "example",
      "work_ids": [
        "11111111-1111-4111-8111-111111111111"
      ],
      "events": [
        "run.state_changed"
      ],
      "enabled": false,
      "verified": false,
      "secret_version": 1,
      "created_at": "2026-09-20T00:00:00Z"
    }
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

PATCH/api/v1/webhook-endpoints/{endpoint_id}Edit a webhook address

Enables or disables a webhook endpoint, or changes the events it receives.

Required scope: webhooks:write

Parameters

NameTypeRequiredDescription
endpoint_idpathstring*
  • Format: UUID
If-Matchheaderstring*Use the latest ETag, including quotes.

Request body

NameTypeRequiredDescription
enabledboolean—
eventsarray—
  • Maximum items: 4 items
Your first request · JSON
{}

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "url": "example",
    "work_ids": [
      "11111111-1111-4111-8111-111111111111"
    ],
    "events": [
      "run.state_changed"
    ],
    "enabled": false,
    "verified": false,
    "secret_version": 1,
    "created_at": "2026-09-20T00:00:00Z"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

Webhook deliveries

GET/api/v1/webhook-deliveriesSee what was sent to your webhook

Lists webhook delivery attempts and their status so you can check whether notifications were delivered.

Required scope: webhooks:read

Parameters

NameTypeRequiredDescription
cursorquerystring—
  • Minimum length: 1 characters
  • Maximum length: 500 characters
limitqueryinteger—
  • Default: 20
  • Minimum: 1
  • Maximum: 100

Responses

HTTP 200 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "endpoint_id": "11111111-1111-4111-8111-111111111111",
        "event_id": "11111111-1111-4111-8111-111111111111",
        "state": "pending",
        "attempt": 0,
        "http_status": 1,
        "next_attempt_at": "2026-09-20T00:00:00Z",
        "created_at": "2026-09-20T00:00:00Z"
      }
    ],
    "next_cursor": "example"
  }
}

Response headers: X-Request-Id · ETag

Error responses · error.code ↗

Try it out

POST/api/v1/webhook-deliveries/{delivery_id}/redeliverSend a webhook again

Requests another delivery of an existing webhook notification identified by delivery_id.

Required scope: webhooks:write

Parameters

NameTypeRequiredDescription
delivery_idpathstring*
  • Format: UUID
Idempotency-Keyheaderstring*Retry with the same Idempotency-Key and request body.
  • Minimum length: 16 characters
  • Maximum length: 128 characters

Request body

Your first request · JSON
{}

Responses

HTTP 202 Success

Your first request · JSON
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "endpoint_id": "11111111-1111-4111-8111-111111111111",
    "event_id": "11111111-1111-4111-8111-111111111111",
    "state": "pending",
    "attempt": 0,
    "http_status": 1,
    "next_attempt_at": "2026-09-20T00:00:00Z",
    "created_at": "2026-09-20T00:00:00Z"
  }
}

Response headers: X-Request-Id · ETag · Retry-After

Error responses · error.code ↗

Try it out

Specification

GET/api/v1/openapi.jsonDownload the API specification

Downloads the OpenAPI specification containing API paths, request fields and response schemas.

Parameters

No parameters

Responses

HTTP 200 OpenAPI document

Your first request · JSON
{}

Try it out

Error responses · error.code 71

A 2xx response means the request went through. 201 means something was created; 202 means we accepted it and are still working, so there is no result yet — poll the job state to see when it finishes. Successful responses contain request_id and data. File downloads and the API specification are the only exceptions. When something fails, every endpoint returns the same error shape. Branch your code on error.code; message is there to tell a person the cause and what to do. Use retryable to decide whether to send the request again. Retry automatically only when it is true, and wait as long as retry_after_seconds or the Retry-After header says. When you retry a POST, send the same Idempotency-Key and the same body so nothing is charged or created twice. If you get an error.code you do not recognise, handle it from the HTTP status and retryable. Include request_id when you contact support. Failures that happen after a job is accepted show up in the job state and its result, not in this response.

{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "error": {
    "code": "INVALID_REQUEST",
    "message": "Invalid input. Check the required fields, types and values.",
    "retryable": false
  }
}
error.codeHTTPDescription
INVALID_REFERENCE422A selected reference is unavailable or does not belong to this project. Select a ready image from this project.
MODEL_UNAVAILABLE422The selected model is unavailable. Refresh the model list and select another model.
MODEL_POLICY_REQUIRED503No default model policy is configured. Specify a model or ask the administrator to configure the task policy.
BUILD_REPLAY_CONFLICT409The build inputs changed. Review the saved build before continuing.
INVALID_REQUEST400,422Invalid input. Check the required fields, types and values.
INVALID_API_KEY401Invalid credentials or download signature. Check the API key or obtain a new download URL.
INSUFFICIENT_SCOPE403Permission denied. Check the key scopes and project access.
PARTNER_BLOCKED403Account blocked. Contact support.
PARTNER_PAUSED403Account paused. Ask the administrator to resume access.
RESOURCE_NOT_FOUND404Resource unavailable. Check its ID and access permissions.
METHOD_NOT_ALLOWED405Unsupported HTTP method. Use the documented method.
REQUEST_TIMEOUT408Request body timed out. Check the connection and upload size.
IDEMPOTENCY_KEY_REQUIRED400Provide a valid Idempotency-Key header.
IDEMPOTENCY_CONFLICT409This Idempotency-Key belongs to a different request. Reuse it only with the original request.
IDEMPOTENCY_KEY_EXPIRED409Idempotency record expired. Check the original result before starting a new operation.
PRECONDITION_FAILED412Provide the latest quoted ETag in If-Match.
REVISION_CONFLICT409Resource changed. Read the latest revision before updating.
RESOURCE_CONFLICT409Resource conflicts with existing data. Review the current resource.
INVALID_TRANSITION409Action is unavailable in the current state. Read the latest state.
RUN_IN_PROGRESS409A run is in progress. Check its status before starting another.
JOB_RUNNING409A job is running. Wait for completion before editing.
PLAN_EXPIRED409Plan expired. Create a new plan and review its quote.
INSUFFICIENT_CREDITS402Insufficient credits. Check the balance and required credits.
BUDGET_EXCEEDED409,429Budget limit exceeded. Review usage and the configured budget.
RATE_LIMITED429Request rate exceeded. Follow retryable and Retry-After before retrying.
CAPACITY_EXCEEDED429Capacity limit exceeded. Reduce the workload or wait for active work to finish.
PAYLOAD_TOO_LARGE413Request body too large. Reduce it to the documented limit.
UNSUPPORTED_MEDIA_TYPE415Unsupported content type or encoding. Use the documented Content-Type without Content-Encoding.
UPLOAD_TOO_LARGE422Uploaded content exceeds its processing limit. Reduce the file size.
UPLOAD_NOT_VERIFIED422Upload is incomplete, expired or invalid. Check the upload and verification steps.
ASSET_KIND_MISMATCH422Asset type does not match the operation. Select a compatible asset.
SELECTED_IMAGE_REQUIRED422Select a valid image before generating video.
SELECTED_VIDEO_REQUIRED422Select valid videos for the requested shots before assembly.
REFERENCE_LIMIT_EXCEEDED422Too many reference assets. Reduce them to the model limit.
REFERENCE_IMAGE_REQUIRED422This model requires a reference image. Add an image or select a text-to-image model.
INVALID_GENERATION_OPTIONS422Generation options are invalid. Check the model capabilities.
PROMPT_REQUIRED422Provide a generation prompt.
SCRIPT_TEXT_REQUIRED422Provide script text before starting this operation.
SCENES_REQUIRED422Create scenes before starting this operation.
VARIANT_NAME_REQUIRED422Provide a variant name.
EPISODE_ALREADY_STRUCTURED409Episode already has shots. Review its existing structure.
ONE_SCRIPT_PER_PROJECT409This project supports one script. Use the existing script.
MULTIPLE_SCRIPTS_REQUIRE_REVIEW409Multiple scripts need review before continuing.
NATIVE_CONTENT_ALREADY_EXISTS409Studio content already exists. Review it before continuing.
LIVE_PROJECT_REQUIRED409This operation requires a live project.
STUDIO_MIGRATION_REQUIRED409Project needs Studio migration. Contact support.
UNSUPPORTED_CAPABILITY422Unsupported operation or profile. Check GET /capabilities.
CAPABILITY_UNAVAILABLE503Capability currently unavailable. Check GET /capabilities.
API_NOT_ACCEPTING503New requests are paused. Check service availability.
DEPENDENCY_UNAVAILABLE503A required service is unavailable. Follow the retry guidance or contact support.
PRICING_UNAVAILABLE503Pricing unavailable. A valid quote is required to proceed.
MEDIA_TOOLS_UNAVAILABLE503Media processing unavailable. Contact support.
STORAGE_READ_FAILED503Could not read the stored asset. Contact support with request_id.
STORAGE_WRITE_FAILED503Could not save the asset. Check the result before retrying.
INTERNAL_ERROR500Internal error. Follow retry guidance; include request_id when contacting support.
RESPONSE_CONTRACT_VIOLATION500Server response validation failed. Contact support with request_id.
INVALID_EXECUTION_CONTEXT500Execution context is invalid. Contact support.
RETRY_TRANSACTION503Transaction could not complete. Follow the response retry guidance.
CLAIM_LOST409Execution ownership changed. Check the current job state.
PROVIDER_TIMEOUT504Generation service timed out. Check the existing job before submitting again.
PROVIDER_TERMINAL_FAILURE422Generation failed. Review the job result and inputs.
PROVIDER_RESULT_UNAVAILABLE502Generation result unavailable. Check the existing job and recovery options.
INVALID_RESULT422,503Result failed validation. Review the job or contact support.
RESULT_TOO_LARGE422Result exceeds the processing limit. Reduce the requested output.
EXPORT_TOO_LARGE422Export exceeds the size limit. Reduce the export selection.
RECOVERY_BACKOFF409Existing result recovery is delayed. Check again later; do not resubmit generation.
VIDEO_RECOVERY_REVIEW_REQUIRED503The original video task needs scheduled recovery or operator review. Do not resubmit generation.
RESULT_RECOVERY_REQUIRED409,503Existing result needs recovery. Check the run recovery options before resubmitting.
RESULT_NOT_RECOVERABLE409Result cannot be recovered through this action. Review the run or contact support.
RECOVERY_CAPACITY_EXCEEDED409Recovery limit reached. Contact support before further recovery attempts.
USAGE_RECOVERY_REQUIRED503Usage needs reconciliation. Contact support; do not resubmit generation blindly.