Runs every check of generateSegments without writing and returns an Estimate: segment_ids_to_voice, speech seconds, price, engine, text_adaptation and processing_scope, with eligibility, reasons and balance_after. Speech is synthesized only for the chosen segments; processing_scope.voice_setup says plainly when the engine may also read other speakers’ speech to prepare cloned voices (notice wider_voice_setup). That work is not charged. Without a previous dub, the notice clips_not_reusable says that the first dub voices and charges these segments again. This charge does not open the text (dub_payment_required).When to use: before generateSegments; send total_minutes as expected_cost_minutes.Side effects: None.Cost: Free. Does not need credits:spend.Idempotency: no side effects; an Idempotency-Key is accepted and ignored, so every call is fresh.Required scopes:dubbing:write
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).
{"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/estimateSegmentGeneration","slug":"/operations/estimateSegmentGeneration","pageMetadata":{"title":"Estimate voicing chosen segments","sidebarTitle":"estimateSegmentGeneration","description":"Runs every check of generateSegments without writing and returns an Estimate.","openapi":"openapi.v3.json POST /projects/{project_id}/segments/generate/estimate","href":"/operations/estimateSegmentGeneration"},"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: \"Runs every check of generateSegments without writing and returns an Estimate.\"\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:[_jsxs(_components.p,{children:[`Runs every check of generateSegments without writing and returns an Estimate: `,_jsx(_components.code,{children:`segment_ids_to_voice`}),`, speech seconds, price, engine, `,_jsx(_components.code,{children:`text_adaptation`}),` and `,_jsx(_components.code,{children:`processing_scope`}),`, with eligibility, reasons and `,_jsx(_components.code,{children:`balance_after`}),`. Speech is synthesized only for the chosen segments; `,_jsx(_components.code,{children:`processing_scope.voice_setup`}),` says plainly when the engine may also read other speakers’ speech to prepare cloned voices (notice `,_jsx(_components.code,{children:`wider_voice_setup`}),`). That work is not charged. Without a previous dub, the notice `,_jsx(_components.code,{children:`clips_not_reusable`}),` says that the first dub voices and charges these segments again. This charge does not open the text (`,_jsx(_components.code,{children:`dub_payment_required`}),`).`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`When to use:`}),` before generateSegments; send `,_jsx(_components.code,{children:`total_minutes`}),` as `,_jsx(_components.code,{children:`expected_cost_minutes`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Side effects:`}),` None.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cost:`}),` Free. Does not need `,_jsx(_components.code,{children:`credits:spend`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Idempotency:`}),` no side effects; an `,_jsx(_components.code,{children:`Idempotency-Key`}),` is accepted and ignored, so every call is fresh.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Required scopes:`}),` `,_jsx(_components.code,{children:`dubbing:write`})]})]})}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":"Estimate voicing chosen segments","sidebarTitle":"estimateSegmentGeneration","description":"Runs every check of generateSegments without writing and returns an Estimate.","openapi":"openapi.v3.json POST /projects/{project_id}/segments/generate/estimate","href":"/operations/estimateSegmentGeneration"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"estimateSegmentGeneration","tags":["Dubbing"],"summary":"Estimate voicing chosen segments","description":"Runs every check of generateSegments without writing and returns an Estimate.","security":["0891ff31-46a8-4fd4-9cdf-f40993ae8dd5"],"parameters":["97771b82-7f58-4a09-a25b-035b6021c230","807a1653-dc67-4e63-98f5-04d54a391778"],"requestBody":"85114f62-b0de-4fa1-bb34-03b63f996e5d","responses":{"200":"c2b3a384-350e-4c96-8a7d-725ac7b22dd5","400":"82b8fbfc-821e-4b09-825a-bef10f74b1c6","401":"84bafa84-1f72-43d3-81c8-61a1f30b7a82","403":"eaf2d20e-8fdd-419d-ac05-08ee2efbd870","404":"6546a777-cce4-4528-a925-dab25a76d8b1","413":"ffbf3d88-5e38-4ffc-8fb3-10bd9664c544","422":"d591e7eb-7757-4ddb-bf33-a23710386859","429":"329badc6-a016-45b8-891d-9901f79c32a9","500":"cc59ad0d-a1df-46b1-b2bd-3234f4d54d34","503":"d13fb14d-54bf-4851-a23f-09e96342b549"},"x-rask-operation":{"effect":"read","async":"none","job_type":null,"idempotency_key":"optional","etag":"none","pagination":"none","estimate_operation":null,"plan_feature":null,"scopes":["dubbing:write"],"errors":[],"stability":"alpha"},"x-rask-release":"ga","x-stability-level":"alpha","method":"post","type":"path","servers":["61053d33-b3c1-45e9-9029-d55a58076416"],"path":"/projects/{project_id}/segments/generate/estimate","baseUrlOptions":["https://api.rask.ai/v3"],"title":"Estimate voicing chosen segments","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"97771b82-7f58-4a09-a25b-035b6021c230":{"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"},"807a1653-dc67-4e63-98f5-04d54a391778":{"name":"Idempotency-Key","in":"header","description":"Accepted and ignored: this operation has no side effects and stores nothing.","required":false,"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x20-\\x7E]+$","isRequired":false,"description":"Accepted and ignored: this operation has no side effects and stores nothing.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Same body as generateSegments.","required":["segment_ids"],"additionalProperties":false,"properties":{"segment_ids":{"type":"array","description":"Segments of the live transcript to voice (1-100).","minItems":1,"maxItems":100,"uniqueItems":true,"items":{"type":"string","maxLength":64,"uniqueKey":"segment_ids.items.[INDEX]","typeLabel":"string"},"x-rask-id-type":"segment","isRequired":true,"uniqueKey":"segment_ids","typeLabel":"string[]"},"expected_cost_minutes":{"type":"integer","minimum":0,"maximum":100000,"description":"Accepted and ignored, so the action's body can be sent unchanged.","format":"int32","uniqueKey":"expected_cost_minutes","typeLabel":"integer\u003cint32>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"two":{"title":"two","value":{"segment_ids":["5f0e2c7a-1b3d-4e6f-8a9c-2d4e6f8a0b11","8b3d1e9f-6a2c-4d7e-b5f1-3c9e7a1d5b22"]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"c2b3a384-350e-4c96-8a7d-725ac7b22dd5":{"description":"OK: `Estimate`.","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/json":{"schema":{"type":"object","description":"A side-effect-free quote produced by the action's own checks. Transient: carries `object`, no `id`.","required":["object","action","project_id","eligible","reasons","notices","costs","total_minutes","total_projects","balance_after","spend_limit","details"],"properties":{"object":{"type":"string","enum":["estimate"],"description":"Always `estimate`.","isRequired":true,"uniqueKey":"object","typeLabel":"enum\u003cstring>"},"action":{"type":"string","description":"The action an estimate prices. Discriminator of `details`.\n\n- `create_project`: createProject\n- `create_project_copies`: createProjectCopies\n- `dub`: createDub\n- `lipsync`: createLipsync\n- `onscreen`: createOnscreen\n- `segment_generation`: generateSegments\n- `localization`: createLocalization, resumeJob","enum":["create_project","create_project_copies","dub","lipsync","onscreen","segment_generation","localization"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"action","typeLabel":"enum\u003cstring>"},"project_id":{"oneOf":[{"type":"string","description":"The project; null for project creation.","isRequired":true,"uniqueKey":"project_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The project; null for project creation.","isRequired":true,"uniqueKey":"project_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"project_id","typeLabel":"string | null"},"eligible":{"type":"boolean","description":"True when the action would start now, balance, plan, scopes and key limits included.","isRequired":true,"uniqueKey":"eligible","typeLabel":"boolean"},"reasons":{"type":"array","items":{"type":"object","description":"A blocking reason or a non-blocking notice of an estimate.","required":["code","detail","hint","retryable","pointer"],"properties":{"code":{"type":"string","description":"A problem code the action would return (or a notice code).","isRequired":true,"uniqueKey":"reasons.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explanation; never user text.","isRequired":true,"uniqueKey":"reasons.items.[INDEX].detail","typeLabel":"string"},"hint":{"oneOf":[{"type":"string","description":"Next step.","maxLength":160,"isRequired":true,"uniqueKey":"reasons.items.[INDEX].hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"Next step.","maxLength":160,"isRequired":true,"uniqueKey":"reasons.items.[INDEX].hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reasons.items.[INDEX].hint","typeLabel":"string | null"},"retryable":{"type":"boolean","description":"Whether waiting and retrying may clear it.","isRequired":true,"uniqueKey":"reasons.items.[INDEX].retryable","typeLabel":"boolean"},"pointer":{"oneOf":[{"type":"string","description":"JSON Pointer into the request, when the reason is about a field.","isRequired":true,"uniqueKey":"reasons.items.[INDEX].pointer.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON Pointer into the request, when the reason is about a field.","isRequired":true,"uniqueKey":"reasons.items.[INDEX].pointer.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reasons.items.[INDEX].pointer","typeLabel":"string | null"}},"uniqueKey":"reasons.items.[INDEX]","typeLabel":"object"},"description":"Blocking reasons (the action's error codes, plus insufficient_scope, token_spend_limit_exceeded, workspace_access_suspended).","isRequired":true,"uniqueKey":"reasons","typeLabel":"object[]"},"notices":{"type":"array","items":{"type":"object","description":"A blocking reason or a non-blocking notice of an estimate.","required":["code","detail","hint","retryable","pointer"],"properties":{"code":{"type":"string","description":"A problem code the action would return (or a notice code).","isRequired":true,"uniqueKey":"notices.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explanation; never user text.","isRequired":true,"uniqueKey":"notices.items.[INDEX].detail","typeLabel":"string"},"hint":{"oneOf":[{"type":"string","description":"Next step.","maxLength":160,"isRequired":true,"uniqueKey":"notices.items.[INDEX].hint.oneOf.0","typeLabel":"string"},{"type":"null","description":"Next step.","maxLength":160,"isRequired":true,"uniqueKey":"notices.items.[INDEX].hint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"notices.items.[INDEX].hint","typeLabel":"string | null"},"retryable":{"type":"boolean","description":"Whether waiting and retrying may clear it.","isRequired":true,"uniqueKey":"notices.items.[INDEX].retryable","typeLabel":"boolean"},"pointer":{"oneOf":[{"type":"string","description":"JSON Pointer into the request, when the reason is about a field.","isRequired":true,"uniqueKey":"notices.items.[INDEX].pointer.oneOf.0","typeLabel":"string"},{"type":"null","description":"JSON Pointer into the request, when the reason is about a field.","isRequired":true,"uniqueKey":"notices.items.[INDEX].pointer.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"notices.items.[INDEX].pointer","typeLabel":"string | null"}},"uniqueKey":"notices.items.[INDEX]","typeLabel":"object"},"description":"Non-blocking notices (dubbing_model_overridden, trial_processing_window, meaning_first_disabled, voice_fallback, assembly_anchor_voiced, wider_voice_setup, clips_not_reusable).","isRequired":true,"uniqueKey":"notices","typeLabel":"object[]"},"costs":{"type":"array","items":{"oneOf":[{"type":"object","description":"A line of an estimate: a union on `credit_type`.","required":["credit_type","minutes","feature","charged_when","basis"],"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":"costs.items.[INDEX].oneOf.0.credit_type","typeLabel":"enum\u003cstring>"},"minutes":{"type":"integer","description":"Minutes this line costs.","format":"int32","minimum":0,"isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.0.minutes","typeLabel":"integer\u003cint32>"},"feature":{"type":"string","description":"Usage vocabulary for charges, cost lines and usage reports.\n\n- `project_creation`: creating a project (project credit)\n- `project_copy`: copying a project (project credit)\n- `dub`: a full dub\n- `redub`: a dub of changed segments\n- `segment_generation`: paid voicing of chosen segments\n- `lipsync_legacy`: a Legacy lip-sync run\n- `lipsync_enhanced`: an Enhanced lip-sync run\n- `lipsync_free`: the free lip-sync run\n- `onscreen`: on-screen text translation\n- `other`: anything else (manual adjustments by Rask, other products)\n- `lipsync_unknown_model`: a lip-sync run not started through v3 (its model is not recorded)\n\nA charge without a v3 job reports the feature of what it paid for: `project_creation`, `project_copy`, `dub`, `redub`, `onscreen`, `lipsync_unknown_model` or `lipsync_free` (by pool), else `other`. Refunds follow their charge.","enum":["project_creation","project_copy","dub","redub","segment_generation","lipsync_legacy","lipsync_enhanced","lipsync_free","onscreen","other","lipsync_unknown_model"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.0.feature","typeLabel":"enum\u003cstring>"},"charged_when":{"type":"string","description":"When a cost line is charged.\n\n- `on_request`: when the request is accepted\n- `after_translation`: when auto-dub starts after translation\n- `after_first_dub`: when on-screen auto-start fires after the first dub\n- `at_stage_start`: when a stage of a localization run starts","enum":["on_request","after_translation","after_first_dub","at_stage_start"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.0.charged_when","typeLabel":"enum\u003cstring>"},"basis":{"type":"object","description":"How a minute cost line was computed.","required":["billable_seconds","multiplier"],"properties":{"billable_seconds":{"oneOf":[{"type":"integer","description":"Seconds the price is based on.","format":"int32","isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.0.basis.billable_seconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Seconds the price is based on.","format":"int32","isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.0.basis.billable_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.0.basis.billable_seconds","typeLabel":"integer\u003cint32> | null"},"multiplier":{"oneOf":[{"type":"number","description":"Price multiplier (Enhanced lip-sync, on-screen).","format":"double","isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.0.basis.multiplier.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","description":"Price multiplier (Enhanced lip-sync, on-screen).","format":"double","isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.0.basis.multiplier.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.0.basis.multiplier","typeLabel":"number\u003cdouble> | null"}},"isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.0.basis","typeLabel":"object"}},"uniqueKey":"costs.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"A line of an estimate: a union on `credit_type`.","required":["credit_type","projects","feature","charged_when"],"x-rask-open-union":true,"properties":{"credit_type":{"type":"string","enum":["projects"],"isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.1.credit_type","typeLabel":"enum\u003cstring>"},"projects":{"type":"integer","description":"Project credits this line costs.","format":"int32","minimum":0,"isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.1.projects","typeLabel":"integer\u003cint32>"},"feature":{"type":"string","description":"Usage vocabulary for charges, cost lines and usage reports.\n\n- `project_creation`: creating a project (project credit)\n- `project_copy`: copying a project (project credit)\n- `dub`: a full dub\n- `redub`: a dub of changed segments\n- `segment_generation`: paid voicing of chosen segments\n- `lipsync_legacy`: a Legacy lip-sync run\n- `lipsync_enhanced`: an Enhanced lip-sync run\n- `lipsync_free`: the free lip-sync run\n- `onscreen`: on-screen text translation\n- `other`: anything else (manual adjustments by Rask, other products)\n- `lipsync_unknown_model`: a lip-sync run not started through v3 (its model is not recorded)\n\nA charge without a v3 job reports the feature of what it paid for: `project_creation`, `project_copy`, `dub`, `redub`, `onscreen`, `lipsync_unknown_model` or `lipsync_free` (by pool), else `other`. Refunds follow their charge.","enum":["project_creation","project_copy","dub","redub","segment_generation","lipsync_legacy","lipsync_enhanced","lipsync_free","onscreen","other","lipsync_unknown_model"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.1.feature","typeLabel":"enum\u003cstring>"},"charged_when":{"type":"string","description":"When a cost line is charged.\n\n- `on_request`: when the request is accepted\n- `after_translation`: when auto-dub starts after translation\n- `after_first_dub`: when on-screen auto-start fires after the first dub\n- `at_stage_start`: when a stage of a localization run starts","enum":["on_request","after_translation","after_first_dub","at_stage_start"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"costs.items.[INDEX].oneOf.1.charged_when","typeLabel":"enum\u003cstring>"}},"uniqueKey":"costs.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"costs.items.[INDEX]","typeLabel":"object"},"description":"Cost lines.","isRequired":true,"uniqueKey":"costs","typeLabel":"object[]"},"total_minutes":{"type":"integer","description":"Sum of minute lines (any minute pool): send this as expected_cost_minutes.","format":"int32","minimum":0,"isRequired":true,"uniqueKey":"total_minutes","typeLabel":"integer\u003cint32>"},"total_projects":{"type":"integer","description":"Sum of project-credit lines (0 when unlimited).","format":"int32","minimum":0,"isRequired":true,"uniqueKey":"total_projects","typeLabel":"integer\u003cint32>"},"balance_after":{"type":"object","description":"Balances after the action.","required":["minutes","lipsync_free_minutes","projects"],"properties":{"minutes":{"oneOf":[{"type":"integer","description":"Minutes left after the action; null when not affected.","format":"int32","isRequired":true,"uniqueKey":"balance_after.minutes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Minutes left after the action; null when not affected.","format":"int32","isRequired":true,"uniqueKey":"balance_after.minutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"balance_after.minutes","typeLabel":"integer\u003cint32> | null"},"lipsync_free_minutes":{"oneOf":[{"type":"integer","description":"Free lip-sync minutes left; null when not affected.","format":"int32","isRequired":true,"uniqueKey":"balance_after.lipsync_free_minutes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Free lip-sync minutes left; null when not affected.","format":"int32","isRequired":true,"uniqueKey":"balance_after.lipsync_free_minutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"balance_after.lipsync_free_minutes","typeLabel":"integer\u003cint32> | null"},"projects":{"oneOf":[{"type":"integer","description":"Project credits left; null when unlimited or not affected.","format":"int32","isRequired":true,"uniqueKey":"balance_after.projects.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Project credits left; null when unlimited or not affected.","format":"int32","isRequired":true,"uniqueKey":"balance_after.projects.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"balance_after.projects","typeLabel":"integer\u003cint32> | null"}},"isRequired":true,"uniqueKey":"balance_after","typeLabel":"object"},"spend_limit":{"oneOf":[{"type":"object","description":"The calling key's monthly caps; null when the key has neither cap.","required":["limit_minutes","spent_minutes","remaining_minutes","limit_projects","spent_projects","remaining_projects","resets_at"],"properties":{"limit_minutes":{"oneOf":[{"type":"integer","description":"The key's monthly cap on the minutes pool; null when uncapped.","format":"int32","isRequired":true,"uniqueKey":"spend_limit.oneOf.0.limit_minutes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"The key's monthly cap on the minutes pool; null when uncapped.","format":"int32","isRequired":true,"uniqueKey":"spend_limit.oneOf.0.limit_minutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"spend_limit.oneOf.0.limit_minutes","typeLabel":"integer\u003cint32> | null"},"spent_minutes":{"type":"integer","description":"Minutes quoted by this key's jobs this UTC month, refunds excluded, plus its pending deferred spends. A `localization` job is not counted; its stages are.","format":"int32","isRequired":true,"uniqueKey":"spend_limit.oneOf.0.spent_minutes","typeLabel":"integer\u003cint32>"},"remaining_minutes":{"oneOf":[{"type":"integer","description":"Minutes left under the cap; null when uncapped.","format":"int32","isRequired":true,"uniqueKey":"spend_limit.oneOf.0.remaining_minutes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Minutes left under the cap; null when uncapped.","format":"int32","isRequired":true,"uniqueKey":"spend_limit.oneOf.0.remaining_minutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"spend_limit.oneOf.0.remaining_minutes","typeLabel":"integer\u003cint32> | null"},"limit_projects":{"oneOf":[{"type":"integer","description":"The key's monthly cap on project credits; null when uncapped.","format":"int32","isRequired":true,"uniqueKey":"spend_limit.oneOf.0.limit_projects.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"The key's monthly cap on project credits; null when uncapped.","format":"int32","isRequired":true,"uniqueKey":"spend_limit.oneOf.0.limit_projects.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"spend_limit.oneOf.0.limit_projects","typeLabel":"integer\u003cint32> | null"},"spent_projects":{"type":"integer","description":"Project credits quoted by this key's jobs this UTC month, refunds excluded.","format":"int32","isRequired":true,"uniqueKey":"spend_limit.oneOf.0.spent_projects","typeLabel":"integer\u003cint32>"},"remaining_projects":{"oneOf":[{"type":"integer","description":"Project credits left under the cap; null when uncapped.","format":"int32","isRequired":true,"uniqueKey":"spend_limit.oneOf.0.remaining_projects.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Project credits left under the cap; null when uncapped.","format":"int32","isRequired":true,"uniqueKey":"spend_limit.oneOf.0.remaining_projects.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"spend_limit.oneOf.0.remaining_projects","typeLabel":"integer\u003cint32> | null"},"resets_at":{"type":"string","description":"Start of the next UTC month.","format":"date-time","isRequired":true,"uniqueKey":"spend_limit.oneOf.0.resets_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"spend_limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"The calling key's monthly caps; null when the key has neither cap.","isRequired":true,"uniqueKey":"spend_limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"spend_limit","typeLabel":"object | null"},"details":{"oneOf":[{"type":"object","description":"Per-action details; `action` mirrors `Estimate.action`.","required":["action","dubbing_model","processing_window_seconds","billable_seconds","text_adaptation"],"x-rask-open-union":true,"properties":{"action":{"type":"string","enum":["create_project"],"isRequired":true,"uniqueKey":"details.oneOf.0.action","typeLabel":"enum\u003cstring>"},"dubbing_model":{"type":"string","description":"Dubbing model.\n\n- `v1`: the legacy dubbing engine\n- `v2`: meaning-first dubbing (Dubbing 2.0)","enum":["v1","v2"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"details.oneOf.0.dubbing_model","typeLabel":"enum\u003cstring>"},"processing_window_seconds":{"oneOf":[{"type":"integer","description":"Trial processing window; null when the whole media is processed.","format":"int32","isRequired":true,"uniqueKey":"details.oneOf.0.processing_window_seconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Trial processing window; null when the whole media is processed.","format":"int32","isRequired":true,"uniqueKey":"details.oneOf.0.processing_window_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.0.processing_window_seconds","typeLabel":"integer\u003cint32> | null"},"billable_seconds":{"type":"integer","description":"Seconds the pipeline (and auto-dub) will price.","format":"int32","isRequired":true,"uniqueKey":"details.oneOf.0.billable_seconds","typeLabel":"integer\u003cint32>"},"text_adaptation":{"oneOf":[{"type":"string","description":"How the auto-dub voices the text; null when nothing will be dubbed.","enum":["context","as_written"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"details.oneOf.0.text_adaptation.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"How the auto-dub voices the text; null when nothing will be dubbed.","isRequired":true,"uniqueKey":"details.oneOf.0.text_adaptation.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.0.text_adaptation","typeLabel":"enum\u003cstring> | null"}},"isRequired":true,"uniqueKey":"details.oneOf.0","typeLabel":"object"},{"type":"object","description":"Per-action details; `action` mirrors `Estimate.action`.","required":["action","billable_seconds","target_count","reused_dub_targets","text_adaptation"],"x-rask-open-union":true,"properties":{"action":{"type":"string","enum":["create_project_copies"],"isRequired":true,"uniqueKey":"details.oneOf.1.action","typeLabel":"enum\u003cstring>"},"billable_seconds":{"type":"integer","description":"Seconds priced per copy (the source duration).","format":"int32","isRequired":true,"uniqueKey":"details.oneOf.1.billable_seconds","typeLabel":"integer\u003cint32>"},"target_count":{"type":"integer","description":"Copies created.","format":"int32","minimum":1,"maximum":10,"isRequired":true,"uniqueKey":"details.oneOf.1.target_count","typeLabel":"integer\u003cint32>"},"reused_dub_targets":{"type":"integer","description":"Targets equal to the source, which reuse its dub at no minute cost.","format":"int32","minimum":0,"isRequired":true,"uniqueKey":"details.oneOf.1.reused_dub_targets","typeLabel":"integer\u003cint32>"},"text_adaptation":{"oneOf":[{"type":"string","description":"How the auto-dub voices the text; null when nothing will be dubbed.","enum":["context","as_written"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"details.oneOf.1.text_adaptation.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"How the auto-dub voices the text; null when nothing will be dubbed.","isRequired":true,"uniqueKey":"details.oneOf.1.text_adaptation.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.1.text_adaptation","typeLabel":"enum\u003cstring> | null"}},"isRequired":true,"uniqueKey":"details.oneOf.1","typeLabel":"object"},{"type":"object","description":"Per-action details; `action` mirrors `Estimate.action`.","required":["action","mode_requested","mode_applied","segments_to_voice","changed_speech_seconds","billable_minutes","pricing_rule","engine","segment_ids_to_voice","reused_clip_segment_ids","assembly_anchor_segment_id","text_adaptation"],"x-rask-open-union":true,"properties":{"action":{"type":"string","enum":["dub"],"isRequired":true,"uniqueKey":"details.oneOf.2.action","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":"details.oneOf.2.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":"details.oneOf.2.mode_applied","typeLabel":"enum\u003cstring>"},"segments_to_voice":{"type":"integer","description":"Segments the dub would voice and charge.","format":"int32","isRequired":true,"uniqueKey":"details.oneOf.2.segments_to_voice","typeLabel":"integer\u003cint32>"},"changed_speech_seconds":{"type":"number","description":"Speech duration of the segments the dub would voice.","format":"double","isRequired":true,"uniqueKey":"details.oneOf.2.changed_speech_seconds","typeLabel":"number\u003cdouble>"},"billable_minutes":{"type":"integer","description":"Minutes billed.","format":"int32","isRequired":true,"uniqueKey":"details.oneOf.2.billable_minutes","typeLabel":"integer\u003cint32>"},"pricing_rule":{"type":"string","description":"How a dub or segment generation is priced: `max(1, round(s/60))` minutes (half to even) over the speech seconds `s` below; a free dubbing variant costs 0. Speech seconds read each segment's interval, so `createDub`, `generateSegments` and a run's dub answer 422 `validation_failed` (`errors[].code: text_too_long_for_interval`) on a translation above 60 characters per second of its interval, or 100 on any interval. When every line passes, all one request voices may hold at most 3600 characters for each minute its speech is priced at, the list price also for a free dubbing variant: above that it answers 422 `validation_failed` (`errors[].code: text_too_long_for_price`, pointer `/segment_ids` or `/segments`).\n\n- `full`: speech seconds of every segment (auto-dub: the processed media duration)\n- `changed_speech`: speech seconds of the voiced segments, with no cap at the full price\n- `selected_speech`: speech seconds of the chosen segments (segment generation)\n- `free_language`: free dubbing variant","enum":["full","changed_speech","selected_speech","free_language"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"details.oneOf.2.pricing_rule","typeLabel":"enum\u003cstring>"},"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":"details.oneOf.2.engine","typeLabel":"enum\u003cstring>"},"segment_ids_to_voice":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"details.oneOf.2.segment_ids_to_voice.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"The segments the dub would voice; null for a full dub, which voices every segment.","isRequired":true,"uniqueKey":"details.oneOf.2.segment_ids_to_voice.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"The segments the dub would voice; null for a full dub, which voices every segment.","isRequired":true,"uniqueKey":"details.oneOf.2.segment_ids_to_voice.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.2.segment_ids_to_voice","typeLabel":"string[] | null"},"reused_clip_segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"details.oneOf.2.reused_clip_segment_ids.items.[INDEX]","typeLabel":"string"},"description":"Changed segments whose current clip from generateSegments is merged without voicing or charging it again.","isRequired":true,"uniqueKey":"details.oneOf.2.reused_clip_segment_ids","typeLabel":"string[]"},"assembly_anchor_segment_id":{"oneOf":[{"type":"string","description":"The shortest reused clip, voiced again because a track can be rebuilt only when at least one segment is voiced; its clip in the track is a new take, at its speech price (minimum 1 minute). Null when other segments are voiced anyway.","isRequired":true,"uniqueKey":"details.oneOf.2.assembly_anchor_segment_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The shortest reused clip, voiced again because a track can be rebuilt only when at least one segment is voiced; its clip in the track is a new take, at its speech price (minimum 1 minute). Null when other segments are voiced anyway.","isRequired":true,"uniqueKey":"details.oneOf.2.assembly_anchor_segment_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.2.assembly_anchor_segment_id","typeLabel":"string | null"},"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":"details.oneOf.2.text_adaptation","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"details.oneOf.2","typeLabel":"object"},{"type":"object","description":"Per-action details; `action` mirrors `Estimate.action`.","required":["action","model","free_trial_run","free_trial_run_available","multiplier","processed_seconds","video_has_face","face_check_required","previous_run"],"x-rask-open-union":true,"properties":{"action":{"type":"string","enum":["lipsync"],"isRequired":true,"uniqueKey":"details.oneOf.3.action","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":"details.oneOf.3.model","typeLabel":"enum\u003cstring>"},"free_trial_run":{"type":"boolean","description":"Whether the estimate prices the free run.","isRequired":true,"uniqueKey":"details.oneOf.3.free_trial_run","typeLabel":"boolean"},"free_trial_run_available":{"type":"boolean","description":"Whether the free run is still available on this project.","isRequired":true,"uniqueKey":"details.oneOf.3.free_trial_run_available","typeLabel":"boolean"},"multiplier":{"type":"number","description":"Price multiplier (1 for legacy; the plan's multiplier for enhanced).","format":"double","isRequired":true,"uniqueKey":"details.oneOf.3.multiplier","typeLabel":"number\u003cdouble>"},"processed_seconds":{"type":"number","description":"Seconds the run processes.","format":"double","isRequired":true,"uniqueKey":"details.oneOf.3.processed_seconds","typeLabel":"number\u003cdouble>"},"video_has_face":{"oneOf":[{"type":"boolean","description":"Face check result; null before a face check ran.","isRequired":true,"uniqueKey":"details.oneOf.3.video_has_face.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Face check result; null before a face check ran.","isRequired":true,"uniqueKey":"details.oneOf.3.video_has_face.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.3.video_has_face","typeLabel":"boolean | null"},"face_check_required":{"type":"boolean","description":"Whether the run starts with a face check.","isRequired":true,"uniqueKey":"details.oneOf.3.face_check_required","typeLabel":"boolean"},"previous_run":{"type":"string","description":"State of the previous lip-sync run.\n\n- `none`: no run yet\n- `current`: a run for the current dub\n- `outdated`: a run for an older dub\n- `failed`: the last run failed","enum":["none","current","outdated","failed"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"details.oneOf.3.previous_run","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"details.oneOf.3","typeLabel":"object"},{"type":"object","description":"Per-action details; `action` mirrors `Estimate.action`.","required":["action","target_language","video_duration_seconds","max_video_duration_seconds","multiplier","max_processing_minutes","available"],"x-rask-open-union":true,"properties":{"action":{"type":"string","enum":["onscreen"],"isRequired":true,"uniqueKey":"details.oneOf.4.action","typeLabel":"enum\u003cstring>"},"target_language":{"type":"string","description":"Target language of the project.","isRequired":true,"uniqueKey":"details.oneOf.4.target_language","typeLabel":"string"},"video_duration_seconds":{"type":"number","description":"Video duration.","format":"double","isRequired":true,"uniqueKey":"details.oneOf.4.video_duration_seconds","typeLabel":"number\u003cdouble>"},"max_video_duration_seconds":{"type":"number","description":"Longest video accepted, the plan's `onscreen_max_video_seconds`.","format":"double","isRequired":true,"uniqueKey":"details.oneOf.4.max_video_duration_seconds","typeLabel":"number\u003cdouble>"},"multiplier":{"type":"number","description":"Price multiplier of the plan.","format":"double","isRequired":true,"uniqueKey":"details.oneOf.4.multiplier","typeLabel":"number\u003cdouble>"},"max_processing_minutes":{"oneOf":[{"type":"integer","description":"Processing time budget.","format":"int32","isRequired":true,"uniqueKey":"details.oneOf.4.max_processing_minutes.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","description":"Processing time budget.","format":"int32","isRequired":true,"uniqueKey":"details.oneOf.4.max_processing_minutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.4.max_processing_minutes","typeLabel":"integer\u003cint32> | null"},"available":{"type":"boolean","description":"Whether on-screen translation is available for this project now.","isRequired":true,"uniqueKey":"details.oneOf.4.available","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"details.oneOf.4","typeLabel":"object"},{"type":"object","description":"Per-action details; `action` mirrors `Estimate.action`.","required":["action","segment_ids_to_voice","speech_seconds","billable_minutes","pricing_rule","engine","text_adaptation","processing_scope"],"x-rask-open-union":true,"properties":{"action":{"type":"string","enum":["segment_generation"],"isRequired":true,"uniqueKey":"details.oneOf.5.action","typeLabel":"enum\u003cstring>"},"segment_ids_to_voice":{"type":"array","items":{"type":"string","uniqueKey":"details.oneOf.5.segment_ids_to_voice.items.[INDEX]","typeLabel":"string"},"description":"The segments the job voices.","isRequired":true,"uniqueKey":"details.oneOf.5.segment_ids_to_voice","typeLabel":"string[]"},"speech_seconds":{"type":"number","description":"Speech duration of those segments.","format":"double","isRequired":true,"uniqueKey":"details.oneOf.5.speech_seconds","typeLabel":"number\u003cdouble>"},"billable_minutes":{"type":"integer","description":"Minutes billed.","format":"int32","isRequired":true,"uniqueKey":"details.oneOf.5.billable_minutes","typeLabel":"integer\u003cint32>"},"pricing_rule":{"type":"string","description":"How a dub or segment generation is priced: `max(1, round(s/60))` minutes (half to even) over the speech seconds `s` below; a free dubbing variant costs 0. Speech seconds read each segment's interval, so `createDub`, `generateSegments` and a run's dub answer 422 `validation_failed` (`errors[].code: text_too_long_for_interval`) on a translation above 60 characters per second of its interval, or 100 on any interval. When every line passes, all one request voices may hold at most 3600 characters for each minute its speech is priced at, the list price also for a free dubbing variant: above that it answers 422 `validation_failed` (`errors[].code: text_too_long_for_price`, pointer `/segment_ids` or `/segments`).\n\n- `full`: speech seconds of every segment (auto-dub: the processed media duration)\n- `changed_speech`: speech seconds of the voiced segments, with no cap at the full price\n- `selected_speech`: speech seconds of the chosen segments (segment generation)\n- `free_language`: free dubbing variant","enum":["full","changed_speech","selected_speech","free_language"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"details.oneOf.5.pricing_rule","typeLabel":"enum\u003cstring>"},"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":"details.oneOf.5.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":"details.oneOf.5.text_adaptation","typeLabel":"enum\u003cstring>"},"processing_scope":{"type":"object","description":"What the engine processes for a segment generation. The price covers the chosen segments' speech seconds whatever this says.","required":["synthesis","voice_setup"],"properties":{"synthesis":{"type":"string","description":"What a segment generation synthesizes.\n\n- `requested_segments`: speech is synthesized only for the chosen segments","enum":["requested_segments"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"details.oneOf.5.processing_scope.synthesis","typeLabel":"enum\u003cstring>"},"voice_setup":{"type":"string","description":"What a segment generation reads to prepare its voices. This work is not charged.\n\n- `requested_speakers`: only the speakers of the chosen segments\n- `all_cloned_speakers`: the legacy engine with a cloned voice, or a voice with `meaning_first_compatible: false`, may read the project's speech and prepare every cloned speaker; reported whenever this is possible, because whether a clone is already prepared cannot be told in advance","enum":["requested_speakers","all_cloned_speakers"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"details.oneOf.5.processing_scope.voice_setup","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"details.oneOf.5.processing_scope","typeLabel":"object"}},"isRequired":true,"uniqueKey":"details.oneOf.5","typeLabel":"object"},{"type":"object","description":"Per-action details; `action` mirrors `Estimate.action`.","required":["action","stages","dub","final_output_kind","resume_job_id"],"x-rask-open-union":true,"properties":{"action":{"type":"string","enum":["localization"],"isRequired":true,"uniqueKey":"details.oneOf.6.action","typeLabel":"enum\u003cstring>"},"stages":{"type":"array","items":{"type":"object","description":"The price of one stage of a run.","required":["name","will_run","minutes","not_run_reason"],"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":"details.oneOf.6.stages.items.[INDEX].name","typeLabel":"enum\u003cstring>"},"will_run":{"type":"boolean","description":"False when the stage is not run.","isRequired":true,"uniqueKey":"details.oneOf.6.stages.items.[INDEX].will_run","typeLabel":"boolean"},"minutes":{"type":"integer","description":"Minutes at today's price; charged when the stage starts.","format":"int32","minimum":0,"isRequired":true,"uniqueKey":"details.oneOf.6.stages.items.[INDEX].minutes","typeLabel":"integer\u003cint32>"},"not_run_reason":{"oneOf":[{"type":"string","description":"Why it is not run.","enum":["already_succeeded","dub_up_to_date","lipsync_up_to_date","onscreen_up_to_date"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"details.oneOf.6.stages.items.[INDEX].not_run_reason.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Why it is not run.","isRequired":true,"uniqueKey":"details.oneOf.6.stages.items.[INDEX].not_run_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.6.stages.items.[INDEX].not_run_reason","typeLabel":"enum\u003cstring> | null"}},"uniqueKey":"details.oneOf.6.stages.items.[INDEX]","typeLabel":"object"},"description":"The ordered stages, in run order.","isRequired":true,"uniqueKey":"details.oneOf.6.stages","typeLabel":"object[]"},"dub":{"oneOf":[{"type":"object","description":"Details of the dub stage; null when it is not run.","required":["action","mode_requested","mode_applied","segments_to_voice","changed_speech_seconds","billable_minutes","pricing_rule","engine","segment_ids_to_voice","reused_clip_segment_ids","assembly_anchor_segment_id","text_adaptation"],"properties":{"action":{"type":"string","enum":["dub"],"isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0.action","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":"details.oneOf.6.dub.oneOf.0.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":"details.oneOf.6.dub.oneOf.0.mode_applied","typeLabel":"enum\u003cstring>"},"segments_to_voice":{"type":"integer","description":"Segments the dub would voice and charge.","format":"int32","isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0.segments_to_voice","typeLabel":"integer\u003cint32>"},"changed_speech_seconds":{"type":"number","description":"Speech duration of the segments the dub would voice.","format":"double","isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0.changed_speech_seconds","typeLabel":"number\u003cdouble>"},"billable_minutes":{"type":"integer","description":"Minutes billed.","format":"int32","isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0.billable_minutes","typeLabel":"integer\u003cint32>"},"pricing_rule":{"type":"string","description":"How a dub or segment generation is priced: `max(1, round(s/60))` minutes (half to even) over the speech seconds `s` below; a free dubbing variant costs 0. Speech seconds read each segment's interval, so `createDub`, `generateSegments` and a run's dub answer 422 `validation_failed` (`errors[].code: text_too_long_for_interval`) on a translation above 60 characters per second of its interval, or 100 on any interval. When every line passes, all one request voices may hold at most 3600 characters for each minute its speech is priced at, the list price also for a free dubbing variant: above that it answers 422 `validation_failed` (`errors[].code: text_too_long_for_price`, pointer `/segment_ids` or `/segments`).\n\n- `full`: speech seconds of every segment (auto-dub: the processed media duration)\n- `changed_speech`: speech seconds of the voiced segments, with no cap at the full price\n- `selected_speech`: speech seconds of the chosen segments (segment generation)\n- `free_language`: free dubbing variant","enum":["full","changed_speech","selected_speech","free_language"],"x-rask-open-enum":true,"isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0.pricing_rule","typeLabel":"enum\u003cstring>"},"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":"details.oneOf.6.dub.oneOf.0.engine","typeLabel":"enum\u003cstring>"},"segment_ids_to_voice":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"details.oneOf.6.dub.oneOf.0.segment_ids_to_voice.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"The segments the dub would voice; null for a full dub, which voices every segment.","isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0.segment_ids_to_voice.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"The segments the dub would voice; null for a full dub, which voices every segment.","isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0.segment_ids_to_voice.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0.segment_ids_to_voice","typeLabel":"string[] | null"},"reused_clip_segment_ids":{"type":"array","items":{"type":"string","uniqueKey":"details.oneOf.6.dub.oneOf.0.reused_clip_segment_ids.items.[INDEX]","typeLabel":"string"},"description":"Changed segments whose current clip from generateSegments is merged without voicing or charging it again.","isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0.reused_clip_segment_ids","typeLabel":"string[]"},"assembly_anchor_segment_id":{"oneOf":[{"type":"string","description":"The shortest reused clip, voiced again because a track can be rebuilt only when at least one segment is voiced; its clip in the track is a new take, at its speech price (minimum 1 minute). Null when other segments are voiced anyway.","isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0.assembly_anchor_segment_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The shortest reused clip, voiced again because a track can be rebuilt only when at least one segment is voiced; its clip in the track is a new take, at its speech price (minimum 1 minute). Null when other segments are voiced anyway.","isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0.assembly_anchor_segment_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0.assembly_anchor_segment_id","typeLabel":"string | null"},"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":"details.oneOf.6.dub.oneOf.0.text_adaptation","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.0","typeLabel":"object"},{"type":"null","description":"Details of the dub stage; null when it is not run.","isRequired":true,"uniqueKey":"details.oneOf.6.dub.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.6.dub","typeLabel":"object | null"},"final_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":"details.oneOf.6.final_output_kind","typeLabel":"enum\u003cstring>"},"resume_job_id":{"oneOf":[{"type":"string","description":"The failed run this estimate would continue; null for a new run.","isRequired":true,"uniqueKey":"details.oneOf.6.resume_job_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The failed run this estimate would continue; null for a new run.","isRequired":true,"uniqueKey":"details.oneOf.6.resume_job_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"details.oneOf.6.resume_job_id","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"details.oneOf.6","typeLabel":"object"}],"isRequired":true,"uniqueKey":"details","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"eligible":{"title":"eligible","value":{"object":"estimate","action":"segment_generation","project_id":"6f1c2b7e-8a4d-4e3f-9b5c-1d0a7e2f3c58","eligible":true,"reasons":[],"notices":[],"costs":[{"credit_type":"minutes","minutes":1,"feature":"segment_generation","charged_when":"on_request","basis":{"billable_seconds":7,"multiplier":null}}],"total_minutes":1,"total_projects":0,"balance_after":{"minutes":187,"lipsync_free_minutes":null,"projects":null},"spend_limit":{"limit_minutes":500,"spent_minutes":120,"remaining_minutes":380,"limit_projects":null,"spent_projects":3,"remaining_projects":null,"resets_at":"2026-12-01T00:00:00Z"},"details":{"action":"segment_generation","segment_ids_to_voice":["5f0e2c7a-1b3d-4e6f-8a9c-2d4e6f8a0b11","8b3d1e9f-6a2c-4d7e-b5f1-3c9e7a1d5b22"],"speech_seconds":6.6,"billable_minutes":1,"pricing_rule":"selected_speech","engine":"meaning_first","text_adaptation":"as_written","processing_scope":{"synthesis":"requested_segments","voice_setup":"requested_speakers"}}}},"wider":{"title":"wider","value":{"object":"estimate","action":"segment_generation","project_id":"6f1c2b7e-8a4d-4e3f-9b5c-1d0a7e2f3c58","eligible":true,"reasons":[],"notices":[{"code":"wider_voice_setup","detail":"The legacy engine with a cloned voice, or a voice not usable with meaning-first dubbing, may read the project's speech and prepare every cloned speaker. This is not charged.","hint":null,"retryable":false,"pointer":null}],"costs":[{"credit_type":"minutes","minutes":1,"feature":"segment_generation","charged_when":"on_request","basis":{"billable_seconds":7,"multiplier":null}}],"total_minutes":1,"total_projects":0,"balance_after":{"minutes":187,"lipsync_free_minutes":null,"projects":null},"spend_limit":{"limit_minutes":500,"spent_minutes":120,"remaining_minutes":380,"limit_projects":null,"spent_projects":3,"remaining_projects":null,"resets_at":"2026-12-01T00:00:00Z"},"details":{"action":"segment_generation","segment_ids_to_voice":["5f0e2c7a-1b3d-4e6f-8a9c-2d4e6f8a0b11","8b3d1e9f-6a2c-4d7e-b5f1-3c9e7a1d5b22"],"speech_seconds":6.6,"billable_minutes":1,"pricing_rule":"selected_speech","engine":"legacy","text_adaptation":"as_written","processing_scope":{"synthesis":"requested_segments","voice_setup":"all_cloned_speakers"}}}}},"exampleType":"examples"}},"exampleType":"examples"},"82b8fbfc-821e-4b09-825a-bef10f74b1c6":{"description":"Bad request. Codes: `token_in_query`.","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"}}},"exampleType":"examples"}},"exampleType":"examples"},"84bafa84-1f72-43d3-81c8-61a1f30b7a82":{"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"},"eaf2d20e-8fdd-419d-ac05-08ee2efbd870":{"description":"Forbidden. Codes: `insufficient_scope`, `account_disabled`, `feature_not_in_plan`, `workspace_access_suspended`.","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"]}},"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"}},"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"}},"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":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"6546a777-cce4-4528-a925-dab25a76d8b1":{"description":"Not found. Codes: `project_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":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"ffbf3d88-5e38-4ffc-8fb3-10bd9664c544":{"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"},"d591e7eb-7757-4ddb-bf33-a23710386859":{"description":"Unprocessable request. Codes: `validation_failed`.","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":{"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."}]}}},"exampleType":"examples"}},"exampleType":"examples"},"329badc6-a016-45b8-891d-9901f79c32a9":{"description":"Too many requests. Codes: `rate_limited`.","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}}},"exampleType":"examples"}},"exampleType":"examples"},"cc59ad0d-a1df-46b1-b2bd-3234f4d54d34":{"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"},"d13fb14d-54bf-4851-a23f-09e96342b549":{"description":"Service unavailable. Codes: `temporarily_unavailable`, `api_unavailable`, `auth_unavailable`.","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":[]}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"0891ff31-46a8-4fd4-9cdf-f40993ae8dd5":{"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":["dubbing:write"],"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":["dubbing:write"],"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":"Estimate voicing chosen segments - Rask AI API","navMaps":{"firstHrefInVersion":{"v3":{"href":"/operations/estimateSegmentGeneration","matchLevel":0},"v2":{"href":"/introduction","matchLevel":4}},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T14:38:52.532Z","originalFileLocation":"operations/estimateSegmentGeneration.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=\"Runs every check of generateSegments without writing and returns an Estimate.\">\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=\"Estimate voicing chosen segments - Rask AI API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Runs every check of generateSegments without writing and returns an Estimate.\">\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/estimateSegmentGeneration\">\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=Dubbing\u0026amp;title=Estimate+voicing+chosen+segments\u0026amp;description=Runs+every+check+of+generateSegments+without+writing+and+returns+an+Estimate.\u0026amp;theme=0d666554d2a0d7f967d5e07b\u0026amp;signature=e2527c30d880f7254660ababbe4c6e02f17d0af8733416eaf25fc4da39cbf177\">\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=\"Estimate voicing chosen segments - Rask AI API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Runs every check of generateSegments without writing and returns an Estimate.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://brask.mintlify.site/_mintlify/api/og/v2?division=Dubbing\u0026amp;title=Estimate+voicing+chosen+segments\u0026amp;description=Runs+every+check+of+generateSegments+without+writing+and+returns+an+Estimate.\u0026amp;theme=0d666554d2a0d7f967d5e07b\u0026amp;signature=e2527c30d880f7254660ababbe4c6e02f17d0af8733416eaf25fc4da39cbf177\">\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/estimateSegmentGeneration\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/operations/estimateSegmentGeneration.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/estimateSegmentGeneration#webpage\",\"url\":\"https://docs.api.rask.ai/operations/estimateSegmentGeneration\",\"name\":\"Estimate voicing chosen segments\",\"description\":\"Runs every check of generateSegments without writing and returns an Estimate.\",\"dateModified\":\"2026-11-12T14:38:52.532Z\",\"isPartOf\":{\"@id\":\"https://docs.api.rask.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.api.rask.ai/operations/estimateSegmentGeneration#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.api.rask.ai/operations/estimateSegmentGeneration#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Dubbing\",\"item\":\"https://docs.api.rask.ai/operations/createDub\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Estimate voicing chosen segments\",\"item\":\"https://docs.api.rask.ai/operations/estimateSegmentGeneration\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.api.rask.ai/operations/estimateSegmentGeneration#apireference\",\"headline\":\"Estimate voicing chosen segments\",\"name\":\"Estimate voicing chosen segments\",\"description\":\"Runs every check of generateSegments without writing and returns an Estimate.\",\"url\":\"https://docs.api.rask.ai/operations/estimateSegmentGeneration\",\"mainEntityOfPage\":{\"@id\":\"https://docs.api.rask.ai/operations/estimateSegmentGeneration#webpage\"},\"dateModified\":\"2026-11-12T14:38:52.532Z\",\"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/estimateSegmentGeneration.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","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","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","description":"Voices the chosen segments (1-100) into one downloadable SegmentClip per segment, without rebuilding the video.","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","description":"Returns the project's lip-sync state.","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":"Estimate voicing chosen segments - 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"]}