Copies reuse the source transcript (no new transcription) and start at voice matching and translation; a target equal to the source reuses its dub. Copies inherit the folder, translation instructions and dubbing model; glossaries are set per target. Each copy auto-dubs by default.When to use: after the source finished processing, to add languages without re-transcribing.Side effects: Creates N projects and N project_processing jobs.Cost: N project credits now (0 when unlimited) plus capped auto-dub minutes; a balance below their estimate answers 402. Estimate with estimateProjectCopies.Async: returns 202 with a list of project_processing Jobs (no Location: each job has links.self); wait for each with GET /v3/jobs/{job_id}?wait_seconds=20; typically 5 min (p95 30 min).Idempotency:Idempotency-Key required; a same-key retry within 24 h returns the job’s current state (Idempotent-Replayed: true); after a failed or canceled job, use a new key.Plan: multilanguage; glossary_id -> glossary; auto_dub -> an active subscription.Paid text: a copy’s text stays closed until a dub of that copy is charged (dub_payment_required); a copy that reuses the source’s charged dub is open.Required scopes:projects:write, credits:spendErrors:glossary_not_found (404), project_not_ready (409), feature_not_in_plan (403), target_language_not_supported (422), glossary_language_mismatch (422), cost_changed (409), insufficient_balance (402), too_many_concurrent_jobs (429), prepare_mode_not_enabled (403)
API key from Settings -> API keys, sent as Authorization: Bearer <key> (SDK environment variable RASK_API_KEY). Bound to one workspace and one acting user. Operations list the scopes they need (OpenAPI 3.1 scopes on a bearer scheme).
Required. A unique key per logical request (SDKs send a bare UUIDv4; an RFC 9651 quoted string is accepted and unquoted); reuse it unchanged on retries. Kept 24 h per (workspace, acting user).
Target languages (unique), at most 10 per request (getPlan.limits.max_batch_targets); more answer 422 validation_failed. A target equal to the source reuses its dub.
Cap for the deferred spends (auto-dub after translation). Required unless auto_dub: false is sent (422 validation_failed, errors[].code expected_cost_required). A deferred spend priced above the cap is skipped, uncharged. A cap below the current total fails 409 cost_changed at the request, and too few minutes for it fail 402 insufficient_balance; the skip applies only when the price or balance changes between the request and dispatch.
More items exist (a page may hold fewer than limit items while has_more is true).
{"docsConfig":{"$schema":"https://mintlify.com/docs.json","theme":"mint","name":"Rask AI API","colors":{"primary":"#0B0BCF","light":"#5D5DFF","dark":"#5D5DFF"},"favicon":"https://mintcdn.com/brask/hT_Hdq5wOpSqsld0/logo/favicon.png?fit=max\u0026auto=format\u0026n=hT_Hdq5wOpSqsld0\u0026q=85\u0026s=c711c46d0a11441ed308ce4e040a556e","logo":{"light":"https://mintcdn.com/brask/hT_Hdq5wOpSqsld0/logo/black.svg?fit=max\u0026auto=format\u0026n=hT_Hdq5wOpSqsld0\u0026q=85\u0026s=89737eaceb0bbdbadb10eeb2e0537eee","dark":"https://mintcdn.com/brask/hT_Hdq5wOpSqsld0/logo/white.svg?fit=max\u0026auto=format\u0026n=hT_Hdq5wOpSqsld0\u0026q=85\u0026s=534b5bab02df626978cebe76c20020bc"},"api":{"openapi":["openapi.yml","openapi.v3.json"]},"background":{"decoration":null,"color":{"light":null,"dark":"#090014"}},"navbar":{"links":[{"label":"api@rask.ai","href":"mailto:api@rask.ai"}],"primary":{"type":"button","label":"Sign Up","href":"https://app.rask.ai/"}},"footer":{"socials":{"twitter":"https://twitter.com/rask_ai","instagram":"https://www.instagram.com/rask.ai_official","linkedin":"https://www.linkedin.com/company/rask-ai"}},"integrations":{"gtm":{"tagId":"GTM-N9ZZHZV"}},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Blog","href":"https://www.rask.ai/blog","icon":"newspaper"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"brask","hasAudioNarration":false,"actualSubdomain":"brask","customDomains":["docs.api.rask.ai"],"gitSource":{"type":"github","owner":"braskai","repo":"rask-api-documentation","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af5cf7072ca9fe26a3617ef","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"Documentation","count":287},{"language":"default","tag":"Errors","count":144},{"language":"default","tag":"Inside a job","count":39},{"language":"default","tag":"409 Conflict","count":33},{"language":"default","tag":"413, 415 and 422 Input","count":27},{"language":"default","tag":"401 and 403 Access","count":15},{"language":"default","tag":"Projects","count":14},{"language":"default","tag":"404 and 410 Missing","count":13},{"language":"default","tag":"Concepts","count":10},{"language":"default","tag":"Recipes","count":9}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"operations/createProjectCopies","slug":"/operations/createProjectCopies","pageMetadata":{"title":"Copy a project into other target languages","sidebarTitle":"createProjectCopies","description":"Creates one copy per target, at most 10 per request, of a finished project.","openapi":"openapi.v3.json POST /projects/{project_id}/copies","href":"/operations/createProjectCopies"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Creates one copy per target, at most 10 per request, of a finished project.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,strong:`strong`,..._provideComponents(),...props.components};return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Copies reuse the source transcript (no new transcription) and start at voice matching and translation; a target equal to the source reuses its dub. Copies inherit the folder, translation instructions and dubbing model; glossaries are set per target. Each copy auto-dubs by default.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`When to use:`}),` after the source finished processing, to add languages without re-transcribing.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Side effects:`}),` Creates N projects and N `,_jsx(_components.code,{children:`project_processing`}),` jobs.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cost:`}),` N project credits now (0 when unlimited) plus capped auto-dub minutes; a balance below their estimate answers 402. Estimate with estimateProjectCopies.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Async:`}),` returns `,_jsx(_components.code,{children:`202`}),` with a list of `,_jsx(_components.code,{children:`project_processing`}),` Jobs (no `,_jsx(_components.code,{children:`Location`}),`: each job has `,_jsx(_components.code,{children:`links.self`}),`); wait for each with `,_jsx(_components.code,{children:`GET /v3/jobs/{job_id}?wait_seconds=20`}),`; typically 5 min (p95 30 min).`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Idempotency:`}),` `,_jsx(_components.code,{children:`Idempotency-Key`}),` required; a same-key retry within 24 h returns the job’s current state (`,_jsx(_components.code,{children:`Idempotent-Replayed: true`}),`); after a failed or canceled job, use a new key.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Plan:`}),` multilanguage; `,_jsx(_components.code,{children:`glossary_id`}),` -> glossary; `,_jsx(_components.code,{children:`auto_dub`}),` -> an active subscription.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Paid text:`}),` a copy’s text stays closed until a dub of that copy is charged (`,_jsx(_components.code,{children:`dub_payment_required`}),`); a copy that reuses the source’s charged dub is open.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Required scopes:`}),` `,_jsx(_components.code,{children:`projects:write`}),`, `,_jsx(_components.code,{children:`credits:spend`})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Errors:`}),` `,_jsx(_components.code,{children:`glossary_not_found`}),` (404), `,_jsx(_components.code,{children:`project_not_ready`}),` (409), `,_jsx(_components.code,{children:`feature_not_in_plan`}),` (403), `,_jsx(_components.code,{children:`target_language_not_supported`}),` (422), `,_jsx(_components.code,{children:`glossary_language_mismatch`}),` (422), `,_jsx(_components.code,{children:`cost_changed`}),` (409), `,_jsx(_components.code,{children:`insufficient_balance`}),` (402), `,_jsx(_components.code,{children:`too_many_concurrent_jobs`}),` (429), `,_jsx(_components.code,{children:`prepare_mode_not_enabled`}),` (403)`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Copy a project into other target languages","sidebarTitle":"createProjectCopies","description":"Creates one copy per target, at most 10 per request, of a finished project.","openapi":"openapi.v3.json POST /projects/{project_id}/copies","href":"/operations/createProjectCopies"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createProjectCopies","tags":["Projects"],"summary":"Copy a project into other target languages","description":"Creates one copy per target, at most 10 per request, of a finished project.","security":["7f043228-0925-497a-9f66-0b27f11d35bf"],"parameters":["7b73ce9d-8637-4d8c-82cd-c79f5c4d2b1f","57b4d71a-4579-418e-b949-c94b028c4896"],"requestBody":"8c9b7993-b3fe-402d-8969-7d9bbc43b8e8","responses":{"202":"7e1a24d7-577f-49b8-8039-74b29752a47e","400":"098099ff-732a-4c66-b5c6-0e068af81798","401":"d43fd901-8d5d-46e9-b8fa-57e8a04d5082","402":"75139b01-5402-426c-97d3-6f09ed4e26f1","403":"513070fc-339b-40f2-9d84-491204a0c577","404":"8908411f-561c-4596-ba06-edec469414ec","409":"33196b8a-b1f4-4cb0-b3af-b2637ec0daab","413":"5bb4f0e5-5a41-4e76-ab4e-10f11b66e4d5","422":"8bc4adf0-3a7a-4582-bca0-d055d58f26f8","429":"0dda1205-5ff5-4e6c-9e57-9877f2a84540","500":"3b7a5917-7f8d-4e63-9f19-319ef33411f7","503":"75d79a26-22c3-4077-8589-a41e29bafcc7"},"x-rask-operation":{"effect":"spend","async":"job","job_type":"project_processing","typical_duration_seconds":{"p50":300,"p95":1800},"idempotency_key":"required","etag":"none","pagination":"none","estimate_operation":"estimateProjectCopies","plan_feature":"multilanguage","scopes":["projects:write","credits:spend"],"errors":["glossary_not_found","project_not_ready","feature_not_in_plan","target_language_not_supported","glossary_language_mismatch","cost_changed","insufficient_balance","too_many_concurrent_jobs","prepare_mode_not_enabled"],"stability":"alpha"},"x-rask-release":"ga","x-stability-level":"alpha","method":"post","type":"path","servers":["61053d33-b3c1-45e9-9029-d55a58076416"],"path":"/projects/{project_id}/copies","baseUrlOptions":["https://api.rask.ai/v3"],"title":"Copy a project into other target languages","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"7b73ce9d-8637-4d8c-82cd-c79f5c4d2b1f":{"name":"project_id","in":"path","description":"Project id (from createProject or listProjects).","required":true,"schema":{"type":"string","maxLength":64,"isRequired":true,"description":"Project id (from createProject or listProjects).","uniqueKey":"","typeLabel":"string"},"x-rask-id-type":"project","example":"6f1c2b7e-8a4d-4e3f-9b5c-1d0a7e2f3c58"},"57b4d71a-4579-418e-b949-c94b028c4896":{"name":"Idempotency-Key","in":"header","description":"Required. A unique key per logical request (SDKs send a bare UUIDv4; an RFC 9651 quoted string is accepted and unquoted); reuse it unchanged on retries. Kept 24 h per (workspace, acting user).","required":true,"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x20-\\x7E]+$","isRequired":true,"description":"Required. A unique key per logical request (SDKs send a bare UUIDv4; an RFC 9651 quoted string is accepted and unquoted); reuse it unchanged on retries. Kept 24 h per (workspace, acting user).","uniqueKey":"","typeLabel":"string"},"example":"8e03978e-40d5-43e8-bc93-6894a57f9324"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Body of createProjectCopies. Each copy inherits the requested dubbing model of its source.","required":["targets"],"additionalProperties":false,"properties":{"targets":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","description":"One target language of a copy request.","required":["target_language"],"additionalProperties":false,"properties":{"target_language":{"type":"string","maxLength":32,"description":"Target language code.","isRequired":true,"uniqueKey":"targets.items.[INDEX].target_language","typeLabel":"string"},"free_dubbing":{"type":"boolean","default":false,"description":"Use the free variant (entitlement free_languages).","uniqueKey":"targets.items.[INDEX].free_dubbing","typeLabel":"boolean"},"glossary_id":{"type":"string","maxLength":64,"description":"Glossary for this pair (entitlement glossary).","x-rask-id-type":"glossary","uniqueKey":"targets.items.[INDEX].glossary_id","typeLabel":"string"}},"uniqueKey":"targets.items.[INDEX]","typeLabel":"object"},"description":"Target languages (unique), at most 10 per request (`getPlan.limits.max_batch_targets`); more answer 422 validation_failed. A target equal to the source reuses its dub.","isRequired":true,"uniqueKey":"targets","typeLabel":"object[]"},"auto_dub":{"type":"boolean","default":true,"description":"Dub each copy automatically after translation (default). `false` answers 403 prepare_mode_not_enabled unless preparation is enabled.","uniqueKey":"auto_dub","typeLabel":"boolean"},"expected_cost_minutes":{"type":"integer","minimum":0,"maximum":100000,"description":"Cap for the deferred spends (auto-dub after translation). Required unless `auto_dub: false` is sent (422 validation_failed, errors[].code expected_cost_required). A deferred spend priced above the cap is skipped, uncharged. A cap below the current total fails 409 cost_changed at the request, and too few minutes for it fail 402 insufficient_balance; the skip applies only when the price or balance changes between the request and dispatch.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"},"name":{"type":"string","maxLength":255,"minLength":1,"description":"Name of the copies; defaults to the source name.","x-rask-untrusted":true,"uniqueKey":"name","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"two":{"title":"two","value":{"targets":[{"target_language":"fr-fr"},{"target_language":"de-de"}],"auto_dub":true,"expected_cost_minutes":2}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"7e1a24d7-577f-49b8-8039-74b29752a47e":{"description":"Accepted: `JobList`.","headers":{"X-Request-Id":{"description":"Request id (UUID); also the problem `instance` (`urn:uuid:\u003cid>`). Quote it to support.","schema":{"type":"string"},"example":"7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93"},"RateLimit":{"description":"Remaining quota of the most constrained policy (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";r=597;t=42"},"RateLimit-Policy":{"description":"Rate-limit policies that apply to the key (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";q=600;w=60, \"account-minute\";q=1800;w=60"},"Idempotent-Replayed":{"description":"`true` when the response is a replay of a stored response for the same Idempotency-Key.","schema":{"type":"boolean"},"example":true}},"content":{"application/json":{"schema":{"type":"object","description":"A page of `Job` (the list envelope shared by every list).","required":["object","data","next_cursor","has_more"],"properties":{"object":{"type":"string","enum":["list"],"description":"Always `list`.","isRequired":true,"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"data":{"type":"array","items":{"type":"object","description":"Asynchronous work started through v3, and automatic follow-up work (auto-dub, on-screen auto-start, the stages of a localization run) on projects created through v3. Started by 202 responses (`Location: /v3/jobs/{id}`); wait with getJob `wait_seconds`. Finished jobs can be read for 90 days, then answer 404 `job_not_found`. Work started in the web app or API v2 has no job.","required":["object","id","workspace_id","type","status","progress","stage","queue_position","estimated_finish_at","overdue","project_id","media_id","parent_job_id","channel","params","details","stages","cost","result","error","created_at","started_at","finished_at","links"],"properties":{"object":{"type":"string","enum":["job"],"description":"Always `job`.","isRequired":true,"uniqueKey":"data.items.[INDEX].object","typeLabel":"enum\u003cstring>"},"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"data.items.[INDEX].id","typeLabel":"string"},"workspace_id":{"type":"string","description":"Workspace that owns the job (and whose owner pays).","isRequired":true,"uniqueKey":"data.items.[INDEX].workspace_id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"data.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"progress":{"oneOf":[{"type":"integer","description":"0-100; null when the type has no honest progress.","format":"int32","minimum":0,"maximum":100,"isRequired":true,"uniqueKey":"data.items.[INDEX].progress.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"0-100; null when the type has no honest progress.","format":"int32","minimum":0,"maximum":100,"isRequired":true,"uniqueKey":"data.items.[INDEX].progress.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].progress","typeLabel":"integer\u003cint32> | null"},"stage":{"oneOf":[{"type":"string","description":"Per-type stage; for a `localization` job, the running stage's.","enum":["queued","uploading","transcribing","separating_audio","detecting_speakers","matching_voices","translating","voicing","merging","downloading","extracting_audio","face_check","waiting_for_worker","rendering","charging","waiting_for_runner","starting","preparing","checking","publishing","cloning","restoring"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].stage.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Per-type stage; for a `localization` job, the running stage's.","isRequired":true,"uniqueKey":"data.items.[INDEX].stage.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].stage","typeLabel":"enum\u003cstring> | null"},"queue_position":{"oneOf":[{"type":"integer","description":"Queue position (1 = next).","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].queue_position.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Queue position (1 = next).","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].queue_position.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].queue_position","typeLabel":"integer\u003cint32> | null"},"estimated_finish_at":{"oneOf":[{"type":"string","description":"Estimated completion from the queue position and the type's typical duration (on-screen: the runner's ETA); null when terminal or unknown. An estimate, not a deadline.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].estimated_finish_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Estimated completion from the queue position and the type's typical duration (on-screen: the runner's ETA); null when terminal or unknown. An estimate, not a deadline.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].estimated_finish_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].estimated_finish_at","typeLabel":"string\u003cdate-time> | null"},"overdue":{"type":"boolean","description":"True once the job runs past its type's overdue threshold: Rask is alerted. Keep waiting or check back later; do not start the same work again.","isRequired":true,"uniqueKey":"data.items.[INDEX].overdue","typeLabel":"boolean"},"project_id":{"oneOf":[{"type":"string","description":"Project.","isRequired":true,"uniqueKey":"data.items.[INDEX].project_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Project.","isRequired":true,"uniqueKey":"data.items.[INDEX].project_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].project_id","typeLabel":"string | null"},"media_id":{"oneOf":[{"type":"string","description":"Media.","isRequired":true,"uniqueKey":"data.items.[INDEX].media_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Media.","isRequired":true,"uniqueKey":"data.items.[INDEX].media_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].media_id","typeLabel":"string | null"},"parent_job_id":{"oneOf":[{"type":"string","description":"The job that started this system job: the project_processing job of an auto-dub, the dub whose merge started an on-screen auto-start, the `localization` job of a stage, the project_processing job of a `localization` block, or the failed run a resumed `localization` job continues.","isRequired":true,"uniqueKey":"data.items.[INDEX].parent_job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The job that started this system job: the project_processing job of an auto-dub, the dub whose merge started an on-screen auto-start, the `localization` job of a stage, the project_processing job of a `localization` block, or the failed run a resumed `localization` job continues.","isRequired":true,"uniqueKey":"data.items.[INDEX].parent_job_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].parent_job_id","typeLabel":"string | null"},"channel":{"type":"string","description":"Who started a job.\n- `api`: REST API v3\n- `mcp`: the Rask MCP server\n- `system`: automatic (auto-dub, on-screen auto-start, the stages of a localization run)","enum":["api","mcp","system"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].channel","typeLabel":"enum\u003cstring>"},"params":{"oneOf":[{"type":"object","description":"Normalized request echo: a union on `type` (= Job.type).","required":["type","origin","upload_id","url","filename","purpose"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["media_import"],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0.type","typeLabel":"enum\u003cstring>"},"origin":{"type":"string","description":"Media origin.\n\n- `upload`: uploaded through createUpload\n- `url`: imported from a URL","enum":["upload","url"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0.origin","typeLabel":"enum\u003cstring>"},"upload_id":{"oneOf":[{"type":"string","description":"Upload completed.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0.upload_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Upload completed.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0.upload_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0.upload_id","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","description":"URL imported.","format":"uri","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0.url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","description":"URL imported.","format":"uri","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0.url","typeLabel":"string\u003curi> | null"},"filename":{"oneOf":[{"type":"string","description":"File name.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0.filename.oneOf.0","typeLabel":"string"},{"type":"null","description":"File name.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0.filename.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0.filename","typeLabel":"string | null"},"purpose":{"type":"string","description":"What a media item is for.\n\n- `project_source`: the source of a project (default)\n- `voice_sample`: a sample for createVoiceClone (audio, or video whose audio is extracted to MP3 on import)","enum":["project_source","voice_sample"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0.purpose","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.0","typeLabel":"object"},{"type":"object","description":"Normalized request echo: a union on `type` (= Job.type).","required":["type","trigger","source_language","target_language","free_dubbing","dubbing_model","auto_dub","onscreen_auto_start","localization","expected_cost_minutes","copy_of_project_id"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["project_processing"],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.type","typeLabel":"enum\u003cstring>"},"trigger":{"type":"string","description":"What started a project_processing run.\n\n- `create`: createProject or a web upload\n- `copy`: createProjectCopies or a web copy\n- `subtitle_import`: importTranscript","enum":["create","copy","subtitle_import"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.trigger","typeLabel":"enum\u003cstring>"},"source_language":{"oneOf":[{"type":"string","description":"Requested source language; null = auto-detect.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.source_language.oneOf.0","typeLabel":"string"},{"type":"null","description":"Requested source language; null = auto-detect.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.source_language.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.source_language","typeLabel":"string | null"},"target_language":{"oneOf":[{"type":"string","description":"Target language.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.target_language.oneOf.0","typeLabel":"string"},{"type":"null","description":"Target language.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.target_language.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.target_language","typeLabel":"string | null"},"free_dubbing":{"type":"boolean","description":"Free variant.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.free_dubbing","typeLabel":"boolean"},"dubbing_model":{"oneOf":[{"type":"string","description":"Requested dubbing model; null when the request named none (for a copy: the source's).","enum":["v1","v2"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.dubbing_model.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Requested dubbing model; null when the request named none (for a copy: the source's).","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.dubbing_model.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.dubbing_model","typeLabel":"enum\u003cstring> | null"},"auto_dub":{"type":"boolean","description":"Auto-dub requested.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.auto_dub","typeLabel":"boolean"},"onscreen_auto_start":{"type":"boolean","description":"On-screen auto-start requested.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.onscreen_auto_start","typeLabel":"boolean"},"localization":{"oneOf":[{"type":"object","description":"The `localization` block; null when not sent.","required":["lipsync","onscreen"],"properties":{"lipsync":{"oneOf":[{"type":"object","description":"Lip-sync stage; null when not ordered.","required":["model"],"properties":{"model":{"type":"string","description":"Lip-sync model.\n\n- `legacy`: the Legacy model\n- `enhanced`: the Enhanced model","enum":["legacy","enhanced"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization.oneOf.0.lipsync.oneOf.0.model","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization.oneOf.0.lipsync.oneOf.0","typeLabel":"object"},{"type":"null","description":"Lip-sync stage; null when not ordered.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization.oneOf.0.lipsync.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization.oneOf.0.lipsync","typeLabel":"object | null"},"onscreen":{"oneOf":[{"type":"object","description":"On-screen stage; null when not ordered.","required":["ui_language"],"properties":{"ui_language":{"oneOf":[{"type":"string","description":"Language of the on-screen agent's activity messages.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization.oneOf.0.onscreen.oneOf.0.ui_language.oneOf.0","typeLabel":"string"},{"type":"null","description":"Language of the on-screen agent's activity messages.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization.oneOf.0.onscreen.oneOf.0.ui_language.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization.oneOf.0.onscreen.oneOf.0.ui_language","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization.oneOf.0.onscreen.oneOf.0","typeLabel":"object"},{"type":"null","description":"On-screen stage; null when not ordered.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization.oneOf.0.onscreen.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization.oneOf.0.onscreen","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization.oneOf.0","typeLabel":"object"},{"type":"null","description":"The `localization` block; null when not sent.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.localization","typeLabel":"object | null"},"expected_cost_minutes":{"oneOf":[{"type":"integer","description":"Stored cap for deferred spends.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.expected_cost_minutes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Stored cap for deferred spends.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.expected_cost_minutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.expected_cost_minutes","typeLabel":"integer\u003cint32> | null"},"copy_of_project_id":{"oneOf":[{"type":"string","description":"Source project of a copy.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.copy_of_project_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Source project of a copy.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.copy_of_project_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1.copy_of_project_id","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.1","typeLabel":"object"},{"type":"object","description":"Normalized request echo: a union on `type` (= Job.type).","required":["type","cause","segment_ids"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["translation"],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.2.type","typeLabel":"enum\u003cstring>"},"cause":{"type":"string","description":"What started a translation job.\n\n- `retranslation`: retranslateSegments\n- `edit`: an edit that retranslates segments","enum":["retranslation","edit"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.2.cause","typeLabel":"enum\u003cstring>"},"segment_ids":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].params.oneOf.2.segment_ids.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Targeted segments; null = every segment with source text.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.2.segment_ids.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Targeted segments; null = every segment with source text.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.2.segment_ids.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.2.segment_ids","typeLabel":"string[] | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.2","typeLabel":"object"},{"type":"object","description":"Normalized request echo: a union on `type` (= Job.type).","required":["type","segment_ids","expected_cost_minutes"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["segment_generation"],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.3.type","typeLabel":"enum\u003cstring>"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].params.oneOf.3.segment_ids.items.[INDEX]","typeLabel":"string"},"description":"The chosen segments.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.3.segment_ids","typeLabel":"string[]"},"expected_cost_minutes":{"oneOf":[{"type":"integer","description":"Cap sent with the request.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.3.expected_cost_minutes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Cap sent with the request.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.3.expected_cost_minutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.3.expected_cost_minutes","typeLabel":"integer\u003cint32> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.3","typeLabel":"object"},{"type":"object","description":"Normalized request echo: a union on `type` (= Job.type).","required":["type","mode_requested","mode_applied","expected_cost_minutes"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["dub"],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.4.type","typeLabel":"enum\u003cstring>"},"mode_requested":{"type":"string","description":"Requested dub mode.\n\n- `auto`: full when needed, otherwise changed_segments (default)\n- `full`: re-voice every segment\n- `changed_segments`: only outdated and not-dubbed segments: voiced, or merged from a current clip","enum":["auto","full","changed_segments"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.4.mode_requested","typeLabel":"enum\u003cstring>"},"mode_applied":{"type":"string","description":"Dub mode the server applies.\n\n- `full`: every segment\n- `changed_segments`: only changed segments","enum":["full","changed_segments"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.4.mode_applied","typeLabel":"enum\u003cstring>"},"expected_cost_minutes":{"oneOf":[{"type":"integer","description":"Cap sent with the request; null for auto-dub jobs.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.4.expected_cost_minutes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Cap sent with the request; null for auto-dub jobs.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.4.expected_cost_minutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.4.expected_cost_minutes","typeLabel":"integer\u003cint32> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.4","typeLabel":"object"},{"type":"object","description":"Normalized request echo: a union on `type` (= Job.type).","required":["type","model","free_trial_run","expected_cost_minutes"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["lipsync"],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.5.type","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"Lip-sync model.\n\n- `legacy`: the Legacy model\n- `enhanced`: the Enhanced model","enum":["legacy","enhanced"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.5.model","typeLabel":"enum\u003cstring>"},"free_trial_run":{"type":"boolean","description":"Free run.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.5.free_trial_run","typeLabel":"boolean"},"expected_cost_minutes":{"oneOf":[{"type":"integer","description":"Cap sent with the request.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.5.expected_cost_minutes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Cap sent with the request.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.5.expected_cost_minutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.5.expected_cost_minutes","typeLabel":"integer\u003cint32> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.5","typeLabel":"object"},{"type":"object","description":"Normalized request echo: a union on `type` (= Job.type).","required":["type","source_kind","ui_language","expected_cost_minutes"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["onscreen"],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.6.type","typeLabel":"enum\u003cstring>"},"source_kind":{"type":"string","description":"Which video an on-screen job renders over.\n\n- `dubbed`: the dubbed video\n- `lipsync`: the current lip-synced video, when a localization run orders lip-sync and on-screen","enum":["dubbed","lipsync"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.6.source_kind","typeLabel":"enum\u003cstring>"},"ui_language":{"oneOf":[{"type":"string","description":"Language of on-screen activity messages.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.6.ui_language.oneOf.0","typeLabel":"string"},{"type":"null","description":"Language of on-screen activity messages.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.6.ui_language.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.6.ui_language","typeLabel":"string | null"},"expected_cost_minutes":{"oneOf":[{"type":"integer","description":"Cap sent with the request.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.6.expected_cost_minutes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Cap sent with the request.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.6.expected_cost_minutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.6.expected_cost_minutes","typeLabel":"integer\u003cint32> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.6","typeLabel":"object"},{"type":"object","description":"Normalized request echo: a union on `type` (= Job.type).","required":["type","dub","lipsync","onscreen","expected_cost_minutes"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["localization"],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.type","typeLabel":"enum\u003cstring>"},"dub":{"type":"object","description":"The dub stage of a run.","required":["mode"],"properties":{"mode":{"type":"string","description":"Requested dub mode.\n\n- `auto`: full when needed, otherwise changed_segments (default)\n- `full`: re-voice every segment\n- `changed_segments`: only outdated and not-dubbed segments: voiced, or merged from a current clip","enum":["auto","full","changed_segments"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.dub.mode","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.dub","typeLabel":"object"},"lipsync":{"oneOf":[{"type":"object","description":"Lip-sync stage; null when not ordered.","required":["model"],"properties":{"model":{"type":"string","description":"Lip-sync model.\n\n- `legacy`: the Legacy model\n- `enhanced`: the Enhanced model","enum":["legacy","enhanced"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.lipsync.oneOf.0.model","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.lipsync.oneOf.0","typeLabel":"object"},{"type":"null","description":"Lip-sync stage; null when not ordered.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.lipsync.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.lipsync","typeLabel":"object | null"},"onscreen":{"oneOf":[{"type":"object","description":"On-screen stage; null when not ordered.","required":["ui_language"],"properties":{"ui_language":{"oneOf":[{"type":"string","description":"Language of the on-screen agent's activity messages.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.onscreen.oneOf.0.ui_language.oneOf.0","typeLabel":"string"},{"type":"null","description":"Language of the on-screen agent's activity messages.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.onscreen.oneOf.0.ui_language.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.onscreen.oneOf.0.ui_language","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.onscreen.oneOf.0","typeLabel":"object"},{"type":"null","description":"On-screen stage; null when not ordered.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.onscreen.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.onscreen","typeLabel":"object | null"},"expected_cost_minutes":{"oneOf":[{"type":"integer","description":"Cap for the whole run.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.expected_cost_minutes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Cap for the whole run.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.expected_cost_minutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7.expected_cost_minutes","typeLabel":"integer\u003cint32> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.7","typeLabel":"object"},{"type":"object","description":"Normalized request echo: a union on `type` (= Job.type).","required":["type","voice_clone_id","source_type"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["voice_clone"],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.8.type","typeLabel":"enum\u003cstring>"},"voice_clone_id":{"type":"string","description":"The clone being created.","isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.8.voice_clone_id","typeLabel":"string"},"source_type":{"type":"string","description":"Voice clone source type.\n\n- `media`: voice samples (media with purpose voice_sample)\n- `project_speaker`: a speaker of a project","enum":["media","project_speaker"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.8.source_type","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.8","typeLabel":"object"},{"type":"object","description":"Normalized request echo: a union on `type` (= Job.type).","required":["type","export_type","source_video"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["export"],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.9.type","typeLabel":"enum\u003cstring>"},"export_type":{"type":"string","description":"Export type.\n\n- `burned_subtitles`: a video with burned-in target subtitles","enum":["burned_subtitles"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.9.export_type","typeLabel":"enum\u003cstring>"},"source_video":{"type":"string","description":"Video to export from.\n\n- `dubbed`: the dubbed video\n- `lipsync`: the lip-synced video","enum":["dubbed","lipsync"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.9.source_video","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.9","typeLabel":"object"},{"type":"object","description":"Normalized request echo: a union on `type` (= Job.type).","required":["type"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["file_restore"],"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.10.type","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].params.oneOf.10","typeLabel":"object"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].params","typeLabel":"object"},"details":{"oneOf":[{"type":"object","description":"Live per-type state.","required":["type","target_language","ui_language","queue_position","eta_seconds","attempt","activity","draft"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["onscreen"],"isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.type","typeLabel":"enum\u003cstring>"},"target_language":{"type":"string","description":"Target language.","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.target_language","typeLabel":"string"},"ui_language":{"oneOf":[{"type":"string","description":"Activity language.","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.ui_language.oneOf.0","typeLabel":"string"},{"type":"null","description":"Activity language.","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.ui_language.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.ui_language","typeLabel":"string | null"},"queue_position":{"oneOf":[{"type":"integer","description":"Position while queued (1 = next).","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.queue_position.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Position while queued (1 = next).","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.queue_position.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.queue_position","typeLabel":"integer\u003cint32> | null"},"eta_seconds":{"oneOf":[{"type":"integer","description":"Time left in the agent budget.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.eta_seconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Time left in the agent budget.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.eta_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.eta_seconds","typeLabel":"integer\u003cint32> | null"},"attempt":{"type":"integer","description":"Runner attempt; increases when a runner is lost and the job requeues.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.attempt","typeLabel":"integer\u003cint32>"},"activity":{"type":"array","items":{"type":"object","description":"An on-screen agent activity message.","required":["text","at"],"properties":{"text":{"type":"string","description":"Agent message as the customer sees it (untrusted LLM text).","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.activity.items.[INDEX].text","typeLabel":"string"},"at":{"type":"string","description":"Message time.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.activity.items.[INDEX].at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"data.items.[INDEX].details.oneOf.0.activity.items.[INDEX]","typeLabel":"object"},"description":"Latest agent messages, oldest first.","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.activity","typeLabel":"object[]"},"draft":{"oneOf":[{"type":"object","description":"Latest draft.","required":["number","created_at","url","download_url","expires_at"],"properties":{"number":{"type":"integer","description":"Draft number.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.draft.oneOf.0.number","typeLabel":"integer\u003cint32>"},"created_at":{"type":"string","description":"Draft time.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.draft.oneOf.0.created_at","typeLabel":"string\u003cdate-time>"},"url":{"type":"string","description":"Player URL.","format":"uri","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.draft.oneOf.0.url","typeLabel":"string\u003curi>"},"download_url":{"type":"string","description":"Download URL.","format":"uri","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.draft.oneOf.0.download_url","typeLabel":"string\u003curi>"},"expires_at":{"type":"string","description":"Both URLs stop working then.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.draft.oneOf.0.expires_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.draft.oneOf.0","typeLabel":"object"},{"type":"null","description":"Latest draft.","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.draft.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0.draft","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.0","typeLabel":"object"},{"type":"null","description":"Live per-type state.","isRequired":true,"uniqueKey":"data.items.[INDEX].details.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].details","typeLabel":"object | null"},"stages":{"oneOf":[{"type":"array","items":{"type":"object","description":"One stage of a `localization` job.","required":["name","job_id","status","reused","stage","cost","error"],"properties":{"name":{"type":"string","description":"A stage of a `localization` job. They always run in this order, each on the previous result.\n\n- `dub`: dub or redub\n- `lipsync`: lip-sync of the dubbed video\n- `onscreen`: on-screen text translation of the latest video","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].name","typeLabel":"enum\u003cstring>"},"job_id":{"oneOf":[{"type":"string","description":"The child job (`dub`, `lipsync`, `onscreen`); null before it starts, and for a reused stage.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The child job (`dub`, `lipsync`, `onscreen`); null before it starts, and for a reused stage.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].job_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].job_id","typeLabel":"string | null"},"status":{"type":"string","description":"State of a stage.\n\n- `pending`: not started yet (or never reached, when an earlier stage ended the run)\n- `running`: its child job is running\n- `succeeded`: finished, in this run or earlier (`reused`); never re-run or re-charged\n- `failed`: its child job failed and was refunded by that type's rule, or something else kept it from starting, uncharged and with no child job (another run of the project, no face in the video); see `error`\n- `skipped`: not started, uncharged, because it could not be paid or exceeded a cap (the run's or the key's), or, for on-screen, a plan change during the run trimmed its lip-sync source; see `error`","enum":["pending","running","succeeded","failed","skipped"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"reused":{"type":"boolean","description":"True when the stage is `succeeded` by an existing, not outdated result, with no child job and no charge: a dub with nothing to voice, a paid lip-sync of the same model (a free run does not count), an on-screen run over the same source. Stages are judged in order, so a dub that runs again makes the lip-sync and on-screen after it run too. With every stage reused, the job succeeds at once at 0 minutes.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].reused","typeLabel":"boolean"},"stage":{"oneOf":[{"type":"string","description":"The child job's current stage.","enum":["queued","uploading","transcribing","separating_audio","detecting_speakers","matching_voices","translating","voicing","merging","downloading","extracting_audio","face_check","waiting_for_worker","rendering","charging","waiting_for_runner","starting","preparing","checking","publishing","cloning","restoring"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].stage.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The child job's current stage.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].stage.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].stage","typeLabel":"enum\u003cstring> | null"},"cost":{"oneOf":[{"type":"object","description":"The child job's cost in this run; null before it is charged, for a reused stage and for a stage carried over from the resumed run.","required":["credit_type","minutes","charged","refunded","refunded_at"],"x-rask-open-union":true,"properties":{"credit_type":{"type":"string","description":"A minute-denominated credit pool.\n\n- `minutes`: the main minute pool\n- `lipsync_free_minutes`: free lip-sync minutes","enum":["minutes","lipsync_free_minutes"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.0.credit_type","typeLabel":"enum\u003cstring>"},"minutes":{"type":"integer","description":"Quoted minutes; 0 when free. On a `localization` job: minutes charged and not refunded so far (see `Job.cost`).","format":"int32","minimum":0,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.0.minutes","typeLabel":"integer\u003cint32>"},"charged":{"type":"boolean","description":"True once the charge is committed.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.0.charged","typeLabel":"boolean"},"refunded":{"type":"boolean","description":"True once the charge is refunded; read at request time, so a refund on a finished job is visible.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.0.refunded","typeLabel":"boolean"},"refunded_at":{"oneOf":[{"type":"string","description":"When the refund was recorded; null without a refund.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.0.refunded_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the refund was recorded; null without a refund.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.0.refunded_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.0.refunded_at","typeLabel":"string\u003cdate-time> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.0","typeLabel":"object"},{"type":"object","description":"The child job's cost in this run; null before it is charged, for a reused stage and for a stage carried over from the resumed run.","required":["credit_type","projects","charged","refunded","refunded_at"],"x-rask-open-union":true,"properties":{"credit_type":{"type":"string","enum":["projects"],"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.1.credit_type","typeLabel":"enum\u003cstring>"},"projects":{"type":"integer","description":"Project credits; 0 when the payer's credits are unlimited.","format":"int32","minimum":0,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.1.projects","typeLabel":"integer\u003cint32>"},"charged":{"type":"boolean","description":"True once the charge is committed.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.1.charged","typeLabel":"boolean"},"refunded":{"type":"boolean","description":"True once the charge is refunded; read at request time, so a refund on a finished job is visible.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.1.refunded","typeLabel":"boolean"},"refunded_at":{"oneOf":[{"type":"string","description":"When the refund was recorded; null without a refund.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.1.refunded_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the refund was recorded; null without a refund.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.1.refunded_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.1.refunded_at","typeLabel":"string\u003cdate-time> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.1","typeLabel":"object"},{"type":"null","description":"The child job's cost in this run; null before it is charged, for a reused stage and for a stage carried over from the resumed run.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].cost","typeLabel":"object · object · null"},"error":{"oneOf":[{"type":"object","description":"Why it failed or was skipped: the child job's error, or, for a stage that did not start, the refusal it met; a skipped stage holds a code of `components.x-rask-job-errors.stage_codes`.","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0.failed_stage","typeLabel":"enum\u003cstring>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.0","typeLabel":"object"},{"type":"null","description":"Why it failed or was skipped: the child job's error, or, for a stage that did not start, the refusal it met; a skipped stage holds a code of `components.x-rask-job-errors.stage_codes`.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX].error","typeLabel":"object | null"}},"uniqueKey":"data.items.[INDEX].stages.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The stages of a `localization` job in run order; null for other types.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","description":"One stage of a `localization` job.","required":["name","job_id","status","reused","stage","cost","error"],"properties":{"name":{"type":"string","description":"A stage of a `localization` job. They always run in this order, each on the previous result.\n\n- `dub`: dub or redub\n- `lipsync`: lip-sync of the dubbed video\n- `onscreen`: on-screen text translation of the latest video","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true},"job_id":{"oneOf":[{"type":"string","description":"The child job (`dub`, `lipsync`, `onscreen`); null before it starts, and for a reused stage."},{"type":"null","description":"The child job (`dub`, `lipsync`, `onscreen`); null before it starts, and for a reused stage."}]},"status":{"type":"string","description":"State of a stage.\n\n- `pending`: not started yet (or never reached, when an earlier stage ended the run)\n- `running`: its child job is running\n- `succeeded`: finished, in this run or earlier (`reused`); never re-run or re-charged\n- `failed`: its child job failed and was refunded by that type's rule, or something else kept it from starting, uncharged and with no child job (another run of the project, no face in the video); see `error`\n- `skipped`: not started, uncharged, because it could not be paid or exceeded a cap (the run's or the key's), or, for on-screen, a plan change during the run trimmed its lip-sync source; see `error`","enum":["pending","running","succeeded","failed","skipped"],"x-rask-open-enum":true},"reused":{"type":"boolean","description":"True when the stage is `succeeded` by an existing, not outdated result, with no child job and no charge: a dub with nothing to voice, a paid lip-sync of the same model (a free run does not count), an on-screen run over the same source. Stages are judged in order, so a dub that runs again makes the lip-sync and on-screen after it run too. With every stage reused, the job succeeds at once at 0 minutes."},"stage":{"oneOf":[{"type":"string","description":"The child job's current stage.","enum":["queued","uploading","transcribing","separating_audio","detecting_speakers","matching_voices","translating","voicing","merging","downloading","extracting_audio","face_check","waiting_for_worker","rendering","charging","waiting_for_runner","starting","preparing","checking","publishing","cloning","restoring"],"x-rask-open-enum":true},{"type":"null","description":"The child job's current stage."}]},"cost":{"oneOf":[{"type":"object","description":"The child job's cost in this run; null before it is charged, for a reused stage and for a stage carried over from the resumed run.","required":["credit_type","minutes","charged","refunded","refunded_at"],"x-rask-open-union":true,"properties":{"credit_type":{"type":"string","description":"A minute-denominated credit pool.\n\n- `minutes`: the main minute pool\n- `lipsync_free_minutes`: free lip-sync minutes","enum":["minutes","lipsync_free_minutes"],"x-rask-open-enum":true},"minutes":{"type":"integer","description":"Quoted minutes; 0 when free. On a `localization` job: minutes charged and not refunded so far (see `Job.cost`).","format":"int32","minimum":0},"charged":{"type":"boolean","description":"True once the charge is committed."},"refunded":{"type":"boolean","description":"True once the charge is refunded; read at request time, so a refund on a finished job is visible."},"refunded_at":{"oneOf":[{"type":"string","description":"When the refund was recorded; null without a refund.","format":"date-time"},{"type":"null","description":"When the refund was recorded; null without a refund.","format":"date-time"}]}}},{"type":"object","description":"The child job's cost in this run; null before it is charged, for a reused stage and for a stage carried over from the resumed run.","required":["credit_type","projects","charged","refunded","refunded_at"],"x-rask-open-union":true,"properties":{"credit_type":{"type":"string","enum":["projects"]},"projects":{"type":"integer","description":"Project credits; 0 when the payer's credits are unlimited.","format":"int32","minimum":0},"charged":{"type":"boolean","description":"True once the charge is committed."},"refunded":{"type":"boolean","description":"True once the charge is refunded; read at request time, so a refund on a finished job is visible."},"refunded_at":{"oneOf":[{"type":"string","description":"When the refund was recorded; null without a refund.","format":"date-time"},{"type":"null","description":"When the refund was recorded; null without a refund.","format":"date-time"}]}}},{"type":"null","description":"The child job's cost in this run; null before it is charged, for a reused stage and for a stage carried over from the resumed run."}]},"error":{"oneOf":[{"type":"object","description":"Why it failed or was skipped: the child job's error, or, for a stage that did not start, the refusal it met; a skipped stage holds a code of `components.x-rask-job-errors.stage_codes`.","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri"},"title":{"type":"string","description":"Short summary of the problem type."},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text."},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how."},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160}]},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name."},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...)."},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text."}}},"description":"Failing fields; empty when the problem is not about fields."},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag."},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`."},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true},"description":"insufficient_scope: the key's scopes."},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`."},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency."},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id."},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true}}},"description":"project_busy: the project's active spending jobs."},"active_job_ids":{"type":"array","items":{"type":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting."},"segment_ids":{"type":"array","items":{"type":"string"},"description":"segment_busy: the busy segments."},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one."},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one."}]},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs)."},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for."},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked."},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`)."},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment."},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential."},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type."},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped."},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true}},"additionalProperties":true},{"type":"null","description":"Why it failed or was skipped: the child job's error, or, for a stage that did not start, the refusal it met; a skipped stage holds a code of `components.x-rask-job-errors.stage_codes`."}]}}},"description":"The stages of a `localization` job in run order; null for other types.","isRequired":true,"uniqueKey":"data.items.[INDEX].stages.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].stages","typeLabel":"object[] | null"},"cost":{"oneOf":[{"type":"object","description":"Quoted at creation; `charged` turns true once the charge is committed. A `localization` job has no charge of its own: `minutes` is the sum of its stages charged and not refunded so far, `charged` is true once any stage is charged, `refunded` is true only when every charged stage was refunded, `refunded_at` is the latest refund. `stages[].cost` holds each stage; the quote is `params.expected_cost_minutes`.","required":["credit_type","minutes","charged","refunded","refunded_at"],"x-rask-open-union":true,"properties":{"credit_type":{"type":"string","description":"A minute-denominated credit pool.\n\n- `minutes`: the main minute pool\n- `lipsync_free_minutes`: free lip-sync minutes","enum":["minutes","lipsync_free_minutes"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.0.credit_type","typeLabel":"enum\u003cstring>"},"minutes":{"type":"integer","description":"Quoted minutes; 0 when free. On a `localization` job: minutes charged and not refunded so far (see `Job.cost`).","format":"int32","minimum":0,"isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.0.minutes","typeLabel":"integer\u003cint32>"},"charged":{"type":"boolean","description":"True once the charge is committed.","isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.0.charged","typeLabel":"boolean"},"refunded":{"type":"boolean","description":"True once the charge is refunded; read at request time, so a refund on a finished job is visible.","isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.0.refunded","typeLabel":"boolean"},"refunded_at":{"oneOf":[{"type":"string","description":"When the refund was recorded; null without a refund.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.0.refunded_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the refund was recorded; null without a refund.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.0.refunded_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.0.refunded_at","typeLabel":"string\u003cdate-time> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.0","typeLabel":"object"},{"type":"object","description":"Quoted at creation; `charged` turns true once the charge is committed. A `localization` job has no charge of its own: `minutes` is the sum of its stages charged and not refunded so far, `charged` is true once any stage is charged, `refunded` is true only when every charged stage was refunded, `refunded_at` is the latest refund. `stages[].cost` holds each stage; the quote is `params.expected_cost_minutes`.","required":["credit_type","projects","charged","refunded","refunded_at"],"x-rask-open-union":true,"properties":{"credit_type":{"type":"string","enum":["projects"],"isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.1.credit_type","typeLabel":"enum\u003cstring>"},"projects":{"type":"integer","description":"Project credits; 0 when the payer's credits are unlimited.","format":"int32","minimum":0,"isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.1.projects","typeLabel":"integer\u003cint32>"},"charged":{"type":"boolean","description":"True once the charge is committed.","isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.1.charged","typeLabel":"boolean"},"refunded":{"type":"boolean","description":"True once the charge is refunded; read at request time, so a refund on a finished job is visible.","isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.1.refunded","typeLabel":"boolean"},"refunded_at":{"oneOf":[{"type":"string","description":"When the refund was recorded; null without a refund.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.1.refunded_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the refund was recorded; null without a refund.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.1.refunded_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.1.refunded_at","typeLabel":"string\u003cdate-time> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.1","typeLabel":"object"},{"type":"null","description":"Quoted at creation; `charged` turns true once the charge is committed. A `localization` job has no charge of its own: `minutes` is the sum of its stages charged and not refunded so far, `charged` is true once any stage is charged, `refunded` is true only when every charged stage was refunded, `refunded_at` is the latest refund. `stages[].cost` holds each stage; the quote is `params.expected_cost_minutes`.","isRequired":true,"uniqueKey":"data.items.[INDEX].cost.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].cost","typeLabel":"object · object · null"},"result":{"oneOf":[{"type":"object","description":"Set when succeeded; a failed `segment_generation` job may also list clips already voiced.","required":["type","media_id","kind","duration_seconds","size_bytes"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["media_import"],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.0.type","typeLabel":"enum\u003cstring>"},"media_id":{"type":"string","description":"Imported media.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.0.media_id","typeLabel":"string"},"kind":{"type":"string","description":"Media kind.\n\n- `video`: video with audio\n- `audio`: audio only","enum":["video","audio"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"duration_seconds":{"oneOf":[{"type":"number","description":"Duration.","format":"double","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.0.duration_seconds.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Duration.","format":"double","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.0.duration_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.0.duration_seconds","typeLabel":"number\u003cdouble> | null"},"size_bytes":{"oneOf":[{"type":"integer","description":"Size.","format":"int64","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.0.size_bytes.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","description":"Size.","format":"int64","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.0.size_bytes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.0.size_bytes","typeLabel":"integer\u003cint64> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.0","typeLabel":"object"},{"type":"object","description":"Set when succeeded; a failed `segment_generation` job may also list clips already voiced.","required":["type","project_id","source_language","speakers_detected","subtitles_imported","copy_of_project_id","reused_dub","auto_dub","onscreen_auto_start","localization_job_id","notices"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["project_processing"],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.type","typeLabel":"enum\u003cstring>"},"project_id":{"type":"string","description":"Project.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.project_id","typeLabel":"string"},"source_language":{"oneOf":[{"type":"string","description":"Detected source language.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.source_language.oneOf.0","typeLabel":"string"},{"type":"null","description":"Detected source language.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.source_language.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.source_language","typeLabel":"string | null"},"speakers_detected":{"oneOf":[{"type":"integer","description":"Speakers detected.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.speakers_detected.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Speakers detected.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.speakers_detected.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.speakers_detected","typeLabel":"integer\u003cint32> | null"},"subtitles_imported":{"type":"object","description":"Imported subtitles.","required":["source","target"],"properties":{"source":{"type":"boolean","description":"Source subtitles were imported.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.subtitles_imported.source","typeLabel":"boolean"},"target":{"type":"boolean","description":"Target subtitles were imported.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.subtitles_imported.target","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.subtitles_imported","typeLabel":"object"},"copy_of_project_id":{"oneOf":[{"type":"string","description":"Source of a copy.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.copy_of_project_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Source of a copy.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.copy_of_project_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.copy_of_project_id","typeLabel":"string | null"},"reused_dub":{"type":"boolean","description":"A copy reused the source dub.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.reused_dub","typeLabel":"boolean"},"auto_dub":{"type":"object","description":"Auto-dub outcome. With a `localization` block, `state` is `dispatched` once the run starts, `dub_job_id` and `skipped_reason` stay null, and `localization_job_id` is authoritative.","required":["state","skipped_reason","dub_job_id"],"properties":{"state":{"type":"string","description":"Auto-dub outcome of a processing run.\n\n- `not_requested`: not requested\n- `dispatched`: a dub job was started\n- `skipped`: skipped; see skipped_reason","enum":["not_requested","dispatched","skipped"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.auto_dub.state","typeLabel":"enum\u003cstring>"},"skipped_reason":{"oneOf":[{"type":"string","description":"Why it was skipped.","enum":["insufficient_balance","cost_changed"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.auto_dub.skipped_reason.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Why it was skipped.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.auto_dub.skipped_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.auto_dub.skipped_reason","typeLabel":"enum\u003cstring> | null"},"dub_job_id":{"oneOf":[{"type":"string","description":"The auto-dub `dub` job.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.auto_dub.dub_job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The auto-dub `dub` job.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.auto_dub.dub_job_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.auto_dub.dub_job_id","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.auto_dub","typeLabel":"object"},"onscreen_auto_start":{"type":"object","description":"On-screen auto-start outcome.","required":["state","rejection_code"],"properties":{"state":{"type":"string","description":"On-screen auto-start state.\n\n- `not_requested`: not requested\n- `pending`: waits for the first dub\n- `started`: the onscreen job was created\n- `rejected`: refused; see rejection_code","enum":["not_requested","pending","started","rejected"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.onscreen_auto_start.state","typeLabel":"enum\u003cstring>"},"rejection_code":{"oneOf":[{"type":"string","description":"Rejection code.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.onscreen_auto_start.rejection_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"Rejection code.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.onscreen_auto_start.rejection_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.onscreen_auto_start.rejection_code","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.onscreen_auto_start","typeLabel":"object"},"localization_job_id":{"oneOf":[{"type":"string","description":"The `localization` job started after translation; null without a `localization` block.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.localization_job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The `localization` job started after translation; null without a `localization` block.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.localization_job_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.localization_job_id","typeLabel":"string | null"},"notices":{"type":"array","items":{"type":"object","description":"A non-blocking notice in a job result.","required":["code","detail","speaker_labels"],"properties":{"code":{"type":"string","description":"A non-blocking fact about how a job ran.\n\n- `dubbing_model_overridden`: the effective dubbing model differs from the requested one, or from the default `v2` when the request named none (see `dubbing_model_override_reason`)\n- `meaning_first_disabled`: meaning-first translation or dubbing is switched off, so the legacy path ran\n- `voice_fallback`: the project uses dubbing model v2, but a voice that is not `meaning_first_compatible` sent this voiceover to the legacy engine\n- `speaker_voice_unused`: a `speaker_voices` entry names a speaker the transcript does not have; the entry was ignored\n- `speaker_voice_not_applied`: a `speaker_voices` clone could not be applied once speakers were known (too little speech, daily clone quota); the speaker keeps the suggested voice","enum":["dubbing_model_overridden","meaning_first_disabled","voice_fallback","speaker_voice_unused","speaker_voice_not_applied"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.notices.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","description":"Explanation; never user text.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.notices.items.[INDEX].detail","typeLabel":"string"},"speaker_labels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].result.oneOf.1.notices.items.[INDEX].speaker_labels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"speaker_voice_unused, speaker_voice_not_applied: the speaker labels concerned; otherwise null.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.notices.items.[INDEX].speaker_labels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"speaker_voice_unused, speaker_voice_not_applied: the speaker labels concerned; otherwise null.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.notices.items.[INDEX].speaker_labels.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.notices.items.[INDEX].speaker_labels","typeLabel":"string[] | null"}},"uniqueKey":"data.items.[INDEX].result.oneOf.1.notices.items.[INDEX]","typeLabel":"object"},"description":"Notices of the run (`dubbing_model_overridden`, `meaning_first_disabled`, `speaker_voice_unused`, `speaker_voice_not_applied`).","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1.notices","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.1","typeLabel":"object"},{"type":"object","description":"Set when succeeded; a failed `segment_generation` job may also list clips already voiced.","required":["type","segment_ids","failed_segment_ids","skipped_segment_ids","version_number"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["translation"],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.2.type","typeLabel":"enum\u003cstring>"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].result.oneOf.2.segment_ids.items.[INDEX]","typeLabel":"string"},"description":"Translated segments.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.2.segment_ids","typeLabel":"string[]"},"failed_segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].result.oneOf.2.failed_segment_ids.items.[INDEX]","typeLabel":"string"},"description":"Segments whose translation failed.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.2.failed_segment_ids","typeLabel":"string[]"},"skipped_segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].result.oneOf.2.skipped_segment_ids.items.[INDEX]","typeLabel":"string"},"description":"Segments skipped because they turned busy.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.2.skipped_segment_ids","typeLabel":"string[]"},"version_number":{"oneOf":[{"type":"integer","description":"The translation_completed version.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.2.version_number.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"The translation_completed version.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.2.version_number.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.2.version_number","typeLabel":"integer\u003cint32> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.2","typeLabel":"object"},{"type":"object","description":"Set when succeeded; a failed `segment_generation` job may also list clips already voiced.","required":["type","clips","engine","text_adaptation","notices"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["segment_generation"],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.type","typeLabel":"enum\u003cstring>"},"clips":{"type":"array","items":{"type":"object","description":"One voiced take of a segment, produced by a `segment_generation` job and stored under that job: a later take of the same segment does not overwrite it, so an old job keeps serving its old take. The clip keeps its natural duration; it is neither stretched nor cut to the interval.","required":["segment_id","generation_id","segment_etag","speaker_id","speaker_label","start_seconds","end_seconds","audio_duration_seconds","overrun_seconds","fit","format","url","expires_at"],"properties":{"segment_id":{"type":"string","description":"Segment.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].segment_id","typeLabel":"string"},"generation_id":{"type":"string","description":"The `segment_generation` job that produced this take.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].generation_id","typeLabel":"string"},"segment_etag":{"type":"string","description":"The segment ETag right after synthesis. When the current ETag differs, the segment has changed and the take may no longer match it.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].segment_etag","typeLabel":"string"},"speaker_id":{"oneOf":[{"type":"string","description":"Speaker (`SPEAKER_NN`) at synthesis.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].speaker_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Speaker (`SPEAKER_NN`) at synthesis.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].speaker_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].speaker_id","typeLabel":"string | null"},"speaker_label":{"oneOf":[{"type":"string","description":"Display name of the speaker (\"Speaker N\") at synthesis.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].speaker_label.oneOf.0","typeLabel":"string"},{"type":"null","description":"Display name of the speaker (\"Speaker N\") at synthesis.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].speaker_label.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].speaker_label","typeLabel":"string | null"},"start_seconds":{"type":"number","description":"Segment start, frozen at synthesis.","format":"double","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].start_seconds","typeLabel":"number\u003cdouble>"},"end_seconds":{"type":"number","description":"Segment end, frozen at synthesis.","format":"double","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].end_seconds","typeLabel":"number\u003cdouble>"},"audio_duration_seconds":{"type":"number","description":"Natural duration of the take.","format":"double","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].audio_duration_seconds","typeLabel":"number\u003cdouble>"},"overrun_seconds":{"type":"number","description":"`audio_duration_seconds` minus the interval, never below 0. In a later dub an overrun pushes the same speaker's next line later.","format":"double","minimum":0,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].overrun_seconds","typeLabel":"number\u003cdouble>"},"fit":{"type":"string","description":"How a clip fits its segment interval.\n\n- `fits`: the clip is no longer than the interval\n- `overruns`: the clip is longer than the interval by `overrun_seconds`","enum":["fits","overruns"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].fit","typeLabel":"enum\u003cstring>"},"format":{"type":"string","description":"Audio format (mp3, flac, wav).","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].format","typeLabel":"string"},"url":{"oneOf":[{"type":"string","description":"Absolute presigned download URL, minted at read time; null in webhook payloads and when the plan no longer includes `audio_download`.","format":"uri","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","description":"Absolute presigned download URL, minted at read time; null in webhook payloads and when the plan no longer includes `audio_download`.","format":"uri","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].url","typeLabel":"string\u003curi> | null"},"expires_at":{"oneOf":[{"type":"string","description":"URL expiry (1 hour after the read).","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"URL expiry (1 hour after the read).","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX].expires_at","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips.items.[INDEX]","typeLabel":"object"},"description":"The voiced takes.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.clips","typeLabel":"object[]"},"engine":{"type":"string","description":"Voice-over engine.\n\n- `meaning_first`: meaning-first engine\n- `legacy`: legacy engine","enum":["meaning_first","legacy"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.engine","typeLabel":"enum\u003cstring>"},"text_adaptation":{"type":"string","description":"How the dub treats the translated text.\n\n- `context`: voiced with the translation context, so the speech may be adapted to the interval (auto-dub after a meaning-first translation)\n- `as_written`: voiced exactly as the segment text is written (every manual dub, segment generation and auto-dub without a translation context)","enum":["context","as_written"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.text_adaptation","typeLabel":"enum\u003cstring>"},"notices":{"type":"array","items":{"type":"object","description":"A non-blocking notice in a job result.","required":["code","detail","speaker_labels"],"properties":{"code":{"type":"string","description":"A non-blocking fact about how a job ran.\n\n- `dubbing_model_overridden`: the effective dubbing model differs from the requested one, or from the default `v2` when the request named none (see `dubbing_model_override_reason`)\n- `meaning_first_disabled`: meaning-first translation or dubbing is switched off, so the legacy path ran\n- `voice_fallback`: the project uses dubbing model v2, but a voice that is not `meaning_first_compatible` sent this voiceover to the legacy engine\n- `speaker_voice_unused`: a `speaker_voices` entry names a speaker the transcript does not have; the entry was ignored\n- `speaker_voice_not_applied`: a `speaker_voices` clone could not be applied once speakers were known (too little speech, daily clone quota); the speaker keeps the suggested voice","enum":["dubbing_model_overridden","meaning_first_disabled","voice_fallback","speaker_voice_unused","speaker_voice_not_applied"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.notices.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","description":"Explanation; never user text.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.notices.items.[INDEX].detail","typeLabel":"string"},"speaker_labels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].result.oneOf.3.notices.items.[INDEX].speaker_labels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"speaker_voice_unused, speaker_voice_not_applied: the speaker labels concerned; otherwise null.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.notices.items.[INDEX].speaker_labels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"speaker_voice_unused, speaker_voice_not_applied: the speaker labels concerned; otherwise null.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.notices.items.[INDEX].speaker_labels.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.notices.items.[INDEX].speaker_labels","typeLabel":"string[] | null"}},"uniqueKey":"data.items.[INDEX].result.oneOf.3.notices.items.[INDEX]","typeLabel":"object"},"description":"Notices of the run.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3.notices","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.3","typeLabel":"object"},{"type":"object","description":"Set when succeeded; a failed `segment_generation` job may also list clips already voiced.","required":["type","mode_applied","voiced_segment_count","engine","version_number","reused_clip_count","text_adaptation","notices"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["dub"],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.type","typeLabel":"enum\u003cstring>"},"mode_applied":{"type":"string","description":"Dub mode the server applies.\n\n- `full`: every segment\n- `changed_segments`: only changed segments","enum":["full","changed_segments"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.mode_applied","typeLabel":"enum\u003cstring>"},"voiced_segment_count":{"type":"integer","description":"Segments voiced and charged.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.voiced_segment_count","typeLabel":"integer\u003cint32>"},"engine":{"type":"string","description":"Voice-over engine.\n\n- `meaning_first`: meaning-first engine\n- `legacy`: legacy engine","enum":["meaning_first","legacy"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.engine","typeLabel":"enum\u003cstring>"},"version_number":{"oneOf":[{"type":"integer","description":"The dub_completed version.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.version_number.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"The dub_completed version.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.version_number.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.version_number","typeLabel":"integer\u003cint32> | null"},"reused_clip_count":{"type":"integer","description":"Segments merged from their current clip without voicing them again.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.reused_clip_count","typeLabel":"integer\u003cint32>"},"text_adaptation":{"type":"string","description":"How the dub treats the translated text.\n\n- `context`: voiced with the translation context, so the speech may be adapted to the interval (auto-dub after a meaning-first translation)\n- `as_written`: voiced exactly as the segment text is written (every manual dub, segment generation and auto-dub without a translation context)","enum":["context","as_written"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.text_adaptation","typeLabel":"enum\u003cstring>"},"notices":{"type":"array","items":{"type":"object","description":"A non-blocking notice in a job result.","required":["code","detail","speaker_labels"],"properties":{"code":{"type":"string","description":"A non-blocking fact about how a job ran.\n\n- `dubbing_model_overridden`: the effective dubbing model differs from the requested one, or from the default `v2` when the request named none (see `dubbing_model_override_reason`)\n- `meaning_first_disabled`: meaning-first translation or dubbing is switched off, so the legacy path ran\n- `voice_fallback`: the project uses dubbing model v2, but a voice that is not `meaning_first_compatible` sent this voiceover to the legacy engine\n- `speaker_voice_unused`: a `speaker_voices` entry names a speaker the transcript does not have; the entry was ignored\n- `speaker_voice_not_applied`: a `speaker_voices` clone could not be applied once speakers were known (too little speech, daily clone quota); the speaker keeps the suggested voice","enum":["dubbing_model_overridden","meaning_first_disabled","voice_fallback","speaker_voice_unused","speaker_voice_not_applied"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.notices.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","description":"Explanation; never user text.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.notices.items.[INDEX].detail","typeLabel":"string"},"speaker_labels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].result.oneOf.4.notices.items.[INDEX].speaker_labels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"speaker_voice_unused, speaker_voice_not_applied: the speaker labels concerned; otherwise null.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.notices.items.[INDEX].speaker_labels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"speaker_voice_unused, speaker_voice_not_applied: the speaker labels concerned; otherwise null.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.notices.items.[INDEX].speaker_labels.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.notices.items.[INDEX].speaker_labels","typeLabel":"string[] | null"}},"uniqueKey":"data.items.[INDEX].result.oneOf.4.notices.items.[INDEX]","typeLabel":"object"},"description":"Notices of the run (`dubbing_model_overridden`, `meaning_first_disabled`, `voice_fallback`).","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4.notices","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.4","typeLabel":"object"},{"type":"object","description":"Set when succeeded; a failed `segment_generation` job may also list clips already voiced.","required":["type","model","video","download_restricted","is_trimmed","processed_seconds","is_outdated"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["lipsync"],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5.type","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"Lip-sync model.\n\n- `legacy`: the Legacy model\n- `enhanced`: the Enhanced model","enum":["legacy","enhanced"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5.model","typeLabel":"enum\u003cstring>"},"video":{"oneOf":[{"type":"object","description":"The lip-synced video, from the media id the job stored when it finished: it stays readable after a later dub clears the project's record.","required":["media_id","url","expires_at"],"properties":{"media_id":{"type":"string","description":"Media id of the file.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5.video.oneOf.0.media_id","typeLabel":"string"},"url":{"type":"string","description":"Absolute presigned `https://` URL.","format":"uri","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5.video.oneOf.0.url","typeLabel":"string\u003curi>"},"expires_at":{"type":"string","description":"When the URL stops working (1 hour after the read).","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5.video.oneOf.0.expires_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5.video.oneOf.0","typeLabel":"object"},{"type":"null","description":"The lip-synced video, from the media id the job stored when it finished: it stays readable after a later dub clears the project's record.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5.video.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5.video","typeLabel":"object | null"},"download_restricted":{"type":"boolean","description":"The plan withholds the download URL.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5.download_restricted","typeLabel":"boolean"},"is_trimmed":{"type":"boolean","description":"Only part was processed.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5.is_trimmed","typeLabel":"boolean"},"processed_seconds":{"type":"number","description":"Seconds processed.","format":"double","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5.processed_seconds","typeLabel":"number\u003cdouble>"},"is_outdated":{"type":"boolean","description":"A later dub or a newer lip-sync replaced it on the project.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5.is_outdated","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.5","typeLabel":"object"},{"type":"object","description":"Set when succeeded; a failed `segment_generation` job may also list clips already voiced.","required":["type","target_language","video","is_outdated"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["onscreen"],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.6.type","typeLabel":"enum\u003cstring>"},"target_language":{"type":"string","description":"Target language.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.6.target_language","typeLabel":"string"},"video":{"oneOf":[{"type":"object","description":"The translated video.","required":["media_id","url","expires_at"],"properties":{"media_id":{"type":"string","description":"Media id of the file.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.6.video.oneOf.0.media_id","typeLabel":"string"},"url":{"type":"string","description":"Absolute presigned `https://` URL.","format":"uri","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.6.video.oneOf.0.url","typeLabel":"string\u003curi>"},"expires_at":{"type":"string","description":"When the URL stops working (1 hour after the read).","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.6.video.oneOf.0.expires_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.6.video.oneOf.0","typeLabel":"object"},{"type":"null","description":"The translated video.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.6.video.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.6.video","typeLabel":"object | null"},"is_outdated":{"type":"boolean","description":"A later dub made it stale, or a later lip-sync when it was rendered over a lip-synced video.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.6.is_outdated","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.6","typeLabel":"object"},{"type":"object","description":"Set when succeeded; a failed `segment_generation` job may also list clips already voiced.","required":["type","final_output","notices"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["localization"],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.type","typeLabel":"enum\u003cstring>"},"final_output":{"type":"object","description":"The output that holds every ordered change (kind `localized_video`), as of this read: `outdated` follows `Output.outdated`, so an older run's output turns outdated.","required":["object","kind","format","language","available","unavailable_reason","outdated","version","url","expires_at","subtitles_request","filename"],"properties":{"object":{"type":"string","enum":["output"],"description":"Always `output`.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.object","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","description":"Kind of a downloadable output.\n\n- `source`: the original media\n- `cover_image`: the cover frame\n- `dubbed_video`: the dubbed video\n- `dubbed_audio`: dubbed audio with background\n- `voice_track`: the voice-only track\n- `dubbed_subtitles`: subtitles snapshot at the last dub (srt, vtt)\n- `source_subtitles`: source subtitles rendered from the current transcript, one cue per segment\n- `source_subtitles_speakers`: the same with `[SPEAKER_NN]:` labels\n- `target_subtitles`: target subtitles rendered from the current transcript, one cue per segment\n- `target_subtitles_speakers`: the same with `[SPEAKER_NN]:` labels\n- `burned_subtitles_video`: the dubbed video with burned-in subtitles\n- `lipsync_video`: the lip-synced video\n- `lipsync_burned_subtitles_video`: the lip-synced video with burned-in subtitles\n- `onscreen_video`: the video with translated on-screen text\n- `localized_video`: the final video of a localization run, holding every ordered change","enum":["source","cover_image","dubbed_video","dubbed_audio","voice_track","dubbed_subtitles","source_subtitles","source_subtitles_speakers","target_subtitles","target_subtitles_speakers","burned_subtitles_video","lipsync_video","lipsync_burned_subtitles_video","onscreen_video","localized_video"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.kind","typeLabel":"enum\u003cstring>"},"format":{"type":"string","description":"File format (mp4, mp3, srt, vtt, jpg...).","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.format","typeLabel":"string"},"language":{"oneOf":[{"type":"string","description":"Language of the output.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.language.oneOf.0","typeLabel":"string"},{"type":"null","description":"Language of the output.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.language.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.language","typeLabel":"string | null"},"available":{"type":"boolean","description":"True when it can be obtained: `url` is set, or `subtitles_request` says how to render it.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.available","typeLabel":"boolean"},"unavailable_reason":{"oneOf":[{"type":"string","description":"Why there is no URL.","enum":["not_produced","in_progress","not_in_plan","dub_payment_required","not_generated","restoring","temporarily_unavailable"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.unavailable_reason.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Why there is no URL.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.unavailable_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.unavailable_reason","typeLabel":"enum\u003cstring> | null"},"outdated":{"type":"boolean","description":"True when it no longer matches the project. `dubbed_video`, `dubbed_audio`, `voice_track`, `dubbed_subtitles`: a segment with target text is `outdated` or `not_dubbed`, or the transcript or a voice changed since the last dub. `localized_video`: the same rule, or its final stage's job result `is_outdated`, or a newer succeeded `localization` job. Burned and on-screen videos: a later dub made them stale (on-screen: or a new source video). `lipsync_video`: always false, because a later dub removes it (`available: false`, `unavailable_reason: not_produced`; the job result keeps its video). Rendered subtitle variants are always current.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.outdated","typeLabel":"boolean"},"version":{"oneOf":[{"type":"object","description":"Which work produced it; null when nothing was produced, and for the source, the cover and rendered subtitle variants.","required":["number","job_id","produced_at"],"properties":{"number":{"oneOf":[{"type":"integer","description":"Transcript version recorded by the dub that produced it; null for outputs that do not follow a transcript version.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.version.oneOf.0.number.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Transcript version recorded by the dub that produced it; null for outputs that do not follow a transcript version.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.version.oneOf.0.number.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.version.oneOf.0.number","typeLabel":"integer\u003cint32> | null"},"job_id":{"oneOf":[{"type":"string","description":"The v3 job that produced it; null for work started in the web app or API v2.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.version.oneOf.0.job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The v3 job that produced it; null for work started in the web app or API v2.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.version.oneOf.0.job_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.version.oneOf.0.job_id","typeLabel":"string | null"},"produced_at":{"oneOf":[{"type":"string","description":"When it was produced; null when unknown (a web lip-sync).","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.version.oneOf.0.produced_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When it was produced; null when unknown (a web lip-sync).","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.version.oneOf.0.produced_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.version.oneOf.0.produced_at","typeLabel":"string\u003cdate-time> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.version.oneOf.0","typeLabel":"object"},{"type":"null","description":"Which work produced it; null when nothing was produced, and for the source, the cover and rendered subtitle variants.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.version.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.version","typeLabel":"object | null"},"url":{"oneOf":[{"type":"string","description":"Absolute presigned download URL (Content-Disposition: attachment); null when unavailable and for rendered subtitle variants.","format":"uri","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","description":"Absolute presigned download URL (Content-Disposition: attachment); null when unavailable and for rendered subtitle variants.","format":"uri","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.url","typeLabel":"string\u003curi> | null"},"expires_at":{"oneOf":[{"type":"string","description":"URL expiry (1 hour after the read).","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"URL expiry (1 hour after the read).","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.expires_at","typeLabel":"string\u003cdate-time> | null"},"subtitles_request":{"oneOf":[{"type":"object","description":"For a rendered subtitle variant (no stored file): the getProjectSubtitles parameters that produce it; otherwise null, also while `unavailable_reason` is set.","required":["language","format","speaker_labels","cue"],"properties":{"language":{"type":"string","description":"Subtitle side.\n\n- `source`: the source language\n- `target`: the target language","enum":["source","target"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.subtitles_request.oneOf.0.language","typeLabel":"enum\u003cstring>"},"format":{"type":"string","description":"Subtitle format.\n\n- `srt`: SubRip\n- `vtt`: WebVTT","enum":["srt","vtt"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.subtitles_request.oneOf.0.format","typeLabel":"enum\u003cstring>"},"speaker_labels":{"type":"boolean","description":"Value of `speaker_labels`.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.subtitles_request.oneOf.0.speaker_labels","typeLabel":"boolean"},"cue":{"type":"string","description":"How cues are cut.\n\n- `segment`: one cue per segment, text as stored\n- `line`: long segments split into timed lines, as in the `dubbed_subtitles` snapshot","enum":["segment","line"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.subtitles_request.oneOf.0.cue","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.subtitles_request.oneOf.0","typeLabel":"object"},{"type":"null","description":"For a rendered subtitle variant (no stored file): the getProjectSubtitles parameters that produce it; otherwise null, also while `unavailable_reason` is set.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.subtitles_request.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.subtitles_request","typeLabel":"object | null"},"filename":{"type":"string","description":"Suggested file name `\u003cname>_\u003ctarget_language>_\u003ckind>.\u003cext>`.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output.filename","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.final_output","typeLabel":"object"},"notices":{"type":"array","items":{"type":"object","description":"A non-blocking notice in a job result.","required":["code","detail","speaker_labels"],"properties":{"code":{"type":"string","description":"A non-blocking fact about how a job ran.\n\n- `dubbing_model_overridden`: the effective dubbing model differs from the requested one, or from the default `v2` when the request named none (see `dubbing_model_override_reason`)\n- `meaning_first_disabled`: meaning-first translation or dubbing is switched off, so the legacy path ran\n- `voice_fallback`: the project uses dubbing model v2, but a voice that is not `meaning_first_compatible` sent this voiceover to the legacy engine\n- `speaker_voice_unused`: a `speaker_voices` entry names a speaker the transcript does not have; the entry was ignored\n- `speaker_voice_not_applied`: a `speaker_voices` clone could not be applied once speakers were known (too little speech, daily clone quota); the speaker keeps the suggested voice","enum":["dubbing_model_overridden","meaning_first_disabled","voice_fallback","speaker_voice_unused","speaker_voice_not_applied"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.notices.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","description":"Explanation; never user text.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.notices.items.[INDEX].detail","typeLabel":"string"},"speaker_labels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].result.oneOf.7.notices.items.[INDEX].speaker_labels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"speaker_voice_unused, speaker_voice_not_applied: the speaker labels concerned; otherwise null.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.notices.items.[INDEX].speaker_labels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"speaker_voice_unused, speaker_voice_not_applied: the speaker labels concerned; otherwise null.","x-rask-untrusted":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.notices.items.[INDEX].speaker_labels.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.notices.items.[INDEX].speaker_labels","typeLabel":"string[] | null"}},"uniqueKey":"data.items.[INDEX].result.oneOf.7.notices.items.[INDEX]","typeLabel":"object"},"description":"Notices of the run's stages.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7.notices","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.7","typeLabel":"object"},{"type":"object","description":"Set when succeeded; a failed `segment_generation` job may also list clips already voiced.","required":["type","voice_clone_id","language_count"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["voice_clone"],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.8.type","typeLabel":"enum\u003cstring>"},"voice_clone_id":{"type":"string","description":"The clone.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.8.voice_clone_id","typeLabel":"string"},"language_count":{"type":"integer","description":"Languages with samples.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.8.language_count","typeLabel":"integer\u003cint32>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.8","typeLabel":"object"},{"type":"object","description":"Set when succeeded; a failed `segment_generation` job may also list clips already voiced.","required":["type","export_type","source_video","output_kind"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["export"],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.9.type","typeLabel":"enum\u003cstring>"},"export_type":{"type":"string","description":"Export type.\n\n- `burned_subtitles`: a video with burned-in target subtitles","enum":["burned_subtitles"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.9.export_type","typeLabel":"enum\u003cstring>"},"source_video":{"type":"string","description":"Video to export from.\n\n- `dubbed`: the dubbed video\n- `lipsync`: the lip-synced video","enum":["dubbed","lipsync"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.9.source_video","typeLabel":"enum\u003cstring>"},"output_kind":{"type":"string","description":"Kind of a downloadable output.\n\n- `source`: the original media\n- `cover_image`: the cover frame\n- `dubbed_video`: the dubbed video\n- `dubbed_audio`: dubbed audio with background\n- `voice_track`: the voice-only track\n- `dubbed_subtitles`: subtitles snapshot at the last dub (srt, vtt)\n- `source_subtitles`: source subtitles rendered from the current transcript, one cue per segment\n- `source_subtitles_speakers`: the same with `[SPEAKER_NN]:` labels\n- `target_subtitles`: target subtitles rendered from the current transcript, one cue per segment\n- `target_subtitles_speakers`: the same with `[SPEAKER_NN]:` labels\n- `burned_subtitles_video`: the dubbed video with burned-in subtitles\n- `lipsync_video`: the lip-synced video\n- `lipsync_burned_subtitles_video`: the lip-synced video with burned-in subtitles\n- `onscreen_video`: the video with translated on-screen text\n- `localized_video`: the final video of a localization run, holding every ordered change","enum":["source","cover_image","dubbed_video","dubbed_audio","voice_track","dubbed_subtitles","source_subtitles","source_subtitles_speakers","target_subtitles","target_subtitles_speakers","burned_subtitles_video","lipsync_video","lipsync_burned_subtitles_video","onscreen_video","localized_video"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.9.output_kind","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.9","typeLabel":"object"},{"type":"object","description":"Set when succeeded; a failed `segment_generation` job may also list clips already voiced.","required":["type","files_checked","files_restored"],"x-rask-open-union":true,"properties":{"type":{"type":"string","enum":["file_restore"],"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.10.type","typeLabel":"enum\u003cstring>"},"files_checked":{"type":"integer","description":"Files checked.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.10.files_checked","typeLabel":"integer\u003cint32>"},"files_restored":{"type":"integer","description":"Files restored.","format":"int32","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.10.files_restored","typeLabel":"integer\u003cint32>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.10","typeLabel":"object"},{"type":"null","description":"Set when succeeded; a failed `segment_generation` job may also list clips already voiced.","isRequired":true,"uniqueKey":"data.items.[INDEX].result.oneOf.11","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].result","typeLabel":"object · object · object · object · object · object · object · object · object · object · object · null"},"error":{"oneOf":[{"type":"object","description":"Set when failed; on a canceled job only for the cancellation reason `project_deleted` (the project was deleted while the job ran; its work is discarded, refunded only for on-screen); `instance` is `/v3/jobs/{id}`, `detail` is generic. Each code's `status`, `retry`, `recommendation` and `hint` are in `components.x-rask-job-errors`. Codes by type: media_import `source_download_failed`, `unsupported_media_type`, `media_corrupt`, `media_processing_failed`, `media_too_large` (a voice sample above its limit); project_processing `media_processing_failed`, `source_unavailable`, `no_audio_track`, `transcription_failed`, `no_speech_detected`, `audio_separation_failed`, `speaker_detection_failed`, `translation_failed`, `subtitle_import_rolled_back`, `project_processing_timeout`, `internal_error`; translation `translation_failed`, `translation_dispatch_failed`, `translation_timeout`; segment_generation (`cause_code`) `segment_generation_failed`, `segment_generation_timeout`; localization `localization_stage_failed`, `localization_stage_skipped` (`failed_stage`, `cause_code`); dub (`cause_code`) `dub_voiceover_failed`, `dub_merge_failed`, `dub_failed`, `dub_timeout`; lipsync `lipsync_failed`, `face_check_failed`, `no_face_detected`, `lipsync_rejected` (`cause_code`), `lipsync_timeout`; onscreen `onscreen_queue_timeout`, `onscreen_runner_lost`, `onscreen_runner_failed`, `onscreen_provider_unavailable`, `onscreen_finalize_timeout`, `onscreen_invalid_result`, `onscreen_publish_failed`, `onscreen_source_unavailable`, `onscreen_charge_failed`; voice_clone `voice_clone_failed`, `voice_clone_timeout`; export `export_failed`; file_restore `restore_failed`. A failed job refunds its minutes (`onscreen_charge_failed` never charged). A failed `localization` job refunds only the failed stage, by its type's rule: succeeded stages stay charged, and skipped or unreached stages were never charged. A failed `project_processing` job refunds its project credit when a stage from transcription to translation failed, when it timed out and when a copy failed, but not for `media_processing_failed`, `source_unavailable`, `no_audio_track` or the `internal_error` of a new project.","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"data.items.[INDEX].error.oneOf.0.errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"data.items.[INDEX].error.oneOf.0.current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"data.items.[INDEX].error.oneOf.0.required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"data.items.[INDEX].error.oneOf.0.granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"data.items.[INDEX].error.oneOf.0.reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"data.items.[INDEX].error.oneOf.0.resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"data.items.[INDEX].error.oneOf.0.policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.items.[INDEX].error.oneOf.0.active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"data.items.[INDEX].error.oneOf.0.active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].error.oneOf.0.active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"data.items.[INDEX].error.oneOf.0.active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"data.items.[INDEX].error.oneOf.0.segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"data.items.[INDEX].error.oneOf.0.segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"data.items.[INDEX].error.oneOf.0.job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"data.items.[INDEX].error.oneOf.0.job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].error.oneOf.0.job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"data.items.[INDEX].error.oneOf.0.job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"data.items.[INDEX].error.oneOf.0.import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"data.items.[INDEX].error.oneOf.0.expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"data.items.[INDEX].error.oneOf.0.revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"data.items.[INDEX].error.oneOf.0.token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"data.items.[INDEX].error.oneOf.0.server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"data.items.[INDEX].error.oneOf.0.parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"data.items.[INDEX].error.oneOf.0.max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"data.items.[INDEX].error.oneOf.0.size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"data.items.[INDEX].error.oneOf.0.max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"data.items.[INDEX].error.oneOf.0.duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"data.items.[INDEX].error.oneOf.0.declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"data.items.[INDEX].error.oneOf.0.actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"data.items.[INDEX].error.oneOf.0.project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"data.items.[INDEX].error.oneOf.0.content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"data.items.[INDEX].error.oneOf.0.cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0.failed_stage","typeLabel":"enum\u003cstring>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.0","typeLabel":"object"},{"type":"null","description":"Set when failed; on a canceled job only for the cancellation reason `project_deleted` (the project was deleted while the job ran; its work is discarded, refunded only for on-screen); `instance` is `/v3/jobs/{id}`, `detail` is generic. Each code's `status`, `retry`, `recommendation` and `hint` are in `components.x-rask-job-errors`. Codes by type: media_import `source_download_failed`, `unsupported_media_type`, `media_corrupt`, `media_processing_failed`, `media_too_large` (a voice sample above its limit); project_processing `media_processing_failed`, `source_unavailable`, `no_audio_track`, `transcription_failed`, `no_speech_detected`, `audio_separation_failed`, `speaker_detection_failed`, `translation_failed`, `subtitle_import_rolled_back`, `project_processing_timeout`, `internal_error`; translation `translation_failed`, `translation_dispatch_failed`, `translation_timeout`; segment_generation (`cause_code`) `segment_generation_failed`, `segment_generation_timeout`; localization `localization_stage_failed`, `localization_stage_skipped` (`failed_stage`, `cause_code`); dub (`cause_code`) `dub_voiceover_failed`, `dub_merge_failed`, `dub_failed`, `dub_timeout`; lipsync `lipsync_failed`, `face_check_failed`, `no_face_detected`, `lipsync_rejected` (`cause_code`), `lipsync_timeout`; onscreen `onscreen_queue_timeout`, `onscreen_runner_lost`, `onscreen_runner_failed`, `onscreen_provider_unavailable`, `onscreen_finalize_timeout`, `onscreen_invalid_result`, `onscreen_publish_failed`, `onscreen_source_unavailable`, `onscreen_charge_failed`; voice_clone `voice_clone_failed`, `voice_clone_timeout`; export `export_failed`; file_restore `restore_failed`. A failed job refunds its minutes (`onscreen_charge_failed` never charged). A failed `localization` job refunds only the failed stage, by its type's rule: succeeded stages stay charged, and skipped or unreached stages were never charged. A failed `project_processing` job refunds its project credit when a stage from transcription to translation failed, when it timed out and when a copy failed, but not for `media_processing_failed`, `source_unavailable`, `no_audio_track` or the `internal_error` of a new project.","isRequired":true,"uniqueKey":"data.items.[INDEX].error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].error","typeLabel":"object | null"},"created_at":{"type":"string","description":"Creation time.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].created_at","typeLabel":"string\u003cdate-time>"},"started_at":{"oneOf":[{"type":"string","description":"Start time.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].started_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Start time.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].started_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].started_at","typeLabel":"string\u003cdate-time> | null"},"finished_at":{"oneOf":[{"type":"string","description":"End time.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].finished_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"End time.","format":"date-time","isRequired":true,"uniqueKey":"data.items.[INDEX].finished_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].finished_at","typeLabel":"string\u003cdate-time> | null"},"links":{"type":"object","description":"Path-absolute API links.","required":["self","project","outputs","media"],"properties":{"self":{"type":"string","description":"This job.","format":"uri-reference","isRequired":true,"uniqueKey":"data.items.[INDEX].links.self","typeLabel":"string\u003curi-reference>"},"project":{"oneOf":[{"type":"string","description":"The project.","format":"uri-reference","isRequired":true,"uniqueKey":"data.items.[INDEX].links.project.oneOf.0","typeLabel":"string\u003curi-reference>"},{"type":"null","description":"The project.","format":"uri-reference","isRequired":true,"uniqueKey":"data.items.[INDEX].links.project.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].links.project","typeLabel":"string\u003curi-reference> | null"},"outputs":{"oneOf":[{"type":"string","description":"The project's outputs.","format":"uri-reference","isRequired":true,"uniqueKey":"data.items.[INDEX].links.outputs.oneOf.0","typeLabel":"string\u003curi-reference>"},{"type":"null","description":"The project's outputs.","format":"uri-reference","isRequired":true,"uniqueKey":"data.items.[INDEX].links.outputs.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].links.outputs","typeLabel":"string\u003curi-reference> | null"},"media":{"oneOf":[{"type":"string","description":"The media.","format":"uri-reference","isRequired":true,"uniqueKey":"data.items.[INDEX].links.media.oneOf.0","typeLabel":"string\u003curi-reference>"},{"type":"null","description":"The media.","format":"uri-reference","isRequired":true,"uniqueKey":"data.items.[INDEX].links.media.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].links.media","typeLabel":"string\u003curi-reference> | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].links","typeLabel":"object"}},"uniqueKey":"data.items.[INDEX]","typeLabel":"object"},"description":"Items of this page.","isRequired":true,"uniqueKey":"data","typeLabel":"object[]"},"next_cursor":{"oneOf":[{"type":"string","description":"Pass as `cursor` for the next page; null on the last page.","isRequired":true,"uniqueKey":"next_cursor.oneOf.0","typeLabel":"string"},{"type":"null","description":"Pass as `cursor` for the next page; null on the last page.","isRequired":true,"uniqueKey":"next_cursor.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"next_cursor","typeLabel":"string | null"},"has_more":{"type":"boolean","description":"More items exist (a page may hold fewer than `limit` items while has_more is true).","isRequired":true,"uniqueKey":"has_more","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"two_jobs":{"title":"two_jobs","value":{"object":"list","data":[{"object":"job","id":"1c6e8a2f-5b3d-4e9a-8f7c-2d4b6e8a0c35","workspace_id":"b2e0c6d4-5b1a-4f7e-9a3c-2d8f1e6a7b90","type":"project_processing","status":"queued","progress":1,"stage":"queued","queue_position":null,"estimated_finish_at":"2026-11-03T09:17:44Z","overdue":false,"project_id":"9a7e3c1d-2b5f-4c8e-a6d4-0f1b8e3c2d79","media_id":"c7d2a9e4-3b1f-4a6c-8d5e-9f0b2e7c1a63","parent_job_id":null,"channel":"api","params":{"type":"project_processing","trigger":"copy","source_language":null,"target_language":"fr-fr","free_dubbing":false,"dubbing_model":"v2","auto_dub":true,"onscreen_auto_start":false,"localization":null,"expected_cost_minutes":1,"copy_of_project_id":"6f1c2b7e-8a4d-4e3f-9b5c-1d0a7e2f3c58"},"details":null,"stages":null,"cost":{"credit_type":"projects","projects":0,"charged":true,"refunded":false,"refunded_at":null},"result":null,"error":null,"created_at":"2026-11-03T09:12:44Z","started_at":null,"finished_at":null,"links":{"self":"/v3/jobs/1c6e8a2f-5b3d-4e9a-8f7c-2d4b6e8a0c35","project":"/v3/projects/9a7e3c1d-2b5f-4c8e-a6d4-0f1b8e3c2d79","outputs":null,"media":"/v3/media/c7d2a9e4-3b1f-4a6c-8d5e-9f0b2e7c1a63"}},{"object":"job","id":"8e2a4c6f-9b1d-4f3a-b5c7-6d8e0f2a4b17","workspace_id":"b2e0c6d4-5b1a-4f7e-9a3c-2d8f1e6a7b90","type":"project_processing","status":"queued","progress":1,"stage":"queued","queue_position":null,"estimated_finish_at":"2026-11-03T09:17:44Z","overdue":false,"project_id":"4b8d2e6f-1a3c-4e5b-9d7f-2c4e6a8b0d13","media_id":"c7d2a9e4-3b1f-4a6c-8d5e-9f0b2e7c1a63","parent_job_id":null,"channel":"api","params":{"type":"project_processing","trigger":"copy","source_language":null,"target_language":"de-de","free_dubbing":false,"dubbing_model":"v2","auto_dub":true,"onscreen_auto_start":false,"localization":null,"expected_cost_minutes":1,"copy_of_project_id":"6f1c2b7e-8a4d-4e3f-9b5c-1d0a7e2f3c58"},"details":null,"stages":null,"cost":{"credit_type":"projects","projects":0,"charged":true,"refunded":false,"refunded_at":null},"result":null,"error":null,"created_at":"2026-11-03T09:12:44Z","started_at":null,"finished_at":null,"links":{"self":"/v3/jobs/8e2a4c6f-9b1d-4f3a-b5c7-6d8e0f2a4b17","project":"/v3/projects/4b8d2e6f-1a3c-4e5b-9d7f-2c4e6a8b0d13","outputs":null,"media":"/v3/media/c7d2a9e4-3b1f-4a6c-8d5e-9f0b2e7c1a63"}}],"next_cursor":null,"has_more":false}}},"exampleType":"examples"}},"exampleType":"examples"},"098099ff-732a-4c66-b5c6-0e068af81798":{"description":"Bad request. Codes: `token_in_query`, `idempotency_key_required`.","headers":{"X-Request-Id":{"description":"Request id (UUID); also the problem `instance` (`urn:uuid:\u003cid>`). Quote it to support.","schema":{"type":"string"},"example":"7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93"},"RateLimit":{"description":"Remaining quota of the most constrained policy (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";r=597;t=42"},"RateLimit-Policy":{"description":"Rate-limit policies that apply to the key (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";q=600;w=60, \"account-minute\";q=1800;w=60"}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"failed_stage","typeLabel":"enum\u003cstring>"}},"description":"RFC 9457 problem details (`application/problem+json`), used for every 4xx/5xx response and for `Job.error`. Branch on `code`; follow `hint`; act as `recommendation` says; retry as `retry` says. An extension member has one type across all codes and never reuses an RFC 9457 or Problem member name (hence `job_type`, and `active_job_count` for a count beside `active_jobs` for a list). Extension members appear only with the codes that define them (see each property). The problem registry and one documentation page per code live at https://docs.api.rask.ai/errors.","additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"examples":{"token_in_query":{"title":"token_in_query","value":{"type":"https://docs.api.rask.ai/errors/token_in_query","title":"Token in query","status":400,"detail":"A credential was sent in the query string parameter 'api_key'.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"token_in_query","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Send the key in the Authorization header as 'Bearer \u003ckey>' and revoke the exposed key in the web app.","errors":[],"parameter":"api_key"}},"idempotency_key_required":{"title":"idempotency_key_required","value":{"type":"https://docs.api.rask.ai/errors/idempotency_key_required","title":"Idempotency key required","status":400,"detail":"This operation starts work or spends credits and needs an Idempotency-Key header.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"idempotency_key_required","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Send an Idempotency-Key header (a UUIDv4) and reuse the same value when you retry this request.","errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"d43fd901-8d5d-46e9-b8fa-57e8a04d5082":{"description":"Unauthorized. Codes: `authentication_required`, `invalid_token`, `token_expired`, `token_revoked`, `token_wrong_environment`.","headers":{"X-Request-Id":{"description":"Request id (UUID); also the problem `instance` (`urn:uuid:\u003cid>`). Quote it to support.","schema":{"type":"string"},"example":"7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93"},"WWW-Authenticate":{"description":"Bearer challenge, e.g. `Bearer realm=\"api.rask.ai\", error=\"invalid_token\"`; for insufficient_scope it names the required scopes.","schema":{"type":"string"},"example":"Bearer realm=\"api.rask.ai\", error=\"insufficient_scope\", scope=\"dubbing:write credits:spend\""}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"failed_stage","typeLabel":"enum\u003cstring>"}},"description":"RFC 9457 problem details (`application/problem+json`), used for every 4xx/5xx response and for `Job.error`. Branch on `code`; follow `hint`; act as `recommendation` says; retry as `retry` says. An extension member has one type across all codes and never reuses an RFC 9457 or Problem member name (hence `job_type`, and `active_job_count` for a count beside `active_jobs` for a list). Extension members appear only with the codes that define them (see each property). The problem registry and one documentation page per code live at https://docs.api.rask.ai/errors.","additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"examples":{"authentication_required":{"title":"authentication_required","value":{"type":"https://docs.api.rask.ai/errors/authentication_required","title":"Authentication required","status":401,"detail":"No bearer credential was sent.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"authentication_required","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Send 'Authorization: Bearer \u003cAPI key>'; SDKs read RASK_API_KEY.","errors":[]}},"invalid_token":{"title":"invalid_token","value":{"type":"https://docs.api.rask.ai/errors/invalid_token","title":"Invalid token","status":401,"detail":"The credential is malformed or unknown.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"invalid_token","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Check that RASK_API_KEY holds a complete key created in Settings -> API keys.","errors":[]}},"token_expired":{"title":"token_expired","value":{"type":"https://docs.api.rask.ai/errors/token_expired","title":"Token expired","status":401,"detail":"The API key expired.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"token_expired","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Create a new key in Settings -> API keys and update RASK_API_KEY.","errors":[],"expired_at":"2026-10-31T00:00:00Z"}},"token_revoked":{"title":"token_revoked","value":{"type":"https://docs.api.rask.ai/errors/token_revoked","title":"Token revoked","status":401,"detail":"The API key was revoked.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"token_revoked","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Create a new key in Settings -> API keys; the old key cannot be restored.","errors":[],"revoked_reason":"revoked_by_user"}},"token_wrong_environment":{"title":"token_wrong_environment","value":{"type":"https://docs.api.rask.ai/errors/token_wrong_environment","title":"Token wrong environment","status":401,"detail":"A test key was sent to the production API.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"token_wrong_environment","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Use a raskai_live_ key with api.rask.ai and a raskai_test_ key with a test environment.","errors":[],"token_env":"test","server_env":"live"}}},"exampleType":"examples"}},"exampleType":"examples"},"75139b01-5402-426c-97d3-6f09ed4e26f1":{"description":"Insufficient balance. Codes: `insufficient_balance`.","headers":{"X-Request-Id":{"description":"Request id (UUID); also the problem `instance` (`urn:uuid:\u003cid>`). Quote it to support.","schema":{"type":"string"},"example":"7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93"},"RateLimit":{"description":"Remaining quota of the most constrained policy (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";r=597;t=42"},"RateLimit-Policy":{"description":"Rate-limit policies that apply to the key (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";q=600;w=60, \"account-minute\";q=1800;w=60"}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"failed_stage","typeLabel":"enum\u003cstring>"}},"description":"RFC 9457 problem details (`application/problem+json`), used for every 4xx/5xx response and for `Job.error`. Branch on `code`; follow `hint`; act as `recommendation` says; retry as `retry` says. An extension member has one type across all codes and never reuses an RFC 9457 or Problem member name (hence `job_type`, and `active_job_count` for a count beside `active_jobs` for a list). Extension members appear only with the codes that define them (see each property). The problem registry and one documentation page per code live at https://docs.api.rask.ai/errors.","additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"examples":{"insufficient_balance":{"title":"insufficient_balance","value":{"type":"https://docs.api.rask.ai/errors/insufficient_balance","title":"Insufficient balance","status":402,"detail":"Dubbing project 6f1c2b7e needs 1 minute; the workspace owner has 0.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"insufficient_balance","retryable":false,"retry":"none","recommendation":"top_up","hint":"Stop and tell the user: the workspace owner adds minutes in the web app. Check GET /v3/balance.","errors":[],"credit_type":"minutes","required_minutes":1,"balance_minutes":0}}},"exampleType":"examples"}},"exampleType":"examples"},"513070fc-339b-40f2-9d84-491204a0c577":{"description":"Forbidden. Codes: `insufficient_scope`, `account_disabled`, `feature_not_in_plan`, `workspace_access_suspended`, `token_spend_limit_exceeded`, `forbidden`, `prepare_mode_not_enabled`.","headers":{"X-Request-Id":{"description":"Request id (UUID); also the problem `instance` (`urn:uuid:\u003cid>`). Quote it to support.","schema":{"type":"string"},"example":"7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93"},"RateLimit":{"description":"Remaining quota of the most constrained policy (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";r=597;t=42"},"RateLimit-Policy":{"description":"Rate-limit policies that apply to the key (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";q=600;w=60, \"account-minute\";q=1800;w=60"},"WWW-Authenticate":{"description":"Bearer challenge, e.g. `Bearer realm=\"api.rask.ai\", error=\"invalid_token\"`; for insufficient_scope it names the required scopes.","schema":{"type":"string"},"example":"Bearer realm=\"api.rask.ai\", error=\"insufficient_scope\", scope=\"dubbing:write credits:spend\""}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"failed_stage","typeLabel":"enum\u003cstring>"}},"description":"RFC 9457 problem details (`application/problem+json`), used for every 4xx/5xx response and for `Job.error`. Branch on `code`; follow `hint`; act as `recommendation` says; retry as `retry` says. An extension member has one type across all codes and never reuses an RFC 9457 or Problem member name (hence `job_type`, and `active_job_count` for a count beside `active_jobs` for a list). Extension members appear only with the codes that define them (see each property). The problem registry and one documentation page per code live at https://docs.api.rask.ai/errors.","additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"examples":{"insufficient_scope":{"title":"insufficient_scope","value":{"type":"https://docs.api.rask.ai/errors/insufficient_scope","title":"Insufficient scope","status":403,"detail":"This operation needs scopes the key does not have.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"insufficient_scope","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Use a key that has the scopes in required_scopes; scopes cannot be added to an existing key.","errors":[],"required_scopes":["dubbing:write","credits:spend"],"granted_scopes":["dubbing:write","projects:read","jobs:read"]}},"account_disabled":{"title":"account_disabled","value":{"type":"https://docs.api.rask.ai/errors/account_disabled","title":"Account disabled","status":403,"detail":"The user this key acts as is deactivated.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"account_disabled","retryable":false,"retry":"none","recommendation":"contact_support","hint":"Stop and contact Rask support; the acting user is deactivated.","errors":[]}},"feature_not_in_plan":{"title":"feature_not_in_plan","value":{"type":"https://docs.api.rask.ai/errors/feature_not_in_plan","title":"Feature not in plan","status":403,"detail":"The payer's plan does not include lipsync_enhanced.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"feature_not_in_plan","retryable":false,"retry":"none","recommendation":"top_up","hint":"Stop and tell the user the plan does not include this feature; GET /v3/plan lists entitlements.","errors":[],"feature":"lipsync_enhanced"}},"prepare_mode_not_enabled":{"title":"prepare_mode_not_enabled","value":{"type":"https://docs.api.rask.ai/errors/prepare_mode_not_enabled","title":"Prepare mode not enabled","status":403,"detail":"A project without auto-dub is not available: free preparation is not enabled.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"prepare_mode_not_enabled","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Remove auto_dub=false and send expected_cost_minutes from the estimate; voices can be chosen with speaker_voices.","errors":[]}},"workspace_access_suspended":{"title":"workspace_access_suspended","value":{"type":"https://docs.api.rask.ai/errors/workspace_access_suspended","title":"Workspace access suspended","status":403,"detail":"The workspace is not accessible: the owner's subscription is inactive.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"workspace_access_suspended","retryable":false,"retry":"none","recommendation":"top_up","hint":"Stop and tell the user to restore access to the workspace in the web app.","errors":[],"reason":"subscription_inactive"}},"token_spend_limit_exceeded":{"title":"token_spend_limit_exceeded","value":{"type":"https://docs.api.rask.ai/errors/token_spend_limit_exceeded","title":"Token spend limit exceeded","status":403,"detail":"This request would exceed the key's monthly limit on the minutes pool.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"token_spend_limit_exceeded","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Stop until resets_at, or ask the user to raise this key's monthly limit in Settings -> API keys.","errors":[],"credit_type":"minutes","limit_minutes":500,"spent_minutes":495,"required_minutes":12,"resets_at":"2026-12-01T00:00:00Z"}},"forbidden":{"title":"forbidden","value":{"type":"https://docs.api.rask.ai/errors/forbidden","title":"Forbidden","status":403,"detail":"Requests from the documentation playground may call only GET and estimate operations.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"forbidden","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Call this operation from your own code, not from the docs playground.","errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"8908411f-561c-4596-ba06-edec469414ec":{"description":"Not found. Codes: `project_not_found`, `glossary_not_found`.","headers":{"X-Request-Id":{"description":"Request id (UUID); also the problem `instance` (`urn:uuid:\u003cid>`). Quote it to support.","schema":{"type":"string"},"example":"7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93"},"RateLimit":{"description":"Remaining quota of the most constrained policy (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";r=597;t=42"},"RateLimit-Policy":{"description":"Rate-limit policies that apply to the key (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";q=600;w=60, \"account-minute\";q=1800;w=60"}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"failed_stage","typeLabel":"enum\u003cstring>"}},"description":"RFC 9457 problem details (`application/problem+json`), used for every 4xx/5xx response and for `Job.error`. Branch on `code`; follow `hint`; act as `recommendation` says; retry as `retry` says. An extension member has one type across all codes and never reuses an RFC 9457 or Problem member name (hence `job_type`, and `active_job_count` for a count beside `active_jobs` for a list). Extension members appear only with the codes that define them (see each property). The problem registry and one documentation page per code live at https://docs.api.rask.ai/errors.","additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"examples":{"project_not_found":{"title":"project_not_found","value":{"type":"https://docs.api.rask.ai/errors/project_not_found","title":"Project not found","status":404,"detail":"No project with this id exists in the key's workspace.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"project_not_found","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Use an id returned by listProjects for this workspace.","errors":[]}},"glossary_not_found":{"title":"glossary_not_found","value":{"type":"https://docs.api.rask.ai/errors/glossary_not_found","title":"Glossary not found","status":404,"detail":"No glossary with this id exists in the key's workspace.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"glossary_not_found","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Use an id returned by listGlossaries for this workspace.","errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"33196b8a-b1f4-4cb0-b3af-b2637ec0daab":{"description":"Conflict. Codes: `idempotency_key_in_use`, `project_not_ready`, `cost_changed`.","headers":{"X-Request-Id":{"description":"Request id (UUID); also the problem `instance` (`urn:uuid:\u003cid>`). Quote it to support.","schema":{"type":"string"},"example":"7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93"},"RateLimit":{"description":"Remaining quota of the most constrained policy (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";r=597;t=42"},"RateLimit-Policy":{"description":"Rate-limit policies that apply to the key (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";q=600;w=60, \"account-minute\";q=1800;w=60"},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","format":"int32","minimum":0},"example":30}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"failed_stage","typeLabel":"enum\u003cstring>"}},"description":"RFC 9457 problem details (`application/problem+json`), used for every 4xx/5xx response and for `Job.error`. Branch on `code`; follow `hint`; act as `recommendation` says; retry as `retry` says. An extension member has one type across all codes and never reuses an RFC 9457 or Problem member name (hence `job_type`, and `active_job_count` for a count beside `active_jobs` for a list). Extension members appear only with the codes that define them (see each property). The problem registry and one documentation page per code live at https://docs.api.rask.ai/errors.","additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"examples":{"idempotency_key_in_use":{"title":"idempotency_key_in_use","value":{"type":"https://docs.api.rask.ai/errors/idempotency_key_in_use","title":"Idempotency key in use","status":409,"detail":"A request with this Idempotency-Key is still in flight.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"idempotency_key_in_use","retryable":true,"retry":"same_key","recommendation":"wait","hint":"Wait Retry-After seconds and retry with the same Idempotency-Key.","errors":[]}},"project_not_ready":{"title":"project_not_ready","value":{"type":"https://docs.api.rask.ai/errors/project_not_ready","title":"Project not ready","status":409,"detail":"Project 6f1c2b7e is still processing.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"project_not_ready","retryable":true,"retry":"same_key","recommendation":"wait","hint":"Wait until processing_state.terminal is true (getProject or the project_processing job).","errors":[],"job_id":"e4a1c9f3-2d7b-4f5e-8a6c-0b3d9e1f7a52","job_type":"project_processing"}},"cost_changed":{"title":"cost_changed","value":{"type":"https://docs.api.rask.ai/errors/cost_changed","title":"Cost changed","status":409,"detail":"The current price is higher than expected_cost_minutes; nothing was charged.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"cost_changed","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Call the estimate operation again and resend with its total_minutes as expected_cost_minutes.","errors":[],"expected_cost_minutes":1,"current_cost_minutes":2}}},"exampleType":"examples"}},"exampleType":"examples"},"5bb4f0e5-5a41-4e76-ab4e-10f11b66e4d5":{"description":"Content too large. Codes: `request_too_large`.","headers":{"X-Request-Id":{"description":"Request id (UUID); also the problem `instance` (`urn:uuid:\u003cid>`). Quote it to support.","schema":{"type":"string"},"example":"7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93"},"RateLimit":{"description":"Remaining quota of the most constrained policy (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";r=597;t=42"},"RateLimit-Policy":{"description":"Rate-limit policies that apply to the key (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";q=600;w=60, \"account-minute\";q=1800;w=60"}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"failed_stage","typeLabel":"enum\u003cstring>"}},"description":"RFC 9457 problem details (`application/problem+json`), used for every 4xx/5xx response and for `Job.error`. Branch on `code`; follow `hint`; act as `recommendation` says; retry as `retry` says. An extension member has one type across all codes and never reuses an RFC 9457 or Problem member name (hence `job_type`, and `active_job_count` for a count beside `active_jobs` for a list). Extension members appear only with the codes that define them (see each property). The problem registry and one documentation page per code live at https://docs.api.rask.ai/errors.","additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"examples":{"request_too_large":{"title":"request_too_large","value":{"type":"https://docs.api.rask.ai/errors/request_too_large","title":"Request too large","status":413,"detail":"The request body exceeds the limit of this operation.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"request_too_large","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Send a smaller body; see the body limits in the operation description.","errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"8bc4adf0-3a7a-4582-bca0-d055d58f26f8":{"description":"Unprocessable request. Codes: `idempotency_key_reused`, `validation_failed`, `target_language_not_supported`, `glossary_language_mismatch`.","headers":{"X-Request-Id":{"description":"Request id (UUID); also the problem `instance` (`urn:uuid:\u003cid>`). Quote it to support.","schema":{"type":"string"},"example":"7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93"},"RateLimit":{"description":"Remaining quota of the most constrained policy (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";r=597;t=42"},"RateLimit-Policy":{"description":"Rate-limit policies that apply to the key (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";q=600;w=60, \"account-minute\";q=1800;w=60"}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"failed_stage","typeLabel":"enum\u003cstring>"}},"description":"RFC 9457 problem details (`application/problem+json`), used for every 4xx/5xx response and for `Job.error`. Branch on `code`; follow `hint`; act as `recommendation` says; retry as `retry` says. An extension member has one type across all codes and never reuses an RFC 9457 or Problem member name (hence `job_type`, and `active_job_count` for a count beside `active_jobs` for a list). Extension members appear only with the codes that define them (see each property). The problem registry and one documentation page per code live at https://docs.api.rask.ai/errors.","additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"examples":{"idempotency_key_reused":{"title":"idempotency_key_reused","value":{"type":"https://docs.api.rask.ai/errors/idempotency_key_reused","title":"Idempotency key reused","status":422,"detail":"This Idempotency-Key was used with a different request in the last 24 hours.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"idempotency_key_reused","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Use a new Idempotency-Key for a different request.","errors":[]}},"validation_failed":{"title":"validation_failed","value":{"type":"https://docs.api.rask.ai/errors/validation_failed","title":"Validation failed","status":422,"detail":"The request has 1 invalid field.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"validation_failed","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Fix the fields listed in errors[] and retry.","errors":[{"pointer":"/expected_cost_minutes","code":"expected_cost_required","detail":"expected_cost_minutes is required when auto_dub is true."}]}},"target_language_not_supported":{"title":"target_language_not_supported","value":{"type":"https://docs.api.rask.ai/errors/target_language_not_supported","title":"Target language not supported","status":422,"detail":"The target language is not supported for this variant.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"target_language_not_supported","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Pick a code from GET /v3/languages?capability=translation.","errors":[{"pointer":"/target_language","code":"unsupported","detail":"Unknown target language."}]}},"glossary_language_mismatch":{"title":"glossary_language_mismatch","value":{"type":"https://docs.api.rask.ai/errors/glossary_language_mismatch","title":"Glossary language mismatch","status":422,"detail":"The glossary pair does not match the project's languages.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"glossary_language_mismatch","retryable":false,"retry":"none","recommendation":"fix_request","hint":"Use a glossary whose language pair matches the project's languages.","errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"0dda1205-5ff5-4e6c-9e57-9877f2a84540":{"description":"Too many requests. Codes: `rate_limited`, `too_many_concurrent_jobs`.","headers":{"X-Request-Id":{"description":"Request id (UUID); also the problem `instance` (`urn:uuid:\u003cid>`). Quote it to support.","schema":{"type":"string"},"example":"7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93"},"RateLimit":{"description":"Remaining quota of the most constrained policy (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";r=597;t=42"},"RateLimit-Policy":{"description":"Rate-limit policies that apply to the key (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";q=600;w=60, \"account-minute\";q=1800;w=60"},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","format":"int32","minimum":0},"example":30}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"failed_stage","typeLabel":"enum\u003cstring>"}},"description":"RFC 9457 problem details (`application/problem+json`), used for every 4xx/5xx response and for `Job.error`. Branch on `code`; follow `hint`; act as `recommendation` says; retry as `retry` says. An extension member has one type across all codes and never reuses an RFC 9457 or Problem member name (hence `job_type`, and `active_job_count` for a count beside `active_jobs` for a list). Extension members appear only with the codes that define them (see each property). The problem registry and one documentation page per code live at https://docs.api.rask.ai/errors.","additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"examples":{"rate_limited":{"title":"rate_limited","value":{"type":"https://docs.api.rask.ai/errors/rate_limited","title":"Rate limited","status":429,"detail":"The credential-minute limit was exceeded.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"rate_limited","retryable":true,"retry":"same_key","recommendation":"retry_later","hint":"Wait Retry-After seconds, then retry; policy and limit name the limit that was reached.","errors":[],"policy":"credential-minute","limit":600,"window_seconds":60}},"too_many_concurrent_jobs":{"title":"too_many_concurrent_jobs","value":{"type":"https://docs.api.rask.ai/errors/too_many_concurrent_jobs","title":"Too many concurrent jobs","status":429,"detail":"The payer already has 10 active dub jobs started through the API.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"too_many_concurrent_jobs","retryable":true,"retry":"same_key","recommendation":"wait","hint":"Wait Retry-After seconds for running jobs of this type to finish.","errors":[],"policy":"payer-concurrency","job_type":"dub","active_job_count":10,"limit":10}}},"exampleType":"examples"}},"exampleType":"examples"},"3b7a5917-7f8d-4e63-9f19-319ef33411f7":{"description":"Internal error. Codes: `internal_error`.","headers":{"X-Request-Id":{"description":"Request id (UUID); also the problem `instance` (`urn:uuid:\u003cid>`). Quote it to support.","schema":{"type":"string"},"example":"7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93"},"RateLimit":{"description":"Remaining quota of the most constrained policy (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";r=597;t=42"},"RateLimit-Policy":{"description":"Rate-limit policies that apply to the key (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";q=600;w=60, \"account-minute\";q=1800;w=60"}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"failed_stage","typeLabel":"enum\u003cstring>"}},"description":"RFC 9457 problem details (`application/problem+json`), used for every 4xx/5xx response and for `Job.error`. Branch on `code`; follow `hint`; act as `recommendation` says; retry as `retry` says. An extension member has one type across all codes and never reuses an RFC 9457 or Problem member name (hence `job_type`, and `active_job_count` for a count beside `active_jobs` for a list). Extension members appear only with the codes that define them (see each property). The problem registry and one documentation page per code live at https://docs.api.rask.ai/errors.","additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"examples":{"internal_error":{"title":"internal_error","value":{"type":"https://docs.api.rask.ai/errors/internal_error","title":"Internal error","status":500,"detail":"An internal error occurred.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"internal_error","retryable":true,"retry":"same_key","recommendation":"retry_later","hint":"Retry with the same Idempotency-Key; contact support with the instance id if it persists.","errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"75d79a26-22c3-4077-8589-a41e29bafcc7":{"description":"Service unavailable. Codes: `temporarily_unavailable`, `api_unavailable`, `auth_unavailable`, `spending_paused`.","headers":{"X-Request-Id":{"description":"Request id (UUID); also the problem `instance` (`urn:uuid:\u003cid>`). Quote it to support.","schema":{"type":"string"},"example":"7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93"},"RateLimit":{"description":"Remaining quota of the most constrained policy (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";r=597;t=42"},"RateLimit-Policy":{"description":"Rate-limit policies that apply to the key (IETF draft-11; provisional).","schema":{"type":"string"},"example":"\"credential-minute\";q=600;w=60, \"account-minute\";q=1800;w=60"},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","format":"int32","minimum":0},"example":30}},"content":{"application/problem+json":{"schema":{"type":"object","required":["type","title","status","detail","instance","code","retryable","retry","recommendation","hint","errors"],"properties":{"type":{"type":"string","description":"`https://docs.api.rask.ai/errors/{code}`: one documentation page per code.","format":"uri","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status (for a job's error: the status the same failure would have synchronously).","format":"int32","minimum":400,"maximum":599,"isRequired":true,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"detail":{"type":"string","description":"Explanation of this occurrence. May name ids, never user text.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"`urn:uuid:\u003crequest_id>` (also in `X-Request-Id`); for a job's error, `/v3/jobs/{job_id}`.","format":"uri-reference","isRequired":true,"uniqueKey":"instance","typeLabel":"string\u003curi-reference>"},"code":{"type":"string","description":"Stable snake_case code from the problem registry. Branch on this value, never on text.","pattern":"^[a-z][a-z0-9_]*$","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","description":"True when a retry can succeed; `retry` says how.","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"retry":{"type":"string","description":"How to retry: `same_key` for request problems that may succeed later, `new_key` for job errors worth a new attempt, `none` otherwise. `retryable` is true exactly when this is not `none`.","enum":["same_key","new_key","none"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"retry","typeLabel":"enum\u003cstring>"},"recommendation":{"type":"string","description":"What has to happen before a retry can succeed; set per code, and per `cause_code` for dub and generation failures (`components.x-rask-job-errors`). `cause_code: unknown`: `retry_later`, or `contact_support` when the same project's previous job of that type also failed with `unknown`.","enum":["fix_request","wait","top_up","retry_later","contact_support"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"recommendation","typeLabel":"enum\u003cstring>"},"hint":{"oneOf":[{"type":"string","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"One imperative sentence naming the next call or field (\u003c= 160 characters).","maxLength":160,"isRequired":true,"uniqueKey":"hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hint","typeLabel":"string | null"},"errors":{"type":"array","items":{"type":"object","description":"One failing field of a request.","required":["pointer","code","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer into the request body (`/operations/3/start_seconds`), or a `query:`, `header:` or `path:` prefixed parameter name.","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"code":{"type":"string","description":"Stable snake_case code of this field error. Segment writes: `invalid_time`, `start_not_before_end`, `beyond_media_duration`, `segment_too_short`, `segment_too_long`, `invalid_speaker_id`, `too_many_speakers`, `text_too_long`, `invalid_text`, `transcript_too_large`, `split_point_outside_segment`, `segments_not_adjacent`, `too_many_segments`, `segment_targeted_twice`, `unknown_segment`, `variant_not_found`; spending requests: `expected_cost_required`; uploads: `part_missing`; generic schema failures use JSON Schema keyword names (`required`, `maxLength`, ...).","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Human-readable explanation. Never contains user text.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"description":"Failing fields; empty when the problem is not about fields.","isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"},"credit_type":{"type":"string","description":"insufficient_balance, token_spend_limit_exceeded: the pool concerned.","enum":["minutes","lipsync_free_minutes","projects"],"x-rask-open-enum":true,"uniqueKey":"credit_type","typeLabel":"enum\u003cstring>"},"required_minutes":{"type":"integer","description":"insufficient_balance, token_spend_limit_exceeded: minutes the request needs.","format":"int32","uniqueKey":"required_minutes","typeLabel":"integer\u003cint32>"},"balance_minutes":{"type":"integer","description":"insufficient_balance: minutes available in the pool.","format":"int32","uniqueKey":"balance_minutes","typeLabel":"integer\u003cint32>"},"required_projects":{"type":"integer","description":"insufficient_balance (projects pool), token_spend_limit_exceeded (projects cap): project credits needed.","format":"int32","uniqueKey":"required_projects","typeLabel":"integer\u003cint32>"},"balance_projects":{"type":"integer","description":"insufficient_balance (projects pool): project credits available.","format":"int32","uniqueKey":"balance_projects","typeLabel":"integer\u003cint32>"},"expected_cost_minutes":{"type":"integer","description":"cost_changed: the cap the request sent.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"},"current_cost_minutes":{"type":"integer","description":"cost_changed: the current price.","format":"int32","uniqueKey":"current_cost_minutes","typeLabel":"integer\u003cint32>"},"current_etag":{"type":"string","description":"precondition_failed: the resource's current ETag.","uniqueKey":"current_etag","typeLabel":"string"},"required_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: every scope the request needs, including those of `x-rask-operation.conditional`.","uniqueKey":"required_scopes","typeLabel":"enum\u003cstring>[]"},"granted_scopes":{"type":"array","items":{"type":"string","description":"An API key scope (`resource:action`). `X:write` implies `X:read`; every `*:write` implies `jobs:read`.\nA key reads every job it started. Another credential's job also needs the scope that reads what it works on, as its params and result hold that: `media:read` for `media_import`, `voices:read` for `voice_clone`, `transcripts:read` for `translation` and `segment_generation`, `projects:read` for the rest. Otherwise it answers 404 `job_not_found` and is not listed.\n\n- `account:read`: read me, plan, entitlements, balance and usage\n- `media:read`: read uploads and media\n- `media:write`: create and complete uploads, import from a URL, delete media (implies media:read)\n- `projects:read`: read projects, outputs, subtitles, lip-sync and on-screen state\n- `projects:write`: create, copy, update and delete projects; folders; share links; exports; file restores\n- `transcripts:read`: read transcripts, segments, versions and translation settings\n- `transcripts:write`: edit, split, merge and retranslate segments, import subtitles, save and restore versions, change translation settings\n- `voices:read`: read speakers, the voice catalog and voice clones\n- `voices:write`: change a speaker's voice; create, update and delete voice clones\n- `glossaries:read`: read glossaries\n- `glossaries:write`: create, update and delete glossaries\n- `dubbing:write`: dub and redub, segment generation, localization runs and their estimates\n- `lipsync:write`: lip-sync (face check included) and its estimate\n- `onscreen:write`: on-screen text translation and its estimate\n- `jobs:read`: get, list and wait for jobs\n- `jobs:write`: cancel and resume jobs\n- `webhooks:read`: read webhook endpoints and deliveries\n- `webhooks:write`: create, update, delete, rotate and test webhook endpoints\n- `credits:spend`: additionally required by every operation that can spend credits","enum":["account:read","media:read","media:write","projects:read","projects:write","transcripts:read","transcripts:write","voices:read","voices:write","glossaries:read","glossaries:write","dubbing:write","lipsync:write","onscreen:write","jobs:read","jobs:write","webhooks:read","webhooks:write","credits:spend"],"x-rask-open-enum":true,"uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"insufficient_scope: the key's scopes.","uniqueKey":"granted_scopes","typeLabel":"enum\u003cstring>[]"},"feature":{"type":"string","description":"A plan feature checked server-side on the payer's plan (403 `feature_not_in_plan`).\n\n- `api_access`: use the API at all (checked on every request)\n- `auto_dub`: dub automatically after processing (needs an active subscription)\n- `dubbing_model_choice`: choose the dubbing model; otherwise it is overridden (estimate notice)\n- `free_languages`: free_dubbing language variants\n- `glossary`: attach and manage glossaries\n- `translation_instructions`: custom translation instructions\n- `subtitle_import`: import SRT subtitles when creating a project\n- `subtitle_reimport`: replace a project's transcript from SRT (importTranscript)\n- `subtitle_download`: download subtitles (getProjectSubtitles, subtitle outputs)\n- `burned_subtitles`: export and download videos with burned-in subtitles\n- `audio_download`: download dubbed audio and the voice track\n- `multilanguage`: several target languages per media (copies)\n- `lipsync`: lip-sync\n- `lipsync_paid`: paid lip-sync runs (otherwise only the free run)\n- `lipsync_enhanced`: the Enhanced lip-sync model\n- `lipsync_download`: download lip-synced video\n- `onscreen`: on-screen text translation and download of its video\n- `voice_clones`: workspace voice clones\n- `instant_voice_clone`: a speaker's own cloned voice\n- `share_links`: revocable project share links","enum":["api_access","auto_dub","dubbing_model_choice","free_languages","glossary","translation_instructions","subtitle_import","subtitle_reimport","subtitle_download","burned_subtitles","audio_download","multilanguage","lipsync","lipsync_paid","lipsync_enhanced","lipsync_download","onscreen","voice_clones","instant_voice_clone","share_links"],"x-rask-open-enum":true,"uniqueKey":"feature","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"workspace_access_suspended, source_url_not_allowed, webhook_url_not_allowed, instant_clone_not_available, job_not_resumable, localization_combination_not_supported: machine-readable reason. workspace_access_suspended: `subscription_inactive` (the owner's subscription is not active), `space_limit_exceeded` (the owner has more workspaces than the plan allows), `seat_limit_exceeded` (the key's user is beyond the plan's seats). job_not_resumable: `not_failed_localization`, `already_resumed`, `project_deleted`, `stage_result_gone`. localization_combination_not_supported: `nothing_ordered`, `audio_project`, `plan_trims_lipsync`.","uniqueKey":"reason","typeLabel":"string"},"limit":{"type":"integer","description":"limit_reached, voice_clone_limit_reached, rate_limited, too_many_waiters, too_many_concurrent_jobs, translation_batch_too_large: the limit.","format":"int32","uniqueKey":"limit","typeLabel":"integer\u003cint32>"},"used":{"type":"integer","description":"voice_clone_limit_reached: clones counted against the quota.","format":"int32","uniqueKey":"used","typeLabel":"integer\u003cint32>"},"limit_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): the key's monthly cap on the minutes pool.","format":"int32","uniqueKey":"limit_minutes","typeLabel":"integer\u003cint32>"},"spent_minutes":{"type":"integer","description":"token_spend_limit_exceeded (minutes cap): minutes spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_minutes","typeLabel":"integer\u003cint32>"},"limit_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): the key's monthly cap on project credits.","format":"int32","uniqueKey":"limit_projects","typeLabel":"integer\u003cint32>"},"spent_projects":{"type":"integer","description":"token_spend_limit_exceeded (projects cap): project credits spent this month by the key, with pending deferred spends.","format":"int32","uniqueKey":"spent_projects","typeLabel":"integer\u003cint32>"},"resets_at":{"type":"string","description":"token_spend_limit_exceeded: start of the next UTC month.","format":"date-time","uniqueKey":"resets_at","typeLabel":"string\u003cdate-time>"},"policy":{"type":"string","description":"rate_limited, too_many_waiters, too_many_concurrent_jobs: the exceeded policy or quota. rate_limited: credential-minute, account-minute, spend-minute, upload-hour, auth-fail-ip, translation-hour, clone-create-day, voice-settings-hour, upload-open, upload-bytes-day; too_many_waiters: long-poll (per key and per payer); too_many_concurrent_jobs: payer-concurrency, global-concurrency.","uniqueKey":"policy","typeLabel":"string"},"window_seconds":{"type":"integer","description":"rate_limited: the policy window.","format":"int32","uniqueKey":"window_seconds","typeLabel":"integer\u003cint32>"},"active_job_count":{"type":"integer","description":"too_many_concurrent_jobs: active API and MCP jobs of this type (the payer's, or all of Rask's for global-concurrency).","format":"int32","uniqueKey":"active_job_count","typeLabel":"integer\u003cint32>"},"active_jobs":{"type":"array","items":{"type":"object","description":"A non-terminal job of a project.","required":["id","type","status"],"properties":{"id":{"type":"string","description":"Job id.","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Job type. Open enum: new types are added over time.\n\n- `media_import`: registering uploaded or imported media (poll hint 3 s; cancelable)\n- `project_processing`: the project pipeline up to translation (poll hint 10 s)\n- `translation`: retranslating segments (poll hint 5 s)\n- `segment_generation`: paid voicing of chosen segments into downloadable clips (poll hint 5 s)\n- `dub`: dubbing or redubbing (poll hint 10 s)\n- `lipsync`: lip-sync (poll hint 30 s)\n- `onscreen`: on-screen text translation (poll hint 15 s; cancelable while queued)\n- `localization`: dub, lip-sync and on-screen as one run with child jobs (poll hint 15 s)\n- `voice_clone`: creating a voice clone (poll hint 10 s)\n- `export`: rendering an export (poll hint 15 s)\n- `file_restore`: restoring archived files (poll hint 300 s)","isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Job status. Monotonic: never goes backwards and never leaves a terminal state.\n\n- `queued`: accepted, not started\n- `running`: in progress\n- `succeeded`: finished; see result\n- `failed`: finished; see error\n- `canceled`: canceled, or its project was deleted (`error.code = project_deleted`)","enum":["queued","running","succeeded","failed","canceled"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"active_jobs.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"active_jobs.items.[INDEX]","typeLabel":"object"},"description":"project_busy: the project's active spending jobs.","uniqueKey":"active_jobs","typeLabel":"object[]"},"active_job_ids":{"type":"array","items":{"type":"string","uniqueKey":"active_job_ids.items.[INDEX]","typeLabel":"string"},"description":"transcript_busy: the active jobs that block a whole-transcript request; absent when concurrent writes kept conflicting.","uniqueKey":"active_job_ids","typeLabel":"string[]"},"segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"segment_ids.items.[INDEX]","typeLabel":"string"},"description":"segment_busy: the busy segments.","uniqueKey":"segment_ids","typeLabel":"string[]"},"job_id":{"oneOf":[{"type":"string","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The blocking job: dub_in_progress, lipsync_in_progress, onscreen_in_progress, project_not_ready and transcript_busy (null when the blocking work has no v3 job, e.g. it was started in the web app; `job_type` still names it), export_in_progress, restore_in_progress, media_in_use, subtitle_import_in_progress. job_not_resumable: the job that already continues this run, when there is one.","uniqueKey":"job_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"job_id","typeLabel":"string | null"},"job_type":{"type":"string","x-rask-open-enum":true,"enum":["media_import","project_processing","translation","segment_generation","dub","lipsync","onscreen","localization","voice_clone","export","file_restore"],"description":"Type of `job_id` (single-flight conflicts), of the job that cannot be canceled or resumed (job_not_cancelable, job_not_resumable), or whose concurrency limit was reached (too_many_concurrent_jobs).","uniqueKey":"job_type","typeLabel":"enum\u003cstring>"},"import_job_id":{"type":"string","description":"media_not_ready: the media_import job to wait for.","uniqueKey":"import_job_id","typeLabel":"string"},"max_seconds":{"type":"integer","description":"onscreen_video_too_long: the plan's limit (`onscreen_max_video_seconds`).","format":"int32","uniqueKey":"max_seconds","typeLabel":"integer\u003cint32>"},"expired_at":{"type":"string","description":"token_expired, upload_expired: when it expired.","format":"date-time","uniqueKey":"expired_at","typeLabel":"string\u003cdate-time>"},"revoked_reason":{"type":"string","description":"token_revoked: why the key was revoked.","uniqueKey":"revoked_reason","typeLabel":"string"},"token_env":{"type":"string","description":"token_wrong_environment: the key's environment (`live` or `test`).","uniqueKey":"token_env","typeLabel":"string"},"server_env":{"type":"string","description":"token_wrong_environment: this server's environment.","uniqueKey":"server_env","typeLabel":"string"},"parameter":{"type":"string","description":"token_in_query: the query parameter that carried a credential.","uniqueKey":"parameter","typeLabel":"string"},"max_upload_bytes":{"type":"integer","description":"media_too_large: the limit in bytes (the plan's upload limit, or a voice-sample limit: 11000000 for audio and stored samples, 500000000 for video).","format":"int64","uniqueKey":"max_upload_bytes","typeLabel":"integer\u003cint64>"},"size_bytes":{"type":"integer","description":"media_too_large: the file size in bytes.","format":"int64","uniqueKey":"size_bytes","typeLabel":"integer\u003cint64>"},"max_source_duration_seconds":{"type":"number","description":"media_too_long: the plan's limit.","format":"double","uniqueKey":"max_source_duration_seconds","typeLabel":"number\u003cdouble>"},"duration_seconds":{"type":"number","description":"media_too_long: the media duration.","format":"double","uniqueKey":"duration_seconds","typeLabel":"number\u003cdouble>"},"declared_size_bytes":{"type":"integer","description":"upload_size_mismatch: size_bytes of the upload.","format":"int64","uniqueKey":"declared_size_bytes","typeLabel":"integer\u003cint64>"},"actual_size_bytes":{"type":"integer","description":"upload_size_mismatch: size of the stored object.","format":"int64","uniqueKey":"actual_size_bytes","typeLabel":"integer\u003cint64>"},"project_count":{"type":"integer","description":"folder_not_empty: live projects in the folder.","format":"int32","uniqueKey":"project_count","typeLabel":"integer\u003cint32>"},"content_type":{"type":"string","description":"unsupported_media_type: the rejected content type.","uniqueKey":"content_type","typeLabel":"string"},"cause_code":{"type":"string","description":"Job errors. lipsync_rejected: the code that rejected the automatic start. dub_voiceover_failed, dub_merge_failed, dub_failed, dub_timeout, segment_generation_failed, segment_generation_timeout (always `unknown` on a timeout): the failure class, one of `segment_changed`, `insufficient_speech`, `voice_configuration`, `missing_translation`, `tts_provider_failed`, `merge_failed`, `unknown` (the default when the class cannot be told). localization_stage_failed, localization_stage_skipped: the code of the stage's own error; `localization_combination_not_supported` when a plan change during the run trimmed the lip-sync, so on-screen was skipped.","uniqueKey":"cause_code","typeLabel":"string"},"failed_stage":{"type":"string","description":"localization_stage_failed, localization_stage_skipped (job error): the stage that ended the run.","enum":["dub","lipsync","onscreen"],"x-rask-open-enum":true,"uniqueKey":"failed_stage","typeLabel":"enum\u003cstring>"}},"description":"RFC 9457 problem details (`application/problem+json`), used for every 4xx/5xx response and for `Job.error`. Branch on `code`; follow `hint`; act as `recommendation` says; retry as `retry` says. An extension member has one type across all codes and never reuses an RFC 9457 or Problem member name (hence `job_type`, and `active_job_count` for a count beside `active_jobs` for a list). Extension members appear only with the codes that define them (see each property). The problem registry and one documentation page per code live at https://docs.api.rask.ai/errors.","additionalProperties":true,"uniqueKey":"","typeLabel":"object"},"examples":{"temporarily_unavailable":{"title":"temporarily_unavailable","value":{"type":"https://docs.api.rask.ai/errors/temporarily_unavailable","title":"Temporarily unavailable","status":503,"detail":"A dependency is temporarily unavailable.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"temporarily_unavailable","retryable":true,"retry":"same_key","recommendation":"retry_later","hint":"Wait Retry-After seconds and retry.","errors":[]}},"api_unavailable":{"title":"api_unavailable","value":{"type":"https://docs.api.rask.ai/errors/api_unavailable","title":"Api unavailable","status":503,"detail":"The API is temporarily disabled.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"api_unavailable","retryable":true,"retry":"same_key","recommendation":"retry_later","hint":"Wait Retry-After seconds and retry.","errors":[]}},"auth_unavailable":{"title":"auth_unavailable","value":{"type":"https://docs.api.rask.ai/errors/auth_unavailable","title":"Auth unavailable","status":503,"detail":"Credential verification is temporarily unavailable.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"auth_unavailable","retryable":true,"retry":"same_key","recommendation":"retry_later","hint":"Wait Retry-After seconds and retry.","errors":[]}},"spending_paused":{"title":"spending_paused","value":{"type":"https://docs.api.rask.ai/errors/spending_paused","title":"Spending paused","status":503,"detail":"Spending operations are temporarily paused.","instance":"urn:uuid:7d5c0e9a-3f1b-4c2e-9a8d-6b4f2e1c0d93","code":"spending_paused","retryable":true,"retry":"same_key","recommendation":"retry_later","hint":"Wait Retry-After seconds; spending operations are paused, reads still work.","errors":[]}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"7f043228-0925-497a-9f66-0b27f11d35bf":{"apiToken":{"type":"http","scheme":"bearer","bearerFormat":"raskai_\u003clive|test>_key_\u003c49 base62 characters>","description":"API key from Settings -> API keys, sent as `Authorization: Bearer \u003ckey>` (SDK environment variable `RASK_API_KEY`). Bound to one workspace and one acting user. Operations list the scopes they need (OpenAPI 3.1 scopes on a bearer scheme).","scopes":["projects:write","credits:spend"],"schemeName":"apiToken"}}},"servers":{"61053d33-b3c1-45e9-9029-d55a58076416":{"url":"https://api.rask.ai/v3","description":"Production."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"raskai_\u003clive|test>_key_\u003c49 base62 characters>","description":"API key from Settings -> API keys, sent as `Authorization: Bearer \u003ckey>` (SDK environment variable `RASK_API_KEY`). Bound to one workspace and one acting user. Operations list the scopes they need (OpenAPI 3.1 scopes on a bearer scheme).","scopes":["projects:write","credits:spend"],"schemeName":"apiToken"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key from Settings -> API keys, sent as `Authorization: Bearer \u003ckey>` (SDK environment variable `RASK_API_KEY`). Bound to one workspace and one acting user. Operations list the scopes they need (OpenAPI 3.1 scopes on a bearer scheme).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiToken","name":"Authorization"}],"title":"apiToken"}]},"originalFileLocation":"openapi.v3.json"},"subdomain":"brask","siteName":"Rask AI API","title":"Copy a project into other target languages - Rask AI API","navMaps":{"firstHrefInVersion":{"v3":{"href":"/operations/createProjectCopies","matchLevel":0},"v2":{"href":"/introduction","matchLevel":4}},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T14:38:52.688Z","originalFileLocation":"operations/createProjectCopies.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Creates one copy per target, at most 10 per request, of a finished project.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Rask AI API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/brask/64TpFZATa3dVq0DX/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/brask/64TpFZATa3dVq0DX/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/brask/64TpFZATa3dVq0DX/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/brask/64TpFZATa3dVq0DX/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/brask/64TpFZATa3dVq0DX/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/brask/64TpFZATa3dVq0DX/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/brask/64TpFZATa3dVq0DX/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/brask/64TpFZATa3dVq0DX/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/brask/64TpFZATa3dVq0DX/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Copy a project into other target languages - Rask AI API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates one copy per target, at most 10 per request, of a finished project.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Rask AI API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.api.rask.ai/operations/createProjectCopies\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://brask.mintlify.site/_mintlify/api/og/v2?division=Projects\u0026amp;title=Copy+a+project+into+other+target+languages\u0026amp;description=Creates+one+copy+per+target%2C+at+most+10+per+request%2C+of+a+finished+project.\u0026amp;theme=0d666554d2a0d7f967d5e07b\u0026amp;signature=c6534c6cba177208cc8422bf02fe6d1246035e04ef58fe35e16d316ca97654a3\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Copy a project into other target languages - Rask AI API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates one copy per target, at most 10 per request, of a finished project.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://brask.mintlify.site/_mintlify/api/og/v2?division=Projects\u0026amp;title=Copy+a+project+into+other+target+languages\u0026amp;description=Creates+one+copy+per+target%2C+at+most+10+per+request%2C+of+a+finished+project.\u0026amp;theme=0d666554d2a0d7f967d5e07b\u0026amp;signature=c6534c6cba177208cc8422bf02fe6d1246035e04ef58fe35e16d316ca97654a3\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/brask/64TpFZATa3dVq0DX/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Rask AI API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0B0BCF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.api.rask.ai/operations/createProjectCopies\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/operations/createProjectCopies.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.api.rask.ai/#organization\",\"name\":\"Rask AI API\",\"url\":\"https://docs.api.rask.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/brask/hT_Hdq5wOpSqsld0/logo/black.svg?fit=max\u0026auto=format\u0026n=hT_Hdq5wOpSqsld0\u0026q=85\u0026s=89737eaceb0bbdbadb10eeb2e0537eee\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.api.rask.ai#website\",\"name\":\"Rask AI API\",\"url\":\"https://docs.api.rask.ai\",\"publisher\":{\"@id\":\"https://docs.api.rask.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.api.rask.ai/operations/createProjectCopies#webpage\",\"url\":\"https://docs.api.rask.ai/operations/createProjectCopies\",\"name\":\"Copy a project into other target languages\",\"description\":\"Creates one copy per target, at most 10 per request, of a finished project.\",\"dateModified\":\"2026-11-12T14:38:52.688Z\",\"isPartOf\":{\"@id\":\"https://docs.api.rask.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.api.rask.ai/operations/createProjectCopies#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.api.rask.ai/operations/createProjectCopies#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Projects\",\"item\":\"https://docs.api.rask.ai/operations/listFolders\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Copy a project into other target languages\",\"item\":\"https://docs.api.rask.ai/operations/createProjectCopies\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.api.rask.ai/operations/createProjectCopies#apireference\",\"headline\":\"Copy a project into other target languages\",\"name\":\"Copy a project into other target languages\",\"description\":\"Creates one copy per target, at most 10 per request, of a finished project.\",\"url\":\"https://docs.api.rask.ai/operations/createProjectCopies\",\"mainEntityOfPage\":{\"@id\":\"https://docs.api.rask.ai/operations/createProjectCopies#webpage\"},\"dateModified\":\"2026-11-12T14:38:52.688Z\",\"publisher\":{\"@id\":\"https://docs.api.rask.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.api.rask.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Rask AI API\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Rask AI API\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/operations/createProjectCopies.md","siteName":"Rask AI API","nav":{"global":{"anchors":[{"anchor":"Blog","href":"https://www.rask.ai/blog","icon":"newspaper"}]},"versions":[{"version":"v3","anchors":[{"anchor":"Documentation","icon":"book-open","groups":[{"group":"Get started","pages":[{"title":"Rask API v3","sidebarTitle":"Introduction","href":"/v3/introduction"},{"title":"Quickstart: dub a video from upload to download","sidebarTitle":"Quickstart","href":"/v3/quickstart"},{"title":"API v3 authentication: keys, scopes and caps","sidebarTitle":"Authentication","href":"/authentication"},{"title":"SDKs for Rask API v3","sidebarTitle":"SDKs","href":"/v3/sdks"},{"title":"Move from API v2 to v3","sidebarTitle":"Move from v2","href":"/v3/migrate-from-v2"}]},{"group":"AI agents","pages":[{"title":"Use Rask from an AI agent: prompt, key and spending","sidebarTitle":"Use from an agent","href":"/v3/agents"},{"title":"Rask MCP server: connect, tools and confirmation","sidebarTitle":"MCP server","href":"/v3/mcp"}]},{"group":"Recipes","pages":[{"title":"Choose the dubbing model and read it back","sidebarTitle":"Dubbing model","href":"/v3/recipes/dubbing-model"},{"title":"Create a project from your own transcript","sidebarTitle":"Your own transcript","href":"/v3/recipes/own-transcript"},{"title":"Clone a voice and set its settings","sidebarTitle":"Voice clones","href":"/v3/recipes/voice-clone"},{"title":"Voice chosen segments, then assemble with a dub","sidebarTitle":"Segment generation","href":"/v3/recipes/segment-generation"},{"title":"Lip-sync a dubbed video with a model","sidebarTitle":"Lip-sync","href":"/v3/recipes/lipsync"},{"title":"Translate on-screen text","sidebarTitle":"On-screen text","href":"/v3/recipes/onscreen"},{"title":"One request for dub, lip-sync and on-screen","sidebarTitle":"One request for everything","href":"/v3/recipes/localization-run"},{"title":"Download every output","sidebarTitle":"Downloads","href":"/v3/recipes/downloads"},{"title":"Spend, balance and errors","sidebarTitle":"Spend, balance, errors","href":"/v3/recipes/spend-balance-errors"}]},{"group":"Concepts","pages":[{"title":"Glossary: the words this API uses","sidebarTitle":"Glossary","href":"/v3/concepts/glossary"},{"title":"Conventions: requests, responses and lists","sidebarTitle":"Conventions","href":"/v3/concepts/conventions"},{"title":"Jobs and long-polling","sidebarTitle":"Jobs and long-polling","href":"/v3/concepts/jobs"},{"title":"Idempotency and retries","sidebarTitle":"Idempotency and retries","href":"/v3/concepts/idempotency"},{"title":"ETags and If-Match","sidebarTitle":"ETags and If-Match","href":"/v3/concepts/etags"},{"title":"Paid text: closed until the first dub is charged","sidebarTitle":"Paid text","href":"/v3/concepts/paid-text"},{"title":"Capabilities, models and plan limits","sidebarTitle":"Capabilities and limits","href":"/v3/concepts/capabilities"},{"title":"Prices and refunds","sidebarTitle":"Prices and refunds","href":"/v3/concepts/pricing"},{"title":"Operation table","sidebarTitle":"Operation table","href":"/v3/concepts/operation-table"},{"title":"API v3 changelog","sidebarTitle":"Changelog","href":"/changelog"}]},{"group":"Errors","pages":[{"title":"Errors","sidebarTitle":"All error codes","href":"/errors"},{"group":"400 Bad request","pages":[{"title":"idempotency_key_required","sidebarTitle":"idempotency_key_required","href":"/errors/idempotency_key_required"},{"title":"invalid_cursor","sidebarTitle":"invalid_cursor","href":"/errors/invalid_cursor"},{"title":"token_in_query","sidebarTitle":"token_in_query","href":"/errors/token_in_query"}]},{"group":"401 and 403 Access","pages":[{"title":"account_disabled","sidebarTitle":"account_disabled","href":"/errors/account_disabled"},{"title":"authentication_required","sidebarTitle":"authentication_required","href":"/errors/authentication_required"},{"title":"demo_project_read_only","sidebarTitle":"demo_project_read_only","href":"/errors/demo_project_read_only"},{"title":"feature_not_in_plan","sidebarTitle":"feature_not_in_plan","href":"/errors/feature_not_in_plan"},{"title":"forbidden","sidebarTitle":"forbidden","href":"/errors/forbidden"},{"title":"insufficient_scope","sidebarTitle":"insufficient_scope","href":"/errors/insufficient_scope"},{"title":"invalid_token","sidebarTitle":"invalid_token","href":"/errors/invalid_token"},{"title":"prepare_mode_not_enabled","sidebarTitle":"prepare_mode_not_enabled","href":"/errors/prepare_mode_not_enabled"},{"title":"token_expired","sidebarTitle":"token_expired","href":"/errors/token_expired"},{"title":"token_revoked","sidebarTitle":"token_revoked","href":"/errors/token_revoked"},{"title":"token_spend_limit_exceeded","sidebarTitle":"token_spend_limit_exceeded","href":"/errors/token_spend_limit_exceeded"},{"title":"token_wrong_environment","sidebarTitle":"token_wrong_environment","href":"/errors/token_wrong_environment"},{"title":"trial_project_dub_not_allowed","sidebarTitle":"trial_project_dub_not_allowed","href":"/errors/trial_project_dub_not_allowed"},{"title":"voice_clone_limit_reached","sidebarTitle":"voice_clone_limit_reached","href":"/errors/voice_clone_limit_reached"},{"title":"workspace_access_suspended","sidebarTitle":"workspace_access_suspended","href":"/errors/workspace_access_suspended"}]},{"group":"402 Balance","pages":[{"title":"insufficient_balance","sidebarTitle":"insufficient_balance","href":"/errors/insufficient_balance"}]},{"group":"404 and 410 Missing","pages":[{"title":"folder_not_found","sidebarTitle":"folder_not_found","href":"/errors/folder_not_found"},{"title":"glossary_not_found","sidebarTitle":"glossary_not_found","href":"/errors/glossary_not_found"},{"title":"job_not_found","sidebarTitle":"job_not_found","href":"/errors/job_not_found"},{"title":"media_not_found","sidebarTitle":"media_not_found","href":"/errors/media_not_found"},{"title":"method_not_allowed","sidebarTitle":"method_not_allowed","href":"/errors/method_not_allowed"},{"title":"not_found","sidebarTitle":"not_found","href":"/errors/not_found"},{"title":"project_not_found","sidebarTitle":"project_not_found","href":"/errors/project_not_found"},{"title":"segment_not_found","sidebarTitle":"segment_not_found","href":"/errors/segment_not_found"},{"title":"speaker_not_found","sidebarTitle":"speaker_not_found","href":"/errors/speaker_not_found"},{"title":"transcript_version_not_found","sidebarTitle":"transcript_version_not_found","href":"/errors/transcript_version_not_found"},{"title":"upload_expired","sidebarTitle":"upload_expired","href":"/errors/upload_expired"},{"title":"upload_not_found","sidebarTitle":"upload_not_found","href":"/errors/upload_not_found"},{"title":"voice_clone_not_found","sidebarTitle":"voice_clone_not_found","href":"/errors/voice_clone_not_found"}]},{"group":"409 Conflict","pages":[{"title":"cost_changed","sidebarTitle":"cost_changed","href":"/errors/cost_changed"},{"title":"dub_in_progress","sidebarTitle":"dub_in_progress","href":"/errors/dub_in_progress"},{"title":"dub_payment_required","sidebarTitle":"dub_payment_required","href":"/errors/dub_payment_required"},{"title":"dub_up_to_date","sidebarTitle":"dub_up_to_date","href":"/errors/dub_up_to_date"},{"title":"export_in_progress","sidebarTitle":"export_in_progress","href":"/errors/export_in_progress"},{"title":"folder_not_empty","sidebarTitle":"folder_not_empty","href":"/errors/folder_not_empty"},{"title":"free_lipsync_already_used","sidebarTitle":"free_lipsync_already_used","href":"/errors/free_lipsync_already_used"},{"title":"idempotency_key_in_use","sidebarTitle":"idempotency_key_in_use","href":"/errors/idempotency_key_in_use"},{"title":"job_already_finished","sidebarTitle":"job_already_finished","href":"/errors/job_already_finished"},{"title":"job_not_cancelable","sidebarTitle":"job_not_cancelable","href":"/errors/job_not_cancelable"},{"title":"job_not_resumable","sidebarTitle":"job_not_resumable","href":"/errors/job_not_resumable"},{"title":"lipsync_already_done","sidebarTitle":"lipsync_already_done","href":"/errors/lipsync_already_done"},{"title":"lipsync_in_progress","sidebarTitle":"lipsync_in_progress","href":"/errors/lipsync_in_progress"},{"title":"media_in_use","sidebarTitle":"media_in_use","href":"/errors/media_in_use"},{"title":"media_not_ready","sidebarTitle":"media_not_ready","href":"/errors/media_not_ready"},{"title":"no_face_detected","sidebarTitle":"no_face_detected","href":"/errors/no_face_detected"},{"title":"no_previous_dub","sidebarTitle":"no_previous_dub","href":"/errors/no_previous_dub"},{"title":"onscreen_in_progress","sidebarTitle":"onscreen_in_progress","href":"/errors/onscreen_in_progress"},{"title":"project_busy","sidebarTitle":"project_busy","href":"/errors/project_busy"},{"title":"project_media_restoring","sidebarTitle":"project_media_restoring","href":"/errors/project_media_restoring"},{"title":"project_not_dubbed","sidebarTitle":"project_not_dubbed","href":"/errors/project_not_dubbed"},{"title":"project_not_ready","sidebarTitle":"project_not_ready","href":"/errors/project_not_ready"},{"title":"restore_in_progress","sidebarTitle":"restore_in_progress","href":"/errors/restore_in_progress"},{"title":"segment_busy","sidebarTitle":"segment_busy","href":"/errors/segment_busy"},{"title":"subtitle_import_in_progress","sidebarTitle":"subtitle_import_in_progress","href":"/errors/subtitle_import_in_progress"},{"title":"transcript_busy","sidebarTitle":"transcript_busy","href":"/errors/transcript_busy"},{"title":"transcript_not_ready","sidebarTitle":"transcript_not_ready","href":"/errors/transcript_not_ready"},{"title":"transcript_replaced","sidebarTitle":"transcript_replaced","href":"/errors/transcript_replaced"},{"title":"upload_incomplete","sidebarTitle":"upload_incomplete","href":"/errors/upload_incomplete"},{"title":"upload_not_pending","sidebarTitle":"upload_not_pending","href":"/errors/upload_not_pending"},{"title":"voice_clone_in_use","sidebarTitle":"voice_clone_in_use","href":"/errors/voice_clone_in_use"},{"title":"voice_clone_not_ready","sidebarTitle":"voice_clone_not_ready","href":"/errors/voice_clone_not_ready"},{"title":"voices_not_assigned","sidebarTitle":"voices_not_assigned","href":"/errors/voices_not_assigned"}]},{"group":"412 and 428 Preconditions","pages":[{"title":"precondition_failed","sidebarTitle":"precondition_failed","href":"/errors/precondition_failed"},{"title":"precondition_required","sidebarTitle":"precondition_required","href":"/errors/precondition_required"}]},{"group":"413, 415 and 422 Input","pages":[{"title":"auto_dub_required","sidebarTitle":"auto_dub_required","href":"/errors/auto_dub_required"},{"title":"field_not_updatable","sidebarTitle":"field_not_updatable","href":"/errors/field_not_updatable"},{"title":"glossary_entries_invalid","sidebarTitle":"glossary_entries_invalid","href":"/errors/glossary_entries_invalid"},{"title":"glossary_language_mismatch","sidebarTitle":"glossary_language_mismatch","href":"/errors/glossary_language_mismatch"},{"title":"glossary_language_pair_not_supported","sidebarTitle":"glossary_language_pair_not_supported","href":"/errors/glossary_language_pair_not_supported"},{"title":"idempotency_key_reused","sidebarTitle":"idempotency_key_reused","href":"/errors/idempotency_key_reused"},{"title":"instant_clone_not_available","sidebarTitle":"instant_clone_not_available","href":"/errors/instant_clone_not_available"},{"title":"invalid_date_range","sidebarTitle":"invalid_date_range","href":"/errors/invalid_date_range"},{"title":"localization_combination_not_supported","sidebarTitle":"localization_combination_not_supported","href":"/errors/localization_combination_not_supported"},{"title":"media_processing_failed","sidebarTitle":"media_processing_failed","href":"/errors/media_processing_failed"},{"title":"media_purpose_mismatch","sidebarTitle":"media_purpose_mismatch","href":"/errors/media_purpose_mismatch"},{"title":"media_too_large","sidebarTitle":"media_too_large","href":"/errors/media_too_large"},{"title":"media_too_long","sidebarTitle":"media_too_long","href":"/errors/media_too_long"},{"title":"onscreen_language_not_supported","sidebarTitle":"onscreen_language_not_supported","href":"/errors/onscreen_language_not_supported"},{"title":"onscreen_video_too_long","sidebarTitle":"onscreen_video_too_long","href":"/errors/onscreen_video_too_long"},{"title":"request_too_large","sidebarTitle":"request_too_large","href":"/errors/request_too_large"},{"title":"segments_missing_translation","sidebarTitle":"segments_missing_translation","href":"/errors/segments_missing_translation"},{"title":"source_language_not_supported","sidebarTitle":"source_language_not_supported","href":"/errors/source_language_not_supported"},{"title":"source_url_not_allowed","sidebarTitle":"source_url_not_allowed","href":"/errors/source_url_not_allowed"},{"title":"speaker_has_no_speech","sidebarTitle":"speaker_has_no_speech","href":"/errors/speaker_has_no_speech"},{"title":"subtitles_invalid","sidebarTitle":"subtitles_invalid","href":"/errors/subtitles_invalid"},{"title":"target_language_not_supported","sidebarTitle":"target_language_not_supported","href":"/errors/target_language_not_supported"},{"title":"translation_batch_too_large","sidebarTitle":"translation_batch_too_large","href":"/errors/translation_batch_too_large"},{"title":"unsupported_media_type","sidebarTitle":"unsupported_media_type","href":"/errors/unsupported_media_type"},{"title":"upload_size_mismatch","sidebarTitle":"upload_size_mismatch","href":"/errors/upload_size_mismatch"},{"title":"validation_failed","sidebarTitle":"validation_failed","href":"/errors/validation_failed"},{"title":"voice_not_in_pool","sidebarTitle":"voice_not_in_pool","href":"/errors/voice_not_in_pool"}]},{"group":"429 Limits","pages":[{"title":"rate_limited","sidebarTitle":"rate_limited","href":"/errors/rate_limited"},{"title":"too_many_concurrent_jobs","sidebarTitle":"too_many_concurrent_jobs","href":"/errors/too_many_concurrent_jobs"},{"title":"too_many_waiters","sidebarTitle":"too_many_waiters","href":"/errors/too_many_waiters"}]},{"group":"5xx Server","pages":[{"title":"api_unavailable","sidebarTitle":"api_unavailable","href":"/errors/api_unavailable"},{"title":"auth_unavailable","sidebarTitle":"auth_unavailable","href":"/errors/auth_unavailable"},{"title":"feature_temporarily_disabled","sidebarTitle":"feature_temporarily_disabled","href":"/errors/feature_temporarily_disabled"},{"title":"internal_error","sidebarTitle":"internal_error","href":"/errors/internal_error"},{"title":"plan_configuration_error","sidebarTitle":"plan_configuration_error","href":"/errors/plan_configuration_error"},{"title":"spending_paused","sidebarTitle":"spending_paused","href":"/errors/spending_paused"},{"title":"temporarily_unavailable","sidebarTitle":"temporarily_unavailable","href":"/errors/temporarily_unavailable"}]},{"group":"Inside a job","pages":[{"title":"audio_separation_failed","sidebarTitle":"audio_separation_failed","href":"/errors/audio_separation_failed"},{"title":"dub_failed","sidebarTitle":"dub_failed","href":"/errors/dub_failed"},{"title":"dub_merge_failed","sidebarTitle":"dub_merge_failed","href":"/errors/dub_merge_failed"},{"title":"dub_timeout","sidebarTitle":"dub_timeout","href":"/errors/dub_timeout"},{"title":"dub_voiceover_failed","sidebarTitle":"dub_voiceover_failed","href":"/errors/dub_voiceover_failed"},{"title":"export_failed","sidebarTitle":"export_failed","href":"/errors/export_failed"},{"title":"face_check_failed","sidebarTitle":"face_check_failed","href":"/errors/face_check_failed"},{"title":"lipsync_failed","sidebarTitle":"lipsync_failed","href":"/errors/lipsync_failed"},{"title":"lipsync_rejected","sidebarTitle":"lipsync_rejected","href":"/errors/lipsync_rejected"},{"title":"lipsync_timeout","sidebarTitle":"lipsync_timeout","href":"/errors/lipsync_timeout"},{"title":"localization_stage_failed","sidebarTitle":"localization_stage_failed","href":"/errors/localization_stage_failed"},{"title":"localization_stage_skipped","sidebarTitle":"localization_stage_skipped","href":"/errors/localization_stage_skipped"},{"title":"media_corrupt","sidebarTitle":"media_corrupt","href":"/errors/media_corrupt"},{"title":"no_audio_track","sidebarTitle":"no_audio_track","href":"/errors/no_audio_track"},{"title":"no_speech_detected","sidebarTitle":"no_speech_detected","href":"/errors/no_speech_detected"},{"title":"onscreen_charge_failed","sidebarTitle":"onscreen_charge_failed","href":"/errors/onscreen_charge_failed"},{"title":"onscreen_finalize_timeout","sidebarTitle":"onscreen_finalize_timeout","href":"/errors/onscreen_finalize_timeout"},{"title":"onscreen_invalid_result","sidebarTitle":"onscreen_invalid_result","href":"/errors/onscreen_invalid_result"},{"title":"onscreen_provider_unavailable","sidebarTitle":"onscreen_provider_unavailable","href":"/errors/onscreen_provider_unavailable"},{"title":"onscreen_publish_failed","sidebarTitle":"onscreen_publish_failed","href":"/errors/onscreen_publish_failed"},{"title":"onscreen_queue_timeout","sidebarTitle":"onscreen_queue_timeout","href":"/errors/onscreen_queue_timeout"},{"title":"onscreen_runner_failed","sidebarTitle":"onscreen_runner_failed","href":"/errors/onscreen_runner_failed"},{"title":"onscreen_runner_lost","sidebarTitle":"onscreen_runner_lost","href":"/errors/onscreen_runner_lost"},{"title":"onscreen_source_unavailable","sidebarTitle":"onscreen_source_unavailable","href":"/errors/onscreen_source_unavailable"},{"title":"project_deleted","sidebarTitle":"project_deleted","href":"/errors/project_deleted"},{"title":"project_processing_timeout","sidebarTitle":"project_processing_timeout","href":"/errors/project_processing_timeout"},{"title":"restore_failed","sidebarTitle":"restore_failed","href":"/errors/restore_failed"},{"title":"segment_generation_failed","sidebarTitle":"segment_generation_failed","href":"/errors/segment_generation_failed"},{"title":"segment_generation_timeout","sidebarTitle":"segment_generation_timeout","href":"/errors/segment_generation_timeout"},{"title":"source_download_failed","sidebarTitle":"source_download_failed","href":"/errors/source_download_failed"},{"title":"source_unavailable","sidebarTitle":"source_unavailable","href":"/errors/source_unavailable"},{"title":"speaker_detection_failed","sidebarTitle":"speaker_detection_failed","href":"/errors/speaker_detection_failed"},{"title":"subtitle_import_rolled_back","sidebarTitle":"subtitle_import_rolled_back","href":"/errors/subtitle_import_rolled_back"},{"title":"transcription_failed","sidebarTitle":"transcription_failed","href":"/errors/transcription_failed"},{"title":"translation_dispatch_failed","sidebarTitle":"translation_dispatch_failed","href":"/errors/translation_dispatch_failed"},{"title":"translation_failed","sidebarTitle":"translation_failed","href":"/errors/translation_failed"},{"title":"translation_timeout","sidebarTitle":"translation_timeout","href":"/errors/translation_timeout"},{"title":"voice_clone_failed","sidebarTitle":"voice_clone_failed","href":"/errors/voice_clone_failed"},{"title":"voice_clone_timeout","sidebarTitle":"voice_clone_timeout","href":"/errors/voice_clone_timeout"}]}]},{"group":"Account","pages":[{"title":"Get the payer's credit balance","sidebarTitle":"getBalance","openapi":"openapi.v3.json GET /balance","href":"/operations/getBalance"},{"title":"Get the calling key, user and workspace","sidebarTitle":"getMe","openapi":"openapi.v3.json GET /me","href":"/operations/getMe"},{"title":"Get the payer's plan, entitlements and limits","sidebarTitle":"getPlan","openapi":"openapi.v3.json GET /plan","href":"/operations/getPlan"}]},{"group":"Usage","pages":[{"title":"Get aggregated credit usage","sidebarTitle":"getUsage","openapi":"openapi.v3.json GET /usage","href":"/operations/getUsage"},{"title":"List credit usage events","sidebarTitle":"listUsageEvents","openapi":"openapi.v3.json GET /usage/events","href":"/operations/listUsageEvents"}]},{"group":"Catalogs","pages":[{"title":"List supported languages and capabilities","sidebarTitle":"listLanguages","openapi":"openapi.v3.json GET /languages","href":"/operations/listLanguages"}]},{"group":"Uploads","pages":[{"title":"Create a presigned upload","sidebarTitle":"createUpload","openapi":"openapi.v3.json POST /uploads","href":"/operations/createUpload"},{"title":"Get an upload and refresh its upload URLs","sidebarTitle":"getUpload","openapi":"openapi.v3.json GET /uploads/{upload_id}","href":"/operations/getUpload"},{"title":"Abort a pending upload","sidebarTitle":"deleteUpload","openapi":"openapi.v3.json DELETE /uploads/{upload_id}","href":"/operations/deleteUpload"},{"title":"Complete an upload and import the media","sidebarTitle":"completeUpload","openapi":"openapi.v3.json POST /uploads/{upload_id}/complete","href":"/operations/completeUpload"}]},{"group":"Media","pages":[{"title":"List media in the workspace","sidebarTitle":"listMedia","openapi":"openapi.v3.json GET /media","href":"/operations/listMedia"},{"title":"Import media from a public URL","sidebarTitle":"importMedia","openapi":"openapi.v3.json POST /media/import","href":"/operations/importMedia"},{"title":"Get a media item","sidebarTitle":"getMedia","openapi":"openapi.v3.json GET /media/{media_id}","href":"/operations/getMedia"},{"title":"Delete a media item","sidebarTitle":"deleteMedia","openapi":"openapi.v3.json DELETE /media/{media_id}","href":"/operations/deleteMedia"}]},{"group":"Projects","pages":[{"title":"List folders","sidebarTitle":"listFolders","openapi":"openapi.v3.json GET /folders","href":"/operations/listFolders"},{"title":"Create a folder","sidebarTitle":"createFolder","openapi":"openapi.v3.json POST /folders","href":"/operations/createFolder"},{"title":"Get a folder","sidebarTitle":"getFolder","openapi":"openapi.v3.json GET /folders/{folder_id}","href":"/operations/getFolder"},{"title":"Rename or pin a folder","sidebarTitle":"updateFolder","openapi":"openapi.v3.json PATCH /folders/{folder_id}","href":"/operations/updateFolder"},{"title":"Delete an empty folder","sidebarTitle":"deleteFolder","openapi":"openapi.v3.json DELETE /folders/{folder_id}","href":"/operations/deleteFolder"},{"title":"List projects","sidebarTitle":"listProjects","openapi":"openapi.v3.json GET /projects","href":"/operations/listProjects"},{"title":"Create a localization project","sidebarTitle":"createProject","openapi":"openapi.v3.json POST /projects","href":"/operations/createProject"},{"title":"Delete several projects","sidebarTitle":"deleteProjectBatch","openapi":"openapi.v3.json DELETE /projects","href":"/operations/deleteProjectBatch"},{"title":"Estimate the cost of creating a project","sidebarTitle":"estimateProject","openapi":"openapi.v3.json POST /projects/estimate","href":"/operations/estimateProject"},{"title":"Get a project","sidebarTitle":"getProject","openapi":"openapi.v3.json GET /projects/{project_id}","href":"/operations/getProject"},{"title":"Update a project's name, folder or metadata","sidebarTitle":"updateProject","openapi":"openapi.v3.json PATCH /projects/{project_id}","href":"/operations/updateProject"},{"title":"Delete a project","sidebarTitle":"deleteProject","description":"Soft-deletes the project; support can restore it for at least 30 days; its media are deleted later.","openapi":"openapi.v3.json DELETE /projects/{project_id}","href":"/operations/deleteProject"},{"title":"Copy a project into other target languages","sidebarTitle":"createProjectCopies","openapi":"openapi.v3.json POST /projects/{project_id}/copies","href":"/operations/createProjectCopies"},{"title":"Estimate copies of a project","sidebarTitle":"estimateProjectCopies","description":"Runs every check of createProjectCopies without writing and returns an Estimate.","openapi":"openapi.v3.json POST /projects/{project_id}/copies/estimate","href":"/operations/estimateProjectCopies"}]},{"group":"Exports","pages":[{"title":"Export a video with burned-in subtitles","sidebarTitle":"createExport","openapi":"openapi.v3.json POST /projects/{project_id}/exports","href":"/operations/createExport"},{"title":"Restore a project's archived files","sidebarTitle":"createFileRestore","openapi":"openapi.v3.json POST /projects/{project_id}/file-restores","href":"/operations/createFileRestore"},{"title":"List a project's downloadable outputs","sidebarTitle":"listProjectOutputs","openapi":"openapi.v3.json GET /projects/{project_id}/outputs","href":"/operations/listProjectOutputs"},{"title":"Render a project's subtitles","sidebarTitle":"getProjectSubtitles","openapi":"openapi.v3.json GET /projects/{project_id}/subtitles","href":"/operations/getProjectSubtitles"}]},{"group":"Glossaries","pages":[{"title":"List glossaries","sidebarTitle":"listGlossaries","openapi":"openapi.v3.json GET /glossaries","href":"/operations/listGlossaries"},{"title":"Create a glossary","sidebarTitle":"createGlossary","openapi":"openapi.v3.json POST /glossaries","href":"/operations/createGlossary"},{"title":"Get a glossary with its entries","sidebarTitle":"getGlossary","openapi":"openapi.v3.json GET /glossaries/{glossary_id}","href":"/operations/getGlossary"},{"title":"Update a glossary","sidebarTitle":"updateGlossary","openapi":"openapi.v3.json PATCH /glossaries/{glossary_id}","href":"/operations/updateGlossary"},{"title":"Delete a glossary","sidebarTitle":"deleteGlossary","openapi":"openapi.v3.json DELETE /glossaries/{glossary_id}","href":"/operations/deleteGlossary"}]},{"group":"Jobs","pages":[{"title":"List jobs","sidebarTitle":"listJobs","openapi":"openapi.v3.json GET /jobs","href":"/operations/listJobs"},{"title":"Get a job, optionally waiting for a change","sidebarTitle":"getJob","openapi":"openapi.v3.json GET /jobs/{job_id}","href":"/operations/getJob"},{"title":"Cancel a job","sidebarTitle":"cancelJob","openapi":"openapi.v3.json POST /jobs/{job_id}/cancel","href":"/operations/cancelJob"},{"title":"Resume a failed localization job","sidebarTitle":"resumeJob","openapi":"openapi.v3.json POST /jobs/{job_id}/resume","href":"/operations/resumeJob"}]},{"group":"Transcript","pages":[{"title":"Retranslate segments","sidebarTitle":"retranslateSegments","openapi":"openapi.v3.json POST /projects/{project_id}/retranslation","href":"/operations/retranslateSegments"},{"title":"Get a project's transcript summary","sidebarTitle":"getTranscript","openapi":"openapi.v3.json GET /projects/{project_id}/transcript","href":"/operations/getTranscript"},{"title":"Replace the transcript from SRT subtitles","sidebarTitle":"importTranscript","openapi":"openapi.v3.json POST /projects/{project_id}/transcript/import","href":"/operations/importTranscript"},{"title":"Get a project's translation settings","sidebarTitle":"getTranslationSettings","openapi":"openapi.v3.json GET /projects/{project_id}/translation-settings","href":"/operations/getTranslationSettings"},{"title":"Update translation instructions or glossary","sidebarTitle":"updateTranslationSettings","openapi":"openapi.v3.json PATCH /projects/{project_id}/translation-settings","href":"/operations/updateTranslationSettings"}]},{"group":"Segments","pages":[{"title":"List transcript segments","sidebarTitle":"listSegments","openapi":"openapi.v3.json GET /projects/{project_id}/segments","href":"/operations/listSegments"},{"title":"Insert a segment","sidebarTitle":"createSegment","openapi":"openapi.v3.json POST /projects/{project_id}/segments","href":"/operations/createSegment"},{"title":"Merge adjacent segments","sidebarTitle":"mergeSegments","openapi":"openapi.v3.json POST /projects/{project_id}/segments/merge","href":"/operations/mergeSegments"},{"title":"Get a segment","sidebarTitle":"getSegment","openapi":"openapi.v3.json GET /projects/{project_id}/segments/{segment_id}","href":"/operations/getSegment"},{"title":"Update a segment","sidebarTitle":"updateSegment","openapi":"openapi.v3.json PATCH /projects/{project_id}/segments/{segment_id}","href":"/operations/updateSegment"},{"title":"Delete a segment","sidebarTitle":"deleteSegment","openapi":"openapi.v3.json DELETE /projects/{project_id}/segments/{segment_id}","href":"/operations/deleteSegment"},{"title":"Select a translation variant for a segment","sidebarTitle":"selectTranslationVariant","openapi":"openapi.v3.json POST /projects/{project_id}/segments/{segment_id}/select-variant","href":"/operations/selectTranslationVariant"},{"title":"Split a segment in two","sidebarTitle":"splitSegment","openapi":"openapi.v3.json POST /projects/{project_id}/segments/{segment_id}/split","href":"/operations/splitSegment"}]},{"group":"Versions","pages":[{"title":"List transcript versions","sidebarTitle":"listTranscriptVersions","openapi":"openapi.v3.json GET /projects/{project_id}/transcript/versions","href":"/operations/listTranscriptVersions"},{"title":"Save a transcript version","sidebarTitle":"createTranscriptVersion","openapi":"openapi.v3.json POST /projects/{project_id}/transcript/versions","href":"/operations/createTranscriptVersion"},{"title":"Get a transcript version","sidebarTitle":"getTranscriptVersion","openapi":"openapi.v3.json GET /projects/{project_id}/transcript/versions/{version_number}","href":"/operations/getTranscriptVersion"},{"title":"Restore a transcript version","sidebarTitle":"restoreTranscriptVersion","openapi":"openapi.v3.json POST /projects/{project_id}/transcript/versions/{version_number}/restore","href":"/operations/restoreTranscriptVersion"},{"title":"List the segments of a transcript version","sidebarTitle":"listTranscriptVersionSegments","openapi":"openapi.v3.json GET /projects/{project_id}/transcript/versions/{version_number}/segments","href":"/operations/listTranscriptVersionSegments"}]},{"group":"Speakers","pages":[{"title":"List a project's speakers","sidebarTitle":"listSpeakers","openapi":"openapi.v3.json GET /projects/{project_id}/speakers","href":"/operations/listSpeakers"},{"title":"Get a speaker","sidebarTitle":"getSpeaker","openapi":"openapi.v3.json GET /projects/{project_id}/speakers/{speaker_id}","href":"/operations/getSpeaker"},{"title":"Set a speaker's voice","sidebarTitle":"updateSpeakerVoice","openapi":"openapi.v3.json PUT /projects/{project_id}/speakers/{speaker_id}/voice","href":"/operations/updateSpeakerVoice"}]},{"group":"Voices","pages":[{"title":"List voices available to a project","sidebarTitle":"listProjectVoices","openapi":"openapi.v3.json GET /projects/{project_id}/voices","href":"/operations/listProjectVoices"},{"title":"List voices for a target language","sidebarTitle":"listVoices","openapi":"openapi.v3.json GET /voices","href":"/operations/listVoices"}]},{"group":"Voice clones","pages":[{"title":"List voice clones","sidebarTitle":"listVoiceClones","openapi":"openapi.v3.json GET /voice-clones","href":"/operations/listVoiceClones"},{"title":"Create a voice clone","sidebarTitle":"createVoiceClone","openapi":"openapi.v3.json POST /voice-clones","href":"/operations/createVoiceClone"},{"title":"Get the voice clone quota","sidebarTitle":"getVoiceCloneQuota","openapi":"openapi.v3.json GET /voice-clones/quota","href":"/operations/getVoiceCloneQuota"},{"title":"Get a voice clone","sidebarTitle":"getVoiceClone","openapi":"openapi.v3.json GET /voice-clones/{voice_clone_id}","href":"/operations/getVoiceClone"},{"title":"Rename a voice clone or change its settings","sidebarTitle":"updateVoiceClone","openapi":"openapi.v3.json PATCH /voice-clones/{voice_clone_id}","href":"/operations/updateVoiceClone"},{"title":"Delete a voice clone","sidebarTitle":"deleteVoiceClone","openapi":"openapi.v3.json DELETE /voice-clones/{voice_clone_id}","href":"/operations/deleteVoiceClone"}]},{"group":"Dubbing","pages":[{"title":"Dub or redub a project","sidebarTitle":"createDub","openapi":"openapi.v3.json POST /projects/{project_id}/dub","href":"/operations/createDub"},{"title":"Estimate a dub or redub","sidebarTitle":"estimateDub","openapi":"openapi.v3.json POST /projects/{project_id}/dub/estimate","href":"/operations/estimateDub"},{"title":"Run dub, lip-sync and on-screen as one job","sidebarTitle":"createLocalization","openapi":"openapi.v3.json POST /projects/{project_id}/localizations","href":"/operations/createLocalization"},{"title":"Estimate a dub, lip-sync and on-screen run","sidebarTitle":"estimateLocalization","openapi":"openapi.v3.json POST /projects/{project_id}/localizations/estimate","href":"/operations/estimateLocalization"},{"title":"Voice chosen segments into downloadable clips","sidebarTitle":"generateSegments","openapi":"openapi.v3.json POST /projects/{project_id}/segments/generate","href":"/operations/generateSegments"},{"title":"Estimate voicing chosen segments","sidebarTitle":"estimateSegmentGeneration","openapi":"openapi.v3.json POST /projects/{project_id}/segments/generate/estimate","href":"/operations/estimateSegmentGeneration"}]},{"group":"Lipsync","pages":[{"title":"Get a project's lip-sync state","sidebarTitle":"getLipsyncState","openapi":"openapi.v3.json GET /projects/{project_id}/lipsync","href":"/operations/getLipsyncState"},{"title":"Lip-sync a dubbed video","sidebarTitle":"createLipsync","openapi":"openapi.v3.json POST /projects/{project_id}/lipsync","href":"/operations/createLipsync"},{"title":"Estimate a lip-sync run","sidebarTitle":"estimateLipsync","openapi":"openapi.v3.json POST /projects/{project_id}/lipsync/estimate","href":"/operations/estimateLipsync"}]},{"group":"Onscreen","pages":[{"title":"Get a project's on-screen translation state","sidebarTitle":"getOnscreenState","openapi":"openapi.v3.json GET /projects/{project_id}/onscreen","href":"/operations/getOnscreenState"},{"title":"Translate on-screen text","sidebarTitle":"createOnscreen","openapi":"openapi.v3.json POST /projects/{project_id}/onscreen","href":"/operations/createOnscreen"},{"title":"Estimate on-screen text translation","sidebarTitle":"estimateOnscreen","openapi":"openapi.v3.json POST /projects/{project_id}/onscreen/estimate","href":"/operations/estimateOnscreen"}]}]}]},{"version":"v2","pages":[{"title":"v2","href":"/introduction"}]}]},"basePath":"","title":"Copy a project into other target languages - Rask AI API","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CybtLBIt.js","utils-BMLj2fvV.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B6In562Y.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dr8Mfhp9.js","snippetPresets-2rmQvMVl.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-WMqJYdZj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CJ-MlPHu.js","shallow-dY3TMRCk.js","getApiPlaygroundDisplay-v-1B2bKm.js","CodeSnippet-BDhiTB7U.js","CodeSnippets-D9hnzQcS.js","Page-C4GwDT3_.js","getPastedJson-Th2V45jI.js","icon-BQXch1W9.js","MethodPill-BCqUneP3.js","DuplicateIcon-Q_-bhurZ.js","createIcon-DUjLHRqp.js","DynamicMarkdown-B-f2cqXQ.js","SectionHeading-Da5NsV4v.js","axios-vUo_bRtp.js","Markdown-D13FWkIM.js","clsx-D3Isdib3.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C-XZBk9h.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink--qIqmmVG.js"]}