{"openapi":"3.1.0","info":{"title":"NoodleTomato Media API","version":"1","description":"Generate images, video clips, and narration from your own agent, assemble them into a composition, and render a finished video. Your agent does the thinking; NoodleTomato runs generation and rendering and charges only for media and delivered video.\n\nJob completion is read by polling (`getGeneration`, `getRender`). There are no callbacks or webhooks.\n\nEvery call needs an active plan on the key owner's account and a key with the operation's scope. Mint keys at https://app.noodletomato.com/settings/developer?tab=keys.\n\nThe same operations are available as MCP tools over Streamable HTTP at https://app.noodletomato.com/api/mcp (bearer auth with the same key)."},"servers":[{"url":"https://app.noodletomato.com/api/backend"}],"security":[{"apiKey":[]}],"tags":[{"name":"media","description":"Models, quotes, generations, and assets."},{"name":"projects","description":"Containers for related work."},{"name":"compositions","description":"Timelines built from your assets."},{"name":"renders","description":"Finished videos from compositions."},{"name":"account","description":"Access and balances."},{"name":"skills","description":"Instructions for agents."}],"paths":{"/v1/media/models":{"get":{"operationId":"listModels","summary":"List generation models","description":"The versioned catalogue of models and modes with their inputs and settings. Send the exact `modelId`/`modelVersion`/`modeId`/`modeVersion` back when you generate.","tags":["media"],"security":[{"apiKey":["media:generations:read"]}],"x-required-scope":"media:generations:read","parameters":[{"name":"mediaType","in":"query","required":false,"description":"Only this media type.","schema":{"type":"string","enum":["image","video","audio"]}},{"name":"projectId","in":"query","required":false,"description":"Use this owned project’s pinned billing unit for availability.","schema":{"type":"string"}}],"responses":{"200":{"description":"List generation models","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelCatalogue"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media/estimate":{"post":{"operationId":"estimateGeneration","summary":"Quote a generation","description":"Estimates the reservation using the same pricing policy as generation admission. Final charges reflect actual usage. Free to call; does not start work.","tags":["media"],"security":[{"apiKey":["media:generations:read"]}],"x-required-scope":"media:generations:read","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateGenerationRequest"}}}},"responses":{"200":{"description":"Quote a generation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationEstimate"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media/generations":{"post":{"operationId":"createGeneration","summary":"Start a generation","description":"Reserves the quoted amount and starts the job. Poll `getGeneration` until `status` is terminal. Requires an `Idempotency-Key` header; replaying the same key with the same payload returns the same generation, a different payload is rejected with 409.","tags":["media"],"security":[{"apiKey":["media:generations:create"]}],"x-required-scope":"media:generations:create","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique per intended generation (1-255 chars). Safe to retry with the same key.","schema":{"type":"string","minLength":1,"maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGenerationRequest"}}}},"responses":{"202":{"description":"Start a generation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Generation"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"listGenerations","summary":"List generations","tags":["media"],"security":[{"apiKey":["media:generations:read"]}],"x-required-scope":"media:generations:read","parameters":[{"name":"projectId","in":"query","required":false,"description":"Only generations in this project.","schema":{"type":"string"}},{"name":"mediaType","in":"query","required":false,"description":"Only this media type.","schema":{"type":"string","enum":["image","video","audio"]}},{"name":"status","in":"query","required":false,"description":"Only this status.","schema":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]}},{"name":"limit","in":"query","required":false,"description":"Page size, 1-100 (default 50).","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page's `nextCursor`.","schema":{"type":"string"}}],"responses":{"200":{"description":"List generations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationList"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media/generations/{generationId}":{"get":{"operationId":"getGeneration","summary":"Get a generation","description":"Status, charge, and (once succeeded) a short-lived result URL.","tags":["media"],"security":[{"apiKey":["media:generations:read"]}],"x-required-scope":"media:generations:read","parameters":[{"name":"generationId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Get a generation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Generation"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media/generations/{generationId}/cancel":{"post":{"operationId":"cancelGeneration","summary":"Cancel a generation","description":"Cancels a generation that has not started and releases its reservation. A running generation answers 409 with its current state (work already in flight is settled at its real cost); terminal generations are returned unchanged.","tags":["media"],"security":[{"apiKey":["media:generations:create"]}],"x-required-scope":"media:generations:create","parameters":[{"name":"generationId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cancel a generation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Generation"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media/uploads":{"post":{"operationId":"uploadReferenceImage","summary":"Upload a reference image","description":"Store a PNG, JPEG, or WebP (max 3 MB decoded; max 8192 px per side) as an asset you own, for use as a starting image or style reference. Bytes are inspected and moderated before anything is stored. Send JSON `{dataBase64, filename}`; the same route also accepts `multipart/form-data` with one `file` field.","tags":["media"],"security":[{"apiKey":["media:generations:create"]}],"x-required-scope":"media:generations:create","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadReferenceImageRequest"}},"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"PNG, JPEG, or WebP, up to 3 MB."}}}}}},"responses":{"201":{"description":"Upload a reference image","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Asset"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media/assets":{"get":{"operationId":"listAssets","summary":"List assets","description":"Generated results and uploaded reference images you own, newest first.","tags":["media"],"security":[{"apiKey":["media:generations:read"]}],"x-required-scope":"media:generations:read","parameters":[{"name":"projectId","in":"query","required":false,"description":"Only assets linked to this project.","schema":{"type":"string"}},{"name":"mediaType","in":"query","required":false,"description":"Only this media type.","schema":{"type":"string","enum":["image","video","audio"]}},{"name":"limit","in":"query","required":false,"description":"Page size, 1-100 (default 50).","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page's `nextCursor`.","schema":{"type":"string"}}],"responses":{"200":{"description":"List assets","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetList"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media/assets/{artifactId}":{"get":{"operationId":"getAsset","summary":"Get an asset","tags":["media"],"security":[{"apiKey":["media:generations:read"]}],"x-required-scope":"media:generations:read","parameters":[{"name":"artifactId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Get an asset","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Asset"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media/assets/{artifactId}/projects":{"post":{"operationId":"attachAssetProject","summary":"Link an asset to a project","tags":["media"],"security":[{"apiKey":["media:generations:create"]}],"x-required-scope":"media:generations:create","parameters":[{"name":"artifactId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachAssetProjectRequest"}}}},"responses":{"200":{"description":"Link an asset to a project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Asset"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media/assets/{artifactId}/projects/{projectId}":{"delete":{"operationId":"detachAssetProject","summary":"Unlink an asset from a project","tags":["media"],"security":[{"apiKey":["media:generations:create"]}],"x-required-scope":"media:generations:create","parameters":[{"name":"artifactId","in":"path","required":true,"schema":{"type":"string"}},{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Unlink an asset from a project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Asset"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/projects":{"get":{"operationId":"listProjects","summary":"List projects","tags":["projects"],"security":[{"apiKey":["projects:read"]}],"x-required-scope":"projects:read","parameters":[{"name":"status","in":"query","required":false,"description":"Only this status.","schema":{"type":"string","enum":["active","archived"]}},{"name":"limit","in":"query","required":false,"description":"Page size, 1-100 (default 50).","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page's `nextCursor`.","schema":{"type":"string"}}],"responses":{"200":{"description":"List projects","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectList"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createProject","summary":"Create a project","description":"A container for related generations and assets.","tags":["projects"],"security":[{"apiKey":["projects:write"]}],"x-required-scope":"projects:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectRequest"}}}},"responses":{"201":{"description":"Create a project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/projects/{projectId}":{"get":{"operationId":"getProject","summary":"Get a project","tags":["projects"],"security":[{"apiKey":["projects:read"]}],"x-required-scope":"projects:read","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Get a project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/projects/{projectId}/archive":{"post":{"operationId":"archiveProject","summary":"Archive a project","description":"Archived projects keep their assets but accept no new generations.","tags":["projects"],"security":[{"apiKey":["projects:write"]}],"x-required-scope":"projects:write","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Archive a project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/compositions":{"get":{"operationId":"listCompositions","summary":"List compositions","description":"Latest version of every composition in a project.","tags":["compositions"],"security":[{"apiKey":["compositions:read"]}],"x-required-scope":"compositions:read","parameters":[{"name":"projectId","in":"query","required":false,"description":"The project whose compositions to list.","schema":{"type":"string"}}],"responses":{"200":{"description":"List compositions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompositionList"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createComposition","summary":"Create a composition","description":"A timeline (EDL) of clips and audio you own inside one project. Every referenced artifact must be a media asset in that project. Nothing is rendered until you call `createRender`.","tags":["compositions"],"security":[{"apiKey":["compositions:write"]}],"x-required-scope":"compositions:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCompositionRequest"}}}},"responses":{"201":{"description":"Create a composition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Composition"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/compositions/{compositionId}":{"get":{"operationId":"getComposition","summary":"Get a composition version","tags":["compositions"],"security":[{"apiKey":["compositions:read"]}],"x-required-scope":"compositions:read","parameters":[{"name":"compositionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Get a composition version","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Composition"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/compositions/{compositionId}/versions":{"post":{"operationId":"updateComposition","summary":"Revise a composition","description":"Appends a new version; earlier versions stay renderable. Pass `expectedVersion` to guard against concurrent edits.","tags":["compositions"],"security":[{"apiKey":["compositions:write"]}],"x-required-scope":"compositions:write","parameters":[{"name":"compositionId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCompositionRequest"}}}},"responses":{"201":{"description":"Revise a composition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Composition"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/renders":{"post":{"operationId":"createRender","summary":"Render a composition","description":"Compiles the composition and renders it to an MP4 as an async job. An invalid composition is refused before any job starts. Rendering the same composition version at the same quality again returns the existing render.","tags":["renders"],"security":[{"apiKey":["renders:create"]}],"x-required-scope":"renders:create","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRenderRequest"}}}},"responses":{"202":{"description":"Render a composition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Render"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"listRenders","summary":"List renders","tags":["renders"],"security":[{"apiKey":["renders:read"]}],"x-required-scope":"renders:read","parameters":[{"name":"projectId","in":"query","required":false,"description":"Only renders in this project.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only this status.","schema":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]}},{"name":"limit","in":"query","required":false,"description":"Page size, 1-100 (default 50).","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page's `nextCursor`.","schema":{"type":"string"}}],"responses":{"200":{"description":"List renders","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderList"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/renders/{renderId}":{"get":{"operationId":"getRender","summary":"Get a render","description":"Poll until `status` is terminal; `result.url` is a short-lived download link for the finished video.","tags":["renders"],"security":[{"apiKey":["renders:read"]}],"x-required-scope":"renders:read","parameters":[{"name":"renderId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Get a render","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Render"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/renders/{renderId}/cancel":{"post":{"operationId":"cancelRender","summary":"Cancel a queued render","description":"Only a render that has not started can be cancelled; a running render answers 409 with its current state.","tags":["renders"],"security":[{"apiKey":["renders:create"]}],"x-required-scope":"renders:create","parameters":[{"name":"renderId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cancel a queued render","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Render"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account":{"get":{"operationId":"getAccount","summary":"Get account standing","description":"Platform access (the verdict every other call is gated on), balances per unit, and this key's scopes. Readable even while access is inactive so an agent can explain what to do next.","tags":["account"],"security":[{"apiKey":["account:read"]}],"x-required-scope":"account:read","responses":{"200":{"description":"Get account standing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/skills":{"get":{"operationId":"listSkills","summary":"List developer skills","description":"Curated, inspectable instructions for an external agent using this API.","tags":["skills"],"security":[{"apiKey":["skills:read"]}],"x-required-scope":"skills:read","responses":{"200":{"description":"List developer skills","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillList"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/skills/{skillId}":{"get":{"operationId":"getSkill","summary":"Read a developer skill","tags":["skills"],"security":[{"apiKey":["skills:read"]}],"x-required-scope":"skills:read","parameters":[{"name":"skillId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Read a developer skill","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Skill"}}}},"401":{"description":"Missing, invalid, expired, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The key owner has no active plan. Read `getAccount` for the reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope, or (code `INSUFFICIENT_TOKENS`, with `required`/`available`) the plan is active but the balance cannot cover the quoted amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"State conflict: an Idempotency-Key reused with a different payload, a stale `expectedVersion`, or a cancel on work that already started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded; honour `retryAfterSeconds`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"`Authorization: Bearer ntapi_…`. Scopes: `media:generations:create` (Start, cancel, and organise generations (spends credits).); `media:generations:read` (Read the model catalogue, price quotes, generation status, and results.); `projects:read` (List and inspect your projects.); `projects:write` (Create and archive projects.); `account:read` (Read your balance and platform access status.); `skills:read` (Read the developer skills that explain how to use the API well.); `compositions:read` (Read a project's compositions (timelines).); `compositions:write` (Create and revise compositions from assets you own.); `renders:create` (Render a composition to a finished video.); `renders:read` (Read render status and download finished videos.)"}},"schemas":{"Error":{"type":"object","properties":{"statusCode":{"type":"integer"},"code":{"type":"string","description":"Stable machine-readable code when one applies."},"message":{"type":"string","description":"Customer-safe explanation. Never names a provider."}},"required":["statusCode","message"]},"ModelCatalogue":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"version":{"type":"integer","exclusiveMinimum":true,"minimum":0},"mediaType":{"type":"string","enum":["image","video","audio"]},"label":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","minLength":1,"maxLength":240},"modes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120},"version":{"type":"integer","exclusiveMinimum":true,"minimum":0},"label":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","minLength":1,"maxLength":240},"inputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"label":{"type":"string","minLength":1,"maxLength":120},"kind":{"type":"string","enum":["style_reference","starting_image","voice"]},"required":{"type":"boolean"},"maxCount":{"type":"integer","minimum":1,"maximum":16},"helpText":{"type":"string","minLength":1,"maxLength":240}},"required":["id","label","kind","required"],"additionalProperties":false},"maxItems":3},"settings":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"label":{"type":"string","minLength":1,"maxLength":120},"kind":{"type":"string","enum":["select"]},"defaultValue":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"options":{"type":"array","items":{"type":"object","properties":{"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"label":{"type":"string","minLength":1,"maxLength":80}},"required":["value","label"],"additionalProperties":false},"minItems":1,"maxItems":12}},"required":["id","label","kind","defaultValue","options"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"label":{"type":"string","minLength":1,"maxLength":120},"kind":{"type":"string","enum":["range"]},"defaultValue":{"type":"number"},"min":{"type":"number"},"max":{"type":"number"},"step":{"type":"number","exclusiveMinimum":true,"minimum":0},"unit":{"type":"string","minLength":1,"maxLength":24}},"required":["id","label","kind","defaultValue","min","max","step"],"additionalProperties":false}]},"maxItems":8}},"required":["id","version","label","description","inputs","settings"],"additionalProperties":false},"minItems":1,"maxItems":12}},"required":["id","version","mediaType","label","description","modes"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"EstimateGenerationRequest":{"type":"object","properties":{"projectId":{"type":"string","minLength":1,"maxLength":255},"modelId":{"type":"string","minLength":1,"maxLength":120},"modelVersion":{"type":"integer","exclusiveMinimum":true,"minimum":0},"modeId":{"type":"string","minLength":1,"maxLength":120},"modeVersion":{"type":"integer","exclusiveMinimum":true,"minimum":0},"prompt":{"type":"string","maxLength":20000,"default":""},"inputs":{"type":"object","properties":{"styleReferenceArtifactId":{"type":"string","minLength":1,"maxLength":255},"referenceImageArtifactId":{"type":"string","minLength":1,"maxLength":255},"styleReferenceArtifactIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":255},"maxItems":16},"referenceImageArtifactIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":255},"maxItems":16},"voiceId":{"type":"string","minLength":1,"maxLength":255}},"additionalProperties":false,"default":{}},"settings":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"default":{}}},"required":["modelId","modelVersion","modeId","modeVersion"],"additionalProperties":false},"GenerationEstimate":{"type":"object","properties":{"mediaType":{"type":"string","enum":["image","video","audio"]},"billingMode":{"type":"string","enum":["metered_cost","output_minutes","retail_credits"]},"estimatedTokens":{"type":"number","minimum":0},"chargedTokens":{"type":"number","minimum":0},"estimatedCredits":{"type":"number","minimum":0},"components":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":120},"mediaType":{"type":"string","enum":["image","video","audio"]},"costClass":{"type":"string","enum":["self_hosted","external"]},"quantity":{"type":"number","minimum":0},"unit":{"type":"string","enum":["image","second","character"]},"credits":{"type":"number","minimum":0}},"required":["label","mediaType","costClass","quantity","unit"],"additionalProperties":false}}},"required":["mediaType","billingMode","estimatedTokens","chargedTokens"],"additionalProperties":false},"CreateGenerationRequest":{"type":"object","properties":{"projectId":{"type":"string","minLength":1,"maxLength":255},"modelId":{"type":"string","minLength":1,"maxLength":120},"modelVersion":{"type":"integer","exclusiveMinimum":true,"minimum":0},"modeId":{"type":"string","minLength":1,"maxLength":120},"modeVersion":{"type":"integer","exclusiveMinimum":true,"minimum":0},"prompt":{"type":"string","minLength":1,"maxLength":20000},"inputs":{"type":"object","properties":{"styleReferenceArtifactId":{"type":"string","minLength":1,"maxLength":255},"referenceImageArtifactId":{"type":"string","minLength":1,"maxLength":255},"styleReferenceArtifactIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":255},"maxItems":16},"referenceImageArtifactIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":255},"maxItems":16},"voiceId":{"type":"string","minLength":1,"maxLength":255}},"additionalProperties":false,"default":{}},"settings":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"default":{}}},"required":["modelId","modelVersion","modeId","modeVersion","prompt"],"additionalProperties":false},"Generation":{"type":"object","properties":{"id":{"type":"string","pattern":"^job\\_","maxLength":255},"object":{"type":"string","enum":["media.generation"]},"projectId":{"type":"string","minLength":1,"maxLength":255},"mediaType":{"type":"string","enum":["image","video","audio"]},"modelId":{"type":"string","minLength":1,"maxLength":120},"modelVersion":{"type":"integer","exclusiveMinimum":true,"minimum":0},"modeId":{"type":"string","minLength":1,"maxLength":120},"modeVersion":{"type":"integer","exclusiveMinimum":true,"minimum":0},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"estimatedTokens":{"type":"number","minimum":0,"nullable":true},"chargedTokens":{"type":"number","minimum":0,"nullable":true},"result":{"type":"object","properties":{"artifactId":{"type":"string"},"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"width":{"type":"integer","exclusiveMinimum":true,"minimum":0,"nullable":true},"height":{"type":"integer","exclusiveMinimum":true,"minimum":0,"nullable":true},"durationSec":{"type":"number","exclusiveMinimum":true,"minimum":0,"nullable":true}},"required":["artifactId","url","mimeType","expiresAt","width","height","durationSec"],"additionalProperties":false,"nullable":true},"error":{"type":"object","properties":{"code":{"type":"string","enum":["generation_failed","generation_cancelled"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time","nullable":true},"completedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","object","projectId","mediaType","modelId","modelVersion","modeId","modeVersion","status","estimatedTokens","chargedTokens","result","error","createdAt","startedAt","completedAt"],"additionalProperties":false},"GenerationList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^job\\_","maxLength":255},"object":{"type":"string","enum":["media.generation"]},"projectId":{"type":"string","minLength":1,"maxLength":255},"mediaType":{"type":"string","enum":["image","video","audio"]},"modelId":{"type":"string","minLength":1,"maxLength":120},"modelVersion":{"type":"integer","exclusiveMinimum":true,"minimum":0},"modeId":{"type":"string","minLength":1,"maxLength":120},"modeVersion":{"type":"integer","exclusiveMinimum":true,"minimum":0},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"estimatedTokens":{"type":"number","minimum":0,"nullable":true},"chargedTokens":{"type":"number","minimum":0,"nullable":true},"error":{"type":"object","properties":{"code":{"type":"string","enum":["generation_failed","generation_cancelled"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time","nullable":true},"completedAt":{"type":"string","format":"date-time","nullable":true},"artifactId":{"type":"string","nullable":true}},"required":["id","object","projectId","mediaType","modelId","modelVersion","modeId","modeVersion","status","estimatedTokens","chargedTokens","error","createdAt","startedAt","completedAt","artifactId"],"additionalProperties":false}},"nextCursor":{"type":"string","nullable":true}},"required":["items","nextCursor"],"additionalProperties":false},"Asset":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":255},"object":{"type":"string","enum":["media.asset"]},"generationId":{"type":"string","pattern":"^job\\_","maxLength":255,"nullable":true},"source":{"type":"string","enum":["generation","upload"],"default":"generation"},"projectIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":255}},"mediaType":{"type":"string","enum":["image","video","audio"]},"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"width":{"type":"integer","exclusiveMinimum":true,"minimum":0,"nullable":true},"height":{"type":"integer","exclusiveMinimum":true,"minimum":0,"nullable":true},"durationSec":{"type":"number","exclusiveMinimum":true,"minimum":0,"nullable":true},"createdAt":{"type":"string","format":"date-time"}},"required":["id","object","generationId","projectIds","mediaType","url","mimeType","expiresAt","width","height","durationSec","createdAt"],"additionalProperties":false},"AssetList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":255},"object":{"type":"string","enum":["media.asset"]},"generationId":{"type":"string","pattern":"^job\\_","maxLength":255,"nullable":true},"source":{"type":"string","enum":["generation","upload"],"default":"generation"},"projectIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":255}},"mediaType":{"type":"string","enum":["image","video","audio"]},"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"width":{"type":"integer","exclusiveMinimum":true,"minimum":0,"nullable":true},"height":{"type":"integer","exclusiveMinimum":true,"minimum":0,"nullable":true},"durationSec":{"type":"number","exclusiveMinimum":true,"minimum":0,"nullable":true},"createdAt":{"type":"string","format":"date-time"}},"required":["id","object","generationId","projectIds","mediaType","url","mimeType","expiresAt","width","height","durationSec","createdAt"],"additionalProperties":false}},"nextCursor":{"type":"string","nullable":true}},"required":["items","nextCursor"],"additionalProperties":false},"AttachAssetProjectRequest":{"type":"object","properties":{"projectId":{"type":"string","minLength":1,"maxLength":255}},"required":["projectId"],"additionalProperties":false},"Project":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":255},"object":{"type":"string","enum":["project"]},"title":{"type":"string"},"status":{"type":"string","enum":["active","archived"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","object","title","status","createdAt","updatedAt"],"additionalProperties":false},"ProjectList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":255},"object":{"type":"string","enum":["project"]},"title":{"type":"string"},"status":{"type":"string","enum":["active","archived"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","object","title","status","createdAt","updatedAt"],"additionalProperties":false}},"nextCursor":{"type":"string","nullable":true}},"required":["items","nextCursor"],"additionalProperties":false},"CreateProjectRequest":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200}},"required":["title"],"additionalProperties":false},"Account":{"type":"object","properties":{"object":{"type":"string","enum":["account"]},"access":{"anyOf":[{"type":"object","properties":{"active":{"type":"boolean","enum":[true]},"paidThrough":{"type":"string","format":"date-time","nullable":true},"cancelAtPeriodEnd":{"type":"boolean"},"billingUnit":{"type":"string","enum":["legacy_token","retail_credit"]},"planKey":{"type":"string","nullable":true}},"required":["active","paidThrough","cancelAtPeriodEnd","billingUnit","planKey"],"additionalProperties":false},{"type":"object","properties":{"active":{"type":"boolean","enum":[false]},"reason":{"type":"string","enum":["no_subscription","payment_pending","payment_failed","term_ended","renewal_pending"]},"message":{"type":"string"},"paidThrough":{"type":"string","format":"date-time","nullable":true}},"required":["active","reason","message","paidThrough"],"additionalProperties":false}]},"balances":{"type":"object","properties":{"retailCredits":{"type":"number"},"legacyTokens":{"type":"number"}},"required":["retailCredits","legacyTokens"],"additionalProperties":false},"key":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"scopes":{"type":"array","items":{"type":"string","enum":["media:generations:create","media:generations:read","projects:read","projects:write","account:read","skills:read","compositions:read","compositions:write","renders:create","renders:read"]}}},"required":["id","scopes"],"additionalProperties":false}},"required":["object","access","balances","key"],"additionalProperties":false},"Skill":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"object":{"type":"string","enum":["skill"]},"title":{"type":"string"},"description":{"type":"string"},"tools":{"type":"array","items":{"type":"string"}},"requiredScopes":{"type":"array","items":{"type":"string","enum":["media:generations:create","media:generations:read","projects:read","projects:write","account:read","skills:read","compositions:read","compositions:write","renders:create","renders:read"]}},"instructions":{"type":"string"}},"required":["id","object","title","description","tools","requiredScopes","instructions"],"additionalProperties":false},"SkillList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,63}$"},"object":{"type":"string","enum":["skill"]},"title":{"type":"string"},"description":{"type":"string"},"tools":{"type":"array","items":{"type":"string"}},"requiredScopes":{"type":"array","items":{"type":"string","enum":["media:generations:create","media:generations:read","projects:read","projects:write","account:read","skills:read","compositions:read","compositions:write","renders:create","renders:read"]}}},"required":["id","object","title","description","tools","requiredScopes"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"UploadReferenceImageRequest":{"type":"object","properties":{"dataBase64":{"type":"string","minLength":1,"maxLength":4194308,"pattern":"^[A-Za-z0-9+/_=\\s-]+$"},"filename":{"type":"string","minLength":1,"maxLength":200,"default":"reference.png"}},"required":["dataBase64"],"additionalProperties":false},"Composition":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":255},"object":{"type":"string","enum":["composition"]},"projectId":{"type":"string","minLength":1,"maxLength":255},"logicalId":{"type":"string"},"version":{"type":"integer","exclusiveMinimum":true,"minimum":0},"title":{"type":"string"},"body":{"type":"object","properties":{"aspect":{"type":"string","enum":["16:9","9:16","1:1"]},"fps":{"type":"integer","minimum":12,"maximum":60,"default":30},"keepClipAudio":{"type":"boolean","default":false},"timeline":{"type":"array","items":{"type":"object","properties":{"clipArtifactId":{"type":"string","minLength":1,"maxLength":255},"inSec":{"type":"number","minimum":0,"maximum":86400,"default":0},"outSec":{"type":"number","minimum":0,"maximum":86400},"clipAudioGainDb":{"type":"number","minimum":-60,"maximum":12,"default":0},"clipAudioMuted":{"type":"boolean","default":false},"transitionOut":{"type":"object","properties":{"type":{"type":"string","enum":["cut","crossfade","dip_black"]},"durationSec":{"type":"number","minimum":0,"maximum":5}},"required":["type","durationSec"],"additionalProperties":false}},"required":["clipArtifactId","outSec"],"additionalProperties":false},"minItems":1,"maxItems":500},"audioTracks":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["voice","music","sfx"],"default":"voice"},"duckUnderVoice":{"type":"boolean","default":false},"segments":{"type":"array","items":{"type":"object","properties":{"artifactId":{"type":"string","minLength":1,"maxLength":255},"startSec":{"type":"number","minimum":0,"maximum":86400,"default":0},"inSec":{"type":"number","minimum":0,"maximum":86400},"outSec":{"type":"number","exclusiveMinimum":true,"minimum":0,"maximum":86400},"gainDb":{"type":"number","minimum":-60,"maximum":12,"default":0},"fadeInSec":{"type":"number","minimum":0,"maximum":30,"default":0},"fadeOutSec":{"type":"number","minimum":0,"maximum":30,"default":0},"loop":{"type":"boolean","default":false}},"required":["artifactId"],"additionalProperties":false},"minItems":1,"maxItems":200}},"required":["segments"],"additionalProperties":false},"maxItems":8,"default":[]},"captions":{"type":"object","properties":{"style":{"type":"string","enum":["none","plain","karaoke"]}},"required":["style"],"additionalProperties":false}},"required":["aspect","timeline"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time"}},"required":["id","object","projectId","logicalId","version","title","body","createdAt"],"additionalProperties":false},"CompositionList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":255},"object":{"type":"string","enum":["composition"]},"projectId":{"type":"string","minLength":1,"maxLength":255},"logicalId":{"type":"string"},"version":{"type":"integer","exclusiveMinimum":true,"minimum":0},"title":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","object","projectId","logicalId","version","title","createdAt"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"CreateCompositionRequest":{"type":"object","properties":{"projectId":{"type":"string","minLength":1,"maxLength":255},"title":{"type":"string","minLength":1,"maxLength":200,"default":"Composition"},"body":{"type":"object","properties":{"aspect":{"type":"string","enum":["16:9","9:16","1:1"]},"fps":{"type":"integer","minimum":12,"maximum":60,"default":30},"keepClipAudio":{"type":"boolean","default":false},"timeline":{"type":"array","items":{"type":"object","properties":{"clipArtifactId":{"type":"string","minLength":1,"maxLength":255},"inSec":{"type":"number","minimum":0,"maximum":86400,"default":0},"outSec":{"type":"number","minimum":0,"maximum":86400},"clipAudioGainDb":{"type":"number","minimum":-60,"maximum":12,"default":0},"clipAudioMuted":{"type":"boolean","default":false},"transitionOut":{"type":"object","properties":{"type":{"type":"string","enum":["cut","crossfade","dip_black"]},"durationSec":{"type":"number","minimum":0,"maximum":5}},"required":["type","durationSec"],"additionalProperties":false}},"required":["clipArtifactId","outSec"],"additionalProperties":false},"minItems":1,"maxItems":500},"audioTracks":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["voice","music","sfx"],"default":"voice"},"duckUnderVoice":{"type":"boolean","default":false},"segments":{"type":"array","items":{"type":"object","properties":{"artifactId":{"type":"string","minLength":1,"maxLength":255},"startSec":{"type":"number","minimum":0,"maximum":86400,"default":0},"inSec":{"type":"number","minimum":0,"maximum":86400},"outSec":{"type":"number","exclusiveMinimum":true,"minimum":0,"maximum":86400},"gainDb":{"type":"number","minimum":-60,"maximum":12,"default":0},"fadeInSec":{"type":"number","minimum":0,"maximum":30,"default":0},"fadeOutSec":{"type":"number","minimum":0,"maximum":30,"default":0},"loop":{"type":"boolean","default":false}},"required":["artifactId"],"additionalProperties":false},"minItems":1,"maxItems":200}},"required":["segments"],"additionalProperties":false},"maxItems":8,"default":[]},"captions":{"type":"object","properties":{"style":{"type":"string","enum":["none","plain","karaoke"]}},"required":["style"],"additionalProperties":false}},"required":["aspect","timeline"],"additionalProperties":false}},"required":["projectId","body"],"additionalProperties":false},"UpdateCompositionRequest":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"body":{"type":"object","properties":{"aspect":{"type":"string","enum":["16:9","9:16","1:1"]},"fps":{"type":"integer","minimum":12,"maximum":60,"default":30},"keepClipAudio":{"type":"boolean","default":false},"timeline":{"type":"array","items":{"type":"object","properties":{"clipArtifactId":{"type":"string","minLength":1,"maxLength":255},"inSec":{"type":"number","minimum":0,"maximum":86400,"default":0},"outSec":{"type":"number","minimum":0,"maximum":86400},"clipAudioGainDb":{"type":"number","minimum":-60,"maximum":12,"default":0},"clipAudioMuted":{"type":"boolean","default":false},"transitionOut":{"type":"object","properties":{"type":{"type":"string","enum":["cut","crossfade","dip_black"]},"durationSec":{"type":"number","minimum":0,"maximum":5}},"required":["type","durationSec"],"additionalProperties":false}},"required":["clipArtifactId","outSec"],"additionalProperties":false},"minItems":1,"maxItems":500},"audioTracks":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["voice","music","sfx"],"default":"voice"},"duckUnderVoice":{"type":"boolean","default":false},"segments":{"type":"array","items":{"type":"object","properties":{"artifactId":{"type":"string","minLength":1,"maxLength":255},"startSec":{"type":"number","minimum":0,"maximum":86400,"default":0},"inSec":{"type":"number","minimum":0,"maximum":86400},"outSec":{"type":"number","exclusiveMinimum":true,"minimum":0,"maximum":86400},"gainDb":{"type":"number","minimum":-60,"maximum":12,"default":0},"fadeInSec":{"type":"number","minimum":0,"maximum":30,"default":0},"fadeOutSec":{"type":"number","minimum":0,"maximum":30,"default":0},"loop":{"type":"boolean","default":false}},"required":["artifactId"],"additionalProperties":false},"minItems":1,"maxItems":200}},"required":["segments"],"additionalProperties":false},"maxItems":8,"default":[]},"captions":{"type":"object","properties":{"style":{"type":"string","enum":["none","plain","karaoke"]}},"required":["style"],"additionalProperties":false}},"required":["aspect","timeline"],"additionalProperties":false},"expectedVersion":{"type":"integer","exclusiveMinimum":true,"minimum":0}},"required":["body"],"additionalProperties":false},"CreateRenderRequest":{"type":"object","properties":{"compositionId":{"type":"string","minLength":1,"maxLength":255},"quality":{"type":"string","enum":["preview","final"],"default":"preview"}},"required":["compositionId"],"additionalProperties":false},"Render":{"type":"object","properties":{"id":{"type":"string","pattern":"^job\\_","maxLength":255},"object":{"type":"string","enum":["render"]},"projectId":{"type":"string","minLength":1,"maxLength":255},"compositionId":{"type":"string","minLength":1,"maxLength":255},"quality":{"type":"string","enum":["preview","final"]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"result":{"type":"object","properties":{"artifactId":{"type":"string"},"url":{"type":"string","format":"uri"},"mimeType":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"width":{"type":"integer","exclusiveMinimum":true,"minimum":0,"nullable":true},"height":{"type":"integer","exclusiveMinimum":true,"minimum":0,"nullable":true},"durationSec":{"type":"number","exclusiveMinimum":true,"minimum":0,"nullable":true}},"required":["artifactId","url","mimeType","expiresAt","width","height","durationSec"],"additionalProperties":false,"nullable":true},"error":{"type":"object","properties":{"code":{"type":"string","enum":["render_failed","render_cancelled"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time","nullable":true},"completedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","object","projectId","compositionId","quality","status","result","error","createdAt","startedAt","completedAt"],"additionalProperties":false},"RenderList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^job\\_","maxLength":255},"object":{"type":"string","enum":["render"]},"projectId":{"type":"string","minLength":1,"maxLength":255},"compositionId":{"type":"string","minLength":1,"maxLength":255},"quality":{"type":"string","enum":["preview","final"]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"error":{"type":"object","properties":{"code":{"type":"string","enum":["render_failed","render_cancelled"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time","nullable":true},"completedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","object","projectId","compositionId","quality","status","error","createdAt","startedAt","completedAt"],"additionalProperties":false}},"nextCursor":{"type":"string","nullable":true}},"required":["items","nextCursor"],"additionalProperties":false}}}}