{"openapi":"3.1.0","paths":{"/v2/assets":{"get":{"operationId":"AssetsController_getAll","parameters":[{"name":"projectId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}},{"name":"searchQuery","required":false,"in":"query","schema":{"default":"","type":"string"}},{"name":"sortBy","required":false,"in":"query","schema":{"default":"nameAsc","type":"string","enum":["nameAsc","nameDesc","dateAsc","dateDesc","durationAsc","durationDesc","sizeAsc","sizeDesc","kindAsc","kindDesc"]}},{"name":"types","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":"Paginated list of assets","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAssetsResponseDto"}}}}},"summary":"List all assets for the organization","tags":["Assets"]},"post":{"description":"Registers a media URL as a reusable asset. Use the returned asset id in generation inputs (`input[].assetId`) or as a voice clone sample. To upload a local file, first request a presigned URL via `POST /v2/assets/upload`, PUT the file there, then register the returned `url` here. A link to a single TikTok, Instagram, Facebook or YouTube video is imported instead of registered: the response is 409 `import_in_progress` until the video is downloaded, and sending the same request again after `Retry-After` returns the imported VIDEO asset, named after the video. Link imports count toward a daily per-user limit; repeating a request for a link that already finished importing does not.","operationId":"AssetsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAssetDto"}}}},"responses":{"201":{"description":"Asset created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDto"}}}},"403":{"description":"Link imports are not enabled for this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformImportNotEnabledErrorDto"}}}},"409":{"description":"The video at a social link is still importing. Send the same request again after Retry-After.","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Present only when the error body includes retryAfterSeconds.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformImportInProgressErrorDto"}}}},"422":{"description":"The URL points at the upload bucket but no file was uploaded, the uploaded file exceeds the plan size limit, an optional projectId was provided but does not reference a project in your organization, or a social link failed to import (import_failed; the message says why)","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GenerationError"},{"$ref":"#/components/schemas/PlatformImportFailedErrorDto"}]},"examples":{"import_failed":{"summary":"A social link failed to import","value":{"statusCode":422,"errorCode":"import_failed","message":"Couldn't import the video at this link. Upload the file instead.","importJobId":"3f6c1e2a-9b4d-4f7e-8a21-5c0d9e7b6a13"}}}}}},"429":{"description":"A social link import was refused: too many imports in progress (concurrency_limit_reached) or the daily import limit (import_daily_limit_reached)","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Present only when the error body includes retryAfterSeconds.","schema":{"type":"integer"}},"X-Sync-Concurrency-Limit":{"description":"Concurrency limit that refused the request. Present only when the error body includes concurrencyLimit.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PlatformImportLimitErrorDto"},{"$ref":"#/components/schemas/PlatformImportDailyLimitErrorDto"}]}}}},"503":{"description":"Link imports are temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformImportUnavailableErrorDto"}}}}},"summary":"Create a new asset","tags":["Assets"]}},"/v2/assets/count":{"get":{"operationId":"AssetsController_count","parameters":[{"name":"projectId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}},{"name":"searchQuery","required":false,"in":"query","schema":{"default":"","type":"string"}},{"name":"sortBy","required":false,"in":"query","schema":{"default":"nameAsc","type":"string","enum":["nameAsc","nameDesc","dateAsc","dateDesc","durationAsc","durationDesc","sizeAsc","sizeDesc","kindAsc","kindDesc"]}},{"name":"types","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}],"responses":{"200":{"description":"Number of assets","content":{"application/json":{"schema":{"type":"number","example":42}}}}},"summary":"Get count of assets","tags":["Assets"]}},"/v2/assets/upload":{"post":{"description":"Returns a presigned S3 `uploadUrl` and the final public `url`. PUT the file bytes to `uploadUrl` with the same Content-Type, then register the file as an asset via `POST /v2/assets` using `url`. Registration verifies the upload happened and enforces plan limits on the actual file size. Single uploads are capped at 5GB.","operationId":"AssetsController_createUploadUrl","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAssetUploadDto"}}}},"responses":{"201":{"description":"Presigned upload URL created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUploadResponseDto"}}}},"422":{"description":"File size exceeds the plan limit"}},"summary":"Request a presigned URL to upload a file","tags":["Assets"]}},"/v2/assets/batch":{"post":{"operationId":"AssetsController_getMany","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchGetAssetsDto"}}}},"responses":{"200":{"description":"List of assets","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetDto"}}}}}},"summary":"Get multiple assets by IDs","tags":["Assets"]}},"/v2/assets/{id}/download":{"get":{"operationId":"AssetsController_getDownloadUrl","parameters":[{"name":"id","required":true,"in":"path","description":"Asset ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Download URL","content":{"application/json":{"schema":{"type":"string","format":"uri"}}}},"404":{"description":"Asset not found"}},"summary":"Get download URL for an asset","tags":["Assets"]}},"/v2/assets/{id}":{"get":{"operationId":"AssetsController_get","parameters":[{"name":"id","required":true,"in":"path","description":"Asset ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Asset details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDto"}}}},"404":{"description":"Asset not found"}},"summary":"Get an asset by ID","tags":["Assets"]},"patch":{"description":"Updates the name or visibility of an asset. With API-key auth the asset must be owned by the key owner; organization-shared assets can only be updated by an admin/owner session.","operationId":"AssetsController_update","parameters":[{"name":"id","required":true,"in":"path","description":"Asset ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAssetDto"}}}},"responses":{"200":{"description":"Asset updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDto"}}}},"403":{"description":"Asset is visible but not writable by the caller (only the owner or an org admin/owner can update it)"},"404":{"description":"Asset not found"},"422":{"description":"API key has no owner to scope the update"}},"summary":"Update an asset","tags":["Assets"]},"delete":{"description":"Deletes an asset in your organization. With API-key auth the asset must be owned by the key owner; assets shared at the organization level can only be deleted by an admin/owner session.","operationId":"AssetsController_delete","parameters":[{"name":"id","required":true,"in":"path","description":"Asset ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Asset deleted successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}}}}}},"403":{"description":"Asset is visible but not deletable by the caller (only the owner or an org admin/owner can delete it)"},"404":{"description":"Asset not found"},"422":{"description":"API key has no owner to scope the deletion"}},"summary":"Delete an asset","tags":["Assets"]}},"/v2/audio-trims":{"post":{"operationId":"AudioTrimsController_create","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAudioTrimDto"}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioTrimDto"}}}}},"summary":"Prepare a shortened audio asset without generating a video","tags":["Audio trims"]}},"/v2/audio-trims/{id}":{"get":{"operationId":"AudioTrimsController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioTrimDto"}}}}},"summary":"Read audio preparation status and its completed asset","tags":["Audio trims"]}},"/v2/organizations/webhook/secret":{"get":{"description":"Returns the organization webhook signing secret used to verify Sync-Signature headers on generation and batch webhooks. Sync signs the raw JSON request body as HMAC-SHA256 over `<timestamp>.<rawBody>` and sends it as `Sync-Signature: t=<unix>,v1=<hex_digest>`. Store the full `whsec_...` value securely and use `masked=true` only for display.","operationId":"OrganizationsController_getWebhookSecret","parameters":[{"name":"masked","required":false,"in":"query","description":"Whether to return a masked version of the secret for display. Omit or set false when configuring a webhook verifier.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Webhook secret","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSecretResponseDto"}}}}},"summary":"Get webhook secret","tags":["Organizations"]}},"/v2/analytics/chatgpt-events":{"post":{"description":"Records allowlisted plugin telemetry under the authenticated Sync user. Does not start generation or change billing.","operationId":"analytics_captureChatgptEvent","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatgptEventDto"}}}},"responses":{"204":{"description":"Telemetry accepted for best-effort collection."}},"summary":"Record a bounded ChatGPT interaction","tags":["Analytics"]}},"/v2/generate":{"post":{"operationId":"GenerateController_createGeneration","parameters":[{"name":"x-sync-async-tts","in":"header","description":"Studio-only opt-in for text input. Requires validated user session or bearer authentication; API-key requests ignore this header. Returns the normal 201 generation response while server-side speech and video processing continue. The initial response has no audio URL.","required":false,"schema":{"type":"string","enum":["true"]}},{"name":"Idempotency-Key","in":"header","description":"Optional organization-scoped key (1–128 ASCII letters, digits, . _ ~ -). Reuse the same key and payload for retries. Retained for seven days, extended while active or unresolved.","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._~-]+$"}}],"requestBody":{"required":true,"description":"Create a generation job. Send application/json for URL or assetId inputs. For local files, request an upload URL with POST /v2/assets/upload, PUT the file to uploadUrl, register the returned url with POST /v2/assets, then send the asset id in input[].assetId here. A video input url that links to a single TikTok, Instagram, Facebook or YouTube video is imported first: the generation is created PENDING and starts once the video is downloaded, or ends FAILED with errorCode import_failed if the import fails. A linked audio input, or a linked video in a segments, dubbing or mimic request, answers 409 import_in_progress until its import finishes; send the same request (with the same Idempotency-Key, if any) again after Retry-After. Uploads must fit your plan and the 5 GiB single-upload limit. Direct multipart/form-data audio, video, or image fields remain supported up to 5 GiB per file, subject to your plan; files are streamed through temporary storage and registered as assets; the multipart/form-data schema lists the file fields and the nested fields sent as JSON strings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGenerationDto"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/CreateGenerationMultipartDto"}}}},"responses":{"200":{"headers":{"Idempotency-Replayed":{"schema":{"type":"string","enum":["true"]}}},"description":"Equivalent replay: the original generation in its current state. Idempotency-Replayed: true.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Generation"}}}},"201":{"description":"Job created successfully. With x-sync-async-tts: true, the response is the pending parent generation; speech and video continue server-side, and no audio URL is present until speech completes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Generation"}}}},"400":{"description":"Bad Request - Invalid input or unsupported model","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"402":{"description":"Payment Required - billing, plan or limit rejection. errorCode says why: insufficient_credits (requiredCredits, availableCredits; top up or upgrade), account_payment_required or unpaid_usage_limit_reached (pay or update the payment method; usage-based plans cannot top up), account_on_hold, free_tier_generations_exhausted (limit, used), plan_feature_unavailable (requiredPlan) or generation_plan_duration_exceeded (limitSeconds, requestedSeconds). billingUrl is the Studio page where a person can fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingRejectionErrorDto"}}}},"403":{"description":"Forbidden - an input links to a TikTok, Instagram, Facebook or YouTube video and link imports are not enabled for this account (import_not_enabled)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformImportNotEnabledErrorDto"}}}},"409":{"description":"Conflict - IDEMPOTENCY_KEY_CONFLICT for a changed payload; IDEMPOTENCY_IN_PROGRESS while preparing (Retry-After: 2). Controller duplicate conflicts use generation_conflict. import_in_progress while a linked audio input (or a linked video in a segments, dubbing or mimic request) is still importing; send the same request again after Retry-After.","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Present only when the error body includes retryAfterSeconds.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GenerationError"},{"$ref":"#/components/schemas/PlatformImportInProgressErrorDto"}]}}}},"410":{"description":"The original keyed generation was deleted; the key remains bound until expiry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"413":{"description":"Payload Too Large - a direct multipart file exceeds the 5 GiB single-file limit. Use a smaller file. The errorCode is generation_input_validation_failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"422":{"description":"Unprocessable Entity - submit-time validation failed (e.g. an optional projectId was provided but does not reference a project in your organization), or a linked social video failed to import (import_failed; the message says why)","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GenerationError"},{"$ref":"#/components/schemas/PlatformImportFailedErrorDto"}]}}}},"429":{"description":"Too Many Requests - concurrency limit reached (errorCode concurrency_limit_reached). Includes activeGenerations, concurrencyLimit, retryAfterSeconds and the Retry-After / X-Sync-Concurrency-Limit / X-Sync-Active-Generations headers. A linked social video can also hit the import limits: concurrency_limit_reached with activeImports, or import_daily_limit_reached with dailyLimit and resetAt","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Present only when the error body includes retryAfterSeconds.","schema":{"type":"integer"}},"X-Sync-Concurrency-Limit":{"description":"Concurrency limit that refused the request. Present only when the error body includes concurrencyLimit.","schema":{"type":"integer"}},"X-Sync-Active-Generations":{"description":"Active generations counted against the limit. Present only when the error body includes activeGenerations.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GenerationError"},{"$ref":"#/components/schemas/PlatformImportLimitErrorDto"},{"$ref":"#/components/schemas/PlatformImportDailyLimitErrorDto"}]}}}},"500":{"description":"Internal Server Error - unexpected failure (errorCode internal_error). Includes the requestId for support","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"503":{"description":"New generation admission may be paused (generation_admission_paused) or unavailable (generation_admission_unavailable). Retry after Retry-After and retain the same idempotency key. Service Unavailable - IDEMPOTENCY_OUTCOME_UNKNOWN requires reconciliation with the same key; IDEMPOTENCY_UNAVAILABLE means keyed admission is disabled. Otherwise the generation service or a dependency is temporarily unavailable, or media validation exceeded its bounded deadline (errorCode controller_unavailable / controller_dependency_error / generation_media_probe_unavailable / generation_media_probe_timeout). Includes a Retry-After header. import_unavailable means link imports are unavailable; it has no Retry-After, so upload the file instead","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Present only when the error body includes retryAfterSeconds.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GenerationError"},{"$ref":"#/components/schemas/PlatformImportUnavailableErrorDto"}]}}}},"504":{"description":"Gateway Timeout - controller submission exceeded its bounded deadline with an unknown outcome (errorCode controller_timeout). Do not blindly retry. Includes a Retry-After header","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Present only when the error body includes retryAfterSeconds.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}}},"tags":["Generate"]}},"/v2/generate/{id}":{"get":{"operationId":"GenerateController_getGeneration","parameters":[{"name":"id","required":true,"in":"path","description":"Job ID","schema":{"type":"string"}},{"name":"include","required":false,"in":"query","description":"Additional information to include in the response","schema":{"enum":["progress"],"type":"string"}},{"name":"wait","required":false,"in":"query","description":"Explicitly long-poll until the generation reaches a terminal state (COMPLETED, FAILED, REJECTED) or the timeout elapses. On timeout the current state is returned with HTTP 200 - check `status` and retry. Cannot be combined with include=progress.","schema":{"example":true,"type":"boolean"}},{"name":"timeout","required":false,"in":"query","description":"Maximum seconds to block when wait=true (1-10). Default 5.","schema":{"minimum":1,"maximum":10,"example":5,"type":"number"}}],"responses":{"200":{"description":"Job status retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Generation"}}}},"400":{"description":"Bad Request - the id is not a valid generation id (errorCode invalid_generation_id) or is an external provider id (errorCode unsupported_generation_id_format)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"404":{"description":"Job not found (errorCode generation_not_found)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"500":{"description":"Internal Server Error (errorCode internal_error)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}}},"tags":["Generate"]}},"/v2/generate/estimate-cost":{"post":{"description":"Alias of POST /v2/generations/estimate.","operationId":"GenerateController_estimateCost","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateCostDto"}}}},"responses":{"200":{"description":"Estimated cost","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateCostResponseDto"}}}},"422":{"description":"Estimate unavailable: invalid billable duration or frame rate.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateUnavailableDto"}}}}},"summary":"Estimate cost for a generation","tags":["Generate"]}},"/v2/generations":{"get":{"operationId":"GenerateController_getGenerations","parameters":[{"name":"status","required":false,"in":"query","description":"Filter generations by status","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of generations to return (1-100). When set, results are ordered newest-first and can be paged with `cursor`.","schema":{"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Generation id to page after - pass the last id of the previous page. Only used together with `limit`.","schema":{"type":"string"}},{"name":"projectId","required":false,"in":"query","description":"Filter to a live project accessible to the session user or API-key owner. Inaccessible projects return an empty list.","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"Generations retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Generation"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}}},"tags":["Generate"]}},"/v2/generate/{id}/costs":{"get":{"description":"Recorded lip-sync and dubbing charges for a past generation. Credit amounts are USD face value, not cash paid. Metered usage excludes invoice adjustments and tax. A null total means one or more components are pending or unavailable. Does not estimate prices or change billing.","operationId":"GenerateController_getGenerationCosts","parameters":[{"name":"id","required":true,"in":"path","description":"Sync generation UUID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationCostsDto"}}}},"400":{"description":"Invalid generation ID"},"401":{"description":"Authentication required"},"404":{"description":"Generation not found or inaccessible"}},"summary":"Get actual recorded generation costs","tags":["Generate"]}},"/v2/models":{"get":{"operationId":"ModelsController_get","parameters":[],"responses":{"200":{"description":"List of models","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelDto"}}}}}},"summary":"Get all available models","tags":["Models"]}},"/v2/generations/estimate":{"post":{"operationId":"GenerationsController_estimateCost","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateCostDto"}}}},"responses":{"200":{"description":"Estimated cost","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateCostResponseDto"}}}},"422":{"description":"Estimate unavailable: invalid billable duration or frame rate.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateUnavailableDto"}}}}},"summary":"Estimate cost for a generation","tags":["Generations"]}},"/v2/generations/count":{"get":{"operationId":"GenerationsController_getCount","parameters":[{"name":"status","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["playground","api"]}},{"name":"source","required":false,"in":"query","schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},{"name":"generationSource","required":false,"in":"query","schema":{"type":"string","enum":["studio_lite","studio_advanced","studio_assistant","ios","premiere-plugin","resolve-plugin","mcp","chatgpt","claude","gemini","api"]}},{"name":"currentUserOnly","required":false,"in":"query","schema":{"anyOf":[{"type":"boolean"},{"type":"string"}]}}],"responses":{"200":{"description":"Generation count","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountResponseDto"}}}}},"summary":"Count generations for the organization","tags":["Generations"]}},"/v2/generations/{id}":{"get":{"operationId":"GenerationsController_getById","parameters":[{"name":"id","required":true,"in":"path","description":"Generation ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Generation details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationDto"}}}},"404":{"description":"Generation not found"}},"summary":"Get a generation by ID","tags":["Generations"]},"delete":{"description":"Deletes a generation. Generations are organization-scoped, so any member - or an API key for the organization - can delete one.","operationId":"GenerationsController_delete","parameters":[{"name":"id","required":true,"in":"path","description":"Generation ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Generation deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationDto"}}}},"404":{"description":"Generation not found"},"409":{"description":"Generation is still processing and cannot be deleted (errorCode: generation_not_deletable_while_processing)"}},"summary":"Delete a generation","tags":["Generations"]}},"/v2/generations/{id}/download":{"get":{"description":"Obtain the available full output for a completed generation in your organization using x-api-key. No Studio project or user session is required. Returns an unquoted URL as text, not JSON or a redirect. Current plan and billing-version eligibility select the existing clean or watermarked output. Upgrading cannot remove a watermark burned into a historical output; no output is regenerated. S3 URLs request seven-day validity but may expire earlier if credentials expire or access changes. Request another URL when needed. URL-only records return their stored URL unchanged, without an availability check or renewed expiry. S3 existence is checked when resolving the URL; later deletion can still make the download fail. Fetch the returned URL without sending your API key.","operationId":"GenerationsController_getDownloadUrl","parameters":[{"name":"id","required":true,"in":"path","description":"Generation ID returned by the API","schema":{"format":"uuid","type":"string"}},{"name":"fileName","required":false,"in":"query","description":"Optional download filename. Its extension is replaced with the output format. Ignored for URL-only outputs.","schema":{"type":"string"}},{"name":"x-sync-accelerate","in":"header","description":"Send true to request transfer acceleration. Uses the standard endpoint when acceleration is disabled.","required":false,"schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":"Unquoted download URL. Fetch it separately to download the existing output.","content":{"text/plain":{"schema":{"type":"string","format":"uri"}}}},"400":{"description":"Invalid generation ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"401":{"description":"Missing, invalid, or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"404":{"description":"generation_not_found: missing, deleted, or outside your organization. generation_output_unavailable: no eligible output or the selected file is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"409":{"description":"generation_not_ready: generation is pending or processing. Poll its status before retrying.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"422":{"description":"generation_not_downloadable: generation failed or was rejected. Authentication also rejects draft organizations with 422.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"503":{"description":"generation_download_unavailable: storage could not be checked or a URL could not be signed. Retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}}},"summary":"Get a generation download URL","tags":["Generations"]}},"/v2/generations/{id}/output-file-name":{"patch":{"operationId":"GenerationsController_updateOutputFileName","parameters":[{"name":"id","required":true,"in":"path","description":"Generation ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOutputFileNameDto"}}}},"responses":{"200":{"description":"Generation updated with new output file name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationDto"}}}},"401":{"description":"User authentication required; API keys are not supported"}},"summary":"Update the output file name for a generation","tags":["Generations"]}},"/v2/integrations/dubbing/estimate":{"post":{"operationId":"DubbingController_estimateDubbingCost","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateDubbingCostDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateDubbingPreviewCostResponseDto"}}}}},"summary":"Estimate dubbing cost without starting a job","tags":["Dubbing"],"x-sync-saved-asset-dubbing":1}},"/v2/integrations/dubbing":{"post":{"description":"Supply sourceAudioUrl for existing URL-based callers, or audioAssetId and projectId for an authorized saved audio source. These source forms are mutually exclusive. Saved-source admission requires Idempotency-Key and returns the same job for identical retries; changed inputs conflict.","operationId":"DubbingController_createDubbing","parameters":[{"name":"Idempotency-Key","in":"header","description":"Required for saved audio assets. Retain the same key and inputs after an interrupted response.","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDubbingDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DubbingGenerationDto"}}}},"402":{"description":"Free tier limit exceeded (free_tier_generations_exhausted with limit and used, or dubbing_duration_exceeded with limitSeconds and requestedSeconds), insufficient_credits, account_payment_required or account_on_hold. billingUrl is the Studio page where a person can fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingRejectionErrorDto"}}}},"503":{"description":"New generation admission may be paused (generation_admission_paused) or unavailable (generation_admission_unavailable). Retry after Retry-After and retain the same idempotency key."}},"summary":"Create a dubbing job","tags":["Dubbing"],"x-sync-saved-asset-dubbing":1}},"/v2/integrations/dubbing/{id}":{"get":{"operationId":"DubbingController_getDubbingGeneration","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"projectId","required":false,"in":"query","description":"If provided, must match the saved job project. Authorization always uses persisted source context.","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DubbingGenerationDto"}}}},"404":{"description":"Dubbing job not found"}},"summary":"Get dubbing job status","tags":["Dubbing"],"x-sync-saved-asset-dubbing":1}},"/v2/tts":{"post":{"description":"Synthesizes speech from a script and returns a hosted audio URL. `voiceId` accepts an ElevenLabs voice id (discover via `GET /v2/voices`) or the id of a voice cloned with `POST /v2/voices`. The returned `url` can be reused across generations as an audio input.","operationId":"TtsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTtsDto"}}}},"responses":{"200":{"description":"TTS audio generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TtsGenerationResponseDto"}}}},"402":{"description":"Free tier limit reached (free_tier_generations_exhausted with limit and used, or generation_plan_duration_exceeded with limitSeconds), insufficient_credits, account_payment_required or account_on_hold. billingUrl is the Studio page where a person can fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingRejectionErrorDto"}}}},"422":{"description":"Voice not found (voice_not_found), blocked by the provider (voice_blocked), or requiring verification in ElevenLabs (voice_verification_required)."},"503":{"description":"New generation admission may be paused (generation_admission_paused) or unavailable (generation_admission_unavailable). Retry after Retry-After and retain the same idempotency key."}},"summary":"Generate text-to-speech audio","tags":["Text-to-Speech"]}},"/v2/tts/jobs":{"post":{"description":"Accepts the same body as `POST /v2/tts`, persists a durable job, and returns immediately with the current job state. Available to authenticated user sessions; API-key admission requires organization rollout enablement. Poll `GET /v2/tts/jobs/{id}` until the status is terminal. Reusing the same `Idempotency-Key` with the same request returns the original job; using it with a different request returns 409.","operationId":"TtsController_createJob","parameters":[{"name":"idempotency-key","required":false,"in":"header","description":"Optional idempotency key for safe retries. Must be 1-128 characters after trimming.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTtsDto"}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TtsJobDto"}}}},"400":{"description":"Invalid request body or header"},"402":{"description":"Free tier limit reached (free_tier_generations_exhausted with limit and used, or generation_plan_duration_exceeded with limitSeconds), insufficient_credits, account_payment_required or account_on_hold. billingUrl is the Studio page where a person can fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingRejectionErrorDto"}}}},"409":{"description":"Idempotency key conflict"},"422":{"description":"Voice not found"},"503":{"description":"New generation admission may be paused (generation_admission_paused) or unavailable (generation_admission_unavailable); retry after Retry-After and retain the same idempotency key. API-key async admission may be disabled for the organization (async_tts_not_enabled); use POST /v2/tts or wait for rollout enablement."}},"summary":"Create an asynchronous text-to-speech job","tags":["Text-to-Speech"]}},"/v2/tts/jobs/{id}":{"get":{"operationId":"TtsController_getJob","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TtsJobDto"}}}},"404":{"description":"TTS job not found"}},"summary":"Get asynchronous text-to-speech job status","tags":["Text-to-Speech"]}},"/v2/projects":{"get":{"description":"Returns your projects plus organization-visible projects. Use a project `id` as `projectId` when creating generations or assets so they appear in Studio under that project.","operationId":"ProjectsController_getAll","parameters":[{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}},{"name":"searchQuery","required":false,"in":"query","schema":{"default":"","type":"string"}},{"name":"sortBy","required":false,"in":"query","schema":{"default":"updatedAt","type":"string","enum":["updatedAt","name"]}}],"responses":{"200":{"description":"Paginated list of projects","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedProjectsResponseDto"}}}},"422":{"description":"API key has no owner to resolve user-scoped projects"}},"summary":"List projects","tags":["Projects"]},"post":{"description":"Creates a project and returns its `id`. Pass that `id` as `projectId` on `POST /v2/generate` or `POST /v2/assets` to group generations and assets under it in Studio. Supply your own `id` for idempotent creation: re-sending the same `id` returns the existing project (also as 201, indistinguishable from a fresh create) instead of creating a duplicate. On such a replay the other request fields are ignored; the first successful create wins.","operationId":"ProjectsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectDto"}}}},"responses":{"201":{"description":"Project created successfully, or the existing project when the supplied `id` was already created by the same user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDto"}}}},"409":{"description":"The supplied `id` is already in use: it belongs to a different user or organization, or to a deleted project"},"422":{"description":"API key has no owner to assign as the project owner"}},"summary":"Create a project","tags":["Projects"]}},"/v2/projects/{id}/assets":{"post":{"description":"Links an existing organization asset to a project so project-scoped asset reads can find it. Re-sending the same asset revives a detached link and updates only the link timestamp metadata, leaving its original createdAt unchanged.","operationId":"ProjectsController_attachAsset","parameters":[{"name":"id","required":true,"in":"path","description":"Project ID (UUID)","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachProjectAssetDto"}}}},"responses":{"204":{"description":"Asset attached to the project"},"404":{"description":"Project or asset not found"},"422":{"description":"API key has no owner to resolve user-scoped projects"}},"summary":"Attach an asset to a project","tags":["Projects"]}},"/v2/projects/{id}/assets/{assetId}":{"delete":{"description":"Marks the project-asset link detached: the asset stops describing the project draft content (e.g. the projects-list thumbnail) but remains in the project asset library and keeps its access grants. Attaching again revives the link. Idempotent.","operationId":"ProjectsController_detachAsset","parameters":[{"name":"id","required":true,"in":"path","description":"Project ID (UUID)","schema":{"type":"string"}},{"name":"assetId","required":true,"in":"path","description":"Asset ID (UUID)","schema":{"type":"string"}}],"responses":{"204":{"description":"Asset detached from the project"},"404":{"description":"Project not found"},"422":{"description":"API key has no owner to resolve user-scoped projects"}},"summary":"Detach an asset from a project","tags":["Projects"]}},"/v2/projects/{id}":{"get":{"operationId":"ProjectsController_get","parameters":[{"name":"id","required":true,"in":"path","description":"Project ID (UUID)","schema":{"type":"string"}}],"responses":{"200":{"description":"Project details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDto"}}}},"404":{"description":"Project not found"},"422":{"description":"API key has no owner to resolve user-scoped projects"}},"summary":"Get a project by ID","tags":["Projects"]},"patch":{"operationId":"ProjectsController_update","parameters":[{"name":"id","required":true,"in":"path","description":"Project ID (UUID)","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectDto"}}}},"responses":{"200":{"description":"Project updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDto"}}}},"404":{"description":"Project not found"},"422":{"description":"API key has no owner to resolve user-scoped projects"}},"summary":"Update a project","tags":["Projects"]},"delete":{"description":"Deletes a project and its generations only when no associated generation is queued or processing. This does not cancel jobs.","operationId":"ProjectsController_delete","parameters":[{"name":"id","required":true,"in":"path","description":"Project ID (UUID)","schema":{"type":"string"}}],"responses":{"200":{"description":"Project deleted successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}}}}}},"404":{"description":"Project not found"},"409":{"description":"The project has queued or processing generations. Wait for them to finish before deleting it."},"422":{"description":"API key has no owner to resolve user-scoped projects"}},"summary":"Delete a project","tags":["Projects"]}},"/v2/projects/{projectId}/studio-drafts/{draftId}":{"get":{"operationId":"StudioDraftsController_get","parameters":[{"name":"projectId","required":true,"in":"path","schema":{"type":"string"}},{"name":"draftId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioDraftDto"}}}}},"tags":["Projects"],"x-sync-studio-drafts":1},"put":{"operationId":"StudioDraftsController_save","parameters":[{"name":"projectId","required":true,"in":"path","schema":{"type":"string"}},{"name":"draftId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveStudioDraftDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioDraftDto"}}}}},"tags":["Projects"],"x-sync-studio-drafts":1}},"/v2/projects/{projectId}/studio-drafts/{draftId}/acknowledgement":{"post":{"operationId":"StudioDraftsController_acknowledge","parameters":[{"name":"projectId","required":true,"in":"path","schema":{"type":"string"}},{"name":"draftId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgeStudioDraftDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioDraftDto"}}}}},"tags":["Projects"],"x-sync-studio-drafts":1}},"/v2/studio-views/{viewId}":{"get":{"operationId":"StudioViewsController_get","parameters":[{"name":"viewId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioViewDto"}}}}},"tags":["Projects"],"x-sync-studio-views":1},"put":{"operationId":"StudioViewsController_register","parameters":[{"name":"viewId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterStudioViewDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioViewDto"}}}}},"tags":["Projects"],"x-sync-studio-views":1}},"/v2/studio-views/{viewId}/actions":{"post":{"operationId":"StudioViewsController_request","parameters":[{"name":"viewId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestStudioViewActionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioViewDto"}}}}},"tags":["Projects"],"x-sync-studio-views":1}},"/v2/studio-views/{viewId}/acknowledgement":{"post":{"operationId":"StudioViewsController_acknowledge","parameters":[{"name":"viewId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgeStudioViewDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioViewDto"}}}}},"tags":["Projects"],"x-sync-studio-views":1}},"/v2/health/generations":{"get":{"operationId":"GenerationHealthController_getGenerationHealth","parameters":[],"responses":{"200":{"description":"Generation system is healthy or has insufficient data"},"503":{"description":"Generation system is unhealthy"}},"tags":["Generation Health"]}},"/v2/healthcheck":{"get":{"operationId":"HealthcheckController_getHealthcheck","parameters":[],"responses":{"200":{"description":"Service health status","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"status":{"type":"string","enum":["ok","error"]},"message":{"type":"string"}},"required":["status"]}}}}}},"tags":["Healthcheck"]}},"/v2/batch":{"post":{"description":"Creates a batch processing job from JSONL records. Requires the Scale plan. Send either `application/json` with the records in `rows`, or `multipart/form-data` with a JSONL file in the `input` field (or `file` alias). Both forms are validated identically: the input must be 5 MB or smaller as JSONL and contain 20-500 records by default, and each record must contain `request_id`, `endpoint: \"/v2/generate\"`, and `payload`.","operationId":"BatchController_createBatch","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBatchJsonDto"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/CreateBatchDto"}}}},"responses":{"200":{"description":"Validation successful (dry_run=true)","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["VALIDATED"]}}}}}},"201":{"description":"Batch created successfully (dry_run=false)","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["PENDING","JOBS_CREATED","PROCESSING","COMPLETED","FAILED"]},"created_at":{"type":"string","format":"date-time"},"metrics":{"type":"object","properties":{"total_generations":{"type":"integer"},"success_count":{"type":"integer"},"failed_count":{"type":"integer"},"pending_count":{"type":"integer"}}},"webhookUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"outputUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}}}}}},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required - batch needs the scale plan or above (plan_feature_unavailable with requiredPlan), or the account has a billing hold (account_payment_required, account_on_hold). billingUrl is the Studio page where a person can fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingRejectionErrorDto"}}}},"403":{"description":"Forbidden"},"429":{"description":"Too Many Requests - batch concurrency limit reached (errorCode concurrency_limit_reached).","headers":{"Retry-After":{"description":"Seconds to wait before retrying the batch request.","schema":{"type":"integer","example":20}},"X-Sync-Concurrency-Limit":{"description":"Maximum number of concurrent batches allowed by the organization plan.","schema":{"type":"integer","example":3}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchConcurrencyLimitErrorDto"}}}},"503":{"description":"New generation admission may be paused (generation_admission_paused) or unavailable (generation_admission_unavailable), or this server is at its multipart upload capacity (upload_capacity_unavailable; JSON bodies are never rejected for this reason). Retry after Retry-After and retain the same idempotency key.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","example":5}}}}},"summary":"Create a new batch job","tags":["Batch"]},"get":{"description":"Fetch batch processing requests from the user's account","operationId":"BatchController_listBatches","parameters":[{"name":"status","required":false,"in":"query","description":"Filter batches by status","schema":{"type":"string"}},{"name":"created_after","required":false,"in":"query","description":"Filter batches created after this datetime","schema":{"type":"string"}},{"name":"created_before","required":false,"in":"query","description":"Filter batches created before this datetime","schema":{"type":"string"}}],"responses":{"200":{"description":"List of batches retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["PENDING","JOBS_CREATED","PROCESSING","COMPLETED","FAILED"]},"metrics":{"type":"object","properties":{"total_generations":{"type":"integer"},"success_count":{"type":"integer"},"failed_count":{"type":"integer"},"pending_count":{"type":"integer"}}},"webhookUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"outputUrl":{"type":"string"}}}}}}},"401":{"description":"Unauthorized"}},"summary":"List batches","tags":["Batch"]}},"/v2/batch/{id}":{"get":{"description":"Fetch the details, status, and progress of a specific batch","operationId":"BatchController_getBatch","parameters":[{"name":"id","required":true,"in":"path","description":"Batch ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Batch details retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["PENDING","JOBS_CREATED","PROCESSING","COMPLETED","FAILED"]},"metrics":{"type":"object","properties":{"total_generations":{"type":"integer"},"success_count":{"type":"integer"},"failed_count":{"type":"integer"},"pending_count":{"type":"integer"}}},"webhookUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"outputUrl":{"type":"string"}}}}}},"401":{"description":"Unauthorized"},"404":{"description":"Batch not found"}},"summary":"Get batch details","tags":["Batch"]}},"/v2/account":{"get":{"description":"Works with an API key (x-api-key), an OAuth access token or a Studio session. Call it before submitting work to check the plan limits and remaining credits or free allowance, and after a 402, 403 or 429 to decide how to recover: billingModel says whether to top up credits (credits), pay or update the payment method (usage), upgrade (free) or contact sync. (enterprise). Send people to billingUrl for anything that needs a payment.","operationId":"AccountController_getAccount","parameters":[],"responses":{"200":{"description":"Account, organization, plan, limits and balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountOverviewDto"}}}},"401":{"description":"Missing, invalid or revoked credentials"}},"summary":"Get the account, plan, limits and balance behind these credentials","tags":["Account"]}},"/v2/dialogue-edits":{"post":{"description":"Applies word-level edits to a transcript from `POST /v2/transcriptions` and synthesizes preview audio for the same window: only the edited spans are re-spoken in a voice cloned from the source, everything else stays the original recording. Poll `GET /v2/dialogue-edits/{id}` until `status` is `COMPLETED`; the response carries `previewAudioUrl`, the retimed `resultTranscript` and the edited regions as `resultSlots`. Edits that cannot be applied to the transcript are refused with a 400 before a job exists.","operationId":"DialogueEditsController_createDialogueEdit","parameters":[{"name":"Idempotency-Key","in":"header","description":"Optional organization-scoped key (1–128 ASCII letters, digits, . _ ~ -). Retry a timed-out or failed request with the same key and payload to get the original job instead of paying for a second preview. The key stays bound to the job it created; use a new key for each new edit.","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9._~-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDialogueEditDto"}}}},"responses":{"200":{"headers":{"Idempotency-Replayed":{"schema":{"type":"string","enum":["true"]}}},"description":"Equivalent replay: the original job in its current state. Idempotency-Replayed: true.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DialogueEditJobDto"}}}},"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DialogueEditJobDto"}}}},"400":{"description":"The edits cannot be applied to the transcript (errorCode PLAN_FAILED), the batch has more than 100 edits (errorCode dialogue_edit_too_many_edits), the window exceeds 10 minutes, or the Idempotency-Key header is empty, repeated or malformed (errorCode INVALID_IDEMPOTENCY_KEY)"},"402":{"description":"The account is on a payment or fraud hold, or the edits exceed the output length of the plan"},"409":{"description":"The Idempotency-Key is bound to a job created from different inputs (errorCode IDEMPOTENCY_KEY_CONFLICT). Resend the original payload, or use a new key for a new edit."},"422":{"description":"The source is not hosted in sync. storage, the projectId is not visible to the caller, an API-key request specifies a partial window or the transcript has more than one speaker (errorCode dialogue_edit_unsupported), the organization lacks segment lipsync and section expansion (errorCode dialogue_edit_retime_required), or a `change` edit in a multi-speaker transcript rewrites a speaker who has no stretch of speech long enough to clone a voice from and no earlier voice to reuse (errorCode VOICE_SAMPLE_TOO_SHORT, with that speaker as `speakerId`)"},"429":{"description":"Per-caller rate limit"},"503":{"description":"New generation admission may be paused (generation_admission_paused) or unavailable (generation_admission_unavailable). Retry after Retry-After and retain the same idempotency key. The job could not be enqueued (a keyed job stays bound to its key, and the retry enqueues it), or an API-key request could not evaluate segment lipsync or section expansion (errorCode generation_infra_service_unavailable). Retry with backoff."}},"summary":"Edit dialogue and preview the result as audio","tags":["Dialogue Edits"]}},"/v2/dialogue-edits/{id}":{"get":{"description":"Returns the job status and, once it completed, the preview audio url, the retimed transcript and the edited regions. `COMPLETED`, `COMPLETED_PARTIAL` and `FAILED` are terminal; `error.code` says why a job failed.","operationId":"DialogueEditsController_getDialogueEditJob","parameters":[{"name":"id","required":true,"in":"path","description":"Dialogue edit job id","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DialogueEditJobDto"}}}},"404":{"description":"Dialogue edit job not found"}},"summary":"Get a dialogue edit job","tags":["Dialogue Edits"]}},"/v2/transcriptions":{"post":{"description":"Starts a word-level transcription of a window of a video, the first step of a dialogue edit. Provide exactly one of `sourceVideoUrl` or `sourceAudioUrl`, both hosted in sync. storage (upload via `POST /v2/assets/upload`). Passing pre-extracted audio skips the server-side download and transcode. Poll `GET /v2/transcriptions/{id}` until `status` is `COMPLETED`, then pass the `transcript` and your edits to `POST /v2/dialogue-edits`. An identical source and window returns the existing job instead of starting a new one. Transcription is not billed.","operationId":"TranscriptionsController_createTranscription","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTranscriptionDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptionJobDto"}}}},"402":{"description":"The account is on a payment or fraud hold"},"422":{"description":"The source is not hosted in sync. storage, or supplied audio is longer than the allowed window (SOURCE_TOO_LONG)"},"429":{"description":"Per-caller rate limit, or the daily transcription cap of the organization"}},"summary":"Transcribe a video for dialogue editing","tags":["Transcriptions"]}},"/v2/transcriptions/{id}":{"get":{"description":"Returns the job status and, once `status` is `COMPLETED`, the word-level transcript. `COMPLETED` and `FAILED` are terminal; `error.code` says why a job failed.","operationId":"TranscriptionsController_getTranscriptionJob","parameters":[{"name":"id","required":true,"in":"path","description":"Transcription job id","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptionJobDto"}}}},"404":{"description":"Transcription job not found"}},"summary":"Get a transcription job","tags":["Transcriptions"]}},"/v2/drafts":{"post":{"operationId":"DraftsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDraftDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftDto"}}}}},"summary":"Create or restore a dubbing draft","tags":["Dubbing drafts"]},"get":{"operationId":"DraftsController_list","parameters":[{"name":"projectId","required":true,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"integer"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftListDto"}}}}},"summary":"List saved drafts in a project","tags":["Dubbing drafts"]}},"/v2/drafts/{draftId}":{"get":{"operationId":"DraftsController_get","parameters":[{"name":"draftId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftDto"}}}}},"summary":"Reopen a saved draft","tags":["Dubbing drafts"]},"patch":{"operationId":"DraftsController_update","parameters":[{"name":"draftId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDraftDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftDto"}}}},"409":{"description":"Draft version or accepted source revision has changed"}},"summary":"Save edits and optionally publish accepted source corrections","tags":["Dubbing drafts"]},"delete":{"operationId":"DraftsController_remove","parameters":[{"name":"draftId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"summary":"Soft-delete a draft while retaining generation history","tags":["Dubbing drafts"]}},"/v2/drafts/{draftId}/analysis":{"post":{"operationId":"DraftsController_importAnalysis","parameters":[{"name":"draftId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportDraftAnalysisDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftDto"}}}},"409":{"description":"Draft changed or already contains edits"},"422":{"description":"Analysis has no usable results for this source"}},"summary":"Initialize an empty draft from completed analysis evidence","tags":["Dubbing drafts"]}},"/v2/drafts/{draftId}/audio":{"post":{"operationId":"ReviewProductionController_prepare","parameters":[{"name":"draftId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareReviewAudioDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewAudioJobDto"}}}}},"summary":"Generate missing audio from saved source text, translations, speakers and timing","tags":["Reviewed dubbing"]}},"/v2/drafts/{draftId}/production":{"get":{"operationId":"ReviewProductionController_get","parameters":[{"name":"draftId","required":true,"in":"path","schema":{"type":"string"}},{"name":"targetLang","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewProductionDto"}}}}},"summary":"Resume reviewed audio and video production","tags":["Reviewed dubbing"]}},"/v2/assets/{assetId}/analysis":{"post":{"operationId":"AnalysisController_request","parameters":[{"name":"assetId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestAnalysisDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysisAcceptedDto"}}}}},"summary":"Analyze a video before dubbing; retries reuse requestKey","tags":["Asset analysis"]}},"/v2/analysis/{analysisRunId}":{"get":{"operationId":"AnalysisController_get","parameters":[{"name":"analysisRunId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysisResultDto"}}}}},"summary":"Read analysis status and authorized result URLs","tags":["Asset analysis"]}},"/v2/errors":{"get":{"description":"Stable machine-readable error codes with human messages and suggested fixes. The `errorCode` on failed generations and on coded 4xx validation responses references these codes. No authentication required.","operationId":"ErrorsCatalogController_getErrorCatalog","parameters":[],"responses":{"200":{"description":"The error catalog","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ErrorCatalogEntryDto"}}}}}},"summary":"List the generation error catalog","tags":["Errors"]}},"/v2/voices":{"get":{"description":"Returns provider voices and voices cloned by your organization. Use `id` in `POST /v2/tts` and generation text inputs. Voices with a `restriction` cannot currently synthesize speech; choose another voice. Provider availability can change.","operationId":"VoicesController_getVoices","parameters":[{"name":"provider","required":false,"in":"query","schema":{"type":"string","enum":["elevenlabs"]}}],"responses":{"200":{"description":"List of voices","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VoiceDto"}}}}}},"summary":"List available voices","tags":["Voices"]},"post":{"description":"Creates a custom voice and returns its `id` for use in `POST /v2/tts` and generation text inputs. Provide either a Sync asset id (`assetId`), a Sync-hosted `url`, or multiple Sync-hosted `sampleUrls` - upload local files via `POST /v2/assets/upload` first. Video sources have their audio track extracted automatically (first 2 minutes). Clone slots are limited per plan.","operationId":"VoicesController_cloneVoice","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVoiceDto"}}}},"responses":{"201":{"description":"Voice cloned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClonedVoiceDto"}}}},"400":{"description":"Invalid or too-short voice sample"},"403":{"description":"Voice clone limit reached for your plan (voice_clone_limit_reached). limit and used count the voices GET /v2/voices lists; delete one or upgrade at billingUrl.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingRejectionErrorDto"}}}},"409":{"description":"A voice with this name already exists"},"422":{"description":"No owning user could be resolved, or the asset was not found, has an unsupported type, or has no extractable audio track"}},"summary":"Clone a voice from an audio or video sample","tags":["Voices"]}},"/v2/voices/{id}":{"get":{"description":"Returns a single voice by the same `id` values GET /v2/voices exposes - premade ElevenLabs voice ids or the UUID of a voice cloned by your organization.","operationId":"VoicesController_getVoice","parameters":[{"name":"id","required":true,"in":"path","description":"Voice ID (premade provider id or cloned voice UUID)","schema":{"type":"string"}},{"name":"provider","required":false,"in":"query","schema":{"type":"string","enum":["elevenlabs"]}}],"responses":{"200":{"description":"Voice details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceDto"}}}},"404":{"description":"Voice not found"}},"summary":"Get a voice by ID","tags":["Voices"]},"delete":{"description":"Deletes a voice previously cloned by your organization, freeing a clone slot. Premade voices cannot be deleted.","operationId":"VoicesController_deleteVoice","parameters":[{"name":"id","required":true,"in":"path","description":"Cloned voice ID (UUID)","schema":{"type":"string"}}],"responses":{"200":{"description":"Voice deleted successfully","content":{"application/json":{"schema":{"type":"boolean","example":true}}}},"404":{"description":"Voice not found"}},"summary":"Delete a cloned voice","tags":["Voices"]}}},"info":{"title":"sync.api-v2","description":"a unified API to edit humans in any video in any way. powered by sync.labs","version":"1.0","contact":{}},"tags":[],"servers":[{"url":"https://api.sync.so","description":"Production"}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"PaginatedAssetsResponseDto":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"createdAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"updatedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"deletedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"name":{"type":["string","null"]},"url":{"type":["string","null"]},"size":{"type":["number","null"]},"format":{"type":["string","null"]},"type":{"type":"string","enum":["AUDIO","VIDEO","IMAGE"]},"inputType":{"anyOf":[{"type":"string","enum":["UPLOAD","URL","RECORD","TTS","EXTRACT","DUB","DUB_SOURCE","PLATFORM_IMPORT","DIALOGUE_EDIT","PLUGIN_PREMIERE_FILE","PLUGIN_PREMIERE_TIMELINE_SELECTION","PLUGIN_RESOLVE_FILE","PLUGIN_RESOLVE_TIMELINE_SELECTION"]},{"type":"null"}]},"durationSeconds":{"type":["number","null"]},"thumbnailUrl":{"type":["string","null"]},"visibility":{"type":"string","enum":["USER","ORGANIZATION"]},"userId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"apiKeyId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"organizationId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"proxyPath":{"type":["string","null"]},"projectId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]}},"required":["id","createdAt","updatedAt","deletedAt","name","url","size","format","type","inputType","durationSeconds","thumbnailUrl","visibility","userId","apiKeyId","organizationId","width","height"]}},"nextCursor":{"type":"string"},"totalCount":{"type":"number"}},"required":["items"]},"CreateAssetDto":{"type":"object","properties":{"name":{"type":"string"},"visibility":{"type":"string","default":"USER","enum":["USER","ORGANIZATION"]},"projectId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"url":{"type":"string","format":"uri"},"type":{"type":"string","enum":["AUDIO","VIDEO","IMAGE"]},"inputType":{"type":"string","enum":["UPLOAD","URL","RECORD","TTS","EXTRACT","DUB","DUB_SOURCE","PLATFORM_IMPORT","DIALOGUE_EDIT","PLUGIN_PREMIERE_FILE","PLUGIN_PREMIERE_TIMELINE_SELECTION","PLUGIN_RESOLVE_FILE","PLUGIN_RESOLVE_TIMELINE_SELECTION"]},"thumbnailUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"size":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"format":{"type":"string"},"durationSeconds":{"type":"number","exclusiveMinimum":0},"width":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"height":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"contentSha256":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["url","type"]},"AssetDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"createdAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"updatedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"deletedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"size":{"anyOf":[{"type":"number"},{"type":"null"}]},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string","enum":["AUDIO","VIDEO","IMAGE"]},"inputType":{"anyOf":[{"type":"string","enum":["UPLOAD","URL","RECORD","TTS","EXTRACT","DUB","DUB_SOURCE","PLATFORM_IMPORT","DIALOGUE_EDIT","PLUGIN_PREMIERE_FILE","PLUGIN_PREMIERE_TIMELINE_SELECTION","PLUGIN_RESOLVE_FILE","PLUGIN_RESOLVE_TIMELINE_SELECTION"]},{"type":"null"}]},"durationSeconds":{"anyOf":[{"type":"number"},{"type":"null"}]},"thumbnailUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"visibility":{"type":"string","enum":["USER","ORGANIZATION"]},"userId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"apiKeyId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"organizationId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"width":{"anyOf":[{"type":"number"},{"type":"null"}]},"height":{"anyOf":[{"type":"number"},{"type":"null"}]},"proxyPath":{"anyOf":[{"type":"string"},{"type":"null"}]},"projectId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]}},"required":["id","createdAt","updatedAt","deletedAt","name","url","size","format","type","inputType","durationSeconds","thumbnailUrl","visibility","userId","apiKeyId","organizationId","width","height"]},"PlatformImportNotEnabledErrorDto":{"type":"object","properties":{"statusCode":{"enum":[403],"type":"number","example":403},"errorCode":{"type":"string","enum":["import_not_enabled"],"example":"import_not_enabled","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Importing videos from links isn't enabled for your account."}},"required":["statusCode","errorCode","message"]},"PlatformImportInProgressErrorDto":{"type":"object","properties":{"statusCode":{"enum":[409],"type":"number","example":409},"errorCode":{"type":"string","enum":["import_in_progress"],"example":"import_in_progress","description":"Stable machine-readable error code. Send the same request again after retryAfterSeconds."},"message":{"type":"string","example":"The video at this link is still importing. Send the same request again in 15 seconds; once the import finishes, it uses the imported video."},"importJobId":{"type":"string","description":"The import of the link."},"importStatus":{"enum":["queued","downloading","processing","completed","failed"],"type":"string","example":"downloading"},"progress":{"type":"number","description":"Download progress, 0 to 100."},"retryAfterSeconds":{"type":"number","example":15,"description":"Suggested seconds to wait before repeating the request. Also sent in the Retry-After response header."}},"required":["statusCode","errorCode","message","importJobId","importStatus","progress","retryAfterSeconds"]},"GenerationError":{"type":"object","properties":{"dialogueEditSection":{"description":"For dialogue_edit_removal_too_large: the zero-based result slot and its source-video range. Change this section and create a new preview before submitting again.","allOf":[{"$ref":"#/components/schemas/DialogueEditRetimeFailureSectionDto"}]},"generationId":{"type":"string","format":"uuid","description":"Original generation ID when a keyed submission outcome is uncertain. Keep the same key when retrying."},"message":{"description":"A message describing the error.","example":"An error occurred during generation","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"error":{"type":"string","description":"The type of error that occurred."},"statusCode":{"type":"number","description":"The HTTP status code."},"errorCode":{"type":"string","description":"Stable machine-readable error code. References the catalog at GET /v2/errors.","example":"concurrency_limit_reached"},"suggestion":{"type":"string","description":"Actionable fix for this error code, served verbatim from the catalog at GET /v2/errors so an agent can self-correct without parsing the message.","example":"Use a model from GET /v2/models and retry."},"docsUrl":{"type":"string","description":"Link to documentation explaining this error and how to fix it."},"requestId":{"type":"string","description":"Request id for correlating an unexpected (500) failure with our logs when contacting support."},"activeGenerations":{"type":"number","description":"Concurrency 429 only: number of generations currently in progress."},"concurrencyLimit":{"type":"number","description":"Concurrency 429 only: your plan’s concurrent generation limit."},"retryAfterSeconds":{"type":"number","description":"For 429/503/504: suggested seconds to wait before retrying (also sent as the Retry-After header)."},"upstreamOperation":{"type":"string","description":"For upstream validation failures: the bounded dependency operation that timed out or was unavailable.","example":"media_duration_probe"},"upgradeUrl":{"type":"string","description":"Concurrency 429 only: link to upgrade for higher limits."},"billingUrl":{"type":"string","description":"Studio billing page for upgrades and payment, under the key every billing, plan and limit rejection uses. On a concurrency 429 it equals upgradeUrl."}},"required":["message","error","statusCode"]},"PlatformImportFailedErrorDto":{"type":"object","properties":{"statusCode":{"enum":[422],"type":"number","example":422},"errorCode":{"type":"string","enum":["import_failed"],"example":"import_failed","description":"Stable machine-readable error code. Repeating the request within 15 minutes returns the same failure; after that it imports the link again."},"message":{"type":"string","example":"Couldn't import the video at this link. Upload the file instead.","description":"Why the import failed and what to do instead."},"importJobId":{"type":"string","description":"The failed import of the link."}},"required":["statusCode","errorCode","message","importJobId"]},"PlatformImportLimitErrorDto":{"type":"object","properties":{"statusCode":{"enum":[429],"type":"number","example":429},"error":{"type":"string","enum":["Too Many Requests"],"example":"Too Many Requests"},"errorCode":{"type":"string","enum":["concurrency_limit_reached"],"example":"concurrency_limit_reached","description":"Stable machine-readable error code."},"message":{"type":"string","example":"You already have 3 imports in progress, which is the limit of 3. Wait for one to finish, or cancel one, and try again."},"activeImports":{"type":"number","description":"Imports the user has in progress."},"concurrencyLimit":{"type":"number","description":"Maximum concurrent imports per user."},"retryAfterSeconds":{"type":"number","description":"Suggested seconds to wait before retrying. Also sent in the Retry-After response header."}},"required":["statusCode","error","errorCode","message","activeImports","concurrencyLimit","retryAfterSeconds"]},"PlatformImportDailyLimitErrorDto":{"type":"object","properties":{"statusCode":{"enum":[429],"type":"number","example":429},"error":{"type":"string","enum":["Too Many Requests"],"example":"Too Many Requests"},"errorCode":{"type":"string","enum":["import_daily_limit_reached"],"example":"import_daily_limit_reached","description":"Stable machine-readable error code. Not retryable soon."},"message":{"type":"string","example":"You've reached today's limit of 20 link imports. Try again in 5 hours, or upload the file instead."},"dailyLimit":{"type":"number","description":"Imports one user may start in any rolling 24 hours."},"importsToday":{"type":"number","description":"Imports the user started in the last 24 hours."},"retryAfterSeconds":{"type":"number","description":"Seconds until the user may start another import. Also sent in the Retry-After response header."},"resetAt":{"type":"string","description":"When the user may start another import (ISO 8601).","format":"date-time"}},"required":["statusCode","error","errorCode","message","dailyLimit","importsToday","retryAfterSeconds","resetAt"]},"PlatformImportUnavailableErrorDto":{"type":"object","properties":{"statusCode":{"enum":[503],"type":"number","example":503},"errorCode":{"type":"string","enum":["import_unavailable"],"example":"import_unavailable","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Importing videos from links isn't available right now. Upload the file instead."}},"required":["statusCode","errorCode","message"]},"CreateAssetUploadDto":{"type":"object","properties":{"fileName":{"type":"string","minLength":1,"maxLength":255},"contentType":{"type":"string","pattern":"^(audio|video|image)\\/[\\w.+-]+$"},"size":{"type":"integer","exclusiveMinimum":0,"maximum":5368709120}},"required":["fileName","contentType","size"]},"AssetUploadResponseDto":{"type":"object","properties":{"uploadUrl":{"type":"string","format":"uri"},"url":{"type":"string","format":"uri"},"expiresIn":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["uploadUrl","url","expiresIn"]},"BatchGetAssetsDto":{"type":"object","properties":{"ids":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["ids"]},"UpdateAssetDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"visibility":{"type":"string","enum":["USER","ORGANIZATION"]},"durationSeconds":{"type":"number","exclusiveMinimum":0},"size":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"format":{"type":"string","minLength":1},"width":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"height":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}}},"CreateAudioTrimDto":{"type":"object","properties":{"assetId":{"type":"string","description":"Accessible saved audio asset. Supply assetId or sourceUrl.","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"sourceUrl":{"type":"string","description":"Authorized Sync-hosted audio source. Supply sourceUrl or assetId.","format":"uri"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"durationSeconds":{"type":"number","minimum":0.01,"maximum":3600,"description":"Maximum duration of the audio prefix in seconds."}},"required":["durationSeconds"]},"AudioTrimDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["queued","processing","completed","failed"]},"assetId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"durationSeconds":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"errorCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"retryAfterMs":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","status","assetId","durationSeconds","errorCode","retryAfterMs"]},"WebhookSecretResponseDto":{"type":"object","properties":{"secret":{"type":"string"}},"required":["secret"]},"ChatgptEventDto":{"type":"object","properties":{"event":{"type":"string","enum":["chatgpt_ui_loaded","chatgpt_project_opened","chatgpt_asset_selected","chatgpt_generate_clicked","chatgpt_tool_called"]},"event_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"attribution":{"type":"object","properties":{"version":{"type":"number","const":1},"invocation_source":{"type":"string","enum":["model","ui","background","unknown"]},"journey_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"action_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"conversation_id":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["version","invocation_source"],"additionalProperties":false},"tool_name":{"type":"string","enum":["open-sync-app","create-lipsync","create-lipsync-from-assets","create-translate-and-dub","create-dialogue-video","update-studio-draft","open-studio-project"]},"outcome":{"type":"string","enum":["success","error"]},"duration_ms":{"type":"number","minimum":0,"maximum":3600000}},"required":["event","event_id","attribution"],"additionalProperties":false},"CreateGenerationDto":{"type":"object","properties":{"reviewedDub":{"description":"Generate from saved reviewed dubbing corrections and current audio takes.","allOf":[{"$ref":"#/components/schemas/ReviewedDubReference"}]},"dialogueEdit":{"description":"Use the id of a completed dialogue edit from POST /v2/dialogue-edits to supply the audio and edited regions. Requires a preview that ran segment lipsync and section expansion (see the job's segmentLipsyncEnabled and sectionExpansionEnabled). Send exactly one video input, the same video the dialogue edit was made from, and no audio input, segments or dubParams. Billing, status, wait and webhooks work as for any generation.","allOf":[{"$ref":"#/components/schemas/DialogueEditReference"}]},"model":{"type":"string","description":"name of the model to use for generation.","enum":["lipsync-2","lipsync-1.9.0-beta","lipsync-2-pro","lipsync-2-mini","sync-3","react-1","appearence-1"],"example":"lipsync-1.9.0-beta"},"input":{"type":"array","description":"Array of input objects. Standard lipsync requests without segments require exactly one visual input (video or image) and one audio or text input. Multi-segment lipsync requests require exactly one video plus one or more audio/text inputs; give each audio/text input a unique refId and reference it from segments[].audioInput.refId. Multi-speaker requests use speakers[].audio.refId to reference audio/text inputs on a shared video timeline. Dubbed lipsync requests using dubParams require exactly one video and no audio/text input because the dubbed audio is extracted from that video.","items":{"oneOf":[{"$ref":"#/components/schemas/VideoInputItem","title":"Video Input"},{"$ref":"#/components/schemas/ImageInputItem","title":"Image Input"},{"$ref":"#/components/schemas/AudioInputItem","title":"Audio Input"},{"$ref":"#/components/schemas/TextInputItem","title":"Text Input"}]},"example":[{"type":"video","url":"https://assets.sync.so/videos/samples/influencer.mp4"},{"type":"audio","url":"https://assets.sync.so/audios/samples/re-record.mp3"}],"maxItems":101},"options":{"description":"additional options available for generation.","allOf":[{"$ref":"#/components/schemas/GenerationOptions"}]},"segments":{"description":"one or more segments definition to apply edits to","maxItems":100,"type":"array","items":{"$ref":"#/components/schemas/GenerationSegmentItem"}},"speakers":{"minItems":1,"description":"Speakers to lipsync on a shared video timeline (sync-3 only). Requires multispeaker_enabled. The default limit is 3, configurable per organization. Each audio must match the video duration. Cannot be combined with segments, sync_mode, dubbing or global speaker selection.","type":"array","items":{"$ref":"#/components/schemas/GenerationSpeakerItem"}},"projectId":{"type":"string","description":"Attach this generation to a project (from POST /v2/projects) so it appears in Studio under that project.","example":"550e8400-e29b-41d4-a716-446655440000"},"webhookUrl":{"type":"string","description":"Webhook URL for generation status updates. When the generation reaches a terminal state, Sync sends a POST request with the generation payload, a Sync-Signature header (`t=<unix>,v1=<hmac_sha256>`), and a stable Sync-Delivery-Id header. Verify the signature with the organization webhook secret from GET /v2/organizations/webhook/secret. Delivery is attempted up to six times with a bounded per-attempt timeout (10 seconds by default); retryable responses may provide Retry-After. HTTPS is strongly recommended.","example":"https://your-server.com/webhook"},"outputFileName":{"type":"string","description":"filename for the generated output (up to 255 characters). Characters outside letters, numbers, dashes and underscores are stripped and spaces become underscores, so \"My Clip!.mp4\" is stored as \"My_Clipmp4\".","example":"generated_video.mp4"},"dubParams":{"description":"Dubbing parameters. When present, audio is extracted from the single video input, dubbed via ElevenLabs into the target language, and then lipsync is run with the dubbed audio. Do not include audio or text inputs with dubParams; requests that send both are rejected.","allOf":[{"$ref":"#/components/schemas/DubDto"}]}},"required":["model","input"]},"CreateGenerationMultipartDto":{"type":"object","properties":{"model":{"type":"string","description":"name of the model to use for generation.","enum":["lipsync-2","lipsync-1.9.0-beta","lipsync-2-pro","lipsync-2-mini","sync-3","react-1","appearence-1"],"example":"lipsync-1.9.0-beta"},"projectId":{"type":"string","description":"Attach this generation to a project (from POST /v2/projects) so it appears in Studio under that project.","example":"550e8400-e29b-41d4-a716-446655440000"},"webhookUrl":{"type":"string","description":"Webhook URL for generation status updates. When the generation reaches a terminal state, Sync sends a POST request with the generation payload, a Sync-Signature header (`t=<unix>,v1=<hmac_sha256>`), and a stable Sync-Delivery-Id header. Verify the signature with the organization webhook secret from GET /v2/organizations/webhook/secret. Delivery is attempted up to six times with a bounded per-attempt timeout (10 seconds by default); retryable responses may provide Retry-After. HTTPS is strongly recommended.","example":"https://your-server.com/webhook"},"outputFileName":{"type":"string","description":"filename for the generated output (up to 255 characters). Characters outside letters, numbers, dashes and underscores are stripped and spaces become underscores, so \"My Clip!.mp4\" is stored as \"My_Clipmp4\".","example":"generated_video.mp4"},"audio":{"type":"string","format":"binary","description":"Audio file, up to 5 GiB and within your plan limit. Replaces any audio item in input."},"video":{"type":"string","format":"binary","description":"Video file, up to 5 GiB and within your plan limit. Replaces any video item in input."},"image":{"type":"string","format":"binary","description":"Image file, up to 5 GiB and within your plan limit. Replaces any image item in input."},"input":{"type":"string","description":"JSON string of the input array for url, assetId or text inputs. Required unless an audio, video or image file is sent; an uploaded file replaces any input item of the same type.","example":"[{\"type\":\"audio\",\"url\":\"https://example.com/audio.wav\"}]"},"options":{"type":"string","description":"JSON string of the generation options object.","example":"{\"sync_mode\":\"loop\"}"},"segments":{"type":"string","description":"JSON string of the segments array."},"speakers":{"type":"string","description":"JSON string of the speakers array."},"dubParams":{"type":"string","description":"JSON string of the dubParams object."},"dialogueEdit":{"type":"string","description":"JSON string of the dialogueEdit reference. Send the source video by url or assetId in input; a dialogue edit request with an uploaded file is rejected with 422."}},"required":["model"]},"Generation":{"type":"object","properties":{"generationEstimate":{"description":"Completion estimate for eligible interactive generations, with a fixed deadline and current server time. Absent when no estimate is available.","allOf":[{"$ref":"#/components/schemas/GenerationEstimateDto"}]},"inputSnapshot":{"description":"Frozen reviewed inputs for reopening this generation. Null for legacy generations; returned by GET /v2/generate/{id}.","anyOf":[{"type":"object","allOf":[{"$ref":"#/components/schemas/GenerationInputSnapshotDto"}]},{"type":"null"}]},"id":{"type":"string","description":"A unique identifier for the generation."},"createdAt":{"format":"date-time","type":"string","description":"The date and time the generation was created."},"status":{"enum":["PENDING","PROCESSING","COMPLETED","FAILED","REJECTED"],"type":"string","description":"The status of the generation."},"model":{"type":"string","description":"The name of the model used for generation."},"projectId":{"description":"The id of the project this generation is attached to, or null when it belongs to no project. Set via the `projectId` field on the create request.","anyOf":[{"type":"string"},{"type":"null"}]},"input":{"type":"array","description":"An array of input objects containing type and URL.","items":{"type":"object","properties":{"type":{"type":"string"},"url":{"type":"string"}}}},"segments":{"type":"array","description":"The segments definition for the generation.","items":{"type":"object"}},"speakers":{"description":"The speakers selected for this generation.","anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/GenerationSpeakerItem"}},{"type":"null"}]},"webhookUrl":{"description":"The URL to the webhook endpoint.","anyOf":[{"type":"string"},{"type":"null"}]},"options":{"type":"object","additionalProperties":true,"description":"Options for the generation."},"outputUrl":{"description":"The URL of the output media.","anyOf":[{"type":"string"},{"type":"null"}]},"outputDuration":{"description":"The duration of the output media.","anyOf":[{"type":"number"},{"type":"null"}]},"segmentOutputUrl":{"description":"The URL of the segment output media.","anyOf":[{"type":"string"},{"type":"null"}]},"outputFileName":{"description":"The sanitized filename applied to the output media. Non-alphanumeric characters (except dashes and underscores) are stripped and spaces become underscores, so the value here is the canonical name used for the downloaded file - it may differ from what was submitted. Null when no name was provided.","anyOf":[{"type":"string"},{"type":"null"}]},"synthesizedAudioUrl":{"type":"string","description":"The URL of the audio synthesized from a text input. Only present for generations created with a TTS text input; reuse it as an audio input to keep the same take across generations."},"error":{"type":"string","description":"The error message if the generation failed."},"errorCode":{"description":"Stable machine-readable error code if the generation failed. The full catalog with messages and suggested fixes is served at GET /v2/errors.","example":"generation_input_video_inaccessible","anyOf":[{"type":"string"},{"type":"null"}]},"progress_percent":{"type":"number","description":"The progress percentage of the generation (0-100). Only included when include=progress.","minimum":0,"maximum":100}},"required":["id","createdAt","status","model","input","segments"]},"BillingRejectionErrorDto":{"type":"object","properties":{"statusCode":{"type":"number","description":"The HTTP status code.","example":402},"errorCode":{"type":"string","description":"Stable machine-readable error code from GET /v2/errors, for example insufficient_credits, account_payment_required, unpaid_usage_limit_reached, free_tier_generations_exhausted, plan_feature_unavailable, generation_plan_duration_exceeded or voice_clone_limit_reached.","example":"insufficient_credits"},"message":{"type":"string","description":"Human-readable explanation, safe to show a person."},"billingUrl":{"type":"string","description":"Studio billing page where a person can upgrade, pay an invoice, update the payment method or, on prepaid credit plans, top up. It needs a signed-in browser. Only insufficient_credits rejections can be fixed by topping up; usage-based plans are invoiced and have no credits.","format":"uri"},"requiredPlan":{"type":"string","description":"plan_feature_unavailable: plan id that unlocks the feature or endpoint. enterprise means no self-serve plan does; contact sync.","example":"creator"},"requiredCredits":{"type":"number","description":"insufficient_credits: credits the refused work needed (1 credit = $0.01).","example":1200},"availableCredits":{"type":"number","description":"insufficient_credits: credits that could be spent when the work was refused, after reservations by in-flight jobs.","example":300},"limit":{"type":"number","description":"Count limit that was reached: free generations, free speech or dubbing jobs, free previews, or cloned voices.","example":3},"used":{"type":"number","description":"How much of limit is already used.","example":3},"limitSeconds":{"type":"number","description":"Duration limit that was exceeded, in seconds.","example":60},"requestedSeconds":{"type":"number","description":"Duration the refused work needed, in seconds (rounded up).","example":95},"unpaidUsageCents":{"type":"number","description":"unpaid_usage_limit_reached: metered usage not yet paid, in US cents."},"unpaidUsageLimitCents":{"type":"number","description":"unpaid_usage_limit_reached: the unpaid usage limit that was reached, in US cents."},"docsUrl":{"type":"string","description":"Documentation for this rejection.","format":"uri"}},"required":["statusCode","message"]},"EstimateCostDto":{"type":"object","properties":{"model":{"type":"string","minLength":1},"duration":{"type":"number","exclusiveMinimum":0},"fps":{"description":"Source video frame rate. When omitted, credit-billed organizations are quoted at 25, the rate generation admission holds credits at when the source frame rate cannot be read; other organizations at 30.","type":"number","exclusiveMinimum":0},"workflow":{"description":"Omit for lip-sync only. translate-and-dub includes dubbing and lip-sync, estimated using the source duration. Actual output duration may differ.","type":"string","enum":["lipsync","translate-and-dub"]},"reasoningEnabled":{"anyOf":[{"type":"boolean"},{"type":"string"}]}},"required":["model","duration"]},"EstimateCostResponseDto":{"type":"object","properties":{"durationCheck":{"description":"Current account and selected-model output-duration eligibility for the quoted duration. A price is not permission to generate; admission rechecks all limits.","type":"object","properties":{"allowed":{"type":"boolean"},"limit":{"type":"number"},"requestedDuration":{"type":"number"},"requestedSize":{"type":"number"},"canUpgrade":{"type":"boolean"},"requiredPlanType":{"anyOf":[{"type":"string","enum":["creator","scale","growth","hobbyist","enterprise","program","partner"]},{"type":"string","enum":["hobby","starter","pro","team"]}]},"requiredPlanLimit":{"type":"number"}},"required":["allowed","limit","canUpgrade"]},"estimatedFrameCount":{"type":"number"},"estimatedGenerationCost":{"type":"number"},"estimatedCredits":{"anyOf":[{"type":"number"},{"type":"null"}]},"breakdown":{"description":"Present for translate-and-dub. Top-level amounts are the combined Sync estimate. External provider charges are unpriced (null) and excluded; included dubbing has no additional Sync charge. Estimates do not reserve credits or guarantee admission.","type":"object","properties":{"lipsync":{"type":"object","properties":{"estimatedGenerationCost":{"type":"number"},"estimatedCredits":{"type":["number","null"]}},"required":["estimatedGenerationCost","estimatedCredits"]},"dubbing":{"type":"object","properties":{"billing":{"type":"string","enum":["sync_credits","sync_usd","included","external"]},"estimatedGenerationCost":{"type":["number","null"]},"estimatedCredits":{"type":["number","null"]}},"required":["billing","estimatedGenerationCost","estimatedCredits"]},"excludesExternalCharges":{"type":"boolean"}},"required":["lipsync","dubbing","excludesExternalCharges"]}},"required":["estimatedFrameCount","estimatedGenerationCost","estimatedCredits"]},"EstimateUnavailableDto":{"type":"object","properties":{"statusCode":{"type":"number","enum":[422]},"errorCode":{"type":"string","enum":["cost_estimate_unavailable"]},"message":{"type":"string","description":"Why a billable duration could not be estimated."},"suggestion":{"type":"string","description":"How to resolve the media or duration problem."}},"required":["statusCode","errorCode","message","suggestion"]},"GenerationCostsDto":{"type":"object","properties":{"generationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"generationStatus":{"type":"string"},"currency":{"type":"string","const":"USD"},"availability":{"type":"string","enum":["complete","pending","partial","unavailable"]},"totalCostUsd":{"anyOf":[{"type":"string","pattern":"^\\d+\\.\\d{5}$"},{"type":"null"}]},"knownSubtotalUsd":{"type":"string","pattern":"^\\d+\\.\\d{5}$"},"retryAfterSeconds":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"components":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["lipsync","dubbing","speech_synthesis"]},"operationId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"status":{"type":"string","enum":["recorded","pending","unavailable","not_charged"]},"amountUsd":{"anyOf":[{"type":"string","pattern":"^\\d+\\.\\d{5}$"},{"type":"null"}]},"credits":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"null"}]},"valueBasis":{"anyOf":[{"type":"string","enum":["credit_face_value","metered_usage","none"]},{"type":"null"}]},"quantity":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"unit":{"type":"string","enum":["frames","seconds"]},"unitRateUsd":{"anyOf":[{"type":"string","pattern":"^\\d+\\.\\d{5}$"},{"type":"null"}]},"source":{"anyOf":[{"type":"string","enum":["credit_ledger","recorded_usage","billing_context"]},{"type":"null"}]},"reason":{"type":["string","null"]}},"required":["type","operationId","status","amountUsd","credits","valueBasis","quantity","unit","unitRateUsd","source","reason"]}},"excludedCosts":{"type":"array","items":{"type":"string"}}},"required":["generationId","generationStatus","currency","availability","totalCostUsd","knownSubtotalUsd","retryAfterSeconds","components","excludedCosts"]},"ModelDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique model identifier"},"name":{"type":"string","description":"Model name (e.g., lipsync-2)"},"type":{"type":"string","description":"Model type"},"version":{"type":"string","description":"Model version"},"description":{"description":"Model description","anyOf":[{"type":"string"},{"type":"null"}]},"features":{"description":"Marketing feature tags for the model","type":"array","items":{"type":"string"}},"deprecatedAt":{"description":"Deprecation timestamp if deprecated","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","type","version","description","features","deprecatedAt"]},"CountResponseDto":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]},"GenerationDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"organizationId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"userId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"apiKeyId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"updatedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"startedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED","REJECTED"]},"model":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"type":{"type":"string"},"version":{"type":"string"},"features":{"default":[],"type":"array","items":{"type":"string"}},"deprecatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]}},"required":["id","name","description","type","version","deprecatedAt"]},"modelName":{"type":"string"},"inputs":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"assetId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"type":{"type":"string","enum":["video","image","audio","text"]},"refId":{"type":"string"},"generatedBy":{"type":"string","const":"tts"},"segments_secs":{"type":"array","items":{"type":"array","items":{"type":"number"}}},"segments_frames":{"type":"array","items":{"type":"array","items":{"type":"number"}}},"trim_secs":{"type":"array","items":{"type":"number"}},"provider":{"type":"object","properties":{"name":{"type":"string"},"script":{"type":"string"},"voiceId":{"type":"string"},"stability":{"type":"number","minimum":0,"maximum":1},"similarityBoost":{"type":"number","minimum":0,"maximum":1}},"required":["name","script","voiceId"]}},"required":["type"]}},"webhookUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"thumbnailUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"frameCount":{"anyOf":[{"type":"number"},{"type":"null"}]},"options":{"type":"object","properties":{"prompt":{"anyOf":[{"type":"string","enum":["happy","sad","angry","disgusted","surprised","neutral"]},{"type":"string"}]},"prompt_image_uris":{"type":"array","items":{"type":"string"}},"i2v_prompt":{"type":"string"},"system_prompt":{"type":"string"},"temperature":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"sync_mode":{"type":"string","enum":["cut_off","bounce","loop","silence","remap"]},"model_mode":{"type":"string"},"active_speaker_detection":{"anyOf":[{"type":"object","properties":{"auto_detect":{"default":false,"type":"boolean"},"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"number"},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},"bounding_boxes":{"type":"array","items":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}}},{"type":"boolean"}]},"face_boxes_url":{"type":"string"},"occlusion_detection_enabled":{"type":"boolean"},"reasoning_enabled":{"type":"boolean"},"refinement_enabled":{"type":"boolean"},"blending_mode":{"type":"string","enum":["default","advanced","disabled"]},"output_file_name":{"type":"string"},"output_bucket_name":{"type":"string"},"output_bucket_path":{"type":"string"},"disable_blending":{"type":"boolean"},"pad_percent":{"type":"number"},"mask_uri":{"type":"string"},"mask_inner_box":{"anyOf":[{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"type":"null"}]},"audio_guidance_scale":{"type":["number","null"]},"num_steps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"use_retinaface":{"type":"boolean"},"use_insightface":{"type":"boolean"},"disable_scene_detection":{"type":"boolean"},"extra_services_options":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/GenerationDto__schema0"}},"original_audio_url":{"type":"string"},"occlusion_prompt":{"type":"string"},"rotate":{"type":"number","minimum":0,"maximum":360},"active_speaker":{"type":"boolean"},"speedup":{"anyOf":[{"type":"number","minimum":1,"maximum":4},{"type":"null"}]},"output_format":{"type":"string","enum":["mp4","mov"]},"fps":{"type":["number","null"]},"output_resolution":{"anyOf":[{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},{"type":"null"}]},"pads":{"minItems":4,"maxItems":4,"type":"array","items":{"type":"number","minimum":-8000,"maximum":8000}},"gb":{"type":["number","null"]},"mb":{"type":["number","null"]},"quality":{"type":["string","null"]},"img_size":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"pickle_mode":{"type":["string","null"]},"cf_batch_size":{"type":["number","null"]},"resize_factor":{"type":["number","null"]},"expressiveness":{"type":["number","null"]},"inp_batch_size":{"type":["number","null"]},"fidelity_weight":{"type":["number","null"]},"wav2lip_batch_size":{"type":["number","null"]},"face_det_batch_size":{"type":["number","null"]}}},"segments":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"startTime":{"type":"number"},"endTime":{"type":"number"},"startFrame":{"type":"number"},"endFrame":{"type":"number"},"audioInput":{"type":"object","properties":{"refId":{"type":"string"},"startTime":{"type":"number"},"endTime":{"type":"number"}},"required":["refId"]},"optionsOverride":{"type":"object","properties":{"active_speaker_detection":{"type":"object","properties":{"auto_detect":{"default":false,"type":"boolean"},"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"number"},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},"bounding_boxes":{"type":"array","items":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}}},"sync_mode":{"type":"string","enum":["cut_off","bounce","loop","silence","remap"]},"occlusion_detection_enabled":{"type":"boolean"},"temperature":{"type":"number","minimum":0,"maximum":1},"disable_blending":{"type":"boolean"},"pad_percent":{"type":"number"},"mask_uri":{"type":"string"},"use_retinaface":{"type":"boolean"},"use_insightface":{"type":"boolean"}}}}}},{"type":"null"}]},"speakers":{"anyOf":[{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]+$"},"audio":{"type":"object","properties":{"refId":{"type":"string","minLength":1},"startTime":{"type":"number","minimum":0},"endTime":{"type":"number","exclusiveMinimum":0}},"required":["refId"],"additionalProperties":false},"face":{"type":"object","properties":{"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"integer","minimum":0,"maximum":9007199254740991},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"integer","minimum":0,"maximum":9007199254740991}},"bounding_boxes":{"maxItems":350000,"type":"array","items":{"anyOf":[{"anyOf":[{"type":"array","prefixItems":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}],"items":false,"minItems":4,"maxItems":4},{"minItems":0,"maxItems":0,"type":"array","items":{"not":{}}}]},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}},"additionalProperties":false}},"required":["id","audio","face"],"additionalProperties":false}},{"type":"null"}]},"outputMediaUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"segmentOutputMediaUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"segmentOutputBucketPath":{"anyOf":[{"type":"string"},{"type":"null"}]},"creatorName":{"anyOf":[{"type":"string"},{"type":"null"}]},"outputMediaLength":{"anyOf":[{"type":"number"},{"type":"null"}]},"potentialError":{"anyOf":[{"anyOf":[{"type":"object","properties":{"status":{"type":"number"},"message":{"type":"string"},"errorCode":{"type":"string"},"docsLink":{"type":"string","format":"uri"}},"required":["message"]},{"type":"null"}]},{"type":"null"}]},"isPublic":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"deletedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"projectId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"outputFileName":{"anyOf":[{"type":"string"},{"type":"null"}]},"outputExtension":{"anyOf":[{"type":"string"},{"type":"null"}]},"generationEstimate":{"anyOf":[{"type":"object","properties":{"estimatedDurationSeconds":{"type":"number","exclusiveMinimum":0},"estimatedFinishAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"delayedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"supportAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"estimatedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"serverTime":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"calibrationAsOf":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"estimatorVersion":{"type":"string","minLength":1},"confidence":{"type":"string","enum":["measured","approximate","fallback"]},"source":{"type":"string","enum":["cohort","duration_neighbor","resolution_neighbor","model_pool","global_pool","fallback"]},"sampleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"scope":{"type":"string","enum":["studio","non_studio"]},"durationBand":{"type":"string","minLength":1},"resolutionBand":{"type":"string","minLength":1},"resolutionSource":{"type":"string","enum":["input","requested_output","unknown"]}},"required":["estimatedDurationSeconds","estimatedFinishAt","delayedAt","supportAt","estimatedAt","serverTime","calibrationAsOf","estimatorVersion","confidence","source","sampleCount","scope","durationBand","resolutionBand","resolutionSource"]},{"type":"null"}]}},"required":["id","organizationId","userId","apiKeyId","createdAt","updatedAt","startedAt","finishedAt","status","model","modelName","inputs","webhookUrl","thumbnailUrl","frameCount","options","outputMediaUrl","segmentOutputMediaUrl","segmentOutputBucketPath","outputMediaLength","potentialError","isPublic","deletedAt","projectId"]},"UpdateOutputFileNameDto":{"type":"object","properties":{"outputFileName":{"type":"string","maxLength":255}},"required":["outputFileName"]},"EstimateDubbingCostDto":{"type":"object","properties":{"duration":{"type":"number","exclusiveMinimum":0},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"audioAssetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"preview":{"type":"boolean","description":"Offer a bounded source quote when the source exceeds the applicable duration limit. Does not mark a job as an audition."},"isPreview":{"type":"boolean","description":"Quote a short audition using the separate free preview allowance. Use the same mode when creating the job."}}},"EstimateDubbingPreviewCostResponseDto":{"type":"object","properties":{"billing":{"type":"string","enum":["sync_credits","sync_usd","included","external"]},"estimatedGenerationCost":{"anyOf":[{"type":"number"},{"type":"null"}]},"estimatedCredits":{"anyOf":[{"type":"number"},{"type":"null"}]},"preview":{"type":"object","properties":{"sourceDurationSeconds":{"type":"number","exclusiveMinimum":0},"quotedDurationSeconds":{"type":"number","exclusiveMinimum":0},"limitSeconds":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]}},"required":["sourceDurationSeconds","quotedDurationSeconds","limitSeconds"]}},"required":["billing","estimatedGenerationCost","estimatedCredits"]},"CreateDubbingDto":{"type":"object","properties":{"sourceAudioUrl":{"type":"string","format":"uri"},"providerName":{"type":"string","default":"elevenlabs","enum":["elevenlabs"]},"targetLang":{"type":"string","enum":["af","ak","sq","am","ar","ar-EG","hy","as","az","eu","be","bs","bg","my","yue","ca","ceb","zh","zh-TW","hr","cs","da","dgo","nl","en","en-AU","en-CA","en-GB","en-US","et","fil","fi","fr","fr-CA","fr-FR","gl","ka","de","el","gu","ha","he","hi","hu","is","id","it","ja","jv","kn","kk","ki","rw","rn","ko","ky","lv","lt","lg","mk","ms","ml","cmn","mr","mn","ne","no","fa","pl","pt","pt-BR","pt-PT","pa","ro","ru","nso","st","sd","sk","sl","es","es-AR","es-CL","es-ES","es-MX","su","sw","ss","sv","tg","ta","te","th","bo","ts","tn","tr","uk","ur","ug","uz","ve","vi","war","cy","wo","yo","zu","doi","tl"]},"sourceLang":{"type":"string","default":"auto","enum":["auto","af","ak","sq","am","ar","ar-EG","hy","as","az","eu","be","bs","bg","my","yue","ca","ceb","zh","zh-TW","hr","cs","da","dgo","nl","en","en-AU","en-CA","en-GB","en-US","et","fil","fi","fr","fr-CA","fr-FR","gl","ka","de","el","gu","ha","he","hi","hu","is","id","it","ja","jv","kn","kk","ki","rw","rn","ko","ky","lv","lt","lg","mk","ms","ml","cmn","mr","mn","ne","no","fa","pl","pt","pt-BR","pt-PT","pa","ro","ru","nso","st","sd","sk","sl","es","es-AR","es-CL","es-ES","es-MX","su","sw","ss","sv","tg","ta","te","th","bo","ts","tn","tr","uk","ur","ug","uz","ve","vi","war","cy","wo","yo","zu","doi","tl"]},"numSpeakers":{"type":"integer","deprecated":true,"description":"Deprecated and ignored. Dubbing v2 detects speakers automatically.","minimum":0,"maximum":10},"cloningStrength":{"type":"integer","description":"Voice cloning strength for Dubbing v2, from 1 to 10. Omit to use provider defaults. Studio starts at 7.","minimum":1,"maximum":10},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"isPreview":{"type":"boolean"},"audioAssetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["targetLang"]},"DubbingGenerationDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETING","COMPLETED","FAILED"]},"sourceAudioUrl":{"type":"string"},"sourceLang":{"type":"string"},"targetLang":{"type":"string"},"cloningStrength":{"anyOf":[{"type":"integer","minimum":1,"maximum":10},{"type":"null"}]},"outputMediaUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"outputDurationSec":{"anyOf":[{"type":"number"},{"type":"null"}]},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","enum":["CREATE_FAILED","PROVIDER_FAILED","TIMEOUT","UPLOAD_FAILED","DOWNLOAD_FAILED","UNKNOWN"]},"message":{"type":"string"}},"required":["code","message"]},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"startedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"recoveryRequired":{"type":"boolean"}},"required":["id","status","sourceAudioUrl","sourceLang","targetLang","outputMediaUrl","outputDurationSec","error","createdAt","startedAt","finishedAt"]},"CreateTtsDto":{"type":"object","properties":{"script":{"type":"string","minLength":1,"maxLength":5000},"voiceId":{"type":"string","minLength":1},"provider":{"type":"string","enum":["elevenlabs"]},"stability":{"type":"number","minimum":0,"maximum":1},"similarityBoost":{"type":"number","minimum":0,"maximum":1}},"required":["script","voiceId","provider"]},"TtsGenerationResponseDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"duration":{"type":"number"}},"required":["id","url","duration"]},"TtsJobDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["PENDING","PROCESSING","SUCCESS","FAILED"]},"url":{"anyOf":[{"type":"string"},{"type":"null"}]},"duration":{"anyOf":[{"type":"number"},{"type":"null"}]},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","enum":["CREATE_FAILED","PROVIDER_FAILED","PROVIDER_TIMEOUT","PROVIDER_RESULT_UNKNOWN","UPLOAD_FAILED","TIMEOUT","UNKNOWN"]},"message":{"type":"string"}},"required":["code","message"]},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"startedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]}},"required":["id","status","url","duration","error","createdAt","startedAt","finishedAt"]},"PaginatedProjectsResponseDto":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"createdAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"updatedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"organizationId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"userId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"name":{"type":["string","null"]},"description":{"type":["string","null"]},"visibility":{"type":"string","enum":["USER","ORGANIZATION"]},"deletedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"mode":{"type":"string","enum":["CREATOR","DEVELOPER"]},"defaultWorkflow":{"anyOf":[{"type":"string","enum":["lipsync","translate_and_dub","change_appearance","image_to_video","edit_dialogue","assistant","timeline"]},{"type":"null"}]},"generations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"organizationId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"userId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"apiKeyId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"updatedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"startedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED","REJECTED"]},"model":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"type":{"type":"string"},"version":{"type":"string"},"features":{"default":[],"type":"array","items":{"type":"string"}},"deprecatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]}},"required":["id","name","description","type","version","deprecatedAt"]},"modelName":{"type":"string"},"inputs":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"assetId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"type":{"type":"string","enum":["video","image","audio","text"]},"refId":{"type":"string"},"generatedBy":{"type":"string","const":"tts"},"segments_secs":{"type":"array","items":{"type":"array","items":{"type":"number"}}},"segments_frames":{"type":"array","items":{"type":"array","items":{"type":"number"}}},"trim_secs":{"type":"array","items":{"type":"number"}},"provider":{"type":"object","properties":{"name":{"type":"string"},"script":{"type":"string"},"voiceId":{"type":"string"},"stability":{"type":"number","minimum":0,"maximum":1},"similarityBoost":{"type":"number","minimum":0,"maximum":1}},"required":["name","script","voiceId"]}},"required":["type"]}},"webhookUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"frameCount":{"type":["number","null"]},"options":{"type":"object","properties":{"prompt":{"anyOf":[{"type":"string","enum":["happy","sad","angry","disgusted","surprised","neutral"]},{"type":"string"}]},"prompt_image_uris":{"type":"array","items":{"type":"string"}},"i2v_prompt":{"type":"string"},"system_prompt":{"type":"string"},"temperature":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"sync_mode":{"type":"string","enum":["cut_off","bounce","loop","silence","remap"]},"model_mode":{"type":"string"},"active_speaker_detection":{"anyOf":[{"type":"object","properties":{"auto_detect":{"default":false,"type":"boolean"},"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"number"},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},"bounding_boxes":{"type":"array","items":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}}},{"type":"boolean"}]},"face_boxes_url":{"type":"string"},"occlusion_detection_enabled":{"type":"boolean"},"reasoning_enabled":{"type":"boolean"},"refinement_enabled":{"type":"boolean"},"blending_mode":{"type":"string","enum":["default","advanced","disabled"]},"output_file_name":{"type":"string"},"output_bucket_name":{"type":"string"},"output_bucket_path":{"type":"string"},"disable_blending":{"type":"boolean"},"pad_percent":{"type":"number"},"mask_uri":{"type":"string"},"mask_inner_box":{"anyOf":[{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"type":"null"}]},"audio_guidance_scale":{"type":["number","null"]},"num_steps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"use_retinaface":{"type":"boolean"},"use_insightface":{"type":"boolean"},"disable_scene_detection":{"type":"boolean"},"extra_services_options":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/PaginatedProjectsResponseDto__schema0"}},"original_audio_url":{"type":"string"},"occlusion_prompt":{"type":"string"},"rotate":{"type":"number","minimum":0,"maximum":360},"active_speaker":{"type":"boolean"},"speedup":{"anyOf":[{"type":"number","minimum":1,"maximum":4},{"type":"null"}]},"output_format":{"type":"string","enum":["mp4","mov"]},"fps":{"type":["number","null"]},"output_resolution":{"anyOf":[{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},{"type":"null"}]},"pads":{"minItems":4,"maxItems":4,"type":"array","items":{"type":"number","minimum":-8000,"maximum":8000}},"gb":{"type":["number","null"]},"mb":{"type":["number","null"]},"quality":{"type":["string","null"]},"img_size":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"pickle_mode":{"type":["string","null"]},"cf_batch_size":{"type":["number","null"]},"resize_factor":{"type":["number","null"]},"expressiveness":{"type":["number","null"]},"inp_batch_size":{"type":["number","null"]},"fidelity_weight":{"type":["number","null"]},"wav2lip_batch_size":{"type":["number","null"]},"face_det_batch_size":{"type":["number","null"]}}},"segments":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"startTime":{"type":"number"},"endTime":{"type":"number"},"startFrame":{"type":"number"},"endFrame":{"type":"number"},"audioInput":{"type":"object","properties":{"refId":{"type":"string"},"startTime":{"type":"number"},"endTime":{"type":"number"}},"required":["refId"]},"optionsOverride":{"type":"object","properties":{"active_speaker_detection":{"type":"object","properties":{"auto_detect":{"default":false,"type":"boolean"},"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"number"},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},"bounding_boxes":{"type":"array","items":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}}},"sync_mode":{"type":"string","enum":["cut_off","bounce","loop","silence","remap"]},"occlusion_detection_enabled":{"type":"boolean"},"temperature":{"type":"number","minimum":0,"maximum":1},"disable_blending":{"type":"boolean"},"pad_percent":{"type":"number"},"mask_uri":{"type":"string"},"use_retinaface":{"type":"boolean"},"use_insightface":{"type":"boolean"}}}}}},{"type":"null"}]},"speakers":{"anyOf":[{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]+$"},"audio":{"type":"object","properties":{"refId":{"type":"string","minLength":1},"startTime":{"type":"number","minimum":0},"endTime":{"type":"number","exclusiveMinimum":0}},"required":["refId"],"additionalProperties":false},"face":{"type":"object","properties":{"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"integer","minimum":0,"maximum":9007199254740991},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"integer","minimum":0,"maximum":9007199254740991}},"bounding_boxes":{"maxItems":350000,"type":"array","items":{"anyOf":[{"anyOf":[{"type":"array","prefixItems":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}],"items":false,"minItems":4,"maxItems":4},{"minItems":0,"maxItems":0,"type":"array","items":{"not":{}}}]},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}},"additionalProperties":false}},"required":["id","audio","face"],"additionalProperties":false}},{"type":"null"}]},"outputMediaUrl":{"type":["string","null"]},"segmentOutputMediaUrl":{"type":["string","null"]},"segmentOutputBucketPath":{"type":["string","null"]},"creatorName":{"type":["string","null"]},"outputMediaLength":{"type":["number","null"]},"potentialError":{"anyOf":[{"anyOf":[{"type":"object","properties":{"status":{"type":"number"},"message":{"type":"string"},"errorCode":{"type":"string"},"docsLink":{"type":"string","format":"uri"}},"required":["message"]},{"type":"null"}]},{"type":"null"}]},"isPublic":{"type":["boolean","null"]},"deletedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"projectId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"outputFileName":{"type":["string","null"]},"outputExtension":{"type":["string","null"]},"generationEstimate":{"anyOf":[{"type":"object","properties":{"estimatedDurationSeconds":{"type":"number","exclusiveMinimum":0},"estimatedFinishAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"delayedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"supportAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"estimatedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"serverTime":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"calibrationAsOf":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"estimatorVersion":{"type":"string","minLength":1},"confidence":{"type":"string","enum":["measured","approximate","fallback"]},"source":{"type":"string","enum":["cohort","duration_neighbor","resolution_neighbor","model_pool","global_pool","fallback"]},"sampleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"scope":{"type":"string","enum":["studio","non_studio"]},"durationBand":{"type":"string","minLength":1},"resolutionBand":{"type":"string","minLength":1},"resolutionSource":{"type":"string","enum":["input","requested_output","unknown"]}},"required":["estimatedDurationSeconds","estimatedFinishAt","delayedAt","supportAt","estimatedAt","serverTime","calibrationAsOf","estimatorVersion","confidence","source","sampleCount","scope","durationBand","resolutionBand","resolutionSource"]},{"type":"null"}]}},"required":["id","organizationId","userId","apiKeyId","createdAt","updatedAt","startedAt","finishedAt","status","model","modelName","inputs","webhookUrl","thumbnailUrl","frameCount","options","outputMediaUrl","segmentOutputMediaUrl","segmentOutputBucketPath","outputMediaLength","potentialError","isPublic","deletedAt","projectId"]}},"generationPresets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"name":{"type":"string"},"description":{"type":["string","null"]},"model":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"type":{"type":"string"},"version":{"type":"string"},"features":{"default":[],"type":"array","items":{"type":"string"}},"deprecatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]}},"required":["id","name","description","type","version","deprecatedAt"]},"modelName":{"type":"string"},"options":{"type":"object","properties":{"prompt":{"anyOf":[{"type":"string","enum":["happy","sad","angry","disgusted","surprised","neutral"]},{"type":"string"}]},"prompt_image_uris":{"type":"array","items":{"type":"string"}},"i2v_prompt":{"type":"string"},"system_prompt":{"type":"string"},"temperature":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"sync_mode":{"type":"string","enum":["cut_off","bounce","loop","silence","remap"]},"model_mode":{"type":"string"},"active_speaker_detection":{"anyOf":[{"type":"object","properties":{"auto_detect":{"default":false,"type":"boolean"},"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"number"},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},"bounding_boxes":{"type":"array","items":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}}},{"type":"boolean"}]},"face_boxes_url":{"type":"string"},"occlusion_detection_enabled":{"type":"boolean"},"reasoning_enabled":{"type":"boolean"},"refinement_enabled":{"type":"boolean"},"blending_mode":{"type":"string","enum":["default","advanced","disabled"]},"output_file_name":{"type":"string"},"output_bucket_name":{"type":"string"},"output_bucket_path":{"type":"string"},"disable_blending":{"type":"boolean"},"pad_percent":{"type":"number"},"mask_uri":{"type":"string"},"mask_inner_box":{"anyOf":[{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"type":"null"}]},"audio_guidance_scale":{"type":["number","null"]},"num_steps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"use_retinaface":{"type":"boolean"},"use_insightface":{"type":"boolean"},"disable_scene_detection":{"type":"boolean"},"extra_services_options":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/PaginatedProjectsResponseDto__schema0"}},"original_audio_url":{"type":"string"},"occlusion_prompt":{"type":"string"},"rotate":{"type":"number","minimum":0,"maximum":360},"active_speaker":{"type":"boolean"},"speedup":{"anyOf":[{"type":"number","minimum":1,"maximum":4},{"type":"null"}]},"output_format":{"type":"string","enum":["mp4","mov"]},"fps":{"type":["number","null"]},"output_resolution":{"anyOf":[{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},{"type":"null"}]},"pads":{"minItems":4,"maxItems":4,"type":"array","items":{"type":"number","minimum":-8000,"maximum":8000}},"gb":{"type":["number","null"]},"mb":{"type":["number","null"]},"quality":{"type":["string","null"]},"img_size":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"pickle_mode":{"type":["string","null"]},"cf_batch_size":{"type":["number","null"]},"resize_factor":{"type":["number","null"]},"expressiveness":{"type":["number","null"]},"inp_batch_size":{"type":["number","null"]},"fidelity_weight":{"type":["number","null"]},"wav2lip_batch_size":{"type":["number","null"]},"face_det_batch_size":{"type":["number","null"]}}}},"required":["id","name","description","model","modelName","options"]}},"assets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"projectId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"assetId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"asset":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"createdAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"updatedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"deletedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"name":{"type":["string","null"]},"url":{"type":["string","null"]},"size":{"type":["number","null"]},"format":{"type":["string","null"]},"type":{"type":"string","enum":["AUDIO","VIDEO","IMAGE"]},"inputType":{"anyOf":[{"type":"string","enum":["UPLOAD","URL","RECORD","TTS","EXTRACT","DUB","DUB_SOURCE","PLATFORM_IMPORT","DIALOGUE_EDIT","PLUGIN_PREMIERE_FILE","PLUGIN_PREMIERE_TIMELINE_SELECTION","PLUGIN_RESOLVE_FILE","PLUGIN_RESOLVE_TIMELINE_SELECTION"]},{"type":"null"}]},"durationSeconds":{"type":["number","null"]},"thumbnailUrl":{"type":["string","null"]},"visibility":{"type":"string","enum":["USER","ORGANIZATION"]},"userId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"apiKeyId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"organizationId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"proxyPath":{"type":["string","null"]},"projectId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]}},"required":["id","createdAt","updatedAt","deletedAt","name","url","size","format","type","inputType","durationSeconds","thumbnailUrl","visibility","userId","apiKeyId","organizationId","width","height"]}},"required":["id","projectId","assetId","asset"]}},"generationsCount":{"type":"number"},"completedGenerationsCount":{"type":"number"},"lastGenerationSource":{"type":["string","null"]},"latestAssetThumbnailUrl":{"description":"Preview for the latest uploaded visual asset: the thumbnail for videos, the image itself for images.","type":["string","null"]},"latestAssetAttachedAt":{"description":"When the latest visual draft asset was first attached to the project, so clients can rank it against the latest generation by recency.","anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]}},"required":["id","createdAt","updatedAt","organizationId","userId","name","description","visibility","deletedAt","mode","generations","generationPresets","assets","generationsCount","completedGenerationsCount","lastGenerationSource","latestAssetThumbnailUrl","latestAssetAttachedAt"]}},"nextCursor":{"type":"string"}},"required":["items"]},"CreateProjectDto":{"type":"object","properties":{"id":{"type":"string","description":"Optional client-supplied project id (UUID) for idempotent creation. Re-sending the same id returns the existing project instead of creating a duplicate; the other request fields are ignored on such a replay. If the id is already used by a different user or organization, or by a deleted project, the request fails with 409.","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string"},"visibility":{"type":"string","description":"Who can see the project. Defaults to USER (visible only to the owner).","enum":["USER","ORGANIZATION"]},"mode":{"type":"string","description":"Project mode. Defaults to CREATOR.","enum":["CREATOR","DEVELOPER"]},"defaultWorkflow":{"type":"string","description":"Default top-level creator workflow for this project.","enum":["lipsync","translate_and_dub","change_appearance","image_to_video","edit_dialogue","assistant","timeline"]}},"required":["name"]},"ProjectDto":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"createdAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"updatedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"organizationId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"userId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"visibility":{"type":"string","enum":["USER","ORGANIZATION"]},"deletedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"mode":{"type":"string","enum":["CREATOR","DEVELOPER"]},"defaultWorkflow":{"anyOf":[{"type":"string","enum":["lipsync","translate_and_dub","change_appearance","image_to_video","edit_dialogue","assistant","timeline"]},{"type":"null"}]},"generations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"organizationId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"userId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"apiKeyId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"updatedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"startedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED","REJECTED"]},"model":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"type":{"type":"string"},"version":{"type":"string"},"features":{"default":[],"type":"array","items":{"type":"string"}},"deprecatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]}},"required":["id","name","description","type","version","deprecatedAt"]},"modelName":{"type":"string"},"inputs":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"assetId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"type":{"type":"string","enum":["video","image","audio","text"]},"refId":{"type":"string"},"generatedBy":{"type":"string","const":"tts"},"segments_secs":{"type":"array","items":{"type":"array","items":{"type":"number"}}},"segments_frames":{"type":"array","items":{"type":"array","items":{"type":"number"}}},"trim_secs":{"type":"array","items":{"type":"number"}},"provider":{"type":"object","properties":{"name":{"type":"string"},"script":{"type":"string"},"voiceId":{"type":"string"},"stability":{"type":"number","minimum":0,"maximum":1},"similarityBoost":{"type":"number","minimum":0,"maximum":1}},"required":["name","script","voiceId"]}},"required":["type"]}},"webhookUrl":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]},"frameCount":{"type":["number","null"]},"options":{"type":"object","properties":{"prompt":{"anyOf":[{"type":"string","enum":["happy","sad","angry","disgusted","surprised","neutral"]},{"type":"string"}]},"prompt_image_uris":{"type":"array","items":{"type":"string"}},"i2v_prompt":{"type":"string"},"system_prompt":{"type":"string"},"temperature":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"sync_mode":{"type":"string","enum":["cut_off","bounce","loop","silence","remap"]},"model_mode":{"type":"string"},"active_speaker_detection":{"anyOf":[{"type":"object","properties":{"auto_detect":{"default":false,"type":"boolean"},"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"number"},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},"bounding_boxes":{"type":"array","items":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}}},{"type":"boolean"}]},"face_boxes_url":{"type":"string"},"occlusion_detection_enabled":{"type":"boolean"},"reasoning_enabled":{"type":"boolean"},"refinement_enabled":{"type":"boolean"},"blending_mode":{"type":"string","enum":["default","advanced","disabled"]},"output_file_name":{"type":"string"},"output_bucket_name":{"type":"string"},"output_bucket_path":{"type":"string"},"disable_blending":{"type":"boolean"},"pad_percent":{"type":"number"},"mask_uri":{"type":"string"},"mask_inner_box":{"anyOf":[{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"type":"null"}]},"audio_guidance_scale":{"type":["number","null"]},"num_steps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"use_retinaface":{"type":"boolean"},"use_insightface":{"type":"boolean"},"disable_scene_detection":{"type":"boolean"},"extra_services_options":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ProjectDto__schema0"}},"original_audio_url":{"type":"string"},"occlusion_prompt":{"type":"string"},"rotate":{"type":"number","minimum":0,"maximum":360},"active_speaker":{"type":"boolean"},"speedup":{"anyOf":[{"type":"number","minimum":1,"maximum":4},{"type":"null"}]},"output_format":{"type":"string","enum":["mp4","mov"]},"fps":{"type":["number","null"]},"output_resolution":{"anyOf":[{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},{"type":"null"}]},"pads":{"minItems":4,"maxItems":4,"type":"array","items":{"type":"number","minimum":-8000,"maximum":8000}},"gb":{"type":["number","null"]},"mb":{"type":["number","null"]},"quality":{"type":["string","null"]},"img_size":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"pickle_mode":{"type":["string","null"]},"cf_batch_size":{"type":["number","null"]},"resize_factor":{"type":["number","null"]},"expressiveness":{"type":["number","null"]},"inp_batch_size":{"type":["number","null"]},"fidelity_weight":{"type":["number","null"]},"wav2lip_batch_size":{"type":["number","null"]},"face_det_batch_size":{"type":["number","null"]}}},"segments":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"startTime":{"type":"number"},"endTime":{"type":"number"},"startFrame":{"type":"number"},"endFrame":{"type":"number"},"audioInput":{"type":"object","properties":{"refId":{"type":"string"},"startTime":{"type":"number"},"endTime":{"type":"number"}},"required":["refId"]},"optionsOverride":{"type":"object","properties":{"active_speaker_detection":{"type":"object","properties":{"auto_detect":{"default":false,"type":"boolean"},"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"number"},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},"bounding_boxes":{"type":"array","items":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}}},"sync_mode":{"type":"string","enum":["cut_off","bounce","loop","silence","remap"]},"occlusion_detection_enabled":{"type":"boolean"},"temperature":{"type":"number","minimum":0,"maximum":1},"disable_blending":{"type":"boolean"},"pad_percent":{"type":"number"},"mask_uri":{"type":"string"},"use_retinaface":{"type":"boolean"},"use_insightface":{"type":"boolean"}}}}}},{"type":"null"}]},"speakers":{"anyOf":[{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]+$"},"audio":{"type":"object","properties":{"refId":{"type":"string","minLength":1},"startTime":{"type":"number","minimum":0},"endTime":{"type":"number","exclusiveMinimum":0}},"required":["refId"],"additionalProperties":false},"face":{"type":"object","properties":{"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"integer","minimum":0,"maximum":9007199254740991},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"integer","minimum":0,"maximum":9007199254740991}},"bounding_boxes":{"maxItems":350000,"type":"array","items":{"anyOf":[{"anyOf":[{"type":"array","prefixItems":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}],"items":false,"minItems":4,"maxItems":4},{"minItems":0,"maxItems":0,"type":"array","items":{"not":{}}}]},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}},"additionalProperties":false}},"required":["id","audio","face"],"additionalProperties":false}},{"type":"null"}]},"outputMediaUrl":{"type":["string","null"]},"segmentOutputMediaUrl":{"type":["string","null"]},"segmentOutputBucketPath":{"type":["string","null"]},"creatorName":{"type":["string","null"]},"outputMediaLength":{"type":["number","null"]},"potentialError":{"anyOf":[{"anyOf":[{"type":"object","properties":{"status":{"type":"number"},"message":{"type":"string"},"errorCode":{"type":"string"},"docsLink":{"type":"string","format":"uri"}},"required":["message"]},{"type":"null"}]},{"type":"null"}]},"isPublic":{"type":["boolean","null"]},"deletedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"projectId":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},{"type":"null"}]},"outputFileName":{"type":["string","null"]},"outputExtension":{"type":["string","null"]},"generationEstimate":{"anyOf":[{"type":"object","properties":{"estimatedDurationSeconds":{"type":"number","exclusiveMinimum":0},"estimatedFinishAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"delayedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"supportAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"estimatedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"serverTime":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"calibrationAsOf":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"estimatorVersion":{"type":"string","minLength":1},"confidence":{"type":"string","enum":["measured","approximate","fallback"]},"source":{"type":"string","enum":["cohort","duration_neighbor","resolution_neighbor","model_pool","global_pool","fallback"]},"sampleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"scope":{"type":"string","enum":["studio","non_studio"]},"durationBand":{"type":"string","minLength":1},"resolutionBand":{"type":"string","minLength":1},"resolutionSource":{"type":"string","enum":["input","requested_output","unknown"]}},"required":["estimatedDurationSeconds","estimatedFinishAt","delayedAt","supportAt","estimatedAt","serverTime","calibrationAsOf","estimatorVersion","confidence","source","sampleCount","scope","durationBand","resolutionBand","resolutionSource"]},{"type":"null"}]}},"required":["id","organizationId","userId","apiKeyId","createdAt","updatedAt","startedAt","finishedAt","status","model","modelName","inputs","webhookUrl","thumbnailUrl","frameCount","options","outputMediaUrl","segmentOutputMediaUrl","segmentOutputBucketPath","outputMediaLength","potentialError","isPublic","deletedAt","projectId"]}},"generationPresets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"name":{"type":"string"},"description":{"type":["string","null"]},"model":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"type":{"type":"string"},"version":{"type":"string"},"features":{"default":[],"type":"array","items":{"type":"string"}},"deprecatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]}},"required":["id","name","description","type","version","deprecatedAt"]},"modelName":{"type":"string"},"options":{"type":"object","properties":{"prompt":{"anyOf":[{"type":"string","enum":["happy","sad","angry","disgusted","surprised","neutral"]},{"type":"string"}]},"prompt_image_uris":{"type":"array","items":{"type":"string"}},"i2v_prompt":{"type":"string"},"system_prompt":{"type":"string"},"temperature":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"sync_mode":{"type":"string","enum":["cut_off","bounce","loop","silence","remap"]},"model_mode":{"type":"string"},"active_speaker_detection":{"anyOf":[{"type":"object","properties":{"auto_detect":{"default":false,"type":"boolean"},"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"number"},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},"bounding_boxes":{"type":"array","items":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}}},{"type":"boolean"}]},"face_boxes_url":{"type":"string"},"occlusion_detection_enabled":{"type":"boolean"},"reasoning_enabled":{"type":"boolean"},"refinement_enabled":{"type":"boolean"},"blending_mode":{"type":"string","enum":["default","advanced","disabled"]},"output_file_name":{"type":"string"},"output_bucket_name":{"type":"string"},"output_bucket_path":{"type":"string"},"disable_blending":{"type":"boolean"},"pad_percent":{"type":"number"},"mask_uri":{"type":"string"},"mask_inner_box":{"anyOf":[{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"type":"null"}]},"audio_guidance_scale":{"type":["number","null"]},"num_steps":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"use_retinaface":{"type":"boolean"},"use_insightface":{"type":"boolean"},"disable_scene_detection":{"type":"boolean"},"extra_services_options":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ProjectDto__schema0"}},"original_audio_url":{"type":"string"},"occlusion_prompt":{"type":"string"},"rotate":{"type":"number","minimum":0,"maximum":360},"active_speaker":{"type":"boolean"},"speedup":{"anyOf":[{"type":"number","minimum":1,"maximum":4},{"type":"null"}]},"output_format":{"type":"string","enum":["mp4","mov"]},"fps":{"type":["number","null"]},"output_resolution":{"anyOf":[{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},{"type":"null"}]},"pads":{"minItems":4,"maxItems":4,"type":"array","items":{"type":"number","minimum":-8000,"maximum":8000}},"gb":{"type":["number","null"]},"mb":{"type":["number","null"]},"quality":{"type":["string","null"]},"img_size":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]},"pickle_mode":{"type":["string","null"]},"cf_batch_size":{"type":["number","null"]},"resize_factor":{"type":["number","null"]},"expressiveness":{"type":["number","null"]},"inp_batch_size":{"type":["number","null"]},"fidelity_weight":{"type":["number","null"]},"wav2lip_batch_size":{"type":["number","null"]},"face_det_batch_size":{"type":["number","null"]}}}},"required":["id","name","description","model","modelName","options"]}}},"required":["id","createdAt","updatedAt","organizationId","userId","name","description","visibility","deletedAt","mode","generations","generationPresets"]},"AttachProjectAssetDto":{"type":"object","properties":{"assetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["assetId"]},"UpdateProjectDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"visibility":{"type":"string","enum":["USER","ORGANIZATION"]},"mode":{"type":"string","enum":["CREATOR","DEVELOPER"]}}},"StudioDraftDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"appliedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"editable":{"type":"boolean"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"state":{"type":"object","properties":{"workflow":{"type":"string","enum":["lipsync","translate_and_dub","image_to_video","edit_dialogue"]},"visualId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"audioId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"derivedAudioVisualId":{"default":null,"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"audioRemoved":{"default":false,"type":"boolean"},"parentGenerationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"model":{"type":"string","minLength":1,"maxLength":100},"options":{"type":"object","properties":{"sync_mode":{"type":"string","enum":["cut_off","bounce","loop","silence","remap"]},"temperature":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"active_speaker_detection":{"anyOf":[{"type":"object","properties":{"auto_detect":{"default":false,"type":"boolean"},"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"number"},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},"bounding_boxes":{"type":"array","items":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}}},{"type":"boolean"}]},"occlusion_detection_enabled":{"type":"boolean"},"reasoning_enabled":{"type":"boolean"},"model_mode":{"type":"string"}},"additionalProperties":false},"targetLang":{"type":"string","maxLength":20},"sourceLang":{"type":"string","maxLength":20},"speech":{"type":"object","properties":{"text":{"type":"string","maxLength":5000},"voiceId":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"stability":{"type":"number","minimum":0,"maximum":1},"similarityBoost":{"type":"number","minimum":0,"maximum":1}},"required":["text","voiceId","stability","similarityBoost"],"additionalProperties":false}},"required":["workflow","visualId","audioId","model","options","targetLang","sourceLang","speech"],"additionalProperties":false}},"required":["id","projectId","revision","appliedRevision","editable","updatedAt","state"]},"SaveStudioDraftDto":{"type":"object","properties":{"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"editable":{"type":"boolean"},"state":{"type":"object","properties":{"workflow":{"type":"string","enum":["lipsync","translate_and_dub","image_to_video","edit_dialogue"]},"visualId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"audioId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"derivedAudioVisualId":{"default":null,"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"audioRemoved":{"default":false,"type":"boolean"},"parentGenerationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"model":{"type":"string","minLength":1,"maxLength":100},"options":{"type":"object","properties":{"sync_mode":{"type":"string","enum":["cut_off","bounce","loop","silence","remap"]},"temperature":{"anyOf":[{"type":"number","minimum":0,"maximum":1},{"type":"null"}]},"active_speaker_detection":{"anyOf":[{"type":"object","properties":{"auto_detect":{"default":false,"type":"boolean"},"use_v2":{"type":"boolean"},"v3":{"type":"boolean"},"frame_number":{"type":"number"},"coordinates":{"minItems":2,"maxItems":2,"type":"array","items":{"type":"number"}},"bounding_boxes":{"type":"array","items":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"null"}]}},"bounding_boxes_url":{"type":"string"},"face_image":{"type":"string"}}},{"type":"boolean"}]},"occlusion_detection_enabled":{"type":"boolean"},"reasoning_enabled":{"type":"boolean"},"model_mode":{"type":"string"}},"additionalProperties":false},"targetLang":{"type":"string","maxLength":20},"sourceLang":{"type":"string","maxLength":20},"speech":{"type":"object","properties":{"text":{"type":"string","maxLength":5000},"voiceId":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"stability":{"type":"number","minimum":0,"maximum":1},"similarityBoost":{"type":"number","minimum":0,"maximum":1}},"required":["text","voiceId","stability","similarityBoost"],"additionalProperties":false}},"required":["workflow","visualId","audioId","model","options","targetLang","sourceLang","speech"],"additionalProperties":false}},"required":["expectedRevision","editable","state"],"additionalProperties":false},"AcknowledgeStudioDraftDto":{"type":"object","properties":{"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["revision"],"additionalProperties":false},"StudioViewDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"context":{"type":"object","properties":{"projectId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"draftId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"draftRevision":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"editToken":{"type":"string","pattern":"^[a-f0-9]{64}$"},"busy":{"type":"boolean"}},"required":["projectId","draftId","draftRevision","busy"],"additionalProperties":false},"updatedAt":{"type":"number"},"action":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"requestRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"expectedContext":{"type":"object","properties":{"projectId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"draftId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"draftRevision":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"editToken":{"type":"string","pattern":"^[a-f0-9]{64}$"},"busy":{"type":"boolean"}},"required":["projectId","draftId","draftRevision","busy"],"additionalProperties":false},"command":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"open-project"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"workflow":{"type":"string","enum":["lipsync","image_to_video","translate_and_dub","edit_dialogue"]}},"required":["type","projectId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"refresh-project"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","projectId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"refresh-assets"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","projectId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"open-generation"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"generationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","projectId","generationId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"continue-generation"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"generationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"workflow":{"type":"string","enum":["lipsync","image_to_video","translate_and_dub","edit_dialogue"]},"seedSource":{"type":"string","enum":["source-input","output"]}},"required":["type","projectId","generationId","workflow","seedSource"],"additionalProperties":false}]},"expiresAt":{"type":"number"},"status":{"type":"string","enum":["pending","applied","blocked","failed"]},"reason":{"type":"string","enum":["busy","stale","expired","unavailable"]}},"required":["id","requestRevision","expectedContext","command","expiresAt","status"]},{"type":"null"}]}},"required":["id","revision","context","updatedAt","action"]},"RegisterStudioViewDto":{"type":"object","properties":{"mountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"claim":{"default":false,"type":"boolean"},"context":{"type":"object","properties":{"projectId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"draftId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"draftRevision":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"editToken":{"type":"string","pattern":"^[a-f0-9]{64}$"},"busy":{"type":"boolean"}},"required":["projectId","draftId","draftRevision","busy"],"additionalProperties":false}},"required":["mountId","context"],"additionalProperties":false},"RequestStudioViewActionDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"command":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"open-project"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"workflow":{"type":"string","enum":["lipsync","image_to_video","translate_and_dub","edit_dialogue"]}},"required":["type","projectId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"refresh-project"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","projectId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"refresh-assets"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","projectId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"open-generation"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"generationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","projectId","generationId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"continue-generation"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"generationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"workflow":{"type":"string","enum":["lipsync","image_to_video","translate_and_dub","edit_dialogue"]},"seedSource":{"type":"string","enum":["source-input","output"]}},"required":["type","projectId","generationId","workflow","seedSource"],"additionalProperties":false}]}},"required":["id","expectedRevision","command"],"additionalProperties":false},"AcknowledgeStudioViewDto":{"type":"object","properties":{"mountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["applied","blocked","failed"]},"reason":{"type":"string","enum":["busy","stale","expired","unavailable"]},"context":{"type":"object","properties":{"projectId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"draftId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"draftRevision":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"editToken":{"type":"string","pattern":"^[a-f0-9]{64}$"},"busy":{"type":"boolean"}},"required":["projectId","draftId","draftRevision","busy"],"additionalProperties":false}},"required":["mountId","id","status"],"additionalProperties":false},"CreateBatchJsonDto":{"type":"object","properties":{"webhook_url":{"type":"string","description":"Webhook server URL to notify when the batch reaches a terminal status. Sync sends a POST request with a batch payload, a Sync-Signature header (`t=<unix>,v1=<hmac_sha256>`), and a stable Sync-Delivery-Id header. Delivery is attempted up to six times with a bounded per-attempt timeout (10 seconds by default); retryable responses may provide Retry-After. The signature uses the organization webhook secret.","example":"https://example.com/webhook"},"dry_run":{"type":"boolean","default":false,"description":"When true, validates the batch input and returns `{ \"status\": \"VALIDATED\" }` without creating a batch."},"rows":{"description":"Batch rows in submission order, one per generation. Each row has the same shape as one line of the multipart JSONL file and is validated the same way; error messages cite `line N` for `rows[N-1]`. Requires at least 20 rows, at most 500 rows by default, unique `request_id` values, and at most 5 MB when serialized as JSONL (one compact JSON object per line).","minItems":20,"type":"array","items":{"$ref":"#/components/schemas/BatchRowDto"}}},"required":["rows"]},"CreateBatchDto":{"type":"object","properties":{"input":{"type":"string","description":"JSONL file for batch generation. Send it in multipart field `input` (or `file` alias). Each non-empty line must contain `request_id`, `endpoint` exactly `\"/v2/generate\"`, and `payload` as a CreateGenerationDto object. Batch creation requires the Scale plan, at least 20 records, at most 500 records by default, no duplicate request_id values, and a file size no larger than 5 MB.","format":"binary"},"webhook_url":{"type":"string","description":"Webhook server URL to notify when the batch reaches a terminal status. Sync sends a POST request with a batch payload, a Sync-Signature header (`t=<unix>,v1=<hmac_sha256>`), and a stable Sync-Delivery-Id header. Delivery is attempted up to six times with a bounded per-attempt timeout (10 seconds by default); retryable responses may provide Retry-After. The signature uses the organization webhook secret.","example":"https://example.com/webhook"},"dry_run":{"type":"boolean","default":false,"description":"When true, validates the batch input and returns `{ \"status\": \"VALIDATED\" }` without creating a batch."}},"required":["input"]},"BatchConcurrencyLimitErrorDto":{"type":"object","properties":{"statusCode":{"enum":[429],"type":"number","example":429},"error":{"type":"string","enum":["Too Many Requests"],"example":"Too Many Requests"},"errorCode":{"type":"string","enum":["concurrency_limit_reached"],"example":"concurrency_limit_reached","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Human-readable explanation of the active batch limit.","example":"Batch concurrency limit reached. You have 3 active batches and your plan allows 3. Please wait for existing batches to complete or upgrade your plan for higher limits."},"activeBatches":{"type":"number","description":"Number of active batches in the organization.","example":3,"minimum":0},"concurrencyLimit":{"type":"number","description":"Maximum number of concurrent batches allowed by the plan.","example":3,"minimum":1},"retryAfterSeconds":{"type":"number","description":"Suggested seconds to wait before retrying. Also sent in the Retry-After response header.","example":20,"minimum":1}},"required":["statusCode","error","errorCode","message","activeBatches","concurrencyLimit","retryAfterSeconds"]},"AccountOverviewDto":{"type":"object","properties":{"account":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"email":{"type":["string","null"]},"name":{"type":["string","null"]}},"required":["id","email","name"]},{"type":"null"}],"description":"The user this credential acts for: the signed-in user for sessions and OAuth tokens, or the API key owner. Null for an API key that has no owner."},"organization":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":["string","null"]},"role":{"type":"string","description":"Role the credential acts with: owner, admin or member. API keys always act as member."}},"required":["id","name","role"],"description":"The organization every request with this credential acts in."},"credentialType":{"type":"string","enum":["api_key","oauth","session"],"description":"api_key: an x-api-key header. oauth: an access token issued to a connected app such as an MCP client. session: a Studio sign-in (cookie or plugin bearer token)."},"plan":{"type":"object","properties":{"id":{"type":"string","enum":["free","creator","scale","growth","hobbyist","enterprise","program","partner","hobby","starter","pro","team"],"description":"Stable plan identifier. free means no paid plan."},"name":{"type":"string","description":"Plan name to show a person."}},"required":["id","name"],"description":"Current plan."},"billingModel":{"type":"string","enum":["credits","usage","free","enterprise"],"description":"How generations are paid for, which decides how to recover from a 402. credits: prepaid credits; top up, turn on auto top-up or upgrade at billingUrl. usage: usage is metered and invoiced; pay the open invoice or update the payment method at billingUrl. Usage-based organizations cannot top up. free: a monthly free allowance; upgrade to a paid plan at billingUrl. enterprise: negotiated billing (enterprise, partner and program plans, including pilots); contact your sync. account team."},"limits":{"type":"object","properties":{"concurrency":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Lipsync generations that can run at once. Further submissions get 429 concurrency_limit_reached until one finishes."},"maxOutputDurationSeconds":{"type":"number","description":"Longest output a generation may produce on this plan, in seconds. Some models have a lower limit (GET /v2/models)."},"maxFileSizeBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Largest input file the plan accepts, in bytes."},"voiceClones":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cloned voices the organization can keep at once."}},"required":["concurrency","maxOutputDurationSeconds","maxFileSizeBytes","voiceClones"],"description":"Current plan limits, including organization overrides."},"activeJobs":{"type":"object","properties":{"generations":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"In-flight video lipsync generations. Compare with limits.concurrency; batch generations are included here but do not count toward it."},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"All in-flight jobs, including dubbing and text-to-speech. Not a limit."}},"required":["generations","total"],"description":"Jobs pending or processing right now. May be up to a few seconds stale."},"credits":{"anyOf":[{"type":"object","properties":{"available":{"type":"number","description":"Credits that can be spent now: the balance minus credits reserved by in-flight jobs. 1 credit = $0.01."},"periodGrant":{"type":"number","description":"Credits the plan grants each billing period."},"autoTopUp":{"type":"boolean","description":"Whether credits are bought automatically when the balance runs low."}},"required":["available","periodGrant","autoTopUp"]},{"type":"null"}],"description":"Prepaid credit balance when billingModel is credits; null otherwise."},"billingPeriod":{"type":"object","properties":{"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["start","end"],"description":"Current billing period. Without a subscription this is the calendar month."},"freeAllowance":{"anyOf":[{"type":"object","properties":{"generations":{"type":"object","properties":{"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Uses counted in the current free month."},"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Uses included each free month."},"remaining":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Uses left this free month (limit minus used, never below 0)."}},"required":["used","limit","remaining"],"description":"Free lipsync generations. In-flight generations count as used."},"speech":{"type":"object","properties":{"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Uses counted in the current free month."},"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Uses included each free month."},"remaining":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Uses left this free month (limit minus used, never below 0)."}},"required":["used","limit","remaining"],"description":"Free text-to-speech and dubbing jobs, which share one pool."},"resetsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the free month resets. It is anchored to the day the organization was created."}},"required":["generations","speech","resetsAt"]},{"type":"null"}],"description":"Free monthly allowance when billingModel is free; null otherwise."},"billingUrl":{"type":"string","format":"uri","description":"Studio billing page where a person can change plan, pay, top up or update the payment method. Send a person here; it needs a signed-in browser."}},"required":["account","organization","credentialType","plan","billingModel","limits","activeJobs","credits","billingPeriod","freeAllowance","billingUrl"]},"CreateDialogueEditDto":{"type":"object","properties":{"transcript":{"type":"object","properties":{"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"words":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string","minLength":1},"speakerId":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]},"startMs":{"type":"integer","minimum":0,"maximum":9007199254740991},"endMs":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","text","startMs","endMs"]}}},"required":["id","words"]}},"speakers":{"maxItems":256,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128},"displayOrder":{"type":"integer","minimum":0,"maximum":9007199254740991},"label":{"type":"string","minLength":1,"maxLength":128},"providerSpeakerId":{"type":"string","maxLength":128}},"required":["id","displayOrder","label"]}},"speakerCount":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["segments","speakerCount"],"description":"The transcript the edits refer to, as returned by GET /v2/transcriptions/{id}. Edits name words by their `id` in this transcript. Word timings are in milliseconds from the start of the source video."},"edits":{"type":"array","minItems":1,"maxItems":100,"items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"change"},"wordId":{"type":"string"},"replacement":{"type":"string","minLength":1,"maxLength":500},"pronunciation":{"description":"Optional. How the voice should say `replacement`, written as a plain-text respelling, for a name or word it would otherwise mispronounce. The voice speaks this text instead of `replacement`; the transcripts and edits on the job keep `replacement`, and punctuation at the end of `replacement` still shapes the intonation. Example: `{ \"kind\": \"change\", \"wordId\": \"w35\", \"replacement\": \"Mia\", \"pronunciation\": \"Meeah\" }`. 1 to 100 characters of letters, spaces, hyphens, apostrophes, and periods, with at least one letter. Accepted on `change` edits only.","type":"string","minLength":1,"maxLength":100}},"required":["kind","wordId","replacement"]},{"type":"object","properties":{"kind":{"type":"string","const":"remove"},"wordIds":{"minItems":1,"type":"array","items":{"type":"string"}},"pronunciation":{"description":"Not accepted on `remove` edits: a removal says nothing. Sending it returns 400.","not":{}}},"required":["kind","wordIds"]}]},"description":"The edits to apply: `change` replaces one word (`wordId`, `replacement`, and an optional `pronunciation` respelling for the voice), `remove` cuts a contiguous run of words (`wordIds`). Between 1 and 100 edits per job; more is refused with a 400 and `errorCode` `dialogue_edit_too_many_edits`."},"sourceVideoUrl":{"type":"string","format":"uri","description":"URL of the source video the transcript was made from, hosted in sync. storage (upload it via POST /v2/assets/upload first)."},"transcriptionJobId":{"type":"string","description":"The transcription job this edit is based on. Send it so the edit and the transcript agree on the source.","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startMs":{"type":"integer","default":0,"description":"Start of the edited window, in milliseconds from the start of the source. Use the same window the transcript was made for. Defaults to 0. API-key requests must leave startMs and endMs unset to cover the whole video.","minimum":0,"maximum":9007199254740991},"endMs":{"type":"integer","description":"End of the edited window, in milliseconds from the start of the source. Omit to run to the end. The window cannot exceed 10 minutes. API-key requests must leave startMs and endMs unset to cover the whole video.","exclusiveMinimum":0,"maximum":9007199254740991},"voiceId":{"type":"string","description":"Opaque voice id returned as `voiceId` by an earlier dialogue-edit job of the same source. Reusing it skips cloning the voice again. Omit on the first job for a source. Ids your organization has not used before are ignored.","minLength":1,"maxLength":128},"projectId":{"type":"string","description":"Optional id of a project in your organization to file the job under.","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"rerunOfJobId":{"type":"string","description":"Id of the completed dialogue-edit job this request revises, when regenerating a preview after adjusting the edits. Informational lineage only; unknown ids are ignored.","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["transcript","edits","sourceVideoUrl"]},"DialogueEditJobDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Job id. Poll GET /v2/dialogue-edits/{id} with it."},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","COMPLETED_PARTIAL","FAILED"],"description":"Job status. `COMPLETED`, `COMPLETED_PARTIAL` and `FAILED` are terminal. `COMPLETED_PARTIAL` means the preview is playable but shipped without something that was requested; treat it as completed."},"sourceVideoUrl":{"type":"string","description":"The source video the job was created from."},"sourceStartMs":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Start of the edited window, in source milliseconds."},"sourceEndMs":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"End of the edited window, in source milliseconds. Null when the job runs to the end of the source."},"previewAudioUrl":{"description":"Hosted WAV of the edited audio for the whole window: the original recording with only the edited spans re-synthesized. Null until the job completes.","anyOf":[{"type":"string"},{"type":"null"}]},"previewAssetId":{"deprecated":true,"description":"Always null. To lipsync a preview, pass its id as `dialogueEdit: { id }` on POST /v2/generate.","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"previewDurationMs":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Length of the preview audio in milliseconds. Differs from the window length by however much the edits grew or shrank it. Null until the job completes."},"sourceTranscript":{"anyOf":[{"type":"object","properties":{"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"words":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string","minLength":1},"speakerId":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]},"startMs":{"type":"integer","minimum":0,"maximum":9007199254740991},"endMs":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","text","startMs","endMs"]}}},"required":["id","words"]}},"speakers":{"maxItems":256,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128},"displayOrder":{"type":"integer","minimum":0,"maximum":9007199254740991},"label":{"type":"string","minLength":1,"maxLength":128},"providerSpeakerId":{"type":"string","maxLength":128}},"required":["id","displayOrder","label"]}},"speakerCount":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["segments","speakerCount"]},{"type":"null"}],"description":"The transcript the edits were made against, exactly as submitted. Returned in every status."},"edits":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"change"},"wordId":{"type":"string"},"replacement":{"type":"string","minLength":1,"maxLength":500},"pronunciation":{"description":"Optional. How the voice should say `replacement`, written as a plain-text respelling, for a name or word it would otherwise mispronounce. The voice speaks this text instead of `replacement`; the transcripts and edits on the job keep `replacement`, and punctuation at the end of `replacement` still shapes the intonation. Example: `{ \"kind\": \"change\", \"wordId\": \"w35\", \"replacement\": \"Mia\", \"pronunciation\": \"Meeah\" }`. 1 to 100 characters of letters, spaces, hyphens, apostrophes, and periods, with at least one letter. Accepted on `change` edits only.","type":"string","minLength":1,"maxLength":100}},"required":["kind","wordId","replacement"]},{"type":"object","properties":{"kind":{"type":"string","const":"remove"},"wordIds":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["kind","wordIds"]}]},"description":"The edits that were applied, exactly as submitted."},"resultTranscript":{"anyOf":[{"type":"object","properties":{"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"words":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string","minLength":1},"speakerId":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]},"startMs":{"type":"integer","minimum":0,"maximum":9007199254740991},"endMs":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","text","startMs","endMs"]}}},"required":["id","words"]}},"speakers":{"maxItems":256,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128},"displayOrder":{"type":"integer","minimum":0,"maximum":9007199254740991},"label":{"type":"string","minLength":1,"maxLength":128},"providerSpeakerId":{"type":"string","maxLength":128}},"required":["id","displayOrder","label"]}},"speakerCount":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["segments","speakerCount"]},{"type":"null"}],"description":"The transcript as it reads after the edits, with every word timed against the preview audio. Null until the job completes."},"resultSlots":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"outputStartMs":{"type":"integer","minimum":0,"maximum":9007199254740991},"outputDurationMs":{"type":"integer","minimum":0,"maximum":9007199254740991},"sourceStartMs":{"type":"integer","minimum":0,"maximum":9007199254740991},"sourceDurationMs":{"type":"integer","minimum":0,"maximum":9007199254740991},"kind":{"type":"string","enum":["change","removal","silence"]},"seed":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"attempts":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"tempo":{"type":"number","exclusiveMinimum":0},"speed":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"takeGainDb":{"type":"number"},"eqApplied":{"type":"boolean"},"fadeInMs":{"type":"integer","minimum":0,"maximum":9007199254740991},"fadeOutMs":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["outputStartMs","outputDurationMs","kind"]}},{"type":"null"}],"description":"The edited regions in order, each located on the preview timeline (`outputStartMs`, `outputDurationMs`) and in the source video (`sourceStartMs`, `sourceDurationMs`). Everything between two slots is untouched source. Null until the job completes."},"segmentLipsyncEnabled":{"type":"boolean","description":"Whether the preview was cut for per-region lipsync (true) or for re-lipsyncing the whole window (false). Decided when the job is created and fixed for its lifetime. For jobs created with an API key, the rollout is evaluated against the organization's members."},"sectionExpansionEnabled":{"type":"boolean","description":"Whether the preview was made under the section-expansion policy. Decided when the job is created and fixed for its lifetime. For jobs created with an API key, the rollout is evaluated against the organization's members."},"voiceId":{"description":"Opaque id of the voice cloned from the source and used for synthesis. Pass it as `voiceId` on the next dialogue-edit job of the same source to skip cloning. Null until the voice exists.","anyOf":[{"type":"string"},{"type":"null"}]},"partialDetail":{"description":"What a completed preview shipped without: edited regions that may sound rough, or a background that could not be kept. The preview is playable either way. Null or absent when nothing was missed, and until the job completes.","anyOf":[{"type":"object","properties":{"slotsTotal":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"How many edited regions the preview has."},"slotsOk":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"How many of them passed the quality checks."},"failedSlots":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Index of the region in `resultSlots`."},"errorCode":{"type":"string","description":"Why the region may sound rough: `QC_SEAM_STEP` (an audible level jump where the region meets the original audio), `QC_DIGITAL_BLACK` (a stretch of dead silence inside the region), `TAKE_OUTLIERS` (no synthesized take matched the speaker closely), or `QC_NO_ROOM_TONE` (dead silence in the region because the source has no clean background stretch to fill its pauses with; not retried). New codes may be added."}},"required":["index","errorCode"]},"description":"Edited regions that shipped with a detected defect, after one automatic retry where a retry could help. The preview still plays; regenerating it or rewording the edit may help."},"reason":{"description":"`background_bed_missing`: the background was requested but the preview shipped with the speech alone.","type":"string","enum":["background_bed_missing"]}},"required":["slotsTotal","slotsOk","failedSlots"]},{"type":"null"}]},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","enum":["EXTRACTION_FAILED","VOICE_CLONE_FAILED","VOICE_SAMPLE_TOO_SHORT","VOICE_BLOCKED","VOICE_VERIFICATION_REQUIRED","SYNTHESIS_FAILED","EDIT_TOO_LONG","SOURCE_TOO_LONG","PLAN_FAILED","TIMEOUT","UNKNOWN"],"description":"Machine-readable failure code. `EDIT_TOO_LONG`, `SOURCE_TOO_LONG`, `VOICE_SAMPLE_TOO_SHORT`, `VOICE_BLOCKED`, `VOICE_VERIFICATION_REQUIRED` and `PLAN_FAILED` describe the request and will not succeed on retry."},"message":{"type":"string","description":"Human-readable summary of the failure."},"spanText":{"description":"For `EDIT_TOO_LONG`: the replacement text that does not fit the time its span has to occupy. Shorten it and resubmit.","type":"string"},"wordIds":{"description":"For `EDIT_TOO_LONG`: ids of the words in the submitted transcript that the span replaces, in transcript order. Unedited words regenerated together with the edit are included.","type":"array","items":{"type":"string"}},"speakerId":{"description":"For `VOICE_BLOCKED`: the transcript speaker whose voice the speech provider refuses to clone.","type":"string"}},"required":["code","message"]},{"type":"null"}],"description":"Why the job failed. Null unless `status` is `FAILED`."},"createdAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"startedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]}},"required":["id","status","sourceVideoUrl","sourceStartMs","sourceEndMs","previewAudioUrl","previewDurationMs","sourceTranscript","edits","resultTranscript","resultSlots","segmentLipsyncEnabled","sectionExpansionEnabled","voiceId","error","createdAt","startedAt","finishedAt"]},"CreateTranscriptionDto":{"type":"object","properties":{"sourceVideoUrl":{"type":"string","description":"URL of the source video, hosted in sync. storage (upload it via POST /v2/assets/upload first). Provide exactly one of `sourceVideoUrl` or `sourceAudioUrl`.","format":"uri"},"sourceAudioUrl":{"type":"string","description":"URL of audio already extracted from the source, hosted in sync. storage. Skips the server-side audio extraction. Provide exactly one of `sourceVideoUrl` or `sourceAudioUrl`.","format":"uri"},"startMs":{"type":"integer","default":0,"description":"Start of the window to transcribe, in milliseconds from the start of the source. Defaults to 0.","minimum":0,"maximum":9007199254740991},"endMs":{"type":"integer","description":"End of the window to transcribe, in milliseconds from the start of the source. Omit to transcribe to the end. The window cannot exceed 60 minutes.","exclusiveMinimum":0,"maximum":9007199254740991},"maxSourceSeconds":{"type":"integer","description":"Refuse the source if it is longer than this many seconds. Useful when a later step, such as a dialogue edit (10 minute window), cannot consume a longer transcript. Cannot exceed the endpoint ceiling of 3600 seconds.","exclusiveMinimum":0,"maximum":3600},"projectId":{"type":"string","description":"Optional id of a project in your organization to file the job under.","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"TranscriptionJobDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Job id. Poll GET /v2/transcriptions/{id} with it."},"revision":{"description":"Content hash of the source and transcript this job produced. Present once the job has a transcript.","type":"string","pattern":"^[a-f0-9]{64}$"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED"],"description":"Job status. `COMPLETED` and `FAILED` are terminal."},"sourceVideoUrl":{"description":"The source video the job was created from. Null for jobs created from `sourceAudioUrl`.","anyOf":[{"type":"string"},{"type":"null"}]},"sourceStartMs":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Start of the transcribed window, in source milliseconds."},"sourceEndMs":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"End of the transcribed window, in source milliseconds. Null when the job transcribes to the end of the source."},"transcript":{"anyOf":[{"type":"object","properties":{"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"words":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string","minLength":1},"speakerId":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]},"startMs":{"type":"integer","minimum":0,"maximum":9007199254740991},"endMs":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","text","startMs","endMs"]}}},"required":["id","words"]}},"speakers":{"maxItems":256,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128},"displayOrder":{"type":"integer","minimum":0,"maximum":9007199254740991},"label":{"type":"string","minLength":1,"maxLength":128},"providerSpeakerId":{"type":"string","maxLength":128}},"required":["id","displayOrder","label"]}},"speakerCount":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["segments","speakerCount"]},{"type":"null"}],"description":"Word-level transcript. Word timings are in milliseconds from the start of the source video, not the window. Null until `status` is `COMPLETED`."},"speakerCount":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Number of distinct speakers detected. Dialogue edits currently support a single speaker; a count above 1 completes the job but a dialogue edit of that source is unsupported. Null until `status` is `COMPLETED`."},"difficulty":{"anyOf":[{"type":"object","properties":{"tier":{"type":"string","enum":["green","yellow","red"]},"reasons":{"type":"array","items":{"type":"string","enum":["MULTI_SPEAKER","LOW_ASR_CONFIDENCE","LOW_SPLICE_OPPORTUNITY","FAST_VARIABLE_RATE","LOW_AUDIO_QUALITY","VERY_SHORT_SOURCE","VERY_LONG_SOURCE","LOW_AUDIO_BANDWIDTH"]}}},"required":["tier","reasons"]},{"type":"null"}],"description":"Informational estimate of how hard the source is to edit cleanly, with the reasons behind it. Null while the job is running and for some older jobs. Do not gate behaviour on it."},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","enum":["NO_AUDIO","NO_AUDIO_TRACK","SOURCE_TOO_LONG","EXTRACTION_FAILED","PROVIDER_FAILED","TIMEOUT","UNKNOWN"],"description":"Machine-readable failure code. `NO_AUDIO`, `NO_AUDIO_TRACK` and `SOURCE_TOO_LONG` describe the source and will not succeed on retry."},"message":{"type":"string","description":"Human-readable summary of the failure."}},"required":["code","message"]},{"type":"null"}],"description":"Why the job failed. Null unless `status` is `FAILED`."},"createdAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"startedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},{"type":"null"}]}},"required":["id","status","sourceVideoUrl","sourceStartMs","sourceEndMs","transcript","speakerCount","difficulty","error","createdAt","startedAt","finishedAt"]},"CreateDraftDto":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"assetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"generationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"requestKey":{"type":"string","minLength":1,"maxLength":128},"title":{"type":"string","minLength":1,"maxLength":200}},"required":["requestKey"],"additionalProperties":false},"DraftDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"assetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string"},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reviewRevisionId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"originGenerationId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"state":{"$ref":"#/components/schemas/DubbingDraftState"}},"required":["id","projectId","assetId","title","version","reviewRevisionId","originGenerationId","updatedAt","state"]},"DraftListDto":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"assetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string"},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reviewRevisionId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"originGenerationId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","projectId","assetId","title","version","reviewRevisionId","originGenerationId","updatedAt"]}},"nextCursor":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]}},"required":["items","nextCursor"]},"UpdateDraftDto":{"type":"object","properties":{"expectedVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"state":{"$ref":"#/components/schemas/DubbingDraftState"},"title":{"type":"string","minLength":1,"maxLength":200},"publishReview":{"type":"boolean"}},"required":["expectedVersion","state"],"additionalProperties":false},"ImportDraftAnalysisDto":{"type":"object","properties":{"analysisRunId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"expectedVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["analysisRunId","expectedVersion"],"additionalProperties":false},"PrepareReviewAudioDto":{"type":"object","properties":{"expectedVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"targetLang":{"type":"string","pattern":"^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$"},"sourceLang":{"type":"string","pattern":"^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$"},"requestKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["expectedVersion","targetLang","requestKey"],"additionalProperties":false},"ReviewAudioJobDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","status","error"]},"ReviewProductionDto":{"type":"object","properties":{"audio":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string"},"error":{"type":["string","null"]}},"required":["id","status","error"]},{"type":"null"}]},"takes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"dialogueId":{"type":"string"},"url":{"type":"string","format":"uri"},"start":{"type":"number"},"end":{"type":"number"}},"required":["id","dialogueId","url","start","end"]}},"render":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string"},"phase":{"anyOf":[{"type":"string","enum":["preparing","matching","preserving","finishing"]},{"type":"null"}]},"progress":{"anyOf":[{"type":"object","properties":{"percent":{"type":"number","minimum":0,"maximum":100},"completedTasks":{"type":"integer","minimum":0,"maximum":9007199254740991},"runningTasks":{"type":"integer","minimum":0,"maximum":9007199254740991},"waitingTasks":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["percent","completedTasks","runningTasks","waitingTasks"]},{"type":"null"}]},"outputUrl":{"type":["string","null"]},"error":{"type":["string","null"]}},"required":["id","status","phase","outputUrl","error"]},{"type":"null"}]}},"required":["audio","takes","render"]},"RequestAnalysisDto":{"type":"object","properties":{"requestKey":{"type":"string","minLength":1,"maxLength":128},"components":{"minItems":1,"maxItems":2,"type":"array","items":{"type":"string","enum":["asd","transcript"]}}},"required":["requestKey","components"],"additionalProperties":false},"AnalysisAcceptedDto":{"type":"object","properties":{"analysisRunId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","PARTIAL","FAILED"]}},"required":["analysisRunId","status"]},"AnalysisResultDto":{"type":"object","properties":{"analysisRunId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","PARTIAL","FAILED"]},"components":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED"]},"error":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","minLength":1,"maxLength":100},"message":{"type":"string","maxLength":1000},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false},{"type":"null"}]},"resultUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["status","error","resultUrl"],"additionalProperties":false}}},"required":["analysisRunId","status","components"]},"ErrorCatalogEntryDto":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"suggestion":{"type":"string"}},"required":["code","message","suggestion"]},"VoiceDto":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"internalVoiceId":{"anyOf":[{"type":"string"},{"type":"null"}]},"voiceId":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"provider":{"type":"string","enum":["elevenlabs"]},"previewUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"restriction":{"anyOf":[{"type":"string","enum":["verification_required","blocked"]},{"type":"null"}]}},"required":["provider"]},"CreateVoiceDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"provider":{"type":"string","enum":["elevenlabs"]},"url":{"type":"string","format":"uri"},"assetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"sampleUrls":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"string","format":"uri"}}},"required":["name","provider"],"allOf":[{"oneOf":[{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]},{"type":"object","properties":{"assetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["assetId"]},{"type":"object","properties":{"sampleUrls":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"string","format":"uri"}}},"required":["sampleUrls"]}]}]},"ClonedVoiceDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"voiceId":{"type":"string"},"name":{"type":"string"}},"required":["id","voiceId","name"]},"DialogueEditRetimeFailureSectionDto":{"type":"object","properties":{"slotIndex":{"type":"integer","minimum":0,"maximum":9007199254740991},"sourceStartMs":{"type":"integer","minimum":0,"maximum":9007199254740991},"sourceDurationMs":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["slotIndex"]},"ReviewedDubReference":{"type":"object","properties":{"draftId":{"type":"string"},"expectedVersion":{"type":"number"},"targetLang":{"type":"string"}},"required":["draftId","expectedVersion","targetLang"]},"DialogueEditReference":{"type":"object","properties":{"id":{"type":"string","description":"Id of a completed dialogue edit from POST /v2/dialogue-edits.","format":"uuid"}},"required":["id"]},"VideoInputItem":{"type":"object","properties":{"type":{"type":"string","enum":["video"],"example":"video"},"url":{"type":"string","example":"https://assets.sync.so/videos/samples/influencer.mp4","description":"Absolute HTTP(S) URL to a source video. Either `url` or `assetId` is required."},"assetId":{"type":"string","example":"123e4567-e89b-12d3-a456-426614174000","description":"Sync asset ID for a previously uploaded video. Either `url` or `assetId` is required."},"segments_secs":{"type":"array","items":{"type":"array","description":"First number is start time, second number is end time","items":{"type":"number"},"minItems":2,"maxItems":2},"example":[[5,10]],"description":"Start and end time in seconds for each video segment to apply generation to","deprecated":true},"segments_frames":{"type":"array","items":{"type":"array","description":"First number is start frame, second number is end frame","items":{"type":"number"},"minItems":2,"maxItems":2},"example":[[0,25]],"description":"Start and end frames for each video segment to apply generation to","deprecated":true}},"required":["type"],"allOf":[{"anyOf":[{"type":"object","properties":{"url":{"type":"string","example":"https://assets.sync.so/videos/samples/influencer.mp4","description":"Absolute HTTP(S) URL to a source video. Either `url` or `assetId` is required."}},"required":["url"]},{"type":"object","properties":{"assetId":{"type":"string","example":"123e4567-e89b-12d3-a456-426614174000","description":"Sync asset ID for a previously uploaded video. Either `url` or `assetId` is required."}},"required":["assetId"]}]}]},"ImageInputItem":{"type":"object","properties":{"type":{"type":"string","enum":["image"],"example":"image"},"url":{"type":"string","example":"https://example.com/source-image.png","description":"Absolute HTTP(S) URL to a source image. Either `url` or `assetId` is required."},"assetId":{"type":"string","example":"123e4567-e89b-12d3-a456-426614174000","description":"Sync asset ID for a previously uploaded image. Either `url` or `assetId` is required."}},"required":["type"],"allOf":[{"anyOf":[{"type":"object","properties":{"url":{"type":"string","example":"https://example.com/source-image.png","description":"Absolute HTTP(S) URL to a source image. Either `url` or `assetId` is required."}},"required":["url"]},{"type":"object","properties":{"assetId":{"type":"string","example":"123e4567-e89b-12d3-a456-426614174000","description":"Sync asset ID for a previously uploaded image. Either `url` or `assetId` is required."}},"required":["assetId"]}]}]},"AudioInputItem":{"type":"object","properties":{"type":{"type":"string","enum":["audio"],"example":"audio"},"refId":{"type":"string","description":"Reference id used by `segments[].audioInput.refId` or `speakers[].audio.refId` when a generation has more than one audio or text input.","example":"line-a"},"url":{"type":"string","example":"https://assets.sync.so/audios/samples/re-record.mp3","description":"Absolute HTTP(S) URL to a source audio file. Either `url` or `assetId` is required."},"assetId":{"type":"string","example":"123e4567-e89b-12d3-a456-426614174000","description":"Sync asset ID for a previously uploaded audio file. Either `url` or `assetId` is required."}},"required":["type"],"allOf":[{"anyOf":[{"type":"object","properties":{"url":{"type":"string","example":"https://assets.sync.so/audios/samples/re-record.mp3","description":"Absolute HTTP(S) URL to a source audio file. Either `url` or `assetId` is required."}},"required":["url"]},{"type":"object","properties":{"assetId":{"type":"string","example":"123e4567-e89b-12d3-a456-426614174000","description":"Sync asset ID for a previously uploaded audio file. Either `url` or `assetId` is required."}},"required":["assetId"]}]}]},"TextInputItem":{"type":"object","properties":{"type":{"type":"string","enum":["text"],"example":"text"},"refId":{"type":"string","description":"Reference id used by `segments[].audioInput.refId` or `speakers[].audio.refId` when a generation has more than one audio or text input.","example":"line-a"},"provider":{"description":"Integration provider","allOf":[{"$ref":"#/components/schemas/ProviderItem"}]}},"required":["type","provider"]},"GenerationOptions":{"type":"object","properties":{"prompt":{"type":"string","description":"Prompt for the generation. For appearence-1, this is the appearance edit instruction sent with the video and reference images.","example":"add a red hat to the speaker"},"prompt_image_uris":{"description":"Reference image URLs for appearance editing generations. API consumers can pass direct reference images here, or pass the imageUrl returned by POST /v2/appearence/preview.","example":["https://example.com/appearance-preview.png"],"maxItems":10,"type":"array","items":{"type":"string"}},"i2v_prompt":{"type":"string","description":"Prompt for image-to-video generation. Defaults to none.","example":"make the subject smile and look at the camera"},"model_mode":{"type":"string","enum":["lips","face","head"],"example":"face","description":"mode of the model to use for animation.","default":"face"},"temperature":{"type":"number","example":0.5,"description":"generation temperature randomness between 0 and 1. note: only works for lipsync-2 based models."},"sync_mode":{"type":"string","enum":["cut_off","bounce","loop","silence","remap"],"example":"bounce","description":"lipsync mode when audio and video durations are out of sync.","default":"bounce"},"reasoning_enabled":{"type":"boolean","description":"Whether to analyze and correct frames with artifacts, occlusions, or extreme poses during generation, slows down generation speed.","default":false},"refinement_enabled":{"type":"boolean","example":false,"description":"Whether to enable the refinement pass for the generation.","default":false},"blending_mode":{"enum":["default","advanced","disabled"],"type":"string","example":"default","description":"Controls how blending is applied during generation.","default":"default"},"active_speaker_detection":{"description":"Active speaker detection configuration","allOf":[{"$ref":"#/components/schemas/ActiveSpeaker"}]},"face_boxes_url":{"type":"string","example":"https://example.com/face-boxes.json","description":"URL for precomputed face bounding boxes."},"occlusion_detection_enabled":{"type":"boolean","example":true,"description":"Whether to detect occlusion during generation, slows down generation speed."},"output_bucket_name":{"type":"string","example":"my-bucket","description":"Name of the output bucket"},"active_speaker":{"type":"boolean","example":true,"description":"Whether to detect active speaker and apply generation to them.","deprecated":true},"pads":{"example":[0,5,0,0],"description":"Padding values","default":[0,5,0,0],"deprecated":true,"type":"array","items":{"type":"number"}},"speedup":{"type":"number","enum":[1,2,3,4],"example":1,"description":"downscale inputs for faster generations. used to preview changes.","deprecated":true},"output_format":{"type":"string","enum":["mp4","mov"],"example":"mp4","description":"format of the output media that is generated.","default":"mp4","deprecated":true},"fps":{"type":"number","example":25,"description":"Frames per second (FPS) for the output video","deprecated":true},"output_resolution":{"example":[1280,720],"description":"Resolution of the output video [width, height]","deprecated":true,"type":"array","items":{"type":"string"}}}},"GenerationSegmentItem":{"type":"object","properties":{"startTime":{"type":"number","description":"Segment start time in seconds"},"endTime":{"type":"number","description":"Segment end time in seconds"},"startFrame":{"type":"number","description":"Segment start frame (0-indexed)"},"endFrame":{"type":"number","description":"Segment end frame (0-indexed)"},"audioInput":{"description":"Audio Input for this segment","allOf":[{"$ref":"#/components/schemas/SegmentAudioItem"}]}},"required":["audioInput"]},"GenerationSpeakerItem":{"type":"object","properties":{"id":{"type":"string","description":"Unique speaker id containing letters, digits, underscores or hyphens. The id default is reserved."},"audio":{"description":"Audio/text input reference, optionally cropped to match the video duration.","allOf":[{"$ref":"#/components/schemas/SegmentAudioItem"}]},"face":{"description":"Select this speaker explicitly. Automatic speaker detection is not supported.","allOf":[{"$ref":"#/components/schemas/SpeakerSelection"}]}},"required":["id","audio","face"]},"DubDto":{"type":"object","properties":{"providerName":{"type":"string","enum":["elevenlabs"],"description":"Provider to use for dubbing. Defaults to ElevenLabs.","example":"elevenlabs","default":"elevenlabs"},"targetLang":{"type":"string","description":"Target language code for dubbing (e.g., \"es\" for Spanish, \"fr\" for French).","example":"es","enum":["af","ak","sq","am","ar","ar-EG","hy","as","az","eu","be","bs","bg","my","yue","ca","ceb","zh","zh-TW","hr","cs","da","dgo","nl","en","en-AU","en-CA","en-GB","en-US","et","fil","fi","fr","fr-CA","fr-FR","gl","ka","de","el","gu","ha","he","hi","hu","is","id","it","ja","jv","kn","kk","ki","rw","rn","ko","ky","lv","lt","lg","mk","ms","ml","cmn","mr","mn","ne","no","fa","pl","pt","pt-BR","pt-PT","pa","ro","ru","nso","st","sd","sk","sl","es","es-AR","es-CL","es-ES","es-MX","su","sw","ss","sv","tg","ta","te","th","bo","ts","tn","tr","uk","ur","ug","uz","ve","vi","war","cy","wo","yo","zu","doi","tl"]},"sourceLang":{"type":"string","description":"Source language code. Defaults to \"auto\" for automatic detection.","example":"en","default":"auto","enum":["auto","af","ak","sq","am","ar","ar-EG","hy","as","az","eu","be","bs","bg","my","yue","ca","ceb","zh","zh-TW","hr","cs","da","dgo","nl","en","en-AU","en-CA","en-GB","en-US","et","fil","fi","fr","fr-CA","fr-FR","gl","ka","de","el","gu","ha","he","hi","hu","is","id","it","ja","jv","kn","kk","ki","rw","rn","ko","ky","lv","lt","lg","mk","ms","ml","cmn","mr","mn","ne","no","fa","pl","pt","pt-BR","pt-PT","pa","ro","ru","nso","st","sd","sk","sl","es","es-AR","es-CL","es-ES","es-MX","su","sw","ss","sv","tg","ta","te","th","bo","ts","tn","tr","uk","ur","ug","uz","ve","vi","war","cy","wo","yo","zu","doi","tl"]},"numSpeakers":{"type":"number","description":"Deprecated and ignored by Dubbing v2; speaker count is detected automatically.","example":1,"deprecated":true,"default":0,"minimum":0,"maximum":10},"cloningStrength":{"type":"integer","description":"Voice cloning strength for Dubbing v2, from 1 to 10. Higher values preserve more of the source voice. Omit to use provider defaults. Studio starts at 7.","example":7,"minimum":1,"maximum":10}},"required":["targetLang"]},"GenerationEstimateDto":{"type":"object","properties":{"estimatedDurationSeconds":{"type":"number","exclusiveMinimum":0},"estimatedFinishAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"delayedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"supportAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"estimatedAt":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"serverTime":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"calibrationAsOf":{"type":"string","format":"date-time","pattern":"(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$)|(?:^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?:Z))$)"},"estimatorVersion":{"type":"string","minLength":1},"confidence":{"type":"string","enum":["measured","approximate","fallback"]},"source":{"type":"string","enum":["cohort","duration_neighbor","resolution_neighbor","model_pool","global_pool","fallback"]},"sampleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"scope":{"type":"string","enum":["studio","non_studio"]},"durationBand":{"type":"string","minLength":1},"resolutionBand":{"type":"string","minLength":1},"resolutionSource":{"type":"string","enum":["input","requested_output","unknown"]}},"required":["estimatedDurationSeconds","estimatedFinishAt","delayedAt","supportAt","estimatedAt","serverTime","calibrationAsOf","estimatorVersion","confidence","source","sampleCount","scope","durationBand","resolutionBand","resolutionSource"]},"GenerationInputSnapshotDto":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"draftId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"draftVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"reviewRevisionId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"state":{"$ref":"#/components/schemas/DubbingDraftState"}},"required":["schemaVersion","draftId","draftVersion","reviewRevisionId","state"],"additionalProperties":false},"GenerationDto__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/GenerationDto__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/GenerationDto__schema0"}}]},"PaginatedProjectsResponseDto__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/PaginatedProjectsResponseDto__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/PaginatedProjectsResponseDto__schema0"}}]},"ProjectDto__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ProjectDto__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ProjectDto__schema0"}}]},"BatchRowDto":{"type":"object","properties":{"request_id":{"type":"string","description":"Identifier for this row. Must be unique within the batch.","example":"request-1"},"endpoint":{"type":"string","description":"Endpoint the row is submitted to. Only `/v2/generate` is supported.","enum":["/v2/generate"]},"payload":{"description":"Request body for POST /v2/generate.","allOf":[{"$ref":"#/components/schemas/CreateGenerationDto"}]}},"required":["request_id","endpoint","payload"]},"DubbingDraftState":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"source":{"type":"object","properties":{"assetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"fingerprint":{"type":"string","pattern":"^[a-f0-9]{64}$"},"analysisRunId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"analysisEvidenceKey":{"type":"string","maxLength":1024},"speakers":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128},"name":{"type":"string","minLength":1,"maxLength":100}},"required":["id","name"],"additionalProperties":false}},"dialogue":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128},"speakerId":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]},"faceTrackId":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]},"start":{"type":"number","minimum":0},"end":{"type":"number","minimum":0},"text":{"type":"string","maxLength":10000},"reviewed":{"type":"boolean"},"skipped":{"type":"boolean"},"faceAssignments":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"start":{"type":"number","minimum":0},"end":{"type":"number","minimum":0},"faceTrackId":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]},"status":{"type":"string","enum":["detected","manual","offscreen","unresolved"]}},"required":["start","end","faceTrackId","status"],"additionalProperties":false}},"kind":{"type":"string","enum":["speech","silence","unresolved"]},"reviewReasons":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"words":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"text":{"type":"string","maxLength":500},"start":{"type":"number","minimum":0},"end":{"type":"number","minimum":0}},"required":["text","start","end"],"additionalProperties":false}}},"required":["id","speakerId","faceTrackId","start","end","text","reviewed"],"additionalProperties":false}},"faceTracks":{"maxItems":1000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128},"speakerId":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]},"personId":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]},"trackingMode":{"type":"string","enum":["frames","reference"]},"frames":{"maxItems":100000,"type":"array","items":{"type":"object","properties":{"frame":{"type":"integer","minimum":0,"maximum":9007199254740991},"box":{"anyOf":[{"type":"array","prefixItems":[{"type":"number","minimum":0},{"type":"number","minimum":0},{"type":"number","minimum":0},{"type":"number","minimum":0}],"items":false,"minItems":4,"maxItems":4},{"type":"null"}]}},"required":["frame","box"],"additionalProperties":false}}},"required":["id","speakerId","frames"],"additionalProperties":false}},"shots":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"start":{"type":"number","minimum":0},"end":{"type":"number","minimum":0},"startFrame":{"type":"integer","minimum":0,"maximum":9007199254740991},"endFrame":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["start","end"],"additionalProperties":false}}},"required":["assetId","fingerprint","analysisRunId","speakers","dialogue","faceTracks"],"additionalProperties":false},"languages":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$"},"additionalProperties":{"type":"object","properties":{"segments":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"dialogueId":{"type":"string","minLength":1,"maxLength":128},"text":{"type":"string","maxLength":10000},"takeId":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]}},"required":["dialogueId","text","takeId"],"additionalProperties":false}}},"required":["segments"],"additionalProperties":false}},"settings":{"type":"object","properties":{"model":{"type":"string","maxLength":100},"targetLang":{"type":"string","pattern":"^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$"}},"additionalProperties":false}},"required":["schemaVersion","source","languages","settings"],"additionalProperties":false},"ProviderItem":{"type":"object","properties":{"name":{"type":"string","example":"elevenlabs"},"voiceId":{"type":"string","example":"voice123","description":"Sync voice ID (copied from cloned voices in the Studio) or ElevenLabs voice ID. Required."},"script":{"type":"string","example":"make some magic"},"stability":{"type":"number","example":0.5,"description":"Voice stability (0-1). Lower = more expressive, higher = more stable."},"similarityBoost":{"type":"number","example":0.75,"description":"Voice similarity boost (0-1). Lower = more creative, higher = stricter adherence."}},"required":["name","voiceId","script"]},"ActiveSpeaker":{"type":"object","properties":{"auto_detect":{"type":"boolean","default":false,"example":true,"description":"Whether to detect active speaker automatically and apply generation to them."},"use_v2":{"type":"boolean","deprecated":true,"example":true,"description":"Deprecated. ASD v2 is now the default; use v3 to opt into ASD v3."},"v3":{"type":"boolean","example":true,"description":"Whether to use asd v3"},"frame_number":{"type":"number","example":123,"description":"Frame number selected for speaker selection"},"coordinates":{"example":[10,20],"description":"Pixel coordinates [x, y] in the source video frame identified by frame_number. Coordinates are forwarded as-is to active speaker selection; they are not normalized ratios.","type":"array","items":{"type":"number"}},"face_image":{"type":"string","example":"data:image/webp;base64,...","description":"Base64 encoded face image for selected speaker (128x128 WebP)"}}},"SegmentAudioItem":{"type":"object","properties":{"refId":{"type":"string","description":"Reference to an audio input by refId"},"startTime":{"type":"number","description":"Start time (seconds) to crop audio"},"endTime":{"type":"number","description":"End time (seconds) to crop audio"}},"required":["refId"]},"SpeakerSelection":{"type":"object","properties":{"use_v2":{"type":"boolean","deprecated":true,"example":true,"description":"Deprecated. ASD v2 is now the default; use v3 to opt into ASD v3."},"v3":{"type":"boolean","example":true,"description":"Whether to use asd v3"},"frame_number":{"type":"number","example":123,"description":"Frame number selected for speaker selection"},"coordinates":{"example":[10,20],"description":"Pixel coordinates [x, y] in the source video frame identified by frame_number. Coordinates are forwarded as-is to active speaker selection; they are not normalized ratios.","type":"array","items":{"type":"number"}},"face_image":{"type":"string","example":"data:image/webp;base64,...","description":"Base64 encoded face image for selected speaker (128x128 WebP)"},"bounding_boxes_url":{"type":"string","description":"URL of a JSON face track containing one bounding box per video frame."}}}}},"security":[{"apiKey":[]}]}