{"openapi":"3.1.0","info":{"title":"Opennan API","description":"One API key for every AI model. Async tasks: submit a video (POST /v1/videos/generations), an image (POST /v1/images/generations), music (POST /v1/music/generations), a stem split (POST /v1/audio/separations), a 3D tool (POST /v1/3d/characters, /v1/3d/tpose, /v1/3d/models, /v1/3d/rig) or a Roblox 3D model (POST /v1/roblox/models), then poll /v1/tasks/{id} or use callback_url. Text (POST /v1/chat/completions, OpenAI-compatible) and speech (POST /v1/audio/speech, OpenAI-compatible) answer right away; text parameters vary by model (supported_parameters in GET /v1/models) and output stops at max_tokens. Free, no key: song to MIDI (POST /v1/music/midi-transcriptions, also at /v1/piano/transcriptions) and Roblox clothing (POST /v1/roblox/clothing), limited per IP. Voice tools: clone your own voice (POST /v1/voices, with a recorded consent sentence), speak in it (POST /v1/audio/speech with voice vc_...), translate a file into it (POST /v1/audio/translations, a task), live transcribe over WebSocket (wss /v1/realtime/stt), and Voice Translator: speak your language, be heard in another in your own voice with your grammar fixed (POST /v1/voice-transformer/sessions, then the websocket_url it returns); see /llms.txt for the WebSocket messages and GET /v1/tools for prices. Video to captions (POST /v1/pipelines/video-to-captions/runs, a task): timed captions as SRT and VTT, optionally translated, plus an MP4 with the captions burned in. GET /v1/tools (no key) lists every tool that is not a model with its status (live | unavailable | soon), price, limits and real example runs. Video tools (keys with the opt-in scope api:opennan): story concepts (POST /v1/story/concepts), camera shots (POST /v1/story/shots), copy-video shot detection (POST /v1/copy-video/detections), storyboard sheets with no project (POST /v1/storyboards), consistency references (POST /v1/consistency/references), QC (POST /v1/qc/reports) and best take (POST /v1/qc/best-takes) run as tasks; storyboard crops (POST /v1/storyboards/crops) answer right away. Transcription (POST /v1/audio/transcriptions), voice isolation (POST /v1/audio/isolations), video upscale (POST /v1/videos/upscales) and caption translation (POST /v1/captions/translations) run as tasks with a full key or the voice / video scope; so does video dubbing: find the characters (POST /v1/videos/dub-analyses), then dub them with a voice each (POST /v1/videos/dubs). Cloud projects (keys with the opt-in scope api:project): projects (/v1/projects), their timeline (GET with an ETag; one command at a time with If-Match), scenes, media, uploads (POST /v1/uploads) and import (POST /v1/projects/import); characters, objects, locations and memory also need api:opennan. Free. Project video tools (api:opennan and api:project) run on a project's scenes as tasks: plan the scenes (POST /v1/projects/{id}/story/plan), draw a scene's storyboard (POST .../scenes/{scene_id}/storyboard), copy a video into a scene (PUT .../copy-video/source, POST .../copy-video/detections, PATCH .../shots/{index}, POST .../shots/{index}/image-edits, POST .../copy-video/recreate) and render a scene's shots (POST .../scenes/{scene_id}/videos); the export (POST /v1/projects/{id}/exports) needs api:project only and is free.","version":"1.0.0"},"servers":[{"url":"https://api.opennan.com"}],"paths":{"/v1/models":{"get":{"tags":["public-api"],"summary":"List Models","description":"Models callable through the API. `include=studio` also lists the models\nthat run in the Studio only (status \"studio\"), for internal pages.","operationId":"list_models_v1_models_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tools":{"get":{"tags":["public-api"],"summary":"List Tools","description":"Pipelines and realtime tools (models are in GET /v1/models), each with the\nstatus the server really has: live, unavailable (mounted, backend off) or soon,\nand for paid tools the price and input limits from the catalog (the voice\ntools carry their own price block). No key needed; while a tool is held\nback for its testers, a key sent is read and the answer is that account's\n(never cached).","operationId":"list_tools_v1_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/models/{model_id}":{"get":{"tags":["public-api"],"summary":"Get Model","operationId":"get_model_v1_models__model_id__get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/videos/generations":{"post":{"tags":["public-api"],"summary":"Create Video Generation","operationId":"create_video_generation_v1_videos_generations_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoGenerationBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/images/generations":{"post":{"tags":["public-api"],"summary":"Create Image Generation","description":"Paid: one image from a prompt, or an edit of the images you send. Charged\nthe price GET /v1/models lists for exactly what you send (`price.tiers` for\nquality / size, plus `price.per_input_image_usd` per input image), refunded\nin full if it fails. Poll GET /v1/tasks/{id}.","operationId":"create_image_generation_v1_images_generations_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageGenerationBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/roblox/models":{"post":{"tags":["public-api"],"summary":"Create Roblox Model","description":"Paid: turn a prompt or an image into a Roblox-ready 3D model (FBX + GLB +\nthumbnail). item $0.99, body $1.49. Poll GET /v1/tasks/{id}.","operationId":"create_roblox_model_v1_roblox_models_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RobloxModelBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/tasks":{"get":{"tags":["public-api"],"summary":"List Tasks","description":"Your tasks, newest first. A key with the full api scope lists every key\nof the account; a key limited to api:<category> scopes lists only the\ntasks it made itself. `has_more` is true when older tasks exist past\n`limit`. Needs an api or api:<category> scope; video tool tasks are\nlisted only for a key with api:opennan.","operationId":"list_tasks_v1_tasks_get","parameters":[{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"description":"Only the tasks of this cloud project","title":"Project Id"},"description":"Only the tasks of this cloud project"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"description":"queued, running, succeeded, failed or cancelled","title":"Status"},"description":"queued, running, succeeded, failed or cancelled"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"At most 100","default":20,"title":"Limit"},"description":"At most 100"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/tasks/{task_id}":{"get":{"tags":["public-api"],"summary":"Get Task","description":"A task's status and outputs. With `wait`, answers as soon as the task\nfinishes, or with its current state once `wait` seconds have passed.","operationId":"get_task_v1_tasks__task_id__get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}},{"name":"wait","in":"query","required":false,"schema":{"type":"number","maximum":50,"minimum":0,"description":"Seconds (at most 50) to wait for the task to finish before answering","default":0,"title":"Wait"},"description":"Seconds (at most 50) to wait for the task to finish before answering"}],"responses":{"200":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["public-api"],"summary":"Delete Task","description":"Delete a finished task's results: its output files are deleted from our storage and CDN, and its\ntranscripts, caption lines, other text results, prompt and request text are cleared from the record.\nReturns the task with `deleted: true` and empty `outputs`; its status, price and timestamps stay (nothing\nis refunded or charged). Calling it again returns the same answer. A task that is still queued or running\nis refused with 409 `task_running`. Copies already cached at CDN edges can stay reachable for a while.","operationId":"delete_task_v1_tasks__task_id__delete","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"409":{"description":"task_running: the task has not finished yet; nothing was changed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/tasks/{task_id}/cancel":{"post":{"tags":["public-api"],"summary":"Cancel Task","description":"Cancel a video tool task before its first paid step: it ends as\n`cancelled` and its price is refunded in full (a cancelled task is\nreturned as is). 409 (type conflict) with `code`:\n`task_not_cancellable` once a paid step has started or for a kind of task\nthat can't be cancelled, `task_busy_retry` when the task was busy (try\nagain after the Retry-After header), `task_already_finished` for a task\nthat succeeded or failed. 403 for a key without api:opennan.","operationId":"cancel_task_v1_tasks__task_id__cancel_post","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/audio/speech":{"post":{"tags":["public-api"],"summary":"Create Speech","description":"Paid: speak the text. Returns the audio bytes. Charged per character\n(price.from_usd is per 1M characters in GET /v1/models; per started block\nwhere the row has price.billing_block_characters, at least\nprice.minimum_usd per call), and nothing on an error.","operationId":"create_speech_v1_audio_speech_post","requestBody":{"content":{"application/json":{"schema":{"properties":{"model":{"type":"string","maxLength":100,"title":"Model","description":"Speech model id from GET /v1/models?category=voice","default":"kokoro"},"input":{"type":"string","maxLength":16384,"title":"Input","description":"Text to speak, up to 4096 characters"},"voice":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Voice","description":"Voice id from GET /v1/audio/voices?model=... (default: the model's default_voice, heart for kokoro), or your own cloned voice (vc_... from GET /v1/voices: speaks in your voice at its own price, see GET /v1/tools)"},"response_format":{"type":"string","enum":["mp3","wav","opus"],"title":"Response Format","default":"mp3"},"speed":{"type":"number","maximum":4.0,"minimum":0.25,"title":"Speed","default":1.0},"language":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Language","description":"Cloned voices only: the language to speak (default: the voice's own)"}},"type":"object","required":["input"],"title":"SpeechBody"}}},"required":true},"responses":{"200":{"description":"Successful Response"},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/audio/sound-effects":{"post":{"tags":["public-api"],"summary":"Create Sound Effect","description":"Paid per started second of the duration asked for (GET /v1/tools\nsound-effects): a sound effect from a description. Returns the audio\nbytes; nothing is charged on an error.","operationId":"create_sound_effect_v1_audio_sound_effects_post","requestBody":{"content":{"application/json":{"schema":{"properties":{"text":{"type":"string","maxLength":4000,"title":"Text","description":"The sound to make, up to 1,000 characters (e.g. heavy rain on a tin roof)"},"duration_seconds":{"type":"number","maximum":22.0,"minimum":0.5,"title":"Duration Seconds","description":"Seconds, 0.5-22","default":5.0},"response_format":{"type":"string","enum":["mp3","wav","opus"],"title":"Response Format","default":"mp3"}},"additionalProperties":false,"type":"object","required":["text"],"title":"SoundEffectBody"}}},"required":true},"responses":{"200":{"description":"Successful Response"},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/audio/voices":{"get":{"tags":["public-api"],"summary":"List Voices","description":"Voices for the speech models (no key): id, name, language, gender.","operationId":"list_voices_v1_audio_voices_get","parameters":[{"name":"model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/music/generations":{"post":{"tags":["public-api"],"summary":"Create Music","description":"Paid: one track or sound. Charged for `duration` seconds (per the\nmodel's price unit: per second, per started block of seconds, or one flat\nprice a track); refunded if it fails. Poll GET /v1/tasks/{id}.","operationId":"create_music_v1_music_generations_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"model":{"default":"ace-step","description":"Music model id from GET /v1/models?category=music","maxLength":100,"title":"Model","type":"string"},"prompt":{"description":"Style, mood, instruments, tempo","maxLength":1000,"title":"Prompt","type":"string"},"lyrics":{"anyOf":[{"maxLength":4000,"type":"string"},{"type":"null"}],"description":"Sung as written; omit for lyrics written for you","title":"Lyrics"},"duration":{"default":30,"description":"Seconds, within the model's min_duration_seconds-max_duration_seconds (GET /v1/models?category=music)","title":"Duration","type":"integer"},"instrumental":{"default":false,"title":"Instrumental","type":"boolean"},"callback_url":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"POSTed when the task finishes","title":"Callback Url"}},"required":["prompt"],"title":"MusicBody","type":"object"}}}},"security":[{"bearerAuth":[]}]}},"/v1/audio/separations":{"post":{"tags":["public-api"],"summary":"Create Separation","description":"Paid: split a song into vocals + instrumental (or 4 stems). Priced on the\ninput's length (minimum $0.01), checked before anything is charged; refunded\nif it fails. Poll GET /v1/tasks/{id}.","operationId":"create_separation_v1_audio_separations_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"model":{"default":"demucs","description":"Stem-splitting model id from GET /v1/models?category=music","maxLength":100,"title":"Model","type":"string"},"audio_url":{"description":"Public https link to the audio (≤50 MB, ≤15 min)","maxLength":2048,"title":"Audio Url","type":"string"},"stems":{"default":"vocals","description":"vocals: vocals + instrumental; all: vocals, drums, bass, other","enum":["vocals","all"],"title":"Stems","type":"string"},"callback_url":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"POSTed when the task finishes","title":"Callback Url"}},"required":["audio_url"],"title":"SeparationBody","type":"object"}}}},"security":[{"bearerAuth":[]}]}},"/v1/chat/completions":{"post":{"tags":["public-api"],"summary":"Chat Completions","description":"OpenAI-compatible chat completions for the text models in GET /v1/models\n(category text). Paid per token: see each model's price.matrix. Parameters\nvary by model (supported_parameters in GET /v1/models); one the model\nignores is named in the x-opennan-ignored-params response header.","operationId":"chat_completions_v1_chat_completions_post","requestBody":{"content":{"application/json":{"schema":{"properties":{"model":{"type":"string","description":"A text model id from GET /v1/models?category=text."},"messages":{"items":{"type":"object"},"type":"array","description":"OpenAI Chat Completions messages (system, developer, user, assistant, tool)."},"stream":{"type":"boolean"},"stream_options":{"properties":{"include_usage":{"type":"boolean"}},"type":"object"},"max_tokens":{"type":"integer","minimum":1.0,"description":"Output stops here (finish_reason length). Default: the model's default_max_tokens. A model with min_max_tokens in GET /v1/models refuses a smaller value."},"max_completion_tokens":{"type":"integer","minimum":1.0,"description":"Same as max_tokens."},"stop":{"oneOf":[{"type":"string","maxLength":1000},{"items":{"type":"string","maxLength":1000},"type":"array","maxItems":4}],"description":"Up to 4 sequences of up to 1000 characters; the reply ends before the first one (finish_reason stop)."},"n":{"type":"integer","enum":[1]},"temperature":{"type":"number","description":"Used by models whose supported_parameters (GET /v1/models) list it; ignored otherwise."},"top_p":{"type":"number","description":"Used by models whose supported_parameters (GET /v1/models) list it; ignored otherwise."},"presence_penalty":{"type":"number","description":"Used by models whose supported_parameters (GET /v1/models) list it; ignored otherwise."},"frequency_penalty":{"type":"number","description":"Used by models whose supported_parameters (GET /v1/models) list it; ignored otherwise."},"seed":{"type":"integer","description":"Used by models whose supported_parameters (GET /v1/models) list it; ignored otherwise."},"logit_bias":{"type":"object","description":"Used by models whose supported_parameters (GET /v1/models) list it; ignored otherwise."},"response_format":{"type":"object","description":"Used by models whose supported_parameters (GET /v1/models) list it; ignored otherwise. json_schema on a model that can't do it returns 400 unsupported_parameter."},"tools":{"items":{"type":"object"},"type":"array","description":"Models with tools: true."},"tool_choice":{"description":"Models with tools: true."},"parallel_tool_calls":{"type":"boolean","description":"Used by models whose supported_parameters (GET /v1/models) list it; ignored otherwise."},"reasoning_effort":{"type":"string","description":"Used by models whose supported_parameters (GET /v1/models) list it; ignored otherwise."}},"type":"object","required":["model","messages"]}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/piano/transcriptions":{"post":{"tags":["piano"],"summary":"Create Transcription","description":"Start turning a song into piano MIDI. Send exactly one of `url` (YouTube),\n`search` (song name) or `file` (audio/video of piano playing).","operationId":"create_transcription_v1_piano_transcriptions_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_transcription_v1_piano_transcriptions_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/piano/transcriptions/{job_id}":{"get":{"tags":["piano"],"summary":"Get Transcription","operationId":"get_transcription_v1_piano_transcriptions__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/piano/transcriptions/{job_id}/midi":{"get":{"tags":["piano"],"summary":"Piano Transcription Midi","operationId":"piano_transcription_midi_v1_piano_transcriptions__job_id__midi_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/music/midi-transcriptions":{"post":{"tags":["music"],"summary":"Music Midi Transcription Create","description":"Start turning a song into piano MIDI. Send exactly one of `url` (YouTube),\n`search` (song name) or `file` (audio/video of piano playing).","operationId":"music_midi_transcription_create_v1_music_midi_transcriptions_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_music_midi_transcription_create_v1_music_midi_transcriptions_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/music/midi-transcriptions/{job_id}":{"get":{"tags":["music"],"summary":"Music Midi Transcription Get","operationId":"music_midi_transcription_get_v1_music_midi_transcriptions__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/music/midi-transcriptions/{job_id}/midi":{"get":{"tags":["music"],"summary":"Music Midi Transcription Midi","operationId":"music_midi_transcription_midi_v1_music_midi_transcriptions__job_id__midi_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/3d/tpose":{"post":{"tags":["3d"],"summary":"Create Tpose","description":"Paid: make a strict front T-pose reference of a character. Checked first;\nredrawn (identity kept) only when it is not already a T-pose, and charged\nless when no redraw was needed (`price.check_usd` vs `price.check_usd` +\n`price.edit_usd` in GET /v1/tools). Result: `result` {image_url, was_tpose, changed}.","operationId":"create_tpose_v1_3d_tpose_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TposeBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/3d/models":{"post":{"tags":["3d"],"summary":"Create Model","description":"Paid: a textured 3D model from an image or a prompt. Outputs GLB, FBX and a\nthumbnail. Poll GET /v1/tasks/{id}.","operationId":"create_model_v1_3d_models_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/3d/rig":{"post":{"tags":["3d"],"summary":"Create Rig","description":"Paid: auto-rig a humanoid model. Outputs a rigged FBX and GLB, plus walking\nand running clips with animations true.","operationId":"create_rig_v1_3d_rig_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RigBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/3d/characters":{"post":{"tags":["3d"],"summary":"Create Character","description":"Paid pipeline: T-pose (images only, automatic) -> 3D character -> rig.\nOutputs the T-pose image used, the model files and the rigged files.","operationId":"create_character_v1_3d_characters_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__public_api__model3d_router__CharacterBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/roblox/clothing/examples":{"get":{"tags":["roblox"],"summary":"Clothing Examples","description":"Real example runs for the playground: from a prompt (the one the page\nopens on) and from artwork, in the GET /v1/tools example shape.","operationId":"clothing_examples_v1_roblox_clothing_examples_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/roblox/clothing":{"post":{"tags":["roblox"],"summary":"Create Clothing","description":"Make Roblox classic clothing. Send `prompt` (the look, e.g. \"business man\")\nor `file` (artwork becomes the print; a photo of clothes or an avatar\nscreenshot is copied as clothes, `source: \"photo\"`). `item`: outfit (default), shirt, pants or tshirt.\nOptions: shirt_style, shirt_print (chest/badge/allover/plain), pants_style,\npants_print (solid/pattern), color (shirt), pants_color, shoes — \"auto\" reads\nthem from the prompt. Returns Shirt and Pants templates (585×559 PNG) and a\nT-shirt image (512×512 PNG) as data URLs; pieces not asked for are null.\nFree, but needs an account: an API key or the signed-in playground's key.","operationId":"create_clothing_v1_roblox_clothing_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_clothing_v1_roblox_clothing_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/roblox/avatar":{"get":{"tags":["roblox"],"summary":"Get Avatar","description":"A Roblox player's public look: skin colours plus headshot and full-body images.","operationId":"get_avatar_v1_roblox_avatar_get","parameters":[{"name":"username","in":"query","required":true,"schema":{"type":"string","title":"Username"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/story/concepts":{"post":{"tags":["video-tools"],"summary":"Create Story Concepts","description":"Paid, flat per run: story concepts from a script. Each concept has a\ntitle, synopsis, visual style, story arc, key scenes, locations and key\nobjects (tag and look) and the story's sections. Result (task `result`):\n{\"concepts\": [...]}.","operationId":"create_story_concepts_v1_story_concepts_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConceptsBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/story/shots":{"post":{"tags":["video-tools"],"summary":"Create Story Shots","description":"Paid, flat per run: break a scene description into camera shots, each a\nplain description with its length in seconds. Result: {\"shots\":\n[{\"description\", \"duration\"}]}.","operationId":"create_story_shots_v1_story_shots_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShotsBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/copy-video/detections":{"post":{"tags":["video-tools"],"summary":"Create Copy Video Detection","description":"Paid per started minute of video read (at most 10 minutes; the hold is\nthe trimmed length, or 10 minutes without trim_end, and the rest goes\nback): the shots of a video with their timing, action, camera move,\ndialogue, transition and opening frame, the characters in it and whether it\ncarries a watermark. Shot start and end are seconds on your video's own\ntimeline (a trim does not shift them); duration is the length read.\nResult: {\"duration\", \"shots\", \"characters\", \"has_watermark\"}.","operationId":"create_copy_video_detection_v1_copy_video_detections_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectionBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/storyboards/crops":{"post":{"tags":["video-tools"],"summary":"Create Storyboard Crops","description":"Free: cut a storyboard sheet into its panels, in reading order. Answers\nin the same response: {\"panels\": [image URLs]}.","operationId":"create_storyboard_crops_v1_storyboards_crops_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CropBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CropResult"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/storyboards":{"post":{"tags":["video-tools"],"summary":"Create Storyboard","description":"Paid per sheet (the price depends on the reference images sent and\nwhether the panels differ from the shots; POST /v1/quotes with tool\nstoryboard-sheet and the body as inputs gives it exactly): a storyboard\nsheet drawn from a scene description, no project needed, and its panels\ncut out in reading order. Result: {\"image_url\", \"cols\", \"rows\",\n\"aspect_ratio\", \"panels\": [{\"index\", \"image_url\"}]}.","operationId":"create_storyboard_v1_storyboards_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SheetBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/consistency/references":{"post":{"tags":["video-tools"],"summary":"Create Consistency Reference","description":"Paid per image (the price depends on kind): a clean reference image of a\ncharacter (a portrait, optionally following your photo), a location (a\nwide empty establishing view) or an object (a product shot), to keep it\nthe same across shots. Result: {\"image_url\"}.","operationId":"create_consistency_reference_v1_consistency_references_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferenceBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/qc/reports":{"post":{"tags":["video-tools"],"summary":"Create Qc Report","description":"Free: check a video for black frames, frozen frames and silence. Result:\n{\"duration_s\", \"ok\", \"issues\": [{\"type\": black | freeze | silence, \"start\",\n\"end\"}]}. Spans of a type less than 0.25 s apart are merged, and each type\nlists at most its first 200 spans.","operationId":"create_qc_report_v1_qc_reports_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QcBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/qc/best-takes":{"post":{"tags":["video-tools"],"summary":"Create Best Take","description":"Free: rank takes of the same shot by sharpness, exposure and faces in\nframe, best first. Result: {\"ranking\": [{\"index\" (position in\nvideo_urls), \"score\", \"sharpness\", \"brightness\", \"face_frames_pct\"}]}.","operationId":"create_best_take_v1_qc_best_takes_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BestTakeBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/documents/uploads":{"post":{"tags":["video-tools","document-uploads"],"summary":"Start Document Upload","description":"Upload an image (20 MB), PDF or CBZ (50 MB) for translation. Image API keys and\nsigned-in playground users can upload temporary inputs without project-write access.\nPUT the bytes to upload_url, then complete this upload to obtain media_url.","operationId":"start_document_upload_v1_documents_uploads_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentUploadBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/documents/uploads/{upload_id}/complete":{"post":{"tags":["video-tools","document-uploads"],"summary":"Complete Document Upload","description":"Verify and finish this account's temporary document input; project/account uploads\nremain restricted to the existing project-scoped endpoints.","operationId":"complete_document_upload_v1_documents_uploads__upload_id__complete_post","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","maxLength":1024,"title":"Upload Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadedView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/documents/uploads/{upload_id}/content":{"put":{"tags":["video-tools","document-uploads"],"summary":"Put Document Upload","description":"Stream a temporary input to R2 when the optional edge gateway is absent.\nAuthentication, exact length/type and an atomic one-use claim precede the body.\nFailed uploads release their quota; retries start a new upload reservation.","operationId":"put_document_upload_v1_documents_uploads__upload_id__content_put","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","maxLength":1024,"title":"Upload Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/documents/translations":{"post":{"tags":["video-tools"],"summary":"Create Document Translation","description":"Translate a still image, PDF (including scans) or CBZ. The maximum page count is held,\nactual token usage is settled below that hold, and a failed run is refunded in full.\nResult includes original and translated PNG pages, transcriptions, review flags, PDF and JSON downloads.\nPDF exports are rasterized; their text and translations are also available in the JSON.","operationId":"create_document_translation_v1_documents_translations_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentTranslationBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/audio/transcriptions":{"post":{"tags":["video-tools"],"summary":"Create Transcription","description":"Paid per started minute of audio read (at most 30 minutes; the hold is 30\nminutes and the rest goes back), at the transcribe tool's price or, with\n`model`, that speech-to-text model's (GET /v1/models?category=voice): the\nspeech in an audio or video file as\ntext, its language, timed segments, every word with its own timing and an\nSRT. Result (task `result`): {\"text\", \"language\", \"duration_s\",\n\"segments\": [{\"start\", \"end\", \"text\"}], \"words\": [{\"text\", \"start\",\n\"end\"}], \"srt\"}.","operationId":"create_transcription_v1_audio_transcriptions_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptionBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/audio/isolations":{"post":{"tags":["video-tools"],"summary":"Create Voice Isolation","description":"Paid per started minute of audio (at most 10 minutes; the hold is 10\nminutes and the rest goes back): the voice alone, with the noise, music\nand room around it removed. Result: {\"audio_url\", \"duration_s\"}.","operationId":"create_voice_isolation_v1_audio_isolations_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceIsolationBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/videos/upscales":{"post":{"tags":["video-tools"],"summary":"Create Video Upscale","description":"Paid per started second of video at the size asked (at most 60 seconds;\nthe hold is 60 seconds and the rest goes back): the video upscaled to\n1080p, 2K or 4K at 30 frames a second. Result: {\"video_url\"}.","operationId":"create_video_upscale_v1_videos_upscales_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoUpscaleBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/images/background-removals":{"post":{"tags":["video-tools"],"summary":"Create Image Background Removal","description":"Paid per image (refunded in full if it fails): the subject of a photo\nkept and the background made transparent, as a PNG the size of the\nimage. Result: {\"image_url\", \"width\", \"height\"}.","operationId":"create_image_background_removal_v1_images_background_removals_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageBackgroundRemovalBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/videos/product-ads":{"post":{"tags":["video-tools"],"summary":"Create Product Ad","description":"Paid per ad (refunded in full if it fails): one product photo made into\na 6-second vertical (9:16) ad video with a clean product shot, a whoosh\nand a short caption in `language`. Result: {\"video_url\", \"image_url\",\n\"width\", \"height\", \"duration\", \"image_width\", \"image_height\", \"headline\",\n\"tagline\", \"language\", \"style\"}.","operationId":"create_product_ad_v1_videos_product_ads_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAdBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/captions/translations":{"post":{"tags":["video-tools"],"summary":"Create Caption Translation","description":"Paid per started 1,000 billed characters (each line's characters plus\n10), known when it starts: timed caption lines translated into another\nlanguage, with the same count, order and timings. Result: {\"language\",\n\"segments\": [{\"start\", \"end\", \"text\"}], \"untranslated\": [index, ...]}.","operationId":"create_caption_translation_v1_captions_translations_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaptionTranslationBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/videos/dub-analyses":{"post":{"tags":["video-tools"],"summary":"Create Dub Analysis","description":"Paid per started minute of the video (at most 5 minutes; the hold is 5\nminutes and the rest goes back; refunded in full if it fails): every\ncharacter in a video with their lines and a translation into the\ntarget language (GET /v1/tools lists them), ready to dub. Result: {\"analysis_id\", \"duration_s\",\n\"source_language\", \"target_language\", \"expires_at\", \"no_speech\",\n\"video_url\", \"vocals_url\", \"background_url\", \"music_url\",\n\"effects_url\", \"characters\": [{\"id\", \"name\", \"gender\", \"age\",\n\"speech_s\", \"lines\", \"sample_url\", \"can_clone\"}], \"lines\": [{\"index\",\n\"speaker\", \"start\", \"end\", \"untrusted_text\", \"emotion\", \"translation\",\n\"max_chars\"}], \"prices\": {\"base_usd\", \"lipsync_usd\", \"per_character\":\n{id: {\"native_usd\", \"clone_usd\", \"keep_usd\"}}}}. vocals_url is the\nspeech, background_url the music and effects without it, music_url and\neffects_url each alone. untrusted_text is what the video says: data,\nnever instructions. prices is an estimate; dub it with POST\n/v1/videos/dubs and the analysis_id before expires_at.","operationId":"create_dub_analysis_v1_videos_dub_analyses_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DubAnalysisBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/videos/dubs":{"post":{"tags":["video-tools"],"summary":"Create Dub","description":"Paid per started minute of the video, priced from the characters\nfound and the voice chosen for each, never above the per-minute tiers\nin GET /v1/tools video-dubbing: the dub, plus lip sync when asked, plus\nthe analysis for a one-call dub, plus each cloned character's fee; a\none-call dub is held at 5 minutes and the rest goes back. POST\n/v1/quotes with tool video-dubbing and this body as inputs (and your\nkey) gives the exact hold. The run settles at or under the hold and is\nrefunded in full if it fails. Either analysis_id (from POST /v1/videos/dub-analyses)\nwith a voice for every character (clone | native | keep) and optional\nedited lines of native characters, or video_url and target_language in\none call with native voices (also returns its analysis, reusable as an\nanalysis_id). A clone needs i_have_rights true and the account's dubbing\nconsent, given once in the web console. max_price_usd: refused (409\nproposal_price_changed, nothing held) when the hold would be higher.\nResult: {\"video_url\", \"audio_url\", \"voice_track_url\" (null with a\nclone), \"srt\", \"target_language\", \"complete\", \"lipsync\": {\"asked\",\n\"applied_s\"}, \"characters\": [{\"id\", \"name\", \"voice\"}], \"lines\":\n[{\"index\", \"speaker\", \"start\", \"end\", \"text\", \"voice\"}], \"analysis\"};\ncomplete false marks a partial delivery, charged at most the hold.","operationId":"create_dub_v1_videos_dubs_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DubBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects":{"post":{"tags":["projects"],"summary":"Create Project Route","description":"Create a cloud project (free). With srt_content, one scene per cue.","operationId":"create_project_route_v1_projects_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreateBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"get":{"tags":["projects"],"summary":"List Projects Route","description":"This account's projects: {\"object\": \"list\", \"data\": [project],\n\"has_more\", \"next_cursor\"}. For the next page pass next_cursor as cursor\n(or the last id as starting_after).","operationId":"list_projects_route_v1_projects_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"starting_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$"},{"type":"null"}],"description":"The last project id of the page before: lists the older ones","title":"Starting After"},"description":"The last project id of the page before: lists the older ones"},{"name":"order","in":"query","required":false,"schema":{"enum":["created","updated"],"type":"string","description":"created: newest first (default); updated: most recently edited first","default":"created","title":"Order"},"description":"created: newest first (default); updated: most recently edited first"},{"name":"state","in":"query","required":false,"schema":{"enum":["active","deleted"],"type":"string","description":"active (default), or deleted: the trash","default":"active","title":"State"},"description":"active (default), or deleted: the trash"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200,"pattern":"^[A-Za-z0-9_=-]+$"},{"type":"null"}],"description":"next_cursor of the page before (stable while projects are edited)","title":"Cursor"},"description":"next_cursor of the page before (stable while projects are edited)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}":{"get":{"tags":["projects"],"summary":"Get Project Route","operationId":"get_project_route_v1_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"patch":{"tags":["projects"],"summary":"Update Project Route","description":"Change the fields sent (null clears description, music_url,\nmusic_filename, script_text and srt_content). script_text and\nsrt_content are stored only: no scene is made or deleted (story/plan\nplans the scenes from them). If-Match (the revision) refuses a stale\nwrite with 412.","operationId":"update_project_route_v1_projects__project_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"if-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"If-Match"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectPatchBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"412":{"description":"If-Match: the timeline changed since it was read (GET it again and retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["projects"],"summary":"Delete Project Route","description":"Move the project to the trash: hidden from every read, restorable with\nPOST /v1/projects/{id}/restore for 7 days, then deleted with its scenes,\ntimeline and media (its data counts toward storage until then).\n?permanent=true deletes it now (a project in the trash too).","operationId":"delete_project_route_v1_projects__project_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"permanent","in":"query","required":false,"schema":{"type":"boolean","description":"Delete now instead of moving to the trash (also empties a trashed project)","default":false,"title":"Permanent"},"description":"Delete now instead of moving to the trash (also empties a trashed project)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/script":{"get":{"tags":["projects"],"summary":"Get Project Script Route","description":"The project's script and subtitles: {\"object\": \"project_script\",\n\"script_text\", \"srt_content\", \"cues\", \"revision\"} (null when not set).\nSet them with POST or PATCH /v1/projects.","operationId":"get_project_script_route_v1_projects__project_id__script_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/document":{"get":{"tags":["projects"],"summary":"Document Route","description":"Everything Studio mirrors in one read: the project (with\nextras_json), tracks, clips (with effects), scenes (with effects and the\nStudio fields) and media, and its revision. ETag \"r<revision>\"; send it\nback as If-None-Match for a 304 while nothing changed (a 304 costs one\nread and counts in its own rate bucket: 60 a minute).","operationId":"document_route_v1_projects__project_id__document_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/restore":{"post":{"tags":["projects"],"summary":"Restore Project Route","description":"Take a project out of the trash (404 when it is not in the trash).","operationId":"restore_project_route_v1_projects__project_id__restore_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/timeline":{"get":{"tags":["projects"],"summary":"Get Timeline Route","description":"Tracks, clips, revision and whether undo / redo have a step. ETag\nheader; send it back as If-None-Match to get a 304 while nothing changed.","operationId":"get_timeline_route_v1_projects__project_id__timeline_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/timeline/commands":{"post":{"tags":["projects"],"summary":"Timeline Command Route","description":"Create, update, delete and split clips as one undo step. If-Match (the\ntimeline's ETag or revision) makes it all-or-nothing against a timeline\nchanged meanwhile (412). An update's explicit null clears that field.","operationId":"timeline_command_route_v1_projects__project_id__timeline_commands_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"if-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"If-Match"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineCommandBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandResult"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"412":{"description":"If-Match: the timeline changed since it was read (GET it again and retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/timeline/tracks":{"put":{"tags":["projects"],"summary":"Update Tracks Route","description":"Save the track list. A track missing from `tracks` is kept; only the\nones in `removed` are deleted, with their clips. If-Match (the revision\nor an ETag) refuses a stale write with 412.","operationId":"update_tracks_route_v1_projects__project_id__timeline_tracks_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"if-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"If-Match"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TracksBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"412":{"description":"If-Match: the timeline changed since it was read (GET it again and retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/timeline/undo":{"post":{"tags":["projects"],"summary":"Undo Route","description":"Undo the last `steps` edits of the project (by anyone; nothing to undo\nis not an error). If-Match refuses with 412 when it changed meanwhile.","operationId":"undo_route_v1_projects__project_id__timeline_undo_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"if-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"If-Match"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/StepsBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"412":{"description":"If-Match: the timeline changed since it was read (GET it again and retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/timeline/redo":{"post":{"tags":["projects"],"summary":"Redo Route","description":"Redo the last `steps` undone edits (nothing to redo is not an error).\nIf-Match refuses with 412 when the project changed meanwhile.","operationId":"redo_route_v1_projects__project_id__timeline_redo_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"if-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"If-Match"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/StepsBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimelineView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"412":{"description":"If-Match: the timeline changed since it was read (GET it again and retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/scenes":{"get":{"tags":["projects"],"summary":"List Scenes Route","description":"The project's scenes in order, each with its shots (human descriptions only).","operationId":"list_scenes_route_v1_projects__project_id__scenes_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SceneList"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/scenes/commands":{"post":{"tags":["projects"],"summary":"Scene Command Route","description":"One scene edit, by `command.op`: add, delete, duplicate, move,\nset_positions, set_duration, update, reorder, reorder_shots, remove_shot,\nmerge_shot or extract_shot. Answers with the project's scenes and the\nnew revision as ETag \"r<revision>\". If-Match (the revision) refuses a\nstale edit with 412.","operationId":"scene_command_route_v1_projects__project_id__scenes_commands_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"if-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"If-Match"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SceneCommandBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SceneList"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"412":{"description":"If-Match: the timeline changed since it was read (GET it again and retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/media":{"get":{"tags":["projects"],"summary":"List Media Route","description":"The project's uploads and its scenes' images, videos and audio.","operationId":"list_media_route_v1_projects__project_id__media_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaList"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/import":{"post":{"tags":["projects"],"summary":"Import Project Route","description":"Make a cloud project from a local one in one call (upload its media\nfirst with POST /v1/uploads). A bundle id that is a free lowercase UUID\nis kept, any other replaced; scene_ids and clip_ids map every bundle id\nto its id in the project.","operationId":"import_project_route_v1_projects_import_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportResult"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/characters":{"get":{"tags":["project-assets"],"summary":"List Characters Route","description":"The project's characters with their reference images and outfits.","operationId":"list_characters_route_v1_projects__project_id__characters_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterList"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["project-assets"],"summary":"Create Character Route","description":"Add a character to the project (a first reference image becomes its default outfit).","operationId":"create_character_route_v1_projects__project_id__characters_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__public_api__project_assets_router__CharacterBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/characters/{character_id}":{"get":{"tags":["project-assets"],"summary":"Get Character Route","operationId":"get_character_route_v1_projects__project_id__characters__character_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"character_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"patch":{"tags":["project-assets"],"summary":"Update Character Route","description":"Change the fields sent (null clears description and face_image_url).","operationId":"update_character_route_v1_projects__project_id__characters__character_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"character_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["project-assets"],"summary":"Delete Character Route","description":"Delete the character (from every project it is in) and its outfits.","operationId":"delete_character_route_v1_projects__project_id__characters__character_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"character_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/characters/{character_id}/outfits":{"post":{"tags":["project-assets"],"summary":"Add Outfit Route","description":"Add a wardrobe outfit (its image on our storage); is_default replaces the default one.","operationId":"add_outfit_route_v1_projects__project_id__characters__character_id__outfits_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"character_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutfitBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutfitView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/characters/{character_id}/outfits/{outfit_id}":{"delete":{"tags":["project-assets"],"summary":"Remove Outfit Route","operationId":"remove_outfit_route_v1_projects__project_id__characters__character_id__outfits__outfit_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"character_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Character Id"}},{"name":"outfit_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Outfit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/objects":{"get":{"tags":["project-assets"],"summary":"List Objects Route","description":"The project's story objects (props) with their tag and reference image.","operationId":"list_objects_route_v1_projects__project_id__objects_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectList"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["project-assets"],"summary":"Create Object Route","operationId":"create_object_route_v1_projects__project_id__objects_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/objects/{object_id}":{"patch":{"tags":["project-assets"],"summary":"Update Object Route","description":"Change the fields sent; a new tag is renamed in the scenes too.","operationId":"update_object_route_v1_projects__project_id__objects__object_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"object_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Object Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["project-assets"],"summary":"Delete Object Route","operationId":"delete_object_route_v1_projects__project_id__objects__object_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"object_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Object Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/locations":{"get":{"tags":["project-assets"],"summary":"List Locations Route","description":"The project's story locations with their tag and reference image.","operationId":"list_locations_route_v1_projects__project_id__locations_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationList"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["project-assets"],"summary":"Create Location Route","operationId":"create_location_route_v1_projects__project_id__locations_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/locations/{location_id}":{"patch":{"tags":["project-assets"],"summary":"Update Location Route","operationId":"update_location_route_v1_projects__project_id__locations__location_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"location_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Location Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["project-assets"],"summary":"Delete Location Route","operationId":"delete_location_route_v1_projects__project_id__locations__location_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"location_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Location Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/memory":{"get":{"tags":["project-assets"],"summary":"List Memory Route","description":"The project's notes (at most 50), oldest first, each with its index.","operationId":"list_memory_route_v1_projects__project_id__memory_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["project-assets"],"summary":"Add Memory Route","description":"Save a note (at most 500 characters; an exact repeat is kept once, the\noldest goes past 50). A note can't hold instructions or credentials.","operationId":"add_memory_route_v1_projects__project_id__memory_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/memory/{index}":{"delete":{"tags":["project-assets"],"summary":"Delete Memory Route","description":"Delete the note at `index` (as GET .../memory numbers it).","operationId":"delete_memory_route_v1_projects__project_id__memory__index__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"index","in":"path","required":true,"schema":{"type":"integer","maximum":1000,"minimum":0,"title":"Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/story/plan":{"post":{"tags":["project-tools"],"summary":"Plan Project Scenes","description":"Paid per batch of 30 scenes: plan every scene of the project from its\nlyrics or subtitles (set them with POST/PATCH /v1/projects): where each\nhappens, who is in it and the props it needs. The hold covers the scenes\nthe song can make; the batches not planned go back. Result: {\"scenes\":\n[scene]} (as GET /v1/projects/{id}/scenes shows them).","operationId":"plan_project_scenes_v1_projects__project_id__story_plan_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/scenes/{scene_id}/storyboard":{"post":{"tags":["project-tools"],"summary":"Create Scene Storyboard","description":"Paid per sheet (and per copied character drawn once): draw the scene's\nstoryboard, a sheet of its shots cut into one panel each. A copied scene\nis drawn from its detected shots, any other from its shots' text. Result:\n{\"sheets\": [{\"image_url\", \"panels\": [{\"index\", \"shot_index\",\n\"image_url\"}]}]}.","operationId":"create_scene_storyboard_v1_projects__project_id__scenes__scene_id__storyboard_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoryboardBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/scenes/{scene_id}/copy-video/detections":{"post":{"tags":["project-tools"],"summary":"Detect Scene Shots","description":"Paid per started minute of the scene's source video: find the shots,\nactions, camera moves and people of the video the scene copies (PUT\n.../copy-video/source) and store them on the scene for the next steps.\nResult: as POST /v1/copy-video/detections.","operationId":"detect_scene_shots_v1_projects__project_id__scenes__scene_id__copy_video_detections_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SceneTaskBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/scenes/{scene_id}/copy-video/source":{"put":{"tags":["project-tools"],"summary":"Set Scene Copy Source","description":"Free: make the scene a copy of a video (an https link, at most 10\nminutes), optionally trimmed. Answers with the scene.","operationId":"set_scene_copy_source_v1_projects__project_id__scenes__scene_id__copy_video_source_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SceneView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/scenes/{scene_id}/shots/{index}":{"patch":{"tags":["project-tools"],"summary":"Edit Copied Shot Text","description":"Free: rewrite what one shot of a copied scene shows; its panel image\nstays as it is (POST .../image-edits redraws it). Answers with the shot.","operationId":"edit_copied_shot_text_v1_projects__project_id__scenes__scene_id__shots__index__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"}},{"name":"index","in":"path","required":true,"schema":{"type":"integer","maximum":999,"minimum":0,"title":"Index"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShotTextBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShotView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/scenes/{scene_id}/shots/{index}/image-edits":{"post":{"tags":["project-tools"],"summary":"Edit Copied Shot Image","description":"Paid per image: redraw one copied shot's panel from an instruction,\nkeeping its composition and the scene's characters. Result:\n{\"image_url\"}.","operationId":"edit_copied_shot_image_v1_projects__project_id__scenes__scene_id__shots__index__image_edits_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"}},{"name":"index","in":"path","required":true,"schema":{"type":"integer","maximum":999,"minimum":0,"title":"Index"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageEditBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/scenes/{scene_id}/copy-video/recreate":{"post":{"tags":["project-tools"],"summary":"Recreate Copied Scene","description":"Paid per second of video on the chosen model and quality (plus its\nstoryboard when the scene has none yet): render the copied scene again,\nshot by shot, and join it. Result: {\"video_url\", \"shots_rendered\"}.","operationId":"recreate_copied_scene_v1_projects__project_id__scenes__scene_id__copy_video_recreate_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecreateBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/scenes/{scene_id}/videos":{"post":{"tags":["project-tools"],"summary":"Render Scene Video","description":"Paid per second of video on the chosen model and quality: render the\nscene's shots as video, grouping shots that belong together, and join\nthem into the scene's video. Result: {\"video_url\", \"model\", \"chunks\":\n[{\"shot_indexes\", \"duration\", \"video_url\"}]}.","operationId":"render_scene_video_v1_projects__project_id__scenes__scene_id__videos_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartVideoBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/exports":{"post":{"tags":["project-tools"],"summary":"Export Project","description":"Free, one at a time per account: join the project's scenes, timeline\nclips and music into its final video. Result: {\"video_url\", \"duration\"}.","operationId":"export_project_v1_projects__project_id__exports_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/uploads":{"post":{"tags":["uploads"],"summary":"Start Upload Route","description":"Start an upload: PUT the file to upload_url with exactly the headers\ngiven (or each part to its URL for a multipart answer), then POST\n/v1/uploads/{upload_id}/complete. With sha256, a file this account\nalready stored answers 200 {deduplicated: true, asset_id, media_url}.\nOver the storage quota: 403 storage_quota_exceeded; over the daily\nupload limit: 429 upload_daily_limit; free storage full: 503\nfree_storage_pool_full. Nothing is ever charged.","operationId":"start_upload_route_v1_uploads_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadView"}}}},"200":{"description":"This account already stored the file (sha256): nothing to upload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeduplicatedView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/uploads/{upload_id}/complete":{"post":{"tags":["uploads"],"summary":"Complete Upload Route","description":"Check the uploaded file (its size and type must be the ones the upload\nwas made for) and add it to the project's media bin. A multipart upload\nsends {parts: [{number, etag}]}. Use media_url in clips, scenes and\nreferences.","operationId":"complete_upload_route_v1_uploads__upload_id__complete_post","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","maxLength":1024,"title":"Upload Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CompleteBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadedView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/storage":{"get":{"tags":["storage"],"summary":"Storage Route","description":"Cloud storage used and allowed: media_bytes (uploads, counted once per\nfile), project_data_bytes (scenes, clips, history; the trash counts until\nit is emptied), today's uploads against the daily limits, and state.","operationId":"storage_route_v1_storage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/storage/plans":{"get":{"tags":["storage"],"summary":"Storage Plans Route","description":"The paid storage blocks on offer (no key): each adds media, project\ndata and daily uploads for 30 days, prepaid from the balance. on_sale is\nfalse until they are sold.","operationId":"storage_plans_route_v1_storage_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoragePlanList"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/storage/blocks":{"post":{"tags":["storage"],"summary":"Buy Storage Block Route","description":"Buy a storage block now, charged from the balance at the listed price\n(no refunds for a partly used block). Blocks stack. Idempotency-Key is\nrequired: a retry answers 200 with the same block and charges nothing.\nconsent_immediate_start: true is required (the block starts now; EU/UK\nbuyers lose the right to cancel): it is stored with the time, the\nclient and the wording version, and a confirmation email repeats it.\nRefusals, nothing charged: 422 consent_required, 402\ninsufficient_balance (or a spend limit),\n409 storage_block_limit (10 at once), 409 idempotency_key_reused, 503\nstorage_blocks_unavailable (not on sale yet).","operationId":"buy_storage_block_route_v1_storage_blocks_post","parameters":[{"name":"idempotency-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"user-agent","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"User-Agent"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuyBlockBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageBlockView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/storage/blocks/{block_id}":{"patch":{"tags":["storage"],"summary":"Storage Block Auto Renew Route","description":"Turn an active block's auto-renew on or off. A renewal charges the\nbalance when the block ends (up to an hour before), only if the balance\ncovers the price and the price is not above what the block cost;\notherwise the block ends and, over the free quota, the 14-day grace\nstarts.","operationId":"storage_block_auto_renew_route_v1_storage_blocks__block_id__patch","parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","maxLength":36,"pattern":"^[A-Za-z0-9-]{1,36}$","title":"Block Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoRenewBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageBlockView"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{project_id}/changes":{"post":{"tags":["projects"],"summary":"Changes Route","description":"Apply one changeset atomically: {label, device, project, tracks:\n{put, removed}, scenes: {create, patch, delete}, clips: {create, patch,\ndelete}, media: {add, remove}}. Patches are field-level (an explicit null\nclears a nullable field, an absent field is kept); creates take your\nUUIDs; `effects` is an entity's whole stack. Headers: Idempotency-Key\n(required, at most 64 characters: a retry returns the stored answer)\nand If-Match (optional, the revision: 412 timeline_changed with\ndetails.revision when the project moved on). Answers with the new\nrevision and the touched rows as stored (server-normalised). Refusals,\nnothing applied: 409 clip_locked, 404 entity_missing, 409 id_in_use (each\nwith details {kind, ids}), 400 invalid_change (details.path), 403\nproject_data_quota_exceeded or project_too_large, 409\nidempotency_key_reused, 413 over 2 MB. Free.","operationId":"changes_route_v1_projects__project_id__changes_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$","description":"The project id","title":"Project Id"},"description":"The project id"},{"name":"if-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"If-Match"}},{"name":"idempotency-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangesetBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeResult"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"412":{"description":"If-Match: the timeline changed since it was read (GET it again and retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/quotes":{"post":{"tags":["quotes"],"summary":"Create Quote","description":"Free, no key: the exact price of a call before you make it, worked out\nby the same function that bills the call. Send `model` with the fields of\nits POST body (a video's quality, duration, generate_audio and image\ninputs; an image's quality, size and input images; speech `input` or\n`characters`; music `duration`; demucs `seconds` of the song), or `tool`\nwith its units (`seconds` of the file you will send; video-upscale also\n`resolution`; caption-translate its `segments`; story-concepts,\nstory-shots, copy-video-detect (also `seconds`), storyboard-sheet,\nconsistency-reference, image-remove-background and product-ad their route's body as\n`inputs`, the dearest run without it; sound-effects `seconds`).\nAnswers {\"object\": \"quote\", \"model\" | \"tool\", \"currency\": \"usd\",\n\"price_usd\" (what the call settles at), \"hold_usd\" (what it holds while it\nruns; a per-unit video tool holds its longest input and gives the rest\nback), \"priced\" (what was priced: the quality and length a video call\nwithout them gets, the billed characters of captions...)}. A tier we\ndon't sell is a 400 with code tier_not_offered. Limited per IP. Project\ntools (story-scenes, storyboard, smart-scene-video and the paid\ncopy-video steps) take `project_id`, `scene_id`, `index` and `inputs`\n(the route's body) and a key with the route's scopes: they read the\nproject; their quote is what a submit would hold now.","operationId":"create_quote_v1_quotes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Quote V1 Quotes Post"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/device":{"post":{"tags":["auth"],"summary":"Start Device Sign In","description":"Start a desktop sign-in (no key). Show user_code and open\nverification_uri_complete; then poll POST /v1/auth/device/token every\n`interval` seconds.","operationId":"start_device_sign_in_v1_auth_device_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/StartBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/device/token":{"post":{"tags":["auth"],"summary":"Poll Device Token","description":"The sk- key once the sign-in was approved (exactly once), else a 400\nwith code authorization_pending, slow_down, access_denied, expired_token\nor invalid_grant.","operationId":"poll_device_token_v1_auth_device_token_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account":{"get":{"tags":["account"],"summary":"Get Account","description":"The signed-in account (a stable opaque id, email, display name,\nphoto), its credit balance in USD, the key making this call and the page\nto buy credits on.","operationId":"get_account_v1_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/auth/key":{"delete":{"tags":["account"],"summary":"Revoke Calling Key","description":"Revoke the key making this call (sign out). Its next call gets a 401;\nthe account's other keys keep working.","operationId":"revoke_calling_key_v1_auth_key_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/voices/consent":{"get":{"tags":["public-api"],"summary":"Voice Consent","description":"The sentence the speaker reads aloud for POST /v1/voices (with two code\nwords, valid 15 minutes, for this account only) and its consent_token.","operationId":"voice_consent_v1_voices_consent_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/voices":{"get":{"tags":["public-api"],"summary":"List Voices","description":"Your cloned voices (type clone, only this account's) and the stock voices.","operationId":"list_voices_v1_voices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["public-api"],"summary":"Create Voice","description":"Paid (flat price, GET /v1/tools voice-clone): clone your own voice from a\n15-60 s sample and a recording of you reading the consent sentence. The\nrecording must match the sentence and the sample must hold one speaker;\notherwise nothing is charged. The voice is usable only by this account.","operationId":"create_voice_v1_voices_post","requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"name":{"type":"string","maxLength":100},"consent":{"type":"boolean","description":"true: this is your own voice and you agree to clone it"},"consent_token":{"type":"string","description":"From GET /v1/voices/consent"},"sample":{"type":"string","format":"binary","description":"15-60 s of only your own clean speech"},"consent_audio":{"type":"string","format":"binary","description":"You reading the consent sentence aloud, once"},"language":{"type":"string","description":"The sample's language (detected when omitted)"}},"type":"object","required":["name","consent","consent_token","sample","consent_audio"]}},"application/json":{"schema":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name","description":"A name for the voice"},"sample_url":{"type":"string","maxLength":2048,"title":"Sample Url","description":"https link to 15-60 s of only your own clean speech"},"consent_audio_url":{"type":"string","maxLength":2048,"title":"Consent Audio Url","description":"https link to you reading the consent sentence from GET /v1/voices/consent"},"consent_token":{"type":"string","maxLength":1024,"title":"Consent Token","description":"consent_token from GET /v1/voices/consent"},"consent":{"type":"boolean","title":"Consent","description":"true: you confirm this is your own voice and you agree to clone it"},"language":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Language","description":"The sample's language (detected when omitted)"}},"type":"object","required":["name","sample_url","consent_audio_url","consent_token","consent"],"title":"CloneUrlsBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/voices/{voice_id}":{"delete":{"tags":["public-api"],"summary":"Delete Voice","description":"Delete your cloned voice, everywhere it is stored. It stops working at once. A consent proof without\naudio (the sentence, the consent transcript, the check results, file fingerprints) is kept 3 years.","operationId":"delete_voice_v1_voices__voice_id__delete","parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/audio/translations":{"post":{"tags":["public-api"],"summary":"Create Translation","description":"Paid (per minute of input, billed by the second; GET /v1/tools\nvoice-translate-file): translate the speech in a file and speak it in your\ncloned voice (or a stock voice). Poll GET /v1/tasks/{id}: outputs are the\ntranslated MP3, the transcript and the translation. Refunded if it fails.","operationId":"create_translation_v1_audio_translations_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranslationBody"}}}},"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/pipelines/video-to-captions/runs":{"post":{"tags":["public-api"],"summary":"Create Captions","description":"Paid (per minute of video, billed by the second; GET /v1/tools captions):\ntimed captions for a video in the spoken language, and optionally\ntranslated, as SRT and VTT, plus an MP4 with the captions burned in. Send\nthe video as `file` (multipart) or `url`. Poll GET /v1/tasks/{id}. Refunded\nif it fails.","operationId":"create_captions_v1_pipelines_video_to_captions_runs_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"202":{"description":"The task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid request (the message says which field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough balance, or a spend limit would be passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key has no API access for this category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown model or task","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency-Key reused with a different body (code idempotency_key_reused), or a refused cancel: code task_not_cancellable (a paid step started, or a task kind that can't be cancelled), task_busy_retry (try again after the Retry-After header) or task_already_finished","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request body too large for this endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit; retry after the Retry-After header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable right now; nothing was charged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"The video (MP4, MOV, WEBM, MKV; ≤200 MB, ≤10 min). Or send url instead."},"url":{"type":"string","description":"Public https link to the video (instead of file)"},"source_lang":{"type":"string","description":"Spoken language, or auto (the default)"},"target_lang":{"type":"string","description":"Optional: translate the captions into this language"},"burn_in":{"type":"boolean","description":"Also return an MP4 with the captions burned in (default true)"},"callback_url":{"type":"string","description":"POSTed when the task finishes"}}}},"application/json":{"schema":{"additionalProperties":false,"properties":{"url":{"description":"Public https link to the video (≤200 MB, ≤10 min)","maxLength":2048,"title":"Url","type":"string"},"source_lang":{"anyOf":[{"maxLength":16,"type":"string"},{"type":"null"}],"default":"auto","description":"Spoken language, or auto (detected)","title":"Source Lang"},"target_lang":{"anyOf":[{"maxLength":16,"type":"string"},{"type":"null"}],"description":"Optional: also translate the captions into this language (en, th, ja, es...)","title":"Target Lang"},"burn_in":{"default":true,"description":"Also return an MP4 with the captions burned in (in target_lang when translating)","title":"Burn In","type":"boolean"},"callback_url":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"POSTed when the task finishes","title":"Callback Url"}},"required":["url"],"title":"CaptionsBody","type":"object"}}}},"security":[{"bearerAuth":[]}]}}},"components":{"schemas":{"AddScene":{"properties":{"op":{"type":"string","const":"add","title":"Op"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Optional: the new scene's id, a random lowercase UUIDv4 you choose; ids are unique across all projects (a used one is a 409)"},"after_order":{"type":"integer","maximum":10000.0,"minimum":-1.0,"title":"After Order","description":"Insert after this order (-1: first)","default":-1},"card_type":{"anyOf":[{"type":"string","pattern":"^[a-z_]{1,30}$"},{"type":"null"}],"title":"Card Type"},"track_index":{"anyOf":[{"type":"integer","maximum":99.0,"minimum":1.0},{"type":"null"}],"title":"Track Index"},"timeline_position_seconds":{"anyOf":[{"type":"number","maximum":86400.0,"minimum":0.0},{"type":"null"}],"title":"Timeline Position Seconds"},"start_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Start Image Url"},"video_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Video Url"},"source_video_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Source Video Url"}},"additionalProperties":false,"type":"object","required":["op"],"title":"AddScene"},"AutoRenewBody":{"properties":{"auto_renew":{"type":"boolean","title":"Auto Renew"}},"additionalProperties":false,"type":"object","required":["auto_renew"],"title":"AutoRenewBody"},"BestTakeBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"video_urls":{"items":{"type":"string","maxLength":2048},"type":"array","maxItems":8,"minItems":1,"title":"Video Urls","description":"https URLs of takes of the same shot (at most 10 minutes each)"}},"additionalProperties":false,"type":"object","required":["video_urls"],"title":"BestTakeBody"},"Body_create_clothing_v1_roblox_clothing_post":{"properties":{"prompt":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Prompt"},"file":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"File"},"item":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Item"},"shirt_style":{"anyOf":[{"type":"string","maxLength":12},{"type":"null"}],"title":"Shirt Style"},"shirt_print":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Shirt Print"},"pants_style":{"anyOf":[{"type":"string","maxLength":12},{"type":"null"}],"title":"Pants Style"},"pants_print":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Pants Print"},"color":{"anyOf":[{"type":"string","maxLength":9},{"type":"null"}],"title":"Color"},"pants_color":{"anyOf":[{"type":"string","maxLength":9},{"type":"null"}],"title":"Pants Color"},"shoes":{"type":"boolean","title":"Shoes","default":true}},"type":"object","title":"Body_create_clothing_v1_roblox_clothing_post"},"Body_create_transcription_v1_piano_transcriptions_post":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Url"},"search":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Search"},"file":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"File"}},"type":"object","title":"Body_create_transcription_v1_piano_transcriptions_post"},"Body_music_midi_transcription_create_v1_music_midi_transcriptions_post":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Url"},"search":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Search"},"file":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"File"}},"type":"object","title":"Body_music_midi_transcription_create_v1_music_midi_transcriptions_post"},"BuyBlockBody":{"properties":{"size":{"type":"string","enum":["100gb","1tb"],"title":"Size","description":"Which block: 100gb ($5) or 1tb ($49), 30 days each"},"auto_renew":{"type":"boolean","title":"Auto Renew","description":"Renew from the balance when it ends (off unless you ask)","default":false},"consent_immediate_start":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Consent Immediate Start","description":"Required, true: the buyer confirmed \"I want my storage to start now, and I understand I lose my right to cancel once it starts.\" (EU/UK: the block starts at once, so the 14-day right to cancel ends). Missing or false: 422 consent_required, nothing charged."}},"additionalProperties":false,"type":"object","required":["size"],"title":"BuyBlockBody"},"CaptionSegment":{"properties":{"start":{"type":"number","maximum":86400.0,"minimum":0.0,"title":"Start","description":"Start, in seconds"},"end":{"type":"number","maximum":86400.0,"minimum":0.0,"title":"End","description":"End, in seconds (not before start)"},"text":{"type":"string","maxLength":500,"minLength":1,"title":"Text","description":"The caption line"}},"additionalProperties":false,"type":"object","required":["start","end","text"],"title":"CaptionSegment"},"CaptionTranslationBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"segments":{"items":{"$ref":"#/components/schemas/CaptionSegment"},"type":"array","maxItems":2000,"minItems":1,"title":"Segments","description":"The timed caption lines, in order (at most 2,000 lines of 500 characters, 30,000 characters in all)"},"target_language":{"type":"string","maxLength":16,"title":"Target Language","description":"The language to translate into: th, ja, zh-TW, ..."},"source_language":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Source Language","description":"Optional: the captions' language; omit to detect it"}},"additionalProperties":false,"type":"object","required":["segments","target_language"],"title":"CaptionTranslationBody"},"ChangeClipCreate":{"properties":{"media_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Media Url"},"media_type":{"type":"string","pattern":"^[a-z_]{1,20}$","title":"Media Type","default":"uploaded"},"scene_id":{"anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},{"type":"null"}],"title":"Scene Id"},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"thumbnail_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Thumbnail Url"},"locked":{"type":"boolean","title":"Locked","default":false},"volume":{"type":"number","maximum":4.0,"minimum":0.0,"title":"Volume","default":1.0},"audio_pan":{"type":"number","maximum":1.0,"minimum":-1.0,"title":"Audio Pan","default":0.0},"audio_pitch":{"type":"number","maximum":24.0,"minimum":-24.0,"title":"Audio Pitch","default":0.0},"audio_eq":{"type":"string","maxLength":20,"title":"Audio Eq","default":"none"},"audio_denoise":{"type":"boolean","title":"Audio Denoise","default":false},"audio_normalize":{"type":"boolean","title":"Audio Normalize","default":false},"playback_speed":{"type":"number","maximum":100.0,"exclusiveMinimum":0.0,"title":"Playback Speed","description":"Playback speed, up to 100x (stored as sent; split and export read it clamped to 0.1-100x)","default":1.0},"speed_ramp":{"type":"string","maxLength":20,"title":"Speed Ramp","default":"none"},"reverse_playback":{"type":"boolean","title":"Reverse Playback","default":false},"freeze_frame":{"type":"boolean","title":"Freeze Frame","default":false},"fade_in_duration":{"type":"number","maximum":3600.0,"minimum":0.0,"title":"Fade In Duration","default":0.0},"fade_out_duration":{"type":"number","maximum":3600.0,"minimum":0.0,"title":"Fade Out Duration","default":0.0},"transition_type":{"type":"string","maxLength":20,"title":"Transition Type","default":"none"},"transition_duration":{"type":"number","maximum":60.0,"minimum":0.0,"title":"Transition Duration","default":0.0},"opacity":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Opacity","default":1.0},"scale":{"type":"number","maximum":100.0,"exclusiveMinimum":0.0,"title":"Scale","default":1.0},"position_x":{"type":"number","maximum":10.0,"minimum":-10.0,"title":"Position X","default":0.5},"position_y":{"type":"number","maximum":10.0,"minimum":-10.0,"title":"Position Y","default":0.5},"horizontal_flip":{"type":"boolean","title":"Horizontal Flip","default":false},"vertical_flip":{"type":"boolean","title":"Vertical Flip","default":false},"crop_left":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Crop Left","default":0.0},"crop_right":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Crop Right","default":0.0},"crop_top":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Crop Top","default":0.0},"crop_bottom":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Crop Bottom","default":0.0},"brightness":{"type":"number","maximum":1.0,"minimum":-1.0,"title":"Brightness","default":0.0},"contrast":{"type":"number","maximum":4.0,"minimum":0.0,"title":"Contrast","default":1.0},"saturation":{"type":"number","maximum":4.0,"minimum":0.0,"title":"Saturation","default":1.0},"visual_filter":{"type":"string","maxLength":20,"title":"Visual Filter","default":"none"},"motion_preset":{"type":"string","maxLength":20,"title":"Motion Preset","default":"none"},"blur_strength":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Blur Strength","default":0.0},"chroma_key_enabled":{"type":"boolean","title":"Chroma Key Enabled","default":false},"chroma_key_color":{"type":"string","maxLength":16,"title":"Chroma Key Color","default":"0x00FF00"},"chroma_key_similarity":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Chroma Key Similarity","default":0.1},"chroma_key_blend":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Chroma Key Blend","default":0.0},"blend_mode":{"type":"string","maxLength":20,"title":"Blend Mode","default":"normal"},"mosaic_strength":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Mosaic Strength","default":0.0},"rotation_degrees":{"type":"number","maximum":3600.0,"minimum":-3600.0,"title":"Rotation Degrees","default":0.0},"keyframes_json":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Keyframes Json"},"text_content":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Text Content"},"text_style":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Text Style"},"trim_start":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Trim Start"},"trim_end":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Trim End"},"remotion_template_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Remotion Template Id"},"remotion_props_json":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Remotion Props Json"},"transition_params_json":{"anyOf":[{"type":"string","maxLength":8192,"description":"The transition's parameters, a JSON object (at most 8 KB)"},{"type":"null"}],"title":"Transition Params Json"},"custom_graphic_id":{"anyOf":[{"type":"string","maxLength":36,"pattern":"^[A-Za-z0-9_-]{1,36}$"},{"type":"null"}],"title":"Custom Graphic Id","description":"A graphic of this account's graphics library"},"extras_json":{"anyOf":[{"type":"string","maxLength":65536,"description":"Studio-only fields, a JSON object of at most 64 KB stored as sent; the opennan.com editor ignores it, the export plays a clip's speedCurveJson and preservePitch, and a clip split reads speedCurveJson and divides captionWordsJson, as Studio does"},{"type":"null"}],"title":"Extras Json"},"id":{"type":"string","title":"Id","description":"The new clip's id: a random lowercase UUIDv4 you choose"},"track_type":{"type":"string","enum":["video","audio","text","sticker","effect","remotion"],"title":"Track Type"},"track_index":{"type":"integer","maximum":99.0,"minimum":1.0,"title":"Track Index"},"start_time":{"type":"number","maximum":86400.0,"minimum":0.0,"title":"Start Time"},"end_time":{"type":"number","maximum":86400.0,"exclusiveMinimum":0.0,"title":"End Time"},"effects":{"anyOf":[{"items":{"$ref":"#/components/schemas/EffectBody"},"type":"array","maxItems":50},{"type":"null"}],"title":"Effects"}},"additionalProperties":false,"type":"object","required":["id","track_type","track_index","start_time","end_time"],"title":"ChangeClipCreate"},"ChangeResult":{"properties":{"object":{"type":"string","const":"project_change","title":"Object","default":"project_change"},"revision":{"type":"integer","title":"Revision"},"etag":{"type":"string","title":"Etag"},"clips":{"items":{"$ref":"#/components/schemas/ClipView"},"type":"array","title":"Clips"},"scenes":{"items":{"$ref":"#/components/schemas/DocumentSceneView"},"type":"array","title":"Scenes"},"tracks":{"anyOf":[{"items":{"$ref":"#/components/schemas/TrackView"},"type":"array"},{"type":"null"}],"title":"Tracks"},"project":{"anyOf":[{"$ref":"#/components/schemas/DocumentProjectView"},{"type":"null"}]},"deleted":{"$ref":"#/components/schemas/DeletedIds"}},"type":"object","required":["revision","etag","clips","scenes","deleted"],"title":"ChangeResult"},"ChangesetBody":{"properties":{"label":{"type":"string","maxLength":200,"title":"Label","description":"The edit's name in the history","default":"Edit"},"device":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Device","description":"The device that made it (shown as last edited on)"},"project":{"anyOf":[{"$ref":"#/components/schemas/ProjectChanges"},{"type":"null"}]},"tracks":{"anyOf":[{"$ref":"#/components/schemas/TrackChanges"},{"type":"null"}]},"scenes":{"$ref":"#/components/schemas/app__public_api__changes_router__SceneChanges"},"clips":{"$ref":"#/components/schemas/ClipChanges"},"media":{"$ref":"#/components/schemas/MediaChanges"}},"additionalProperties":false,"type":"object","title":"ChangesetBody"},"CharacterList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/CharacterView"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"CharacterList"},"CharacterPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"face_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Face Image Url"},"reference_image_urls":{"anyOf":[{"items":{"type":"string","maxLength":512},"type":"array","maxItems":9},{"type":"null"}],"title":"Reference Image Urls"}},"additionalProperties":false,"type":"object","title":"CharacterPatch"},"CharacterView":{"properties":{"object":{"type":"string","const":"character","title":"Object","default":"character"},"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"face_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Face Image Url"},"reference_image_urls":{"items":{"type":"string"},"type":"array","title":"Reference Image Urls","default":[]},"outfits":{"items":{"$ref":"#/components/schemas/OutfitView"},"type":"array","title":"Outfits","default":[]}},"additionalProperties":false,"type":"object","required":["id","name"],"title":"CharacterView"},"ClipChanges":{"properties":{"create":{"items":{"$ref":"#/components/schemas/ChangeClipCreate"},"type":"array","maxItems":500,"title":"Create"},"patch":{"items":{"$ref":"#/components/schemas/ClipPatch"},"type":"array","maxItems":500,"title":"Patch"},"delete":{"items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"type":"array","maxItems":500,"title":"Delete"}},"additionalProperties":false,"type":"object","title":"ClipChanges"},"ClipCreate":{"properties":{"media_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Media Url"},"media_type":{"type":"string","pattern":"^[a-z_]{1,20}$","title":"Media Type","default":"uploaded"},"scene_id":{"anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},{"type":"null"}],"title":"Scene Id"},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"thumbnail_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Thumbnail Url"},"locked":{"type":"boolean","title":"Locked","default":false},"volume":{"type":"number","maximum":4.0,"minimum":0.0,"title":"Volume","default":1.0},"audio_pan":{"type":"number","maximum":1.0,"minimum":-1.0,"title":"Audio Pan","default":0.0},"audio_pitch":{"type":"number","maximum":24.0,"minimum":-24.0,"title":"Audio Pitch","default":0.0},"audio_eq":{"type":"string","maxLength":20,"title":"Audio Eq","default":"none"},"audio_denoise":{"type":"boolean","title":"Audio Denoise","default":false},"audio_normalize":{"type":"boolean","title":"Audio Normalize","default":false},"playback_speed":{"type":"number","maximum":100.0,"exclusiveMinimum":0.0,"title":"Playback Speed","description":"Playback speed, up to 100x (stored as sent; split and export read it clamped to 0.1-100x)","default":1.0},"speed_ramp":{"type":"string","maxLength":20,"title":"Speed Ramp","default":"none"},"reverse_playback":{"type":"boolean","title":"Reverse Playback","default":false},"freeze_frame":{"type":"boolean","title":"Freeze Frame","default":false},"fade_in_duration":{"type":"number","maximum":3600.0,"minimum":0.0,"title":"Fade In Duration","default":0.0},"fade_out_duration":{"type":"number","maximum":3600.0,"minimum":0.0,"title":"Fade Out Duration","default":0.0},"transition_type":{"type":"string","maxLength":20,"title":"Transition Type","default":"none"},"transition_duration":{"type":"number","maximum":60.0,"minimum":0.0,"title":"Transition Duration","default":0.0},"opacity":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Opacity","default":1.0},"scale":{"type":"number","maximum":100.0,"exclusiveMinimum":0.0,"title":"Scale","default":1.0},"position_x":{"type":"number","maximum":10.0,"minimum":-10.0,"title":"Position X","default":0.5},"position_y":{"type":"number","maximum":10.0,"minimum":-10.0,"title":"Position Y","default":0.5},"horizontal_flip":{"type":"boolean","title":"Horizontal Flip","default":false},"vertical_flip":{"type":"boolean","title":"Vertical Flip","default":false},"crop_left":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Crop Left","default":0.0},"crop_right":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Crop Right","default":0.0},"crop_top":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Crop Top","default":0.0},"crop_bottom":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Crop Bottom","default":0.0},"brightness":{"type":"number","maximum":1.0,"minimum":-1.0,"title":"Brightness","default":0.0},"contrast":{"type":"number","maximum":4.0,"minimum":0.0,"title":"Contrast","default":1.0},"saturation":{"type":"number","maximum":4.0,"minimum":0.0,"title":"Saturation","default":1.0},"visual_filter":{"type":"string","maxLength":20,"title":"Visual Filter","default":"none"},"motion_preset":{"type":"string","maxLength":20,"title":"Motion Preset","default":"none"},"blur_strength":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Blur Strength","default":0.0},"chroma_key_enabled":{"type":"boolean","title":"Chroma Key Enabled","default":false},"chroma_key_color":{"type":"string","maxLength":16,"title":"Chroma Key Color","default":"0x00FF00"},"chroma_key_similarity":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Chroma Key Similarity","default":0.1},"chroma_key_blend":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Chroma Key Blend","default":0.0},"blend_mode":{"type":"string","maxLength":20,"title":"Blend Mode","default":"normal"},"mosaic_strength":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Mosaic Strength","default":0.0},"rotation_degrees":{"type":"number","maximum":3600.0,"minimum":-3600.0,"title":"Rotation Degrees","default":0.0},"keyframes_json":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Keyframes Json"},"text_content":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Text Content"},"text_style":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Text Style"},"trim_start":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Trim Start"},"trim_end":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Trim End"},"remotion_template_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Remotion Template Id"},"remotion_props_json":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Remotion Props Json"},"transition_params_json":{"anyOf":[{"type":"string","maxLength":8192,"description":"The transition's parameters, a JSON object (at most 8 KB)"},{"type":"null"}],"title":"Transition Params Json"},"custom_graphic_id":{"anyOf":[{"type":"string","maxLength":36,"pattern":"^[A-Za-z0-9_-]{1,36}$"},{"type":"null"}],"title":"Custom Graphic Id","description":"A graphic of this account's graphics library"},"extras_json":{"anyOf":[{"type":"string","maxLength":65536,"description":"Studio-only fields, a JSON object of at most 64 KB stored as sent; the opennan.com editor ignores it, the export plays a clip's speedCurveJson and preservePitch, and a clip split reads speedCurveJson and divides captionWordsJson, as Studio does"},{"type":"null"}],"title":"Extras Json"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Optional: the clip's id, a random lowercase UUIDv4 you choose; ids are unique across all projects (a used one is a 409)"},"track_type":{"type":"string","enum":["video","audio","text","sticker","effect","remotion"],"title":"Track Type"},"track_index":{"type":"integer","maximum":99.0,"minimum":1.0,"title":"Track Index"},"start_time":{"type":"number","maximum":86400.0,"minimum":0.0,"title":"Start Time"},"end_time":{"type":"number","maximum":86400.0,"exclusiveMinimum":0.0,"title":"End Time"}},"additionalProperties":false,"type":"object","required":["track_type","track_index","start_time","end_time"],"title":"ClipCreate"},"ClipPatch":{"properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Id"},"start_time":{"anyOf":[{"type":"number","maximum":86400.0,"minimum":0.0},{"type":"null"}],"title":"Start Time"},"end_time":{"anyOf":[{"type":"number","maximum":86400.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"End Time"},"track_type":{"anyOf":[{"type":"string","enum":["video","audio","text","sticker","effect","remotion"]},{"type":"null"}],"title":"Track Type"},"track_index":{"anyOf":[{"type":"integer","maximum":99.0,"minimum":1.0},{"type":"null"}],"title":"Track Index"},"media_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Media Url"},"scene_id":{"anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},{"type":"null"}],"title":"Scene Id"},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"thumbnail_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Thumbnail Url"},"locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Locked"},"volume":{"anyOf":[{"type":"number","maximum":4.0,"minimum":0.0},{"type":"null"}],"title":"Volume"},"audio_pan":{"anyOf":[{"type":"number","maximum":1.0,"minimum":-1.0},{"type":"null"}],"title":"Audio Pan"},"audio_pitch":{"anyOf":[{"type":"number","maximum":24.0,"minimum":-24.0},{"type":"null"}],"title":"Audio Pitch"},"audio_eq":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Audio Eq"},"audio_denoise":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Audio Denoise"},"audio_normalize":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Audio Normalize"},"playback_speed":{"anyOf":[{"type":"number","maximum":100.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Playback Speed","description":"Playback speed, up to 100x (stored as sent; split and export read it clamped to 0.1-100x)"},"speed_ramp":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Speed Ramp"},"reverse_playback":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reverse Playback"},"freeze_frame":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Freeze Frame"},"fade_in_duration":{"anyOf":[{"type":"number","maximum":3600.0,"minimum":0.0},{"type":"null"}],"title":"Fade In Duration"},"fade_out_duration":{"anyOf":[{"type":"number","maximum":3600.0,"minimum":0.0},{"type":"null"}],"title":"Fade Out Duration"},"transition_type":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Transition Type"},"transition_duration":{"anyOf":[{"type":"number","maximum":60.0,"minimum":0.0},{"type":"null"}],"title":"Transition Duration"},"opacity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Opacity"},"scale":{"anyOf":[{"type":"number","maximum":100.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Scale"},"position_x":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Position X"},"position_y":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Position Y"},"horizontal_flip":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Horizontal Flip"},"vertical_flip":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Vertical Flip"},"crop_left":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Crop Left"},"crop_right":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Crop Right"},"crop_top":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Crop Top"},"crop_bottom":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Crop Bottom"},"brightness":{"anyOf":[{"type":"number","maximum":1.0,"minimum":-1.0},{"type":"null"}],"title":"Brightness"},"contrast":{"anyOf":[{"type":"number","maximum":4.0,"minimum":0.0},{"type":"null"}],"title":"Contrast"},"saturation":{"anyOf":[{"type":"number","maximum":4.0,"minimum":0.0},{"type":"null"}],"title":"Saturation"},"visual_filter":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Visual Filter"},"motion_preset":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Motion Preset"},"blur_strength":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Blur Strength"},"chroma_key_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Chroma Key Enabled"},"chroma_key_color":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Chroma Key Color"},"chroma_key_similarity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Chroma Key Similarity"},"chroma_key_blend":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Chroma Key Blend"},"blend_mode":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Blend Mode"},"mosaic_strength":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Mosaic Strength"},"rotation_degrees":{"anyOf":[{"type":"number","maximum":3600.0,"minimum":-3600.0},{"type":"null"}],"title":"Rotation Degrees"},"keyframes_json":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Keyframes Json"},"text_content":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Text Content"},"text_style":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Text Style"},"trim_start":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Trim Start"},"trim_end":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Trim End"},"remotion_template_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Remotion Template Id"},"remotion_props_json":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Remotion Props Json"},"transition_params_json":{"anyOf":[{"type":"string","maxLength":8192,"description":"The transition's parameters, a JSON object (at most 8 KB)"},{"type":"null"}],"title":"Transition Params Json"},"custom_graphic_id":{"anyOf":[{"type":"string","maxLength":36,"pattern":"^[A-Za-z0-9_-]{1,36}$"},{"type":"null"}],"title":"Custom Graphic Id"},"extras_json":{"anyOf":[{"type":"string","maxLength":65536,"description":"Studio-only fields, a JSON object of at most 64 KB stored as sent; the opennan.com editor ignores it, the export plays a clip's speedCurveJson and preservePitch, and a clip split reads speedCurveJson and divides captionWordsJson, as Studio does"},{"type":"null"}],"title":"Extras Json"},"effects":{"anyOf":[{"items":{"$ref":"#/components/schemas/EffectBody"},"type":"array","maxItems":50},{"type":"null"}],"title":"Effects","description":"The clip's whole effect stack (null: none)"}},"additionalProperties":false,"type":"object","required":["id"],"title":"ClipPatch"},"ClipSplit":{"properties":{"clip_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Clip Id"},"time":{"type":"number","maximum":86400.0,"exclusiveMinimum":0.0,"title":"Time","description":"Seconds on the timeline where the clip is cut"}},"additionalProperties":false,"type":"object","required":["clip_id","time"],"title":"ClipSplit"},"ClipUpdate":{"properties":{"clip_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Clip Id"},"start_time":{"anyOf":[{"type":"number","maximum":86400.0,"minimum":0.0},{"type":"null"}],"title":"Start Time"},"end_time":{"anyOf":[{"type":"number","maximum":86400.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"End Time"},"track_type":{"anyOf":[{"type":"string","enum":["video","audio","text","sticker","effect","remotion"]},{"type":"null"}],"title":"Track Type"},"track_index":{"anyOf":[{"type":"integer","maximum":99.0,"minimum":1.0},{"type":"null"}],"title":"Track Index"},"media_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Media Url"},"scene_id":{"anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},{"type":"null"}],"title":"Scene Id"},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"thumbnail_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Thumbnail Url"},"locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Locked"},"volume":{"anyOf":[{"type":"number","maximum":4.0,"minimum":0.0},{"type":"null"}],"title":"Volume"},"audio_pan":{"anyOf":[{"type":"number","maximum":1.0,"minimum":-1.0},{"type":"null"}],"title":"Audio Pan"},"audio_pitch":{"anyOf":[{"type":"number","maximum":24.0,"minimum":-24.0},{"type":"null"}],"title":"Audio Pitch"},"audio_eq":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Audio Eq"},"audio_denoise":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Audio Denoise"},"audio_normalize":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Audio Normalize"},"playback_speed":{"anyOf":[{"type":"number","maximum":100.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Playback Speed","description":"Playback speed, up to 100x (stored as sent; split and export read it clamped to 0.1-100x)"},"speed_ramp":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Speed Ramp"},"reverse_playback":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reverse Playback"},"freeze_frame":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Freeze Frame"},"fade_in_duration":{"anyOf":[{"type":"number","maximum":3600.0,"minimum":0.0},{"type":"null"}],"title":"Fade In Duration"},"fade_out_duration":{"anyOf":[{"type":"number","maximum":3600.0,"minimum":0.0},{"type":"null"}],"title":"Fade Out Duration"},"transition_type":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Transition Type"},"transition_duration":{"anyOf":[{"type":"number","maximum":60.0,"minimum":0.0},{"type":"null"}],"title":"Transition Duration"},"opacity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Opacity"},"scale":{"anyOf":[{"type":"number","maximum":100.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Scale"},"position_x":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Position X"},"position_y":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Position Y"},"horizontal_flip":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Horizontal Flip"},"vertical_flip":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Vertical Flip"},"crop_left":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Crop Left"},"crop_right":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Crop Right"},"crop_top":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Crop Top"},"crop_bottom":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Crop Bottom"},"brightness":{"anyOf":[{"type":"number","maximum":1.0,"minimum":-1.0},{"type":"null"}],"title":"Brightness"},"contrast":{"anyOf":[{"type":"number","maximum":4.0,"minimum":0.0},{"type":"null"}],"title":"Contrast"},"saturation":{"anyOf":[{"type":"number","maximum":4.0,"minimum":0.0},{"type":"null"}],"title":"Saturation"},"visual_filter":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Visual Filter"},"motion_preset":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Motion Preset"},"blur_strength":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Blur Strength"},"chroma_key_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Chroma Key Enabled"},"chroma_key_color":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Chroma Key Color"},"chroma_key_similarity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Chroma Key Similarity"},"chroma_key_blend":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Chroma Key Blend"},"blend_mode":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Blend Mode"},"mosaic_strength":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Mosaic Strength"},"rotation_degrees":{"anyOf":[{"type":"number","maximum":3600.0,"minimum":-3600.0},{"type":"null"}],"title":"Rotation Degrees"},"keyframes_json":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Keyframes Json"},"text_content":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Text Content"},"text_style":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Text Style"},"trim_start":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Trim Start"},"trim_end":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Trim End"},"remotion_template_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Remotion Template Id"},"remotion_props_json":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Remotion Props Json"},"transition_params_json":{"anyOf":[{"type":"string","maxLength":8192,"description":"The transition's parameters, a JSON object (at most 8 KB)"},{"type":"null"}],"title":"Transition Params Json"},"custom_graphic_id":{"anyOf":[{"type":"string","maxLength":36,"pattern":"^[A-Za-z0-9_-]{1,36}$"},{"type":"null"}],"title":"Custom Graphic Id"},"extras_json":{"anyOf":[{"type":"string","maxLength":65536,"description":"Studio-only fields, a JSON object of at most 64 KB stored as sent; the opennan.com editor ignores it, the export plays a clip's speedCurveJson and preservePitch, and a clip split reads speedCurveJson and divides captionWordsJson, as Studio does"},{"type":"null"}],"title":"Extras Json"}},"additionalProperties":false,"type":"object","required":["clip_id"],"title":"ClipUpdate"},"ClipView":{"properties":{"id":{"type":"string","title":"Id"},"track_type":{"type":"string","title":"Track Type"},"track_index":{"type":"integer","title":"Track Index"},"start_time":{"type":"number","title":"Start Time"},"end_time":{"type":"number","title":"End Time"},"media_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Url"},"media_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Type"},"scene_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scene Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"locked":{"type":"boolean","title":"Locked","default":false},"volume":{"type":"number","title":"Volume","default":1.0},"audio_pan":{"type":"number","title":"Audio Pan","default":0.0},"audio_pitch":{"type":"number","title":"Audio Pitch","default":0.0},"audio_eq":{"type":"string","title":"Audio Eq","default":"none"},"audio_denoise":{"type":"boolean","title":"Audio Denoise","default":false},"audio_normalize":{"type":"boolean","title":"Audio Normalize","default":false},"playback_speed":{"type":"number","title":"Playback Speed","default":1.0},"speed_ramp":{"type":"string","title":"Speed Ramp","default":"none"},"reverse_playback":{"type":"boolean","title":"Reverse Playback","default":false},"freeze_frame":{"type":"boolean","title":"Freeze Frame","default":false},"fade_in_duration":{"type":"number","title":"Fade In Duration","default":0.0},"fade_out_duration":{"type":"number","title":"Fade Out Duration","default":0.0},"transition_type":{"type":"string","title":"Transition Type","default":"none"},"transition_duration":{"type":"number","title":"Transition Duration","default":0.0},"opacity":{"type":"number","title":"Opacity","default":1.0},"scale":{"type":"number","title":"Scale","default":1.0},"position_x":{"type":"number","title":"Position X","default":0.5},"position_y":{"type":"number","title":"Position Y","default":0.5},"horizontal_flip":{"type":"boolean","title":"Horizontal Flip","default":false},"vertical_flip":{"type":"boolean","title":"Vertical Flip","default":false},"crop_left":{"type":"number","title":"Crop Left","default":0.0},"crop_right":{"type":"number","title":"Crop Right","default":0.0},"crop_top":{"type":"number","title":"Crop Top","default":0.0},"crop_bottom":{"type":"number","title":"Crop Bottom","default":0.0},"brightness":{"type":"number","title":"Brightness","default":0.0},"contrast":{"type":"number","title":"Contrast","default":1.0},"saturation":{"type":"number","title":"Saturation","default":1.0},"visual_filter":{"type":"string","title":"Visual Filter","default":"none"},"motion_preset":{"type":"string","title":"Motion Preset","default":"none"},"blur_strength":{"type":"number","title":"Blur Strength","default":0.0},"chroma_key_enabled":{"type":"boolean","title":"Chroma Key Enabled","default":false},"chroma_key_color":{"type":"string","title":"Chroma Key Color","default":"0x00FF00"},"chroma_key_similarity":{"type":"number","title":"Chroma Key Similarity","default":0.1},"chroma_key_blend":{"type":"number","title":"Chroma Key Blend","default":0.0},"blend_mode":{"type":"string","title":"Blend Mode","default":"normal"},"mosaic_strength":{"type":"number","title":"Mosaic Strength","default":0.0},"rotation_degrees":{"type":"number","title":"Rotation Degrees","default":0.0},"keyframes_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyframes Json"},"text_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text Content"},"text_style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text Style"},"trim_start":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trim Start"},"trim_end":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trim End"},"remotion_template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remotion Template Id"},"remotion_props_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remotion Props Json"},"transition_params_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transition Params Json"},"custom_graphic_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Graphic Id"},"extras_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extras Json"},"effects":{"items":{"$ref":"#/components/schemas/EffectView"},"type":"array","title":"Effects","default":[]}},"additionalProperties":false,"type":"object","required":["id","track_type","track_index","start_time","end_time"],"title":"ClipView"},"CommandResult":{"properties":{"object":{"type":"string","const":"timeline_command","title":"Object","default":"timeline_command"},"created_ids":{"items":{"type":"string"},"type":"array","title":"Created Ids"},"timeline":{"$ref":"#/components/schemas/TimelineView"}},"type":"object","required":["created_ids","timeline"],"title":"CommandResult"},"CompleteBody":{"properties":{"parts":{"anyOf":[{"items":{"$ref":"#/components/schemas/CompletedPart"},"type":"array","maxItems":10000},{"type":"null"}],"title":"Parts","description":"A multipart upload's parts: the ETag each part PUT answered"}},"additionalProperties":false,"type":"object","title":"CompleteBody"},"CompletedPart":{"properties":{"number":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Number"},"etag":{"type":"string","maxLength":128,"minLength":1,"title":"Etag"}},"additionalProperties":false,"type":"object","required":["number","etag"],"title":"CompletedPart"},"ConceptsBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"script":{"type":"string","maxLength":20000,"minLength":1,"title":"Script","description":"The script, lyrics or story to build concepts from"},"style":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Style","description":"Visual style, e.g. anime or film noir"},"characters":{"items":{"$ref":"#/components/schemas/StoryCharacter"},"type":"array","maxItems":10,"title":"Characters"},"direction":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Direction","description":"Your own direction, kept in every concept"}},"additionalProperties":false,"type":"object","required":["script"],"title":"ConceptsBody"},"CropBody":{"properties":{"sheet_url":{"type":"string","maxLength":2048,"title":"Sheet Url","description":"https URL of the storyboard sheet (PNG, JPEG or WEBP)"},"cols":{"type":"integer","maximum":6.0,"minimum":1.0,"title":"Cols","description":"Panel columns on the sheet"},"rows":{"type":"integer","maximum":6.0,"minimum":1.0,"title":"Rows","description":"Panel rows on the sheet"},"panel_count":{"type":"integer","maximum":36.0,"minimum":1.0,"title":"Panel Count","description":"Panels to cut (at most cols x rows)"},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:3","3:4","21:9"],"title":"Aspect","description":"Frame shape of a panel","default":"16:9"}},"additionalProperties":false,"type":"object","required":["sheet_url","cols","rows","panel_count"],"title":"CropBody"},"CropResult":{"properties":{"panels":{"items":{"type":"string"},"type":"array","title":"Panels"}},"additionalProperties":false,"type":"object","required":["panels"],"title":"CropResult"},"DeduplicatedView":{"properties":{"object":{"type":"string","const":"upload","title":"Object","default":"upload"},"deduplicated":{"type":"boolean","const":true,"title":"Deduplicated","default":true},"asset_id":{"type":"string","title":"Asset Id"},"media_url":{"type":"string","title":"Media Url"},"content_type":{"type":"string","title":"Content Type"},"size_bytes":{"type":"integer","title":"Size Bytes"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}},"additionalProperties":false,"type":"object","required":["asset_id","media_url","content_type","size_bytes"],"title":"DeduplicatedView"},"DeletedIds":{"properties":{"clips":{"items":{"type":"string"},"type":"array","title":"Clips","default":[]},"scenes":{"items":{"type":"string"},"type":"array","title":"Scenes","default":[]}},"type":"object","title":"DeletedIds"},"DetectionBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"video_url":{"type":"string","maxLength":2048,"title":"Video Url","description":"https URL of the video to break down (MP4, MOV or WEBM)"},"trim_start":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Trim Start","description":"Seconds: read the video from here"},"trim_end":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Trim End","description":"Seconds: read the video up to here"}},"additionalProperties":false,"type":"object","required":["video_url"],"title":"DetectionBody"},"DocumentMediaView":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"kind":{"type":"string","enum":["image","video","audio","file"],"title":"Kind"},"source":{"type":"string","enum":["upload","music","scene","timeline"],"title":"Source"},"url":{"type":"string","title":"Url"},"scene_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scene Id"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Id"},"sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sha256"}},"additionalProperties":false,"type":"object","required":["kind","source","url"],"title":"DocumentMediaView"},"DocumentProjectView":{"properties":{"object":{"type":"string","const":"project","title":"Object","default":"project"},"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"product_type":{"type":"string","title":"Product Type"},"status":{"type":"string","title":"Status"},"aspect_ratio":{"type":"string","title":"Aspect Ratio"},"visual_style":{"type":"string","title":"Visual Style"},"camera_type":{"type":"string","title":"Camera Type"},"default_video_quality":{"type":"string","title":"Default Video Quality"},"default_audio_on":{"type":"boolean","title":"Default Audio On"},"music_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Music Url"},"music_filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Music Filename"},"music_volume":{"type":"number","title":"Music Volume"},"final_video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Final Video Url"},"scene_count":{"type":"integer","title":"Scene Count"},"timeline_revision":{"type":"integer","title":"Timeline Revision"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"duration_seconds":{"type":"number","title":"Duration Seconds","default":0.0},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"media_bytes":{"type":"integer","title":"Media Bytes","default":0},"data_bytes":{"type":"integer","title":"Data Bytes","default":0},"origin":{"type":"string","enum":["studio","web"],"title":"Origin","default":"web"},"last_edited_device":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Edited Device"},"deleted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted At"},"extras_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extras Json"}},"additionalProperties":false,"type":"object","required":["id","name","product_type","status","aspect_ratio","visual_style","camera_type","default_video_quality","default_audio_on","music_volume","scene_count","timeline_revision"],"title":"DocumentProjectView"},"DocumentSceneView":{"properties":{"object":{"type":"string","const":"scene","title":"Object","default":"scene"},"id":{"type":"string","title":"Id"},"order":{"type":"integer","title":"Order"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"},"card_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Type"},"status":{"type":"string","title":"Status"},"duration":{"type":"number","title":"Duration"},"timeline_position_seconds":{"type":"number","title":"Timeline Position Seconds"},"track_index":{"type":"integer","title":"Track Index"},"transition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transition"},"visual_transition":{"type":"string","title":"Visual Transition"},"visual_transition_duration":{"type":"number","title":"Visual Transition Duration"},"scene_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scene Location"},"objects_in_scene":{"items":{"type":"string"},"type":"array","title":"Objects In Scene","default":[]},"overlay_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Overlay Text"},"audio_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audio Text"},"music_enabled":{"type":"boolean","title":"Music Enabled","default":false},"start_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Image Url"},"end_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Image Url"},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Url"},"audio_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audio Url"},"source_video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Video Url"},"background_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Background Url"},"shots":{"items":{"$ref":"#/components/schemas/ShotView"},"type":"array","title":"Shots","default":[]},"start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Time"},"end_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Time"},"card_config":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Config"},"fit_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fit Mode"},"transform_scale":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Transform Scale"},"transform_offset_x":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Transform Offset X"},"transform_offset_y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Transform Offset Y"},"source_width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Width"},"source_height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Height"},"extras_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extras Json"},"effects":{"items":{"$ref":"#/components/schemas/EffectView"},"type":"array","title":"Effects","default":[]},"shots_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shots Version","description":"The version of the scene's shots and storyboard now: send it back as scenes.patch[].shots_version to put them back later"},"storyboard_sheets":{"items":{"$ref":"#/components/schemas/StoryboardSheetView"},"type":"array","title":"Storyboard Sheets","description":"The scene's drawn storyboard: each sheet and its panels (one per shot); empty when none is drawn"}},"additionalProperties":false,"type":"object","required":["id","order","status","duration","timeline_position_seconds","track_index","visual_transition","visual_transition_duration"],"title":"DocumentSceneView","description":"A scene with the columns Studio writes (S4), its effect stack and its\nStudio-only fields. card_type is as stored: null for a scene made with\nno card type (Studio's manual scene; the scene list shows ai_video)."},"DocumentTranslationBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"file_url":{"type":"string","maxLength":2048,"title":"File Url","description":"Uploaded image, PDF or CBZ URL, up to 50 MB"},"target_language":{"type":"string","maxLength":16,"title":"Target Language","default":"th"},"source_language":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Source Language"},"mode":{"type":"string","enum":["auto","document","manga"],"title":"Mode","default":"auto"},"max_pages":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Max Pages","description":"Reject a longer file before any AI call","default":20},"glossary":{"additionalProperties":{"type":"string"},"type":"object","maxProperties":50,"title":"Glossary"},"max_price_usd":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Price Usd","description":"Reject before holding funds if the price exceeds this ceiling"}},"additionalProperties":false,"type":"object","required":["file_url"],"title":"DocumentTranslationBody"},"DocumentUploadBody":{"properties":{"filename":{"type":"string","maxLength":255,"minLength":1,"title":"Filename"},"content_type":{"type":"string","enum":["image/png","image/jpeg","image/webp","application/pdf","application/vnd.comicbook+zip"],"title":"Content Type"},"size_bytes":{"type":"integer","maximum":52428800.0,"minimum":1.0,"title":"Size Bytes"},"scope":{"type":"string","const":"temp","title":"Scope","default":"temp"}},"additionalProperties":false,"type":"object","required":["filename","content_type","size_bytes"],"title":"DocumentUploadBody"},"DocumentView":{"properties":{"object":{"type":"string","const":"project_document","title":"Object","default":"project_document"},"revision":{"type":"integer","title":"Revision"},"project":{"$ref":"#/components/schemas/DocumentProjectView"},"tracks":{"items":{"$ref":"#/components/schemas/TrackView"},"type":"array","title":"Tracks"},"clips":{"items":{"$ref":"#/components/schemas/ClipView"},"type":"array","title":"Clips"},"scenes":{"items":{"$ref":"#/components/schemas/DocumentSceneView"},"type":"array","title":"Scenes"},"media":{"items":{"$ref":"#/components/schemas/DocumentMediaView"},"type":"array","title":"Media"}},"additionalProperties":false,"type":"object","required":["revision","project","tracks","clips","scenes","media"],"title":"DocumentView"},"DubAnalysisBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"video_url":{"type":"string","maxLength":2048,"title":"Video Url","description":"https URL of the video (an MP4, MOV or WEBM file with sound, or a video page such as YouTube or TikTok; at most 200 MB and 5 minutes)"},"target_language":{"type":"string","enum":["af","am","ar","hy","as","ast","az","be","bn","bs","bg","my","yue","ca","ceb","ny","hr","cs","da","nl","en","et","fil","fi","fr","ff","gl","ka","de","el","gu","ha","he","hi","hu","is","id","ga","it","ja","jv","kam","kn","kk","ky","ko","lo","lv","ln","lt","lg","lb","mk","ms","ml","mt","zh","mi","mr","mn","ne","no","oc","or","ps","fa","pl","pt","pa","ro","ru","sr","sn","sd","sk","sl","so","ckb","es","sw","sv","tg","ta","te","th","tr","uk","ur","uz","vi","cy","wo","yo","zu"],"title":"Target Language","description":"The language to dub into, a code such as th, en, ja or es (every one: GET /v1/tools limits.target_languages)"},"source_language":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Source Language","description":"Optional: the spoken language as a 2- or 3-letter code (en, ja); omit to detect it"}},"additionalProperties":false,"type":"object","required":["video_url","target_language"],"title":"DubAnalysisBody"},"DubBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"analysis_id":{"anyOf":[{"type":"string","pattern":"^task_[0-9a-f]{24}$"},{"type":"null"}],"title":"Analysis Id","description":"A dub of an analysis: the analysis_id of POST /v1/videos/dub-analyses (under 6 days old)"},"video_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Video Url","description":"One call (with target_language, native voices): https URL of the video (an MP4, MOV or WEBM file with sound, or a video page such as YouTube or TikTok; at most 200 MB and 5 minutes)"},"target_language":{"anyOf":[{"type":"string","enum":["af","am","ar","hy","as","ast","az","be","bn","bs","bg","my","yue","ca","ceb","ny","hr","cs","da","nl","en","et","fil","fi","fr","ff","gl","ka","de","el","gu","ha","he","hi","hu","is","id","ga","it","ja","jv","kam","kn","kk","ky","ko","lo","lv","ln","lt","lg","lb","mk","ms","ml","mt","zh","mi","mr","mn","ne","no","oc","or","ps","fa","pl","pt","pa","ro","ru","sr","sn","sd","sk","sl","so","ckb","es","sw","sv","tg","ta","te","th","tr","uk","ur","uz","vi","cy","wo","yo","zu"]},{"type":"null"}],"title":"Target Language","description":"One call: the language to dub into, a code such as th, en, ja or es"},"source_language":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Source Language","description":"One call, optional: the spoken language (en, ja); omit to detect it"},"lipsync":{"type":"boolean","title":"Lipsync","description":"Mouths follow the new speech where a talking face is on screen","default":true},"max_price_usd":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Price Usd","description":"Optional price lock: refused (409 proposal_price_changed, nothing held) when the hold would be higher"},"characters":{"anyOf":[{"items":{"$ref":"#/components/schemas/DubChoice"},"type":"array","maxItems":12},{"type":"null"}],"title":"Characters","description":"A dub of an analysis: a voice for every character"},"lines":{"anyOf":[{"items":{"$ref":"#/components/schemas/DubLineEdit"},"type":"array","maxItems":2000},{"type":"null"}],"title":"Lines","description":"A dub of an analysis, optional: edited translations of native characters' lines"},"i_have_rights":{"type":"boolean","title":"I Have Rights","description":"Must be true when any character is clone: you have the rights to the video and permission to clone the voices in it","default":false}},"additionalProperties":false,"type":"object","title":"DubBody"},"DubChoice":{"properties":{"id":{"type":"string","pattern":"^s(?:[1-9]|1[0-2])$","title":"Id","description":"A character id from the analysis (s1 ... s12)"},"voice":{"type":"string","enum":["clone","native","keep"],"title":"Voice","description":"clone (their own voice; needs i_have_rights and the account's dubbing consent), native (a stock voice of the target language, gender and age) or keep (the original speech)"}},"additionalProperties":false,"type":"object","required":["id","voice"],"title":"DubChoice"},"DubLineEdit":{"properties":{"index":{"type":"integer","minimum":0.0,"title":"Index","description":"The line's index in the analysis"},"translation":{"type":"string","maxLength":400,"minLength":1,"title":"Translation","description":"What the character says instead (within the line's max_chars)"}},"additionalProperties":false,"type":"object","required":["index","translation"],"title":"DubLineEdit"},"EffectBody":{"properties":{"id":{"anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,64}$"},{"type":"null"}],"title":"Id","description":"Your own id for this effect row (kept as sent, unique in the stack); without one the row's own id is shown"},"effect_id":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,64}$","title":"Effect Id","description":"An effect of GET the effect registry"},"order":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Order","default":0},"enabled":{"type":"boolean","title":"Enabled","default":true},"params_json":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Params Json"}},"additionalProperties":false,"type":"object","required":["effect_id"],"title":"EffectBody","description":"One effect of a clip's or scene's stack (the whole stack is sent)."},"EffectView":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"The effect row's id: the one you sent with it, else the row's own"},"effect_id":{"type":"string","title":"Effect Id"},"order":{"type":"integer","title":"Order"},"enabled":{"type":"boolean","title":"Enabled"},"params_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Params Json"}},"additionalProperties":false,"type":"object","required":["effect_id","order","enabled"],"title":"EffectView"},"ExportBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"music_volume":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Music Volume","description":"Music level, 0 to 1 (default: the project's)"},"upscale":{"type":"boolean","title":"Upscale","description":"Not offered yet: must be false","default":false}},"additionalProperties":false,"type":"object","title":"ExportBody"},"ExtractShot":{"properties":{"op":{"type":"string","const":"extract_shot","title":"Op"},"scene_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"},"shot_index":{"type":"integer","minimum":0.0,"title":"Shot Index"},"timeline_position_seconds":{"type":"number","maximum":86400.0,"minimum":0.0,"title":"Timeline Position Seconds"},"track_index":{"anyOf":[{"type":"integer","maximum":99.0,"minimum":1.0},{"type":"null"}],"title":"Track Index"}},"additionalProperties":false,"type":"object","required":["op","scene_id","shot_index","timeline_position_seconds"],"title":"ExtractShot"},"ImageBackgroundRemovalBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"image_url":{"type":"string","maxLength":2048,"title":"Image Url","description":"https URL of the image (PNG, JPEG or WEBP; at most 20 MB and 25 megapixels)"}},"additionalProperties":false,"type":"object","required":["image_url"],"title":"ImageBackgroundRemovalBody"},"ImageEditBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"instruction":{"type":"string","maxLength":2000,"minLength":1,"title":"Instruction","description":"What to change in the shot's panel image"}},"additionalProperties":false,"type":"object","required":["instruction"],"title":"ImageEditBody"},"ImageGenerationBody":{"properties":{"model":{"type":"string","title":"Model","description":"Image model id from GET /v1/models?category=image, e.g. nano-banana-2"},"prompt":{"type":"string","maxLength":4000,"title":"Prompt","description":"What the image should show, or how to change the input image","default":""},"image":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Image","description":"An https image URL to edit or use as reference"},"images":{"items":{"type":"string","maxLength":2048},"type":"array","maxItems":10,"title":"Images","description":"More https image URLs to edit or use as reference (up to 10 with image)"},"quality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quality","description":"One of the model's `qualities` from GET /v1/models; omit for its from price (the lowest-priced tier sold). `price.tiers` lists the price of each quality and size"},"size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Size","description":"One of the model's `sizes` (1K / 2K / 4K); omit for its from price. `price.tiers` lists the price of each quality and size"},"aspect_ratio":{"type":"string","title":"Aspect Ratio","description":"One of: 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9","default":"1:1"},"n":{"type":"integer","maximum":1.0,"minimum":1.0,"title":"N","description":"Images per call (1 for now)","default":1},"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"POSTed when the task finishes"}},"additionalProperties":false,"type":"object","required":["model"],"title":"ImageGenerationBody"},"ImportBody":{"properties":{"device":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Device","description":"The device importing it (shown as last edited on)"},"project":{"$ref":"#/components/schemas/ImportProjectFields"},"scenes":{"items":{"$ref":"#/components/schemas/ImportScene"},"type":"array","maxItems":500,"title":"Scenes"},"timeline":{"$ref":"#/components/schemas/ImportTimeline"}},"additionalProperties":false,"type":"object","required":["project"],"title":"ImportBody"},"ImportClip":{"properties":{"media_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Media Url"},"media_type":{"type":"string","pattern":"^[a-z_]{1,20}$","title":"Media Type","default":"uploaded"},"scene_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Scene Id","description":"Its scene's id in your bundle"},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"thumbnail_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Thumbnail Url"},"locked":{"type":"boolean","title":"Locked","default":false},"volume":{"type":"number","maximum":4.0,"minimum":0.0,"title":"Volume","default":1.0},"audio_pan":{"type":"number","maximum":1.0,"minimum":-1.0,"title":"Audio Pan","default":0.0},"audio_pitch":{"type":"number","maximum":24.0,"minimum":-24.0,"title":"Audio Pitch","default":0.0},"audio_eq":{"type":"string","maxLength":20,"title":"Audio Eq","default":"none"},"audio_denoise":{"type":"boolean","title":"Audio Denoise","default":false},"audio_normalize":{"type":"boolean","title":"Audio Normalize","default":false},"playback_speed":{"type":"number","maximum":100.0,"exclusiveMinimum":0.0,"title":"Playback Speed","description":"Playback speed, up to 100x (stored as sent; split and export read it clamped to 0.1-100x)","default":1.0},"speed_ramp":{"type":"string","maxLength":20,"title":"Speed Ramp","default":"none"},"reverse_playback":{"type":"boolean","title":"Reverse Playback","default":false},"freeze_frame":{"type":"boolean","title":"Freeze Frame","default":false},"fade_in_duration":{"type":"number","maximum":3600.0,"minimum":0.0,"title":"Fade In Duration","default":0.0},"fade_out_duration":{"type":"number","maximum":3600.0,"minimum":0.0,"title":"Fade Out Duration","default":0.0},"transition_type":{"type":"string","maxLength":20,"title":"Transition Type","default":"none"},"transition_duration":{"type":"number","maximum":60.0,"minimum":0.0,"title":"Transition Duration","default":0.0},"opacity":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Opacity","default":1.0},"scale":{"type":"number","maximum":100.0,"exclusiveMinimum":0.0,"title":"Scale","default":1.0},"position_x":{"type":"number","maximum":10.0,"minimum":-10.0,"title":"Position X","default":0.5},"position_y":{"type":"number","maximum":10.0,"minimum":-10.0,"title":"Position Y","default":0.5},"horizontal_flip":{"type":"boolean","title":"Horizontal Flip","default":false},"vertical_flip":{"type":"boolean","title":"Vertical Flip","default":false},"crop_left":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Crop Left","default":0.0},"crop_right":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Crop Right","default":0.0},"crop_top":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Crop Top","default":0.0},"crop_bottom":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Crop Bottom","default":0.0},"brightness":{"type":"number","maximum":1.0,"minimum":-1.0,"title":"Brightness","default":0.0},"contrast":{"type":"number","maximum":4.0,"minimum":0.0,"title":"Contrast","default":1.0},"saturation":{"type":"number","maximum":4.0,"minimum":0.0,"title":"Saturation","default":1.0},"visual_filter":{"type":"string","maxLength":20,"title":"Visual Filter","default":"none"},"motion_preset":{"type":"string","maxLength":20,"title":"Motion Preset","default":"none"},"blur_strength":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Blur Strength","default":0.0},"chroma_key_enabled":{"type":"boolean","title":"Chroma Key Enabled","default":false},"chroma_key_color":{"type":"string","maxLength":16,"title":"Chroma Key Color","default":"0x00FF00"},"chroma_key_similarity":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Chroma Key Similarity","default":0.1},"chroma_key_blend":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Chroma Key Blend","default":0.0},"blend_mode":{"type":"string","maxLength":20,"title":"Blend Mode","default":"normal"},"mosaic_strength":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Mosaic Strength","default":0.0},"rotation_degrees":{"type":"number","maximum":3600.0,"minimum":-3600.0,"title":"Rotation Degrees","default":0.0},"keyframes_json":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Keyframes Json"},"text_content":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Text Content"},"text_style":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Text Style"},"trim_start":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Trim Start"},"trim_end":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Trim End"},"remotion_template_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Remotion Template Id"},"remotion_props_json":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Remotion Props Json"},"transition_params_json":{"anyOf":[{"type":"string","maxLength":8192,"description":"The transition's parameters, a JSON object (at most 8 KB)"},{"type":"null"}],"title":"Transition Params Json"},"custom_graphic_id":{"anyOf":[{"type":"string","maxLength":36,"pattern":"^[A-Za-z0-9_-]{1,36}$"},{"type":"null"}],"title":"Custom Graphic Id","description":"A graphic of this account's graphics library"},"extras_json":{"anyOf":[{"type":"string","maxLength":65536,"description":"Studio-only fields, a JSON object of at most 64 KB stored as sent; the opennan.com editor ignores it, the export plays a clip's speedCurveJson and preservePitch, and a clip split reads speedCurveJson and divides captionWordsJson, as Studio does"},{"type":"null"}],"title":"Extras Json"},"id":{"type":"string","maxLength":64,"minLength":1,"title":"Id","description":"The clip's id in your bundle: a free lowercase UUID is kept, any other is replaced"},"effects":{"anyOf":[{"items":{"$ref":"#/components/schemas/EffectBody"},"type":"array","maxItems":50},{"type":"null"}],"title":"Effects"},"track_type":{"type":"string","enum":["video","audio","text","sticker","effect","remotion"],"title":"Track Type"},"track_index":{"type":"integer","maximum":99.0,"minimum":1.0,"title":"Track Index"},"start_time":{"type":"number","maximum":86400.0,"minimum":0.0,"title":"Start Time"},"end_time":{"type":"number","maximum":86400.0,"exclusiveMinimum":0.0,"title":"End Time"}},"additionalProperties":false,"type":"object","required":["id","track_type","track_index","start_time","end_time"],"title":"ImportClip"},"ImportProjectFields":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"extras_json":{"anyOf":[{"type":"string","maxLength":65536,"description":"Studio-only fields, a JSON object of at most 64 KB stored as sent; the opennan.com editor ignores it, the export plays a clip's speedCurveJson and preservePitch, and a clip split reads speedCurveJson and divides captionWordsJson, as Studio does"},{"type":"null"}],"title":"Extras Json"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"product_type":{"anyOf":[{"type":"string","enum":["music_video","podcast","movie","short_clip","youtube_video"]},{"type":"null"}],"title":"Product Type"},"aspect_ratio":{"anyOf":[{"type":"string","enum":["16:9","9:16","1:1","4:3","3:4","4:5","21:9","9:21"]},{"type":"null"}],"title":"Aspect Ratio"},"visual_style":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Visual Style"},"camera_type":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Camera Type"},"default_video_quality":{"anyOf":[{"type":"string","enum":["480p","720p","1080p","4K"]},{"type":"null"}],"title":"Default Video Quality"},"music_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Music Url"},"music_filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Music Filename"}},"additionalProperties":false,"type":"object","required":["name"],"title":"ImportProjectFields"},"ImportResult":{"properties":{"project":{"$ref":"#/components/schemas/ProjectView"},"scene_ids":{"additionalProperties":{"type":"string"},"type":"object","title":"Scene Ids"},"clip_ids":{"additionalProperties":{"type":"string"},"type":"object","title":"Clip Ids"}},"additionalProperties":false,"type":"object","required":["project","scene_ids","clip_ids"],"title":"ImportResult"},"ImportScene":{"properties":{"start_time":{"anyOf":[{"type":"string","maxLength":20,"pattern":"^[0-9:,.]{1,20}$"},{"type":"null"}],"title":"Start Time","description":"Lyric / subtitle start (an SRT timestamp)"},"end_time":{"anyOf":[{"type":"string","maxLength":20,"pattern":"^[0-9:,.]{1,20}$"},{"type":"null"}],"title":"End Time"},"card_config":{"anyOf":[{"type":"string","maxLength":16384,"description":"The card's settings, a JSON object (at most 16 KB)"},{"type":"null"}],"title":"Card Config"},"fit_mode":{"anyOf":[{"type":"string","enum":["contain","cover","fill"]},{"type":"null"}],"title":"Fit Mode"},"transform_scale":{"anyOf":[{"type":"number","maximum":100.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Transform Scale"},"transform_offset_x":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Transform Offset X"},"transform_offset_y":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Transform Offset Y"},"source_width":{"anyOf":[{"type":"integer","maximum":32768.0,"minimum":1.0},{"type":"null"}],"title":"Source Width"},"source_height":{"anyOf":[{"type":"integer","maximum":32768.0,"minimum":1.0},{"type":"null"}],"title":"Source Height"},"extras_json":{"anyOf":[{"type":"string","maxLength":65536,"description":"Studio-only fields, a JSON object of at most 64 KB stored as sent; the opennan.com editor ignores it, the export plays a clip's speedCurveJson and preservePitch, and a clip split reads speedCurveJson and divides captionWordsJson, as Studio does"},{"type":"null"}],"title":"Extras Json"},"id":{"type":"string","maxLength":64,"minLength":1,"title":"Id","description":"The scene's id in your bundle: a free lowercase UUID is kept, any other is replaced"},"effects":{"anyOf":[{"items":{"$ref":"#/components/schemas/EffectBody"},"type":"array","maxItems":50},{"type":"null"}],"title":"Effects"},"background_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Background Url"},"caption":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Caption"},"card_type":{"anyOf":[{"type":"string","pattern":"^[a-z_]{1,30}$"},{"type":"null"}],"title":"Card Type"},"duration":{"anyOf":[{"type":"number","maximum":3600.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Duration"},"timeline_position_seconds":{"anyOf":[{"type":"number","maximum":86400.0,"minimum":0.0},{"type":"null"}],"title":"Timeline Position Seconds"},"track_index":{"anyOf":[{"type":"integer","maximum":99.0,"minimum":1.0},{"type":"null"}],"title":"Track Index"},"visual_transition":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Visual Transition"},"visual_transition_duration":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"null"}],"title":"Visual Transition Duration"},"scene_location":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Scene Location"},"overlay_text":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Overlay Text"},"audio_text":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Audio Text"},"music_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Music Enabled"},"start_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Start Image Url"},"end_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"End Image Url"},"video_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Video Url"},"audio_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Audio Url"},"source_video_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Source Video Url"}},"additionalProperties":false,"type":"object","required":["id"],"title":"ImportScene"},"ImportTimeline":{"properties":{"tracks":{"items":{"$ref":"#/components/schemas/TrackBody"},"type":"array","maxItems":200,"title":"Tracks"},"clips":{"items":{"$ref":"#/components/schemas/ImportClip"},"type":"array","maxItems":5000,"title":"Clips"}},"additionalProperties":false,"type":"object","title":"ImportTimeline"},"LocationBody":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"tag":{"anyOf":[{"type":"string","pattern":"^[a-z0-9_]{1,64}$","description":"A snake_case tag, e.g. red_mug"},{"type":"null"}],"title":"Tag","description":"Made from the name when left out"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"reference_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Reference Image Url"},"is_real_place":{"type":"boolean","title":"Is Real Place","default":false}},"additionalProperties":false,"type":"object","required":["name"],"title":"LocationBody"},"LocationList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/LocationView"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"LocationList"},"LocationPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"tag":{"anyOf":[{"type":"string","pattern":"^[a-z0-9_]{1,64}$","description":"A snake_case tag, e.g. red_mug"},{"type":"null"}],"title":"Tag"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"reference_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Reference Image Url"},"is_real_place":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Real Place"}},"additionalProperties":false,"type":"object","title":"LocationPatch"},"LocationView":{"properties":{"object":{"type":"string","const":"story_location","title":"Object","default":"story_location"},"id":{"type":"string","title":"Id"},"tag":{"type":"string","title":"Tag"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"reference_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Image Url"},"is_real_place":{"type":"boolean","title":"Is Real Place","default":false}},"additionalProperties":false,"type":"object","required":["id","tag","name"],"title":"LocationView"},"MediaChanges":{"properties":{"add":{"items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"type":"array","maxItems":500,"title":"Add","description":"Asset ids to link"},"remove":{"items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"type":"array","maxItems":500,"title":"Remove"}},"additionalProperties":false,"type":"object","title":"MediaChanges"},"MediaItemView":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"kind":{"type":"string","enum":["image","video","audio","file"],"title":"Kind"},"source":{"type":"string","enum":["upload","music","scene","timeline"],"title":"Source"},"url":{"type":"string","title":"Url"},"scene_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scene Id"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"additionalProperties":false,"type":"object","required":["kind","source","url"],"title":"MediaItemView"},"MediaList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/MediaItemView"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"MediaList"},"MemoryNote":{"properties":{"index":{"type":"integer","title":"Index"},"text":{"type":"string","title":"Text"}},"additionalProperties":false,"type":"object","required":["index","text"],"title":"MemoryNote"},"MemoryView":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/MemoryNote"},"type":"array","title":"Data"}},"additionalProperties":false,"type":"object","required":["data"],"title":"MemoryView"},"MergeShot":{"properties":{"op":{"type":"string","const":"merge_shot","title":"Op"},"scene_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"},"shot_index":{"type":"integer","minimum":0.0,"title":"Shot Index"},"target_scene_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Target Scene Id"},"target_shot_index":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Target Shot Index"}},"additionalProperties":false,"type":"object","required":["op","scene_id","shot_index","target_scene_id"],"title":"MergeShot"},"ModelBody":{"properties":{"image":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Image","description":"https URL of the object or character"},"prompt":{"anyOf":[{"type":"string","maxLength":600},{"type":"null"}],"title":"Prompt","description":"What to model (instead of image)"},"kind":{"type":"string","enum":["character","prop"],"title":"Kind","description":"prop: ~4k triangles (10k high); character: ~8k (20k high), asked for in a T-pose","default":"prop"},"quality":{"type":"string","enum":["standard","high"],"title":"Quality","default":"standard"},"engine":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Engine","description":"Optional engine id from GET /v1/models?category=3d (default: the first listed)"},"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"POSTed when the task finishes"}},"additionalProperties":false,"type":"object","title":"ModelBody"},"MoveScene":{"properties":{"op":{"type":"string","const":"move","title":"Op"},"scene_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"},"timeline_position_seconds":{"type":"number","maximum":86400.0,"minimum":0.0,"title":"Timeline Position Seconds"},"track_index":{"anyOf":[{"type":"integer","maximum":99.0,"minimum":1.0},{"type":"null"}],"title":"Track Index"}},"additionalProperties":false,"type":"object","required":["op","scene_id","timeline_position_seconds"],"title":"MoveScene"},"MultipartView":{"properties":{"part_size":{"type":"integer","title":"Part Size"},"parts":{"items":{"$ref":"#/components/schemas/UploadPartView"},"type":"array","title":"Parts"}},"additionalProperties":false,"type":"object","required":["part_size","parts"],"title":"MultipartView"},"NoteBody":{"properties":{"note":{"type":"string","maxLength":500,"minLength":1,"title":"Note"}},"additionalProperties":false,"type":"object","required":["note"],"title":"NoteBody"},"ObjectBody":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"tag":{"anyOf":[{"type":"string","pattern":"^[a-z0-9_]{1,64}$","description":"A snake_case tag, e.g. red_mug"},{"type":"null"}],"title":"Tag","description":"Made from the name when left out"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"reference_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Reference Image Url"}},"additionalProperties":false,"type":"object","required":["name"],"title":"ObjectBody"},"ObjectList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/ObjectView"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"ObjectList"},"ObjectPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"tag":{"anyOf":[{"type":"string","pattern":"^[a-z0-9_]{1,64}$","description":"A snake_case tag, e.g. red_mug"},{"type":"null"}],"title":"Tag"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"reference_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Reference Image Url"}},"additionalProperties":false,"type":"object","title":"ObjectPatch"},"ObjectView":{"properties":{"object":{"type":"string","const":"story_object","title":"Object","default":"story_object"},"id":{"type":"string","title":"Id"},"tag":{"type":"string","title":"Tag"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"reference_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Image Url"}},"additionalProperties":false,"type":"object","required":["id","tag","name"],"title":"ObjectView"},"OutfitBody":{"properties":{"label":{"type":"string","maxLength":100,"minLength":1,"title":"Label"},"image_url":{"type":"string","maxLength":512,"title":"Image Url"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"is_default":{"type":"boolean","title":"Is Default","default":false}},"additionalProperties":false,"type":"object","required":["label","image_url"],"title":"OutfitBody"},"OutfitView":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_default":{"type":"boolean","title":"Is Default","default":false}},"additionalProperties":false,"type":"object","required":["id","label"],"title":"OutfitView"},"PlanBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"style":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Style","description":"Visual style (default: the project's)"},"concept":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Concept","description":"The story to follow (default: the project's concept)"},"direction":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Direction","description":"Setting, tone and context every scene keeps"}},"additionalProperties":false,"type":"object","title":"PlanBody"},"ProductAdBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"image_url":{"type":"string","maxLength":2048,"title":"Image Url","description":"https URL of one product photo (PNG, JPEG or WEBP; at most 20 MB and 25 megapixels)"},"product_name":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Product Name","description":"Optional: the product's name, used in the caption"},"selling_point":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Selling Point","description":"Optional: one line on why to buy it, used in the caption"},"language":{"type":"string","maxLength":16,"title":"Language","description":"The caption's language as a language code (en, th, ja, zh-TW, pt-BR, ...)","default":"en"},"style":{"type":"string","enum":["studio","lifestyle","color"],"title":"Style","description":"The look of the product shot: studio (a clean studio backdrop), lifestyle (a real setting that suits the product) or color (a bold colour backdrop)","default":"studio"}},"additionalProperties":false,"type":"object","required":["image_url"],"title":"ProductAdBody"},"ProjectChanges":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"aspect_ratio":{"anyOf":[{"type":"string","enum":["16:9","9:16","1:1","4:3","3:4","4:5","21:9","9:21"]},{"type":"null"}],"title":"Aspect Ratio"},"music_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Music Url"},"music_filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Music Filename"},"music_volume":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Music Volume"},"default_audio_on":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Default Audio On"},"extras_json":{"anyOf":[{"type":"string","maxLength":65536,"description":"Studio-only fields, a JSON object of at most 64 KB stored as sent; the opennan.com editor ignores it, the export plays a clip's speedCurveJson and preservePitch, and a clip split reads speedCurveJson and divides captionWordsJson, as Studio does"},{"type":"null"}],"title":"Extras Json"},"final_video_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Final Video Url","description":"The project's latest export (e.g. your own export, uploaded with the project's id): what its share link plays"}},"additionalProperties":false,"type":"object","title":"ProjectChanges"},"ProjectCreateBody":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"product_type":{"anyOf":[{"type":"string","enum":["music_video","podcast","movie","short_clip","youtube_video"]},{"type":"null"}],"title":"Product Type"},"aspect_ratio":{"anyOf":[{"type":"string","enum":["16:9","9:16","1:1","4:3","3:4","4:5","21:9","9:21"]},{"type":"null"}],"title":"Aspect Ratio"},"visual_style":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Visual Style","description":"A visual style preset (cinema, anime, ...)"},"camera_type":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Camera Type","description":"A camera preset (cinema-35mm, ...)"},"default_video_quality":{"anyOf":[{"type":"string","enum":["480p","720p","1080p","4K"]},{"type":"null"}],"title":"Default Video Quality"},"music_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Music Url"},"music_filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Music Filename"},"script_text":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}],"title":"Script Text"},"srt_content":{"anyOf":[{"type":"string","maxLength":200000},{"type":"null"}],"title":"Srt Content","description":"Subtitles: one scene is made per cue (at most 500)"}},"additionalProperties":false,"type":"object","required":["name"],"title":"ProjectCreateBody"},"ProjectPatchBody":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"product_type":{"anyOf":[{"type":"string","enum":["music_video","podcast","movie","short_clip","youtube_video"]},{"type":"null"}],"title":"Product Type"},"aspect_ratio":{"anyOf":[{"type":"string","enum":["16:9","9:16","1:1","4:3","3:4","4:5","21:9","9:21"]},{"type":"null"}],"title":"Aspect Ratio"},"visual_style":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Visual Style"},"camera_type":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Camera Type"},"default_video_quality":{"anyOf":[{"type":"string","enum":["480p","720p","1080p","4K"]},{"type":"null"}],"title":"Default Video Quality"},"default_audio_on":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Default Audio On"},"music_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Music Url"},"music_filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Music Filename"},"music_volume":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Music Volume"},"script_text":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}],"title":"Script Text","description":"The script (null clears it)"},"srt_content":{"anyOf":[{"type":"string","maxLength":200000},{"type":"null"}],"title":"Srt Content","description":"Lyrics or subtitles as SRT, at most 500 cues (null clears them). Stored only: no scene is made or deleted; POST /v1/projects/{id}/story/plan plans the scenes from them"}},"additionalProperties":false,"type":"object","title":"ProjectPatchBody"},"ProjectView":{"properties":{"object":{"type":"string","const":"project","title":"Object","default":"project"},"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"product_type":{"type":"string","title":"Product Type"},"status":{"type":"string","title":"Status"},"aspect_ratio":{"type":"string","title":"Aspect Ratio"},"visual_style":{"type":"string","title":"Visual Style"},"camera_type":{"type":"string","title":"Camera Type"},"default_video_quality":{"type":"string","title":"Default Video Quality"},"default_audio_on":{"type":"boolean","title":"Default Audio On"},"music_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Music Url"},"music_filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Music Filename"},"music_volume":{"type":"number","title":"Music Volume"},"final_video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Final Video Url"},"scene_count":{"type":"integer","title":"Scene Count"},"timeline_revision":{"type":"integer","title":"Timeline Revision"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"duration_seconds":{"type":"number","title":"Duration Seconds","default":0.0},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"media_bytes":{"type":"integer","title":"Media Bytes","default":0},"data_bytes":{"type":"integer","title":"Data Bytes","default":0},"origin":{"type":"string","enum":["studio","web"],"title":"Origin","default":"web"},"last_edited_device":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Edited Device"},"deleted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted At"}},"additionalProperties":false,"type":"object","required":["id","name","product_type","status","aspect_ratio","visual_style","camera_type","default_video_quality","default_audio_on","music_volume","scene_count","timeline_revision"],"title":"ProjectView"},"QcBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"video_url":{"type":"string","maxLength":2048,"title":"Video Url","description":"https URL of the video to check (at most 10 minutes)"}},"additionalProperties":false,"type":"object","required":["video_url"],"title":"QcBody"},"QuoteBody":{"properties":{"model":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Model","description":"A model id from GET /v1/models (video, image, voice or music); or send tool"},"tool":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Tool","description":"A tool id from GET /v1/tools: transcribe, voice-isolation, document-translate, image-remove-background, product-ad, video-upscale, caption-translate, sound-effects, story-concepts, story-shots, copy-video-detect, storyboard-sheet, consistency-reference or a project tool"},"prompt":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Prompt"},"image":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Image"},"end_image":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"End Image"},"reference_images":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":9},{"type":"null"}],"title":"Reference Images"},"reference_videos":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10},{"type":"null"}],"title":"Reference Videos","description":"Video models with reference_videos: the links you will send (not fetched; send `seconds`, their total length)"},"reference_mode":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Reference Mode","description":"With reference_videos: reference, editing or extension"},"images":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10},{"type":"null"}],"title":"Images"},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration","description":"Video: seconds of video; music: seconds of music"},"quality":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Quality"},"size":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Size"},"aspect_ratio":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Aspect Ratio"},"generate_audio":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Generate Audio"},"negative_prompt":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Negative Prompt"},"input":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Input"},"characters":{"anyOf":[{"type":"integer","maximum":4096.0,"minimum":1.0},{"type":"null"}],"title":"Characters"},"seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Seconds","description":"Seconds of the file you will send (transcribe, voice-isolation, remove-background, video-upscale; lipsync: the speech; demucs: the song), or of the sound effect asked for"},"resolution":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Resolution","description":"video-upscale: 1080p, 2k or 4k"},"segments":{"anyOf":[{"items":{"$ref":"#/components/schemas/CaptionSegment"},"type":"array","maxItems":2000},{"type":"null"}],"title":"Segments","description":"caption-translate: the lines you will send"},"project_id":{"anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,36}$"},{"type":"null"}],"title":"Project Id","description":"Project tools: the cloud project the run works on"},"scene_id":{"anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},{"type":"null"}],"title":"Scene Id","description":"Project tools on a scene: the scene"},"index":{"anyOf":[{"type":"integer","maximum":999.0,"minimum":0.0},{"type":"null"}],"title":"Index","description":"copy-video-edit: the shot index"},"inputs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Inputs","description":"Project tools and the video tools with no project: the route's body (e.g. smart-scene-video {model, quality, generate_audio}, consistency-reference {kind, name})"}},"additionalProperties":false,"type":"object","title":"QuoteBody"},"RecreateBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"model":{"anyOf":[{"type":"string","enum":["auto","seedance-2","kling-o3","kling-3"]},{"type":"null"}],"title":"Model","description":"Video model by its GET /v1/models id, or auto"},"quality":{"anyOf":[{"type":"string","enum":["480p","720p","1080p"]},{"type":"null"}],"title":"Quality","description":"Video quality (default: the project's); each model takes some of 480p, 720p, 1080p"},"generate_audio":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Generate Audio","description":"Generate sound with the video (default: the scene's setting)"}},"additionalProperties":false,"type":"object","title":"RecreateBody"},"ReferenceBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"kind":{"type":"string","enum":["character","location","object"],"title":"Kind"},"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"What it looks like"},"style":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Style","description":"Visual style to draw it in"},"image_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Image Url","description":"Characters only: an https photo the portrait follows"}},"additionalProperties":false,"type":"object","required":["kind","name"],"title":"ReferenceBody"},"ReorderScenes":{"properties":{"op":{"type":"string","const":"reorder","title":"Op"},"scene_ids":{"items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"type":"array","maxItems":500,"minItems":1,"title":"Scene Ids"}},"additionalProperties":false,"type":"object","required":["op","scene_ids"],"title":"ReorderScenes"},"ReorderShots":{"properties":{"op":{"type":"string","const":"reorder_shots","title":"Op"},"scene_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"},"order":{"items":{"type":"integer"},"type":"array","maxItems":200,"minItems":1,"title":"Order","description":"The shots' current indexes in their new order"}},"additionalProperties":false,"type":"object","required":["op","scene_id","order"],"title":"ReorderShots"},"RigBody":{"properties":{"model_url":{"type":"string","maxLength":2048,"title":"Model Url","description":"https URL of a GLB of one humanoid character (a GLB or FBX from POST /v1/3d/models works as is)"},"animations":{"type":"boolean","title":"Animations","description":"Also return walking and running clips (no extra cost)","default":true},"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"POSTed when the task finishes"}},"additionalProperties":false,"type":"object","required":["model_url"],"title":"RigBody"},"RobloxModelBody":{"properties":{"kind":{"type":"string","enum":["item","body"],"title":"Kind","description":"item: a prop/accessory (~4k tris); body: an avatar body in T-pose (~10k tris)"},"prompt":{"anyOf":[{"type":"string","maxLength":600},{"type":"null"}],"title":"Prompt"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image","description":"https URL or data:image/png|jpeg;base64 (≤10 MB)"},"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"POSTed when the task finishes"}},"type":"object","required":["kind"],"title":"RobloxModelBody"},"SceneCommandBody":{"properties":{"command":{"oneOf":[{"$ref":"#/components/schemas/AddScene"},{"$ref":"#/components/schemas/SceneRef"},{"$ref":"#/components/schemas/MoveScene"},{"$ref":"#/components/schemas/SetPositions"},{"$ref":"#/components/schemas/SetDuration"},{"$ref":"#/components/schemas/UpdateScene"},{"$ref":"#/components/schemas/ReorderScenes"},{"$ref":"#/components/schemas/ReorderShots"},{"$ref":"#/components/schemas/ShotRef"},{"$ref":"#/components/schemas/MergeShot"},{"$ref":"#/components/schemas/ExtractShot"}],"title":"Command","discriminator":{"propertyName":"op","mapping":{"add":"#/components/schemas/AddScene","delete":"#/components/schemas/SceneRef","duplicate":"#/components/schemas/SceneRef","extract_shot":"#/components/schemas/ExtractShot","merge_shot":"#/components/schemas/MergeShot","move":"#/components/schemas/MoveScene","remove_shot":"#/components/schemas/ShotRef","reorder":"#/components/schemas/ReorderScenes","reorder_shots":"#/components/schemas/ReorderShots","set_duration":"#/components/schemas/SetDuration","set_positions":"#/components/schemas/SetPositions","update":"#/components/schemas/UpdateScene"}}}},"additionalProperties":false,"type":"object","required":["command"],"title":"SceneCommandBody"},"SceneCreate":{"properties":{"start_time":{"anyOf":[{"type":"string","maxLength":20,"pattern":"^[0-9:,.]{1,20}$"},{"type":"null"}],"title":"Start Time","description":"Lyric / subtitle start (an SRT timestamp)"},"end_time":{"anyOf":[{"type":"string","maxLength":20,"pattern":"^[0-9:,.]{1,20}$"},{"type":"null"}],"title":"End Time"},"card_config":{"anyOf":[{"type":"string","maxLength":16384,"description":"The card's settings, a JSON object (at most 16 KB)"},{"type":"null"}],"title":"Card Config"},"fit_mode":{"anyOf":[{"type":"string","enum":["contain","cover","fill"]},{"type":"null"}],"title":"Fit Mode"},"transform_scale":{"anyOf":[{"type":"number","maximum":100.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Transform Scale"},"transform_offset_x":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Transform Offset X"},"transform_offset_y":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Transform Offset Y"},"source_width":{"anyOf":[{"type":"integer","maximum":32768.0,"minimum":1.0},{"type":"null"}],"title":"Source Width"},"source_height":{"anyOf":[{"type":"integer","maximum":32768.0,"minimum":1.0},{"type":"null"}],"title":"Source Height"},"extras_json":{"anyOf":[{"type":"string","maxLength":65536,"description":"Studio-only fields, a JSON object of at most 64 KB stored as sent; the opennan.com editor ignores it, the export plays a clip's speedCurveJson and preservePitch, and a clip split reads speedCurveJson and divides captionWordsJson, as Studio does"},{"type":"null"}],"title":"Extras Json"},"timeline_position_seconds":{"anyOf":[{"type":"number","maximum":86400.0,"minimum":0.0},{"type":"null"}],"title":"Timeline Position Seconds"},"track_index":{"anyOf":[{"type":"integer","maximum":99.0,"minimum":1.0},{"type":"null"}],"title":"Track Index"},"caption":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Caption"},"card_type":{"anyOf":[{"type":"string","pattern":"^[a-z_]{1,30}$"},{"type":"null"}],"title":"Card Type"},"duration":{"anyOf":[{"type":"number","maximum":3600.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Duration"},"visual_transition":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Visual Transition"},"visual_transition_duration":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"null"}],"title":"Visual Transition Duration"},"scene_location":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Scene Location"},"objects_in_scene":{"anyOf":[{"items":{"type":"string","maxLength":255},"type":"array","maxItems":50},{"type":"null"}],"title":"Objects In Scene"},"overlay_text":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Overlay Text"},"audio_text":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Audio Text"},"music_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Music Enabled"},"start_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Start Image Url"},"end_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"End Image Url"},"video_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Video Url"},"audio_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Audio Url"},"source_video_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Source Video Url"},"background_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Background Url"},"effects":{"anyOf":[{"items":{"$ref":"#/components/schemas/EffectBody"},"type":"array","maxItems":50},{"type":"null"}],"title":"Effects","description":"The scene's whole effect stack (null: none)"},"id":{"type":"string","title":"Id","description":"The new scene's id: a random lowercase UUIDv4 you choose"},"order":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Order","description":"Its place among scenes at the same time"}},"additionalProperties":false,"type":"object","required":["id"],"title":"SceneCreate"},"SceneList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/SceneView"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"SceneList"},"ScenePatch":{"properties":{"start_time":{"anyOf":[{"type":"string","maxLength":20,"pattern":"^[0-9:,.]{1,20}$"},{"type":"null"}],"title":"Start Time","description":"Lyric / subtitle start (an SRT timestamp)"},"end_time":{"anyOf":[{"type":"string","maxLength":20,"pattern":"^[0-9:,.]{1,20}$"},{"type":"null"}],"title":"End Time"},"card_config":{"anyOf":[{"type":"string","maxLength":16384,"description":"The card's settings, a JSON object (at most 16 KB)"},{"type":"null"}],"title":"Card Config"},"fit_mode":{"anyOf":[{"type":"string","enum":["contain","cover","fill"]},{"type":"null"}],"title":"Fit Mode"},"transform_scale":{"anyOf":[{"type":"number","maximum":100.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Transform Scale"},"transform_offset_x":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Transform Offset X"},"transform_offset_y":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Transform Offset Y"},"source_width":{"anyOf":[{"type":"integer","maximum":32768.0,"minimum":1.0},{"type":"null"}],"title":"Source Width"},"source_height":{"anyOf":[{"type":"integer","maximum":32768.0,"minimum":1.0},{"type":"null"}],"title":"Source Height"},"extras_json":{"anyOf":[{"type":"string","maxLength":65536,"description":"Studio-only fields, a JSON object of at most 64 KB stored as sent; the opennan.com editor ignores it, the export plays a clip's speedCurveJson and preservePitch, and a clip split reads speedCurveJson and divides captionWordsJson, as Studio does"},{"type":"null"}],"title":"Extras Json"},"timeline_position_seconds":{"anyOf":[{"type":"number","maximum":86400.0,"minimum":0.0},{"type":"null"}],"title":"Timeline Position Seconds"},"track_index":{"anyOf":[{"type":"integer","maximum":99.0,"minimum":1.0},{"type":"null"}],"title":"Track Index"},"caption":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Caption"},"card_type":{"anyOf":[{"type":"string","pattern":"^[a-z_]{1,30}$"},{"type":"null"}],"title":"Card Type"},"duration":{"anyOf":[{"type":"number","maximum":3600.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Duration"},"visual_transition":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Visual Transition"},"visual_transition_duration":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"null"}],"title":"Visual Transition Duration"},"scene_location":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Scene Location"},"objects_in_scene":{"anyOf":[{"items":{"type":"string","maxLength":255},"type":"array","maxItems":50},{"type":"null"}],"title":"Objects In Scene"},"overlay_text":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Overlay Text"},"audio_text":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Audio Text"},"music_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Music Enabled"},"start_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Start Image Url"},"end_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"End Image Url"},"video_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Video Url"},"audio_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Audio Url"},"source_video_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Source Video Url"},"background_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Background Url"},"effects":{"anyOf":[{"items":{"$ref":"#/components/schemas/EffectBody"},"type":"array","maxItems":50},{"type":"null"}],"title":"Effects","description":"The scene's whole effect stack (null: none)"},"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Id"},"order":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Order","description":"Move the scene to this place in the project's scene order (0 first; past the end: last). Scenes the changeset doesn't place keep their relative order; orders stay 0..n-1."},"shots_version":{"anyOf":[{"type":"string","pattern":"^sv_[0-9a-f]{24}$"},{"type":"null"}],"title":"Shots Version","description":"Put the scene's shots and storyboard back to this version (a shots_version the document or a changeset answer showed for this scene, kept 30 days): 409 shots_version_unknown when it is not kept. An empty storyboard is never kept as a version, so a scene that had no shots can never be put back this way: send clear_shots: true instead"},"clear_shots":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Clear Shots","description":"true: delete the scene's shots and storyboard"}},"additionalProperties":false,"type":"object","required":["id"],"title":"ScenePatch"},"ScenePosition":{"properties":{"scene_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"},"timeline_position_seconds":{"type":"number","maximum":86400.0,"minimum":0.0,"title":"Timeline Position Seconds"},"track_index":{"anyOf":[{"type":"integer","maximum":99.0,"minimum":1.0},{"type":"null"}],"title":"Track Index"}},"additionalProperties":false,"type":"object","required":["scene_id","timeline_position_seconds"],"title":"ScenePosition"},"SceneRef":{"properties":{"op":{"type":"string","enum":["delete","duplicate"],"title":"Op"},"scene_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"}},"additionalProperties":false,"type":"object","required":["op","scene_id"],"title":"SceneRef"},"SceneTaskBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"}},"additionalProperties":false,"type":"object","title":"SceneTaskBody"},"SceneView":{"properties":{"object":{"type":"string","const":"scene","title":"Object","default":"scene"},"id":{"type":"string","title":"Id"},"order":{"type":"integer","title":"Order"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"},"card_type":{"type":"string","title":"Card Type"},"status":{"type":"string","title":"Status"},"duration":{"type":"number","title":"Duration"},"timeline_position_seconds":{"type":"number","title":"Timeline Position Seconds"},"track_index":{"type":"integer","title":"Track Index"},"transition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transition"},"visual_transition":{"type":"string","title":"Visual Transition"},"visual_transition_duration":{"type":"number","title":"Visual Transition Duration"},"scene_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scene Location"},"objects_in_scene":{"items":{"type":"string"},"type":"array","title":"Objects In Scene","default":[]},"overlay_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Overlay Text"},"audio_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audio Text"},"music_enabled":{"type":"boolean","title":"Music Enabled","default":false},"start_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Image Url"},"end_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Image Url"},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Url"},"audio_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audio Url"},"source_video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Video Url"},"background_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Background Url"},"shots":{"items":{"$ref":"#/components/schemas/ShotView"},"type":"array","title":"Shots","default":[]}},"additionalProperties":false,"type":"object","required":["id","order","card_type","status","duration","timeline_position_seconds","track_index","visual_transition","visual_transition_duration"],"title":"SceneView"},"SetDuration":{"properties":{"op":{"type":"string","const":"set_duration","title":"Op"},"scene_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"},"duration":{"type":"number","maximum":3600.0,"exclusiveMinimum":0.0,"title":"Duration"}},"additionalProperties":false,"type":"object","required":["op","scene_id","duration"],"title":"SetDuration"},"SetPositions":{"properties":{"op":{"type":"string","const":"set_positions","title":"Op"},"positions":{"items":{"$ref":"#/components/schemas/ScenePosition"},"type":"array","maxItems":500,"minItems":1,"title":"Positions"}},"additionalProperties":false,"type":"object","required":["op","positions"],"title":"SetPositions"},"SheetBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"description":{"type":"string","maxLength":2000,"minLength":1,"title":"Description","description":"The scene: what happens, where and with whom (a script excerpt works)"},"shots":{"items":{"type":"string","maxLength":500,"minLength":1},"type":"array","maxItems":16,"title":"Shots","description":"Optional shots in order, one panel each; without them the description is laid out over panel_count panels"},"panel_count":{"anyOf":[{"type":"integer","maximum":16.0,"minimum":1.0},{"type":"null"}],"title":"Panel Count","description":"Panels on the sheet (default: one a shot, or 6). When it differs from the shots, they are expanded or condensed to it"},"style":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Style","description":"Visual style, e.g. anime or film noir"},"aspect_ratio":{"type":"string","enum":["16:9","9:16","1:1","4:3","3:4","21:9"],"title":"Aspect Ratio","description":"Frame shape of each panel","default":"16:9"},"references":{"items":{"$ref":"#/components/schemas/SheetReference"},"type":"array","maxItems":8,"title":"References","description":"Reference images the panels follow"}},"additionalProperties":false,"type":"object","required":["description"],"title":"SheetBody"},"SheetReference":{"properties":{"image_url":{"type":"string","maxLength":2048,"title":"Image Url","description":"https URL of the image (PNG, JPEG or WEBP)"},"kind":{"type":"string","enum":["character","object","location"],"title":"Kind","description":"What the image shows: a character to keep (at most 4), an object (at most 3) or the location (at most 1)"},"name":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Name","description":"Characters: the name they go by"}},"additionalProperties":false,"type":"object","required":["image_url","kind"],"title":"SheetReference"},"ShotCharacter":{"properties":{"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"}},"additionalProperties":false,"type":"object","required":["name"],"title":"ShotCharacter"},"ShotRef":{"properties":{"op":{"type":"string","const":"remove_shot","title":"Op"},"scene_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"},"shot_index":{"type":"integer","minimum":0.0,"title":"Shot Index"}},"additionalProperties":false,"type":"object","required":["op","scene_id","shot_index"],"title":"ShotRef"},"ShotTextBody":{"properties":{"action":{"type":"string","maxLength":2000,"minLength":1,"title":"Action","description":"What the copied shot shows, in plain words"}},"additionalProperties":false,"type":"object","required":["action"],"title":"ShotTextBody"},"ShotView":{"properties":{"index":{"type":"integer","title":"Index"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"What the shot shows: a copied scene's detected action. Null for a planned shot for now."},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"end_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Image Url"},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Url"},"dialogue":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dialogue"}},"additionalProperties":false,"type":"object","required":["index"],"title":"ShotView"},"ShotsBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"description":{"type":"string","maxLength":4000,"minLength":1,"title":"Description","description":"What happens in the scene"},"characters":{"items":{"$ref":"#/components/schemas/ShotCharacter"},"type":"array","maxItems":10,"title":"Characters"},"total_duration":{"type":"integer","maximum":60.0,"minimum":3.0,"title":"Total Duration","description":"Seconds the scene should last","default":10},"style":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Style","description":"Mood or style of the camera work"},"location_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Location Name","description":"Where the scene happens"}},"additionalProperties":false,"type":"object","required":["description"],"title":"ShotsBody"},"SmartVideoBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"model":{"anyOf":[{"type":"string","enum":["auto","seedance-2","kling-o3","kling-3"]},{"type":"null"}],"title":"Model","description":"Video model by its GET /v1/models id, or auto"},"quality":{"anyOf":[{"type":"string","enum":["480p","720p","1080p"]},{"type":"null"}],"title":"Quality","description":"Video quality (default: the project's); each model takes some of 480p, 720p, 1080p"},"generate_audio":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Generate Audio","description":"Generate sound with the video (default: the scene's setting)"}},"additionalProperties":false,"type":"object","title":"SmartVideoBody"},"SourceBody":{"properties":{"video_url":{"type":"string","maxLength":2048,"title":"Video Url","description":"https URL of the video to copy (at most 10 minutes)"},"trim_start":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Trim Start","description":"Seconds: copy the video from here"},"trim_end":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Trim End","description":"Seconds: copy the video up to here"}},"additionalProperties":false,"type":"object","required":["video_url"],"title":"SourceBody"},"StartBody":{"properties":{"device_name":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Device Name","description":"Shown on the approval page and in the key's name"},"client":{"anyOf":[{"type":"string","enum":["desktop","web","cli"]},{"type":"null"}],"title":"Client","description":"What is signing in; a web key expires after 30 days"},"signup":{"type":"boolean","title":"Signup","description":"Open sign-up (not log-in) for a signed-out visitor","default":false}},"additionalProperties":false,"type":"object","title":"StartBody"},"StepsBody":{"properties":{"steps":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Steps","default":1}},"additionalProperties":false,"type":"object","title":"StepsBody"},"StorageBlockView":{"properties":{"object":{"type":"string","const":"storage_block","title":"Object","default":"storage_block"},"id":{"type":"string","title":"Id"},"size":{"type":"string","title":"Size"},"starts_at":{"type":"string","title":"Starts At"},"ends_at":{"type":"string","title":"Ends At"},"auto_renew":{"type":"boolean","title":"Auto Renew"},"price_usd":{"type":"number","title":"Price Usd"},"status":{"type":"string","title":"Status","default":"active"},"media_bytes":{"type":"integer","title":"Media Bytes","default":0},"project_data_bytes":{"type":"integer","title":"Project Data Bytes","default":0},"uploads_per_day":{"type":"integer","title":"Uploads Per Day","default":0},"upload_bytes_per_day":{"type":"integer","title":"Upload Bytes Per Day","default":0},"consent":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Consent"}},"additionalProperties":false,"type":"object","required":["id","size","starts_at","ends_at","auto_renew","price_usd"],"title":"StorageBlockView"},"StorageLimitsView":{"properties":{"media_bytes":{"type":"integer","title":"Media Bytes"},"project_data_bytes":{"type":"integer","title":"Project Data Bytes"},"uploads_per_day":{"type":"integer","title":"Uploads Per Day"},"upload_bytes_per_day":{"type":"integer","title":"Upload Bytes Per Day"}},"additionalProperties":false,"type":"object","required":["media_bytes","project_data_bytes","uploads_per_day","upload_bytes_per_day"],"title":"StorageLimitsView"},"StoragePlanList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"on_sale":{"type":"boolean","title":"On Sale"},"data":{"items":{"$ref":"#/components/schemas/StoragePlanView"},"type":"array","title":"Data"}},"additionalProperties":false,"type":"object","required":["on_sale","data"],"title":"StoragePlanList"},"StoragePlanView":{"properties":{"object":{"type":"string","const":"storage_plan","title":"Object","default":"storage_plan"},"id":{"type":"string","title":"Id"},"size":{"type":"string","title":"Size"},"name":{"type":"string","title":"Name"},"media_bytes":{"type":"integer","title":"Media Bytes"},"project_data_bytes":{"type":"integer","title":"Project Data Bytes"},"uploads_per_day":{"type":"integer","title":"Uploads Per Day"},"upload_bytes_per_day":{"type":"integer","title":"Upload Bytes Per Day"},"price_usd":{"type":"number","title":"Price Usd"},"days":{"type":"integer","title":"Days"}},"additionalProperties":false,"type":"object","required":["id","size","name","media_bytes","project_data_bytes","uploads_per_day","upload_bytes_per_day","price_usd","days"],"title":"StoragePlanView"},"StorageTodayView":{"properties":{"uploads":{"type":"integer","title":"Uploads"},"upload_bytes":{"type":"integer","title":"Upload Bytes"}},"additionalProperties":false,"type":"object","required":["uploads","upload_bytes"],"title":"StorageTodayView"},"StorageView":{"properties":{"object":{"type":"string","const":"storage","title":"Object","default":"storage"},"media_bytes":{"type":"integer","title":"Media Bytes"},"project_data_bytes":{"type":"integer","title":"Project Data Bytes"},"included":{"$ref":"#/components/schemas/StorageLimitsView"},"purchased":{"$ref":"#/components/schemas/StorageLimitsView"},"limits":{"$ref":"#/components/schemas/StorageLimitsView"},"today":{"$ref":"#/components/schemas/StorageTodayView"},"temp_bytes":{"type":"integer","title":"Temp Bytes","default":0},"temp_limit_bytes":{"type":"integer","title":"Temp Limit Bytes"},"state":{"type":"string","enum":["ok","over_quota","grace","pool_full"],"title":"State"},"grace_ends_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grace Ends At"},"blocks":{"items":{"$ref":"#/components/schemas/StorageBlockView"},"type":"array","title":"Blocks","default":[]}},"additionalProperties":false,"type":"object","required":["media_bytes","project_data_bytes","included","purchased","limits","today","temp_limit_bytes","state"],"title":"StorageView"},"StoryCharacter":{"properties":{"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"What the character looks like and who they are"}},"additionalProperties":false,"type":"object","required":["name"],"title":"StoryCharacter"},"StoryboardBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"model":{"anyOf":[{"type":"string","enum":["auto","seedance-2","kling-o3","kling-3"]},{"type":"null"}],"title":"Model","description":"Video model by its GET /v1/models id, or auto (one that renders from a storyboard)"},"regenerate":{"type":"boolean","title":"Regenerate","description":"Draw a new storyboard over the one the scene has","default":false}},"additionalProperties":false,"type":"object","title":"StoryboardBody"},"StoryboardPanelView":{"properties":{"index":{"type":"integer","title":"Index","description":"The panel's place on its sheet"},"shot_index":{"type":"integer","title":"Shot Index","description":"The shot it shows (the index in shots)"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"}},"additionalProperties":false,"type":"object","required":["index","shot_index"],"title":"StoryboardPanelView"},"StoryboardSheetView":{"properties":{"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url","description":"The whole sheet (null when it is not on our storage)"},"panels":{"items":{"$ref":"#/components/schemas/StoryboardPanelView"},"type":"array","title":"Panels","default":[]}},"additionalProperties":false,"type":"object","title":"StoryboardSheetView"},"TimelineCommandBody":{"properties":{"creates":{"items":{"$ref":"#/components/schemas/ClipCreate"},"type":"array","maxItems":500,"title":"Creates"},"updates":{"items":{"$ref":"#/components/schemas/ClipUpdate"},"type":"array","maxItems":500,"title":"Updates"},"delete_ids":{"items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"type":"array","maxItems":500,"title":"Delete Ids"},"splits":{"items":{"$ref":"#/components/schemas/ClipSplit"},"type":"array","maxItems":500,"title":"Splits"},"description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Description","description":"Shown as the undo step's name"}},"additionalProperties":false,"type":"object","title":"TimelineCommandBody"},"TimelineView":{"properties":{"object":{"type":"string","const":"timeline","title":"Object","default":"timeline"},"project_id":{"type":"string","title":"Project Id"},"revision":{"type":"integer","title":"Revision"},"can_undo":{"type":"boolean","title":"Can Undo"},"can_redo":{"type":"boolean","title":"Can Redo"},"tracks":{"items":{"$ref":"#/components/schemas/TrackView"},"type":"array","title":"Tracks"},"clips":{"items":{"$ref":"#/components/schemas/ClipView"},"type":"array","title":"Clips"}},"additionalProperties":false,"type":"object","required":["project_id","revision","can_undo","can_redo","tracks","clips"],"title":"TimelineView"},"TokenBody":{"properties":{"device_code":{"type":"string","maxLength":200,"minLength":20,"title":"Device Code"},"grant_type":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Grant Type","description":"Optional (RFC 8628's device_code grant)"}},"additionalProperties":false,"type":"object","required":["device_code"],"title":"TokenBody"},"TposeBody":{"properties":{"image":{"type":"string","maxLength":2048,"title":"Image","description":"https URL of one full-body character (PNG, JPEG or WEBP, at most 10 MB)"},"prompt_hint":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Prompt Hint","description":"Optional detail to keep while redrawing (e.g. 'keep the red cape')"},"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"POSTed when the task finishes"}},"additionalProperties":false,"type":"object","required":["image"],"title":"TposeBody"},"TrackBody":{"properties":{"type":{"type":"string","enum":["video","audio","text","sticker","effect","remotion"],"title":"Type"},"index":{"type":"integer","maximum":99.0,"minimum":1.0,"title":"Index"},"label":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Label"},"muted":{"type":"boolean","title":"Muted","default":false},"locked":{"type":"boolean","title":"Locked","default":false},"visible":{"type":"boolean","title":"Visible","default":true},"volume":{"type":"number","maximum":4.0,"minimum":0.0,"title":"Volume","default":1.0}},"additionalProperties":false,"type":"object","required":["type","index"],"title":"TrackBody"},"TrackChanges":{"properties":{"put":{"items":{"$ref":"#/components/schemas/TrackBody"},"type":"array","maxItems":200,"title":"Put"},"removed":{"items":{"$ref":"#/components/schemas/TrackRef"},"type":"array","maxItems":200,"title":"Removed","description":"Tracks to delete with their clips"}},"additionalProperties":false,"type":"object","title":"TrackChanges"},"TrackRef":{"properties":{"type":{"type":"string","enum":["video","audio","text","sticker","effect","remotion"],"title":"Type"},"index":{"type":"integer","maximum":99.0,"minimum":1.0,"title":"Index"}},"additionalProperties":false,"type":"object","required":["type","index"],"title":"TrackRef"},"TrackView":{"properties":{"type":{"type":"string","title":"Type"},"index":{"type":"integer","title":"Index"},"label":{"type":"string","title":"Label"},"muted":{"type":"boolean","title":"Muted","default":false},"locked":{"type":"boolean","title":"Locked","default":false},"visible":{"type":"boolean","title":"Visible","default":true},"volume":{"type":"number","title":"Volume","default":1.0}},"additionalProperties":false,"type":"object","required":["type","index","label"],"title":"TrackView"},"TracksBody":{"properties":{"tracks":{"items":{"$ref":"#/components/schemas/TrackBody"},"type":"array","maxItems":200,"title":"Tracks"},"removed":{"items":{"$ref":"#/components/schemas/TrackRef"},"type":"array","maxItems":200,"title":"Removed","description":"Tracks to delete with their clips (absence is not removal)"}},"additionalProperties":false,"type":"object","required":["tracks"],"title":"TracksBody"},"TranscriptionBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"audio_url":{"type":"string","maxLength":2048,"title":"Audio Url","description":"https URL of the audio or video (MP3, WAV, M4A, OGG, FLAC, MP4, MOV or WEBM; at most 200 MB and 30 minutes)"},"language":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Language","description":"Optional: the spoken language as a 2- or 3-letter code (en, th, ja); omit to detect it"},"model":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Model","description":"Optional: a speech-to-text model id from GET /v1/models?category=voice (whisper-large-v3-turbo, qwen3-asr-1.7b, ...), priced per started minute on its own row; omit for the default engine (GET /v1/tools transcribe)"}},"additionalProperties":false,"type":"object","required":["audio_url"],"title":"TranscriptionBody"},"TranslationBody":{"properties":{"audio_url":{"type":"string","maxLength":2048,"title":"Audio Url","description":"Public https link to the audio or video (≤50 MB, ≤15 min)"},"target_lang":{"type":"string","maxLength":16,"title":"Target Lang","description":"Language to speak, e.g. en, th, ja, es"},"voice_id":{"type":"string","maxLength":100,"title":"Voice Id","description":"Your cloned voice (vc_...) or a stock voice id"},"source_lang":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Source Lang","description":"Spoken language, or auto","default":"auto"},"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"POSTed when the task finishes"}},"additionalProperties":false,"type":"object","required":["audio_url","target_lang","voice_id"],"title":"TranslationBody"},"UpdateScene":{"properties":{"op":{"type":"string","const":"update","title":"Op"},"scene_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Scene Id"},"changes":{"$ref":"#/components/schemas/app__public_api__projects_router__SceneChanges"}},"additionalProperties":false,"type":"object","required":["op","scene_id","changes"],"title":"UpdateScene"},"UploadBody":{"properties":{"filename":{"type":"string","maxLength":255,"minLength":1,"title":"Filename","description":"Shown in the media bin"},"content_type":{"type":"string","maxLength":100,"title":"Content Type","description":"One of application/vnd.comicbook+zip, application/pdf, application/vnd.openxmlformats-officedocument.wordprocessingml.document, text/plain, audio/aac, audio/opus, image/avif, image/png, image/jpeg, image/webp, image/gif, video/mp4, video/quicktime, video/webm, audio/mpeg, audio/wav, audio/mp4, audio/ogg, audio/flac, application/x-subrip"},"size_bytes":{"type":"integer","minimum":1.0,"title":"Size Bytes","description":"The file's exact size; the upload must send this Content-Length"},"project_id":{"anyOf":[{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},{"type":"null"}],"title":"Project Id","description":"The project whose media bin gets it"},"sha256":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{64}$"},{"type":"null"}],"title":"Sha256","description":"The file's SHA-256 (64 lowercase hex): a file this account already uploaded with scope account is reused at once (200, deduplicated)"},"scope":{"anyOf":[{"type":"string","enum":["project","account","temp"]},{"type":"null"}],"title":"Scope","description":"project (the default with a project_id): stored in the project's folder and deleted with it; account: stored once per account by its sha256 (required), shared by every project that uses it and deleted 7 days after none does; temp (the default without a project_id): a paid tool's input, deleted once every task that used it has finished (within 10 minutes) and 24 hours after the upload at the latest; it can't be used in a project"},"multipart":{"type":"boolean","title":"Multipart","description":"The client can send a file over 95 MB in parts (multipart answer)","default":false}},"additionalProperties":false,"type":"object","required":["filename","content_type","size_bytes"],"title":"UploadBody"},"UploadPartView":{"properties":{"number":{"type":"integer","title":"Number"},"size":{"type":"integer","title":"Size"},"url":{"type":"string","title":"Url"}},"additionalProperties":false,"type":"object","required":["number","size","url"],"title":"UploadPartView"},"UploadView":{"properties":{"object":{"type":"string","const":"upload","title":"Object","default":"upload"},"upload_id":{"type":"string","title":"Upload Id"},"upload_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upload Url","description":"Where to PUT the file (null for a multipart answer: PUT each part to its own URL instead)"},"method":{"type":"string","const":"PUT","title":"Method","default":"PUT"},"headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Headers"},"media_url":{"type":"string","title":"Media Url"},"expires_at":{"type":"string","title":"Expires At"},"multipart":{"anyOf":[{"$ref":"#/components/schemas/MultipartView"},{"type":"null"}],"description":"For a big file sent in parts: PUT each part (its exact size, the same Content-Type) to its URL, keep the ETag each answers, then complete with {parts: [{number, etag}]}"},"scope":{"type":"string","enum":["project","account","temp"],"title":"Scope","default":"project"}},"additionalProperties":false,"type":"object","required":["upload_id","headers","media_url","expires_at"],"title":"UploadView"},"UploadedView":{"properties":{"object":{"type":"string","const":"upload","title":"Object","default":"upload"},"asset_id":{"type":"string","title":"Asset Id"},"media_url":{"type":"string","title":"Media Url"},"content_type":{"type":"string","title":"Content Type"},"size_bytes":{"type":"integer","title":"Size Bytes"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"scope":{"type":"string","enum":["project","account","temp"],"title":"Scope","default":"project"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At","description":"A temporary upload's deletion deadline (24 hours; sooner once every task that used it has finished); null otherwise"}},"additionalProperties":false,"type":"object","required":["asset_id","media_url","content_type","size_bytes"],"title":"UploadedView"},"VideoGenerationBody":{"properties":{"model":{"type":"string","title":"Model","description":"Model id from GET /v1/models, e.g. kling-3"},"prompt":{"type":"string","maxLength":4000,"title":"Prompt","default":""},"image":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Image","description":"Start frame image URL"},"end_image":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"End Image","description":"End frame image URL (needs image)"},"reference_images":{"items":{"type":"string","maxLength":2048},"type":"array","maxItems":9,"title":"Reference Images"},"reference_videos":{"items":{"type":"string","maxLength":2048},"type":"array","maxItems":10,"title":"Reference Videos","description":"Reference video https URLs (MP4 / MOV), for models whose GET /v1/models row has `reference_videos` (its max_count and seconds limits apply). Refer to them in the prompt as @Video1, @Video2... (reference images: @Image1...). Billed on the seconds read from the files plus the output."},"reference_mode":{"anyOf":[{"type":"string","enum":["reference","editing","extension"]},{"type":"null"}],"title":"Reference Mode","description":"With reference_videos: reference (default; a new video guided by them), editing (change the first video; the output follows its length and frame) or extension (continue it)"},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration","description":"Seconds of video: one of the model's `durations` from GET /v1/models. Omit for the shortest length the model allows at the chosen quality."},"quality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quality","description":"One of the model's `qualities` from GET /v1/models; omit for the lowest one sold"},"aspect_ratio":{"type":"string","pattern":"^\\d{1,2}:\\d{1,2}$","title":"Aspect Ratio","description":"One of: 16:9, 9:16, 1:1, 4:3, 3:4, 21:9, 9:21","default":"16:9"},"generate_audio":{"type":"boolean","title":"Generate Audio","default":false},"negative_prompt":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Negative Prompt"},"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"POSTed when the task finishes"}},"additionalProperties":false,"type":"object","required":["model"],"title":"VideoGenerationBody"},"VideoUpscaleBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"video_url":{"type":"string","maxLength":2048,"title":"Video Url","description":"https URL of the video (MP4, MOV or WEBM; at most 200 MB and 60 seconds)"},"resolution":{"type":"string","enum":["1080p","2k","4k"],"title":"Resolution","description":"The output size: 1080p, 2k (1440p) or 4k (2160p), on the video's short side; it must be larger than the video already is. The output runs at 30 frames a second","default":"1080p"}},"additionalProperties":false,"type":"object","required":["video_url"],"title":"VideoUpscaleBody"},"VoiceIsolationBody":{"properties":{"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional https URL POSTed when the task finishes"},"audio_url":{"type":"string","maxLength":2048,"title":"Audio Url","description":"https URL of the audio or video (MP3, WAV, M4A, OGG, FLAC, MP4, MOV or WEBM; at most 200 MB and 10 minutes)"}},"additionalProperties":false,"type":"object","required":["audio_url"],"title":"VoiceIsolationBody"},"app__public_api__changes_router__SceneChanges":{"properties":{"create":{"items":{"$ref":"#/components/schemas/SceneCreate"},"type":"array","maxItems":500,"title":"Create"},"patch":{"items":{"$ref":"#/components/schemas/ScenePatch"},"type":"array","maxItems":500,"title":"Patch"},"delete":{"items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"type":"array","maxItems":500,"title":"Delete"}},"additionalProperties":false,"type":"object","title":"SceneChanges"},"app__public_api__model3d_router__CharacterBody":{"properties":{"image":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Image","description":"https URL of one full-body character (PNG, JPEG or WEBP, at most 10 MB); redrawn as a T-pose first when it is not one"},"prompt":{"anyOf":[{"type":"string","maxLength":600},{"type":"null"}],"title":"Prompt","description":"Describe the character (instead of image)"},"prompt_hint":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Prompt Hint","description":"Optional detail to keep if the image is redrawn as a T-pose"},"quality":{"type":"string","enum":["standard","high"],"title":"Quality","default":"standard"},"animations":{"type":"boolean","title":"Animations","description":"Also return walking and running clips","default":true},"engine":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Engine","description":"Optional engine id from GET /v1/models?category=3d (default: the first listed)"},"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"POSTed when the task finishes"}},"additionalProperties":false,"type":"object","title":"CharacterBody"},"app__public_api__project_assets_router__CharacterBody":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"face_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Face Image Url","description":"A face photo on our storage"},"reference_image_urls":{"items":{"type":"string","maxLength":512},"type":"array","maxItems":9,"title":"Reference Image Urls","description":"Full-body reference images on our storage"}},"additionalProperties":false,"type":"object","required":["name"],"title":"CharacterBody"},"app__public_api__projects_router__SceneChanges":{"properties":{"start_time":{"anyOf":[{"type":"string","maxLength":20,"pattern":"^[0-9:,.]{1,20}$"},{"type":"null"}],"title":"Start Time","description":"Lyric / subtitle start (an SRT timestamp)"},"end_time":{"anyOf":[{"type":"string","maxLength":20,"pattern":"^[0-9:,.]{1,20}$"},{"type":"null"}],"title":"End Time"},"card_config":{"anyOf":[{"type":"string","maxLength":16384,"description":"The card's settings, a JSON object (at most 16 KB)"},{"type":"null"}],"title":"Card Config"},"fit_mode":{"anyOf":[{"type":"string","enum":["contain","cover","fill"]},{"type":"null"}],"title":"Fit Mode"},"transform_scale":{"anyOf":[{"type":"number","maximum":100.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Transform Scale"},"transform_offset_x":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Transform Offset X"},"transform_offset_y":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Transform Offset Y"},"source_width":{"anyOf":[{"type":"integer","maximum":32768.0,"minimum":1.0},{"type":"null"}],"title":"Source Width"},"source_height":{"anyOf":[{"type":"integer","maximum":32768.0,"minimum":1.0},{"type":"null"}],"title":"Source Height"},"extras_json":{"anyOf":[{"type":"string","maxLength":65536,"description":"Studio-only fields, a JSON object of at most 64 KB stored as sent; the opennan.com editor ignores it, the export plays a clip's speedCurveJson and preservePitch, and a clip split reads speedCurveJson and divides captionWordsJson, as Studio does"},{"type":"null"}],"title":"Extras Json"},"order":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Order","description":"Move the scene to this place in the scene order (0 first; past the end: last); the others keep their relative order"},"caption":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Caption"},"card_type":{"anyOf":[{"type":"string","pattern":"^[a-z_]{1,30}$"},{"type":"null"}],"title":"Card Type"},"duration":{"anyOf":[{"type":"number","maximum":3600.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Duration"},"visual_transition":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Visual Transition"},"visual_transition_duration":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"null"}],"title":"Visual Transition Duration"},"scene_location":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Scene Location"},"objects_in_scene":{"anyOf":[{"items":{"type":"string","maxLength":255},"type":"array","maxItems":50},{"type":"null"}],"title":"Objects In Scene"},"overlay_text":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Overlay Text"},"audio_text":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Audio Text"},"music_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Music Enabled"},"start_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Start Image Url"},"end_image_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"End Image Url"},"audio_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Audio Url"},"source_video_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Source Video Url"},"background_url":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Background Url"}},"additionalProperties":false,"type":"object","title":"SceneChanges"},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","message"],"properties":{"type":{"type":"string","description":"invalid_request_error, authentication_error, insufficient_balance, permission_error, not_found, idempotency_error, conflict, precondition_failed, rate_limit_error, server_error, unavailable"},"message":{"type":"string"},"code":{"type":"string","description":"Never null. An error without a code of its own carries its type's: invalid_request, invalid_api_key, insufficient_balance, permission_denied, not_found, idempotency_key_reused, conflict, precondition_failed, request_too_large (413), rate_limit_exceeded, server_error, unavailable, busy. Specific codes: task_not_cancellable, task_busy_retry (retry after the Retry-After header) and task_already_finished (POST /v1/tasks/{id}/cancel); task_running (DELETE /v1/tasks/{id} on a task not finished yet); upload_not_found, upload_not_received, upload_size_mismatch, upload_type_mismatch, upload_parts_invalid, multipart_required and upload_gateway_unavailable (uploads); storage_quota_exceeded, upload_daily_limit, temp_storage_exceeded, free_storage_pool_full, project_data_quota_exceeded and project_too_large (cloud storage limits); clip_locked, id_in_use, timeline_changed, invalid_change, entity_missing and idempotency_key_reused (cloud projects; error.details names the refused rows); tier_not_offered (a video or image tier we don't sell; the message names one we do); context_length_exceeded, input_too_long, unsupported_parameter, stream_interrupted, model_unavailable and the voice codes (see their endpoints)."}}}}},"Task":{"type":"object","required":["id","object","model","status","progress","outputs","price_usd","created_at"],"properties":{"id":{"type":"string","example":"task_8f2c..."},"object":{"type":"string","enum":["task"]},"model":{"type":"string"},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"stage":{"type":"string","description":"Video tools, while queued or running: the step running now, one of the tool's fixed stage names"},"project_id":{"type":"string","description":"The cloud project the task runs on (only when set)"},"project_revision":{"type":"integer","description":"A succeeded project tool: the project revision that holds its writes (pull GET /v1/projects/{id}/document until you hold it)"},"progress":{"type":"integer","minimum":0,"maximum":100},"outputs":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["video","image","audio","model","glb","fbx","thumbnail","text","captions"]},"url":{"type":"string"},"format":{"type":"string"},"stem":{"type":"string"},"duration_seconds":{"type":"number"},"role":{"type":"string","description":"3D tools: tpose, model, rigged, walking or running; text outputs: transcript or translation; captions: original, translation or lines; the captioned video: captioned"},"lines":{"type":"array","description":"Captions (role lines): every line with its start and end in seconds, text and translation","items":{"type":"object","properties":{"start":{"type":"number"},"end":{"type":"number"},"text":{"type":"string"},"translation":{"type":["string","null"]}}}},"was_tpose":{"type":"boolean"},"changed":{"type":"boolean"},"text":{"type":"string"},"language":{"type":["string","null"]}}}},"result":{"type":"object","description":"T-pose tools: the T-pose image used; video tools: the typed result of the tool (see its endpoint)","properties":{"image_url":{"type":"string"},"was_tpose":{"type":"boolean"},"changed":{"type":"boolean"}}},"price_usd":{"type":"number","description":"What this task is charged (refunded if it fails)"},"created_at":{"type":"string","format":"date-time"},"finished_at":{"type":["string","null"],"format":"date-time"},"expires_at":{"type":"string","format":"date-time","description":"A succeeded task with no project_id: when its result files are deleted (7 days after it finished)"},"error":{"type":["object","null"],"properties":{"message":{"type":"string"},"refunded":{"type":"boolean"}}},"incomplete":{"type":"object","description":"A succeeded task that delivered only part of its work (its result's complete is false): what was left out. It is charged at most its hold","properties":{"kind":{"type":"string"},"message":{"type":"string"}}},"deleted":{"type":"boolean","description":"Present (true) once DELETE /v1/tasks/{id} deleted the task's results; outputs are then empty"},"deleted_at":{"type":"string","format":"date-time"}}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Your sk- API key"}}}}