Corti uses standard HTTP status codes. 4xx errors indicate a problem with the request; 5xx errors indicate a problem on Corti’s side. Error responses are in JSON and differ between the SDKs and the REST API. The tabs below cover each.
Some Corti products handle errors and authentication differently than what is described below:
Admin API — Separate from the Corti API used for speech to text, text generation, and agentic workflows. See the Administration API reference for details. Please contact us if you have interest in this functionality or further questions.
Agents API — The JSON format of the error response is different. See the Agents API docs for more info.
The SDK throws typed error classes on any non-2xx response or internal failure. Each class exposes a different set of attributes. See Error Handling for full details.
The request body or query parameters are malformed or missing required fields.
Double check the fields submitted to be sure of correct format and necessary fields.
401 — Unauthorized
Token endpoint errors are returned as JSON in the response body. Corti API errors are returned in the WWW-Authenticate response header with no body. The header is not accessible from the exception directly; use .WithRawResponse() on the request if you need it.
Error code
When it occurs
How to resolve
invalid_client
Client authentication failed. There is a problem with the client ID.
Verify your client_id is correct.
unauthorized_client
Client authentication failed. There is a problem with the client secret.
Verify your client_secret is correct.
invalid_token
The bearer token is invalid or has expired. Check the WWW-Authenticate header for error_description.
Re-authenticate to obtain a fresh token and retry the request.
403 — Forbidden
When it occurs
How to resolve
Accessing a resource (interaction, recording, transcript, document) that belongs to a different client.
Verify the resource ID was created by the authenticated client.
404 — Not Found
Error
When it occurs
How to resolve
Invalid '{resource_name}' '{resource_id}'
The requested resource does not exist.
Verify the ID and parent resource ID is correct and was created under the authenticated tenant.
Attempting to access a resource that belongs to a different OAuth client also returns a 404, not a 403. This is intentional. Returning a 403 would confirm that the resource exists, which is a security risk.
429 — Too Many Requests
You have exceeded the rate limit for the API. The SDK automatically retries with exponential backoff. The default retry limit is 2. Override per request:
const response = await client.interactions.create(..., { maxRetries: 0, // disable retries for this request});
If the error persists, reduce request frequency or contact support to discuss your rate limit requirements.
500 — Internal Server Error
An unexpected error occurred on the Corti side. Double check the request format and retry the request. If the issue persists, contact support.
503 — Service Unavailable
The service is temporarily unavailable. Retry with exponential backoff. Monitor the status page.
WebSocket errors from /streams and /transcribe are surfaced as plain Error objects whose message is the server status code (e.g. CONFIG_DENIED, CONFIG_MISSING, CONFIG_TIMEOUT).
Every CONFIG_* server message also carries a reason field with human-readable details behind the failure. Whether you can read it depends on the mode you connected in:
Default mode (client.stream.connect({ id, configuration }) / client.transcribe.connect({ configuration })): the SDK handles the handshake-phase and CONFIG_* messages internally. It rejects connect() with just the bare code. The reason is not exposed.
awaitConfiguration: false or manual mode: the raw message, including msg.reason, flows through socket.on('message', …).
CONFIG_DENIED
You sent a config message, but it’s invalid.
reason from server
Likely cause
Fix
invalid language code: must be a valid BCP 47 language tag
transcription.primaryLanguage is not a supported code.
You sent a non-config frame before any valid config message arrived.
Only reachable when you opt out of the automatic handshake. Default mode sends config for you.
reason from server
Cause
Fix
No valid configuration provided for interaction
A non-config frame reached the server before a config message. Typically sendAudio() / sendFlush() / sendEnd() in manual mode, or a raw socket.send() queued before OPEN in awaitConfiguration: false.
Be sure to call sendConfiguration() immediately after waitForOpen(), or pass configuration to connect() and let the SDK handle the handshake.`
CONFIG_TIMEOUT
The 10-second handshake window elapsed without any config message arriving.
Call sendConfiguration() immediately after waitForOpen().
The SDK throws typed exceptions on any non-2xx response. Each exception extends CortiClientApiException, which exposes Message, StatusCode, and Body. See Error Handling for full details.
The request body or query parameters are malformed or missing required fields.
Double check the fields submitted to be sure of correct format and necessary fields.
401 — Unauthorized
Token endpoint errors are returned as JSON in the response body. Corti API errors are returned in the WWW-Authenticate response header with no body. The header is not accessible from the exception directly; use .WithRawResponse() on the request if you need it.
Exception class
Error code
When it occurs
How to resolve
UnauthorizedError
invalid_client
Client authentication failed. There is a problem with the client ID.
Verify your client_id is correct.
UnauthorizedError
unauthorized_client
Client authentication failed. There is a problem with the client secret.
Verify your client_secret is correct.
UnauthorizedError
invalid_token
The bearer token is invalid or has expired.
Re-authenticate to obtain a fresh token and retry the request.
403 — Forbidden
Exception class
When it occurs
How to resolve
ForbiddenError
Accessing a resource (interaction, recording, transcript, document) that belongs to a different client.
Verify the resource ID was created by the authenticated client.
404 — Not Found
Exception class
Error code
When it occurs
How to resolve
NotFoundError
Invalid '{resource_name}' '{resource_id}'
The requested resource does not exist.
Verify the ID and parent resource ID is correct and was created under the authenticated tenant.
Attempting to access a resource that belongs to a different OAuth client also returns a 404, not a 403. This is intentional. Returning a 403 would confirm that the resource exists, which is a security risk.
422 — Unprocessable Entity
Exception class
When it occurs
How to resolve
UnprocessableEntityError
Request validation failed.
Check Body for Code, Description, HowToFix, Detail, and Cause fields.
429 — Too Many Requests
Exception class
When it occurs
How to resolve
CortiClientApiException
Rate limit exceeded after retries exhausted (default: 2 retries with backoff).
Reduce request frequency or contact support to discuss your rate limit requirements.
500 — Internal Server Error
Exception class
When it occurs
How to resolve
InternalServerError
An unexpected error occurred on the Corti side. Body contains Detail, Type, Status, and RequestId.
Double check your request format and retry the request. If the issue persists, contact support.
502 — Bad Gateway
Exception class
When it occurs
How to resolve
BadGatewayError
A gateway error occurred. Body contains Detail, Type, Status, and RequestId.
Retry the request. If the issue persists, contact support.
503 — Service Unavailable
Exception class
When it occurs
How to resolve
CortiClientApiException
The service is temporarily unavailable.
Retry with exponential backoff. Monitor the status page.
504 — Gateway Timeout
Exception class
When it occurs
How to resolve
GatewayTimeoutError
The gateway timed out. Body contains Detail, Type, Status, and RequestId.
Retry the request. If the issue persists, contact support.
WebSocket errors from /streams and /transcribe surface as exceptions thrown by ConnectAsync() (with Message set to the server status code, e.g. CONFIG_DENIED, CONFIG_MISSING, CONFIG_TIMEOUT) or as typed events on the socket.
Every CONFIG_* server message also carries a Reason field with human-readable details behind the failure. Whether you can read it depends on how you connect:
Default mode (stream.ConnectAsync(new StreamConfig { … }) / transcribe.ConnectAsync(new TranscribeConfig { … })): the SDK handles the handshake-phase and CONFIG_* messages internally. It throws from ConnectAsync() with just the bare code. The Reason is not exposed.
Manual mode (ConnectAsync() with no config): the raw message, including msg.Reason, flows through the StreamConfigStatusMessage / TranscribeConfigStatusMessage event. Subscribe before calling ConnectAsync() to catch handshake-phase events.
CONFIG_DENIED
You sent a config message, but it’s invalid.
reason from server
Likely cause
Fix
invalid language code: must be a valid BCP 47 language tag
transcription.primaryLanguage is not a syntactically valid BCP-47 tag (e.g. "english", "en_US", empty string).
You sent a non-config frame before any valid config message arrived.
Only reachable in manual mode. Default mode sends config for you.
Reason from server
Cause
Fix
No valid configuration provided for interaction
A non-config frame reached the server before a config message. Typically a Send(byte[], …) audio call, or a Send(StreamFlushMessage, …) / Send(StreamEndMessage, …) call before any Send(StreamConfigMessage, …).
Call Send(new StreamConfigMessage { … }, …) (or TranscribeConfigMessage) as the first frame after ConnectAsync() returns, or pass the config directly to ConnectAsync(new StreamConfig { … }) and let the SDK handle the handshake.
CONFIG_TIMEOUT
The 10-second handshake window elapsed without any config message arriving.
Only reachable in manual mode. The default handshake sends config well within the 10s budget.
Reason from server
Cause
Fix
no configuration provided within 10s
Server’s 10s handshake timer expired without receiving a config message.
Call Send(new StreamConfigMessage { … }, …) (or TranscribeConfigMessage) immediately after ConnectAsync() returns, or pass the config directly to ConnectAsync(new StreamConfig { … }) and let the SDK handle the handshake.
Resource and API errors (all endpoints except the OAuth token endpoint) return JSON with requestid, status, type, detail, and validationErrors fields:
The request is missing a required parameter or is otherwise malformed.
Ensure required fields (grant_type,scope) are present and correctly formatted.
unsupported_grant_type
The grant_type value is not recognised by the server.
This API requires a grant_type of client_credentials. Corti Assistant requires alternate methods for grant_type.
invalid_scope
The requested scope does not exist or is not permitted for this client.
Use a valid scope. This API requires openid.
401 — Unauthorized
Token endpoint errors are returned as JSON in the response body. Corti API errors are returned in the WWW-Authenticate response header with no body. Check the header directly if the response body is empty.
Error code
When it occurs
How to resolve
invalid_client
Client authentication failed. There is a problem with the client ID.
Verify your client_id is correct.
unauthorized_client
Client authentication failed. There is a problem with the client secret
Verify your client_secret is correct.
invalid_token
The bearer token is invalid or has expired. Check the WWW-Authenticate header for error_description.
Re-authenticate to obtain a fresh token and retry the request.
403 — Forbidden
When it occurs
How to resolve
Accessing a resource (interaction, recording, transcript, document) that belongs to a different client.
Verify the resource ID was created by the authenticated client.
404 — Not Found
Error
When it occurs
How to resolve
Invalid '{resource_name}' '{resource_id}'
The requested resource does not exist.
Verify the ID and parent resource ID is correct and was created under the authenticated tenant.
'{resource_name}' not found
The requested resource does not exist.
Verify the ID and parent resource ID is correct and was created under the authenticated tenant.
429 — Too Many Requests
You have exceeded the rate limit for the API. Retry the request after a delay, using exponential backoff. If the error persists, reduce request frequency or contact support to discuss your rate limit requirements.
500 — Internal Server Error
An unexpected error occurred on the Corti side. Double check your request format and retry the request. If the issue persists, contact support.
503 — Service Unavailable
The service is temporarily unavailable. Retry with exponential backoff. Monitor the status page.
WebSocket errors from /streams and /transcribe arrive as plain JSON messages on the socket: { type: "CONFIG_DENIED", reason: "…" }, { type: "CONFIG_MISSING", reason: "…" }, etc. Without an SDK in the middle, you see every server message verbatim, including the reason field on every CONFIG_* event.
The raw protocol is manual mode out of the box. There’s no SDK layer handling the handshake for you. You open the socket, send { type: "config", configuration: { … } } yourself, and listen for CONFIG_ACCEPTED before sending audio. See the Streams API reference for the full protocol.
The server does not close the socket on CONFIG_DENIED or CONFIG_MISSING. Both codes reject the input but keep the connection open. Each subsequent non-config frame triggers a fresh CONFIG_MISSING response, one per frame, until the client closes the socket. SDK consumers don’t see this because the SDK calls close() on rejection internally. Raw-protocol clients should close the socket themselves once they receive either rejection.
CONFIG_DENIED
You sent a config message, but it’s invalid.
reason from server
Likely cause
Fix
invalid language code: must be a valid BCP 47 language tag
transcription.primaryLanguage is not a syntactically valid BCP-47 tag (e.g. "english", "en_US", empty string).
You sent a non-config frame before any valid config message arrived.
reason from server
Cause
Fix
No valid configuration provided for interaction
A non-config frame (binary audio, { type: "flush" }, { type: "end" }) reached the server before a { type: "config", configuration: { … } } message.
Send the config message as the first frame after the WebSocket opens. Wait for CONFIG_ACCEPTED before sending any other frame.
CONFIG_TIMEOUT
The 10-second handshake window elapsed without any config message arriving.
reason from server
Cause
Fix
no configuration provided within 10s
Server’s 10s handshake timer expired without receiving a config message.
Send { type: "config", configuration: { … } } immediately after the WebSocket opens.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Corti API Documentation","description":"Explore product documentation, quickstart guides, tutorials, release notes, and detailed API references to build with Corti API. Leverage full stack AI to unlock workflows with speech to text, text generation, agentic framework, embedded Corti Assistant and more.","colors":{"primary":"#3F3F46","light":"#F4F4F5","dark":"#18181B"},"logo":{"light":"https://mintcdn.com/corti/en_RPjQCFb1qJpbU/logo/corti_light.svg?fit=max\u0026auto=format\u0026n=en_RPjQCFb1qJpbU\u0026q=85\u0026s=effbca890e531e034f6b66ce8e15aa6c","dark":"https://mintcdn.com/corti/en_RPjQCFb1qJpbU/logo/corti_dark.svg?fit=max\u0026auto=format\u0026n=en_RPjQCFb1qJpbU\u0026q=85\u0026s=39e1b8245783318adebc44f1548aee0d"},"favicon":"https://mintcdn.com/corti/en_RPjQCFb1qJpbU/logo/favicon-docs.svg?fit=max\u0026auto=format\u0026n=en_RPjQCFb1qJpbU\u0026q=85\u0026s=1971ff0d52cd65b9f56d059bc6457848","api":{"playground":{"display":"simple"},"examples":{"languages":["curl","javascript","csharp","python","php","go","java"]},"mdx":{"auth":{"method":"bearer"}}},"background":{"color":{"light":"#FFFFFF","dark":"#09090B"}},"navbar":{"links":[{"href":"https://help.corti.app/","label":"Support"}],"primary":{"type":"button","label":"Start Building","href":"https://console.corti.app/signup"}},"footer":{"socials":{"website":"https://www.corti.ai","x":"https://x.com/corti_ai","linkedin":"https://www.linkedin.com/company/corti","github":"https://github.com/corticph","youtube":"https://www.youtube.com/@cortiai"}},"fonts":{"heading":{"family":"Booton","weight":600},"body":{"family":"Booton","weight":400}},"icons":{"library":"lucide"},"integrations":{"gtm":{"tagId":"GTM-MR3DSSF2"},"intercom":{"appId":"y30epli4"}},"banner":{"content":"Corti Models is now available: frontier AI on sovereign infrastructure, through an OpenAI-compatible API. [Get started](/models/welcome).","dismissible":true},"errors":{"404":{"redirect":false,"title":"Page not found","description":"The page you're looking for doesn't exist or may have moved. Use the search bar above, or start from one of these pages:\n\n- [Get started](/get_started/welcome)\n- [Corti Models](/models/welcome)\n- [Agentic Framework](/agentic/overview)\n- [Speech to Text](/stt/overview)\n- [Clinical Text Generation](/textgen/overview)\n- [Medical Coding](/coding/overview)\n- [Clinical Assistant](/assistant/welcome)\n- [API Reference](/api-reference/welcome)"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"corti","hasAudioNarration":false,"actualSubdomain":"corti","customDomains":["docs.corti.ai"],"gitSource":{"type":"github","owner":"corticph","repo":"docs_corti","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af1dd8a34be7c1d8321a9ba","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"Healthcare","count":209},{"language":"default","tag":"API Reference","count":141},{"language":"default","tag":"Clinical Assistant","count":117},{"language":"default","tag":"Events","count":85},{"language":"default","tag":"Event Reference","count":84},{"language":"default","tag":"REST APIs","count":60},{"language":"default","tag":"Agentic Framework","count":51},{"language":"default","tag":"Home","count":49},{"language":"default","tag":"Speech to Text","count":48},{"language":"default","tag":"Clinical Text Generation","count":47}]},"assistantConfig":{"enableAskAiButton":true,"enableStarterQuestions":false,"enableAskAiSearchBar":false,"deflection":{"enabled":true,"email":"help@corti.ai"}},"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":[{"filePath":"style.css","content":"@font-face{font-family:\"Booton\";src:url(\"/fonts/booton/Booton-Regular.woff2\") format(\"woff2\");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:\"Booton\";src:url(\"/fonts/booton/Booton-Medium.woff2\") format(\"woff2\");font-style:normal;font-weight:500;font-display:swap}@font-face{font-family:\"Booton\";src:url(\"/fonts/booton/Booton-Semibold.woff2\") format(\"woff2\");font-style:normal;font-weight:600;font-display:swap}:root{--corti-font-sans: \"Booton\", \"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif;--mintlify-slot-header-height: 7rem}html,body{font-family:var(--corti-font-sans);font-weight:400;-webkit-font-smoothing:antialiased}body :not(code):not(code *):not(pre):not(pre *):not(kbd):not(kbd *):not(samp):not(samp *){font-family:var(--corti-font-sans)}h1,h2,h3,h4,h5,h6{font-family:var(--corti-font-sans);font-weight:600!important;color:var(--tw-prose-headings, #18181b)!important}:is(html.dark,.dark) h1,:is(html.dark,.dark) h2,:is(html.dark,.dark) h3,:is(html.dark,.dark) h4,:is(html.dark,.dark) h5,:is(html.dark,.dark) h6{color:#fafafa!important}:is(html.dark,.dark) [data-component-part=\"step-title\"]{color:#fafafa!important}a[target=\"_blank\"][href=\"https://console.corti.app/signup\"].group>span.absolute.inset-0{background-color:#18181b!important}:is(html.dark,.dark) a[target=\"_blank\"][href=\"https://console.corti.app/signup\"].group>span.absolute.inset-0{background-color:#fafafa!important}:is(html.dark,.dark) a[target=\"_blank\"][href=\"https://console.corti.app/signup\"].group .z-10,:is(html.dark,.dark) a[target=\"_blank\"][href=\"https://console.corti.app/signup\"].group .z-10 *,:is(html.dark,.dark) a[target=\"_blank\"][href=\"https://console.corti.app/signup\"].group svg{color:#18181b!important}[data-component-part=\"card-content-container\"]{align-items:flex-start!important}.card [data-component-part=\"card-content\"]>.code-block:last-child{margin-bottom:0!important}[data-component-part=\"card-content-container\"]>div[class*=\"h-6\"][class*=\"w-6\"]{width:24px!important;height:24px!important;min-width:24px;min-height:24px;display:inline-flex;align-items:center;justify-content:center;margin-top:2px}[data-component-part=\"card-content-container\"]>div[class*=\"h-6\"][class*=\"w-6\"] svg,[data-component-part=\"card-content-container\"]>div[class*=\"h-6\"][class*=\"w-6\"] img{width:24px!important;height:24px!important}:is(html.dark,.dark) .card [data-component-part=\"card-title\"],:is(html.dark,.dark) .card [data-component-part=\"card-title\"] a,:is(html.dark,.dark) .card h2 a,:is(html.dark,.dark) .card h3 a,:is(html.dark,.dark) .card h4 a,:is(html.dark,.dark) .card a[href].font-semibold{color:#fafafa!important}:is(html.dark,.dark) .card [data-component-part=\"card-title\"] a:visited,:is(html.dark,.dark) .card h2 a:visited,:is(html.dark,.dark) .card h3 a:visited,:is(html.dark,.dark) .card h4 a:visited,:is(html.dark,.dark) .card a[href].font-semibold:visited{color:#fafafa!important}.nav-tag-pill-text[data-nav-tag=\"beta\"],[data-nav-tag=\"beta\"].nav-tag-pill-text{background-color:#b8f818!important;border:none!important;color:#18181b!important;text-transform:uppercase!important;font-weight:600!important}#navigation-items{padding-bottom:9rem}.accent-badge{background-color:#b8f818!important;border:none!important;color:#18181b!important;text-transform:uppercase!important;font-weight:600!important}.mdx-content li strong{font-weight:600!important}.mdx-content [class*=\"overflow-x-auto\"]{overflow-x:visible!important}.mdx-content [class*=\"w-[calc(100%+(var(--page-padding)*2))]\"]{width:100%!important}.mdx-content [class*=\"-mx-[var(--page-padding)]\"]{margin-left:0!important;margin-right:0!important}.mdx-content [class*=\"max-w-none\"]{max-width:100%!important}.mdx-content .table{display:block!important}.mdx-content table{width:100%!important;max-width:100%!important;min-width:0!important;table-layout:auto;border-collapse:collapse;box-sizing:border-box;margin:0}.mdx-content table th,.mdx-content table td{min-width:0!important;vertical-align:top}.mdx-content table th,.mdx-content table th *{white-space:normal;overflow-wrap:normal!important;word-break:normal!important;hyphens:manual}.mdx-content table th,.mdx-content table th *,.mdx-content table strong{font-weight:600!important}.mdx-content table td{white-space:normal;overflow-wrap:break-word;word-break:normal;hyphens:manual}.mdx-content table code,.mdx-content table kbd,.mdx-content table samp{white-space:nowrap;overflow-wrap:normal;word-break:keep-all}.mdx-content table td code,.mdx-content table td kbd,.mdx-content table td samp{white-space:normal;overflow-wrap:normal;word-break:normal}.mdx-content table td a{white-space:normal;overflow-wrap:break-word;word-break:normal;hyphens:manual}.mdx-content .capabilities-table table th:first-child,.mdx-content .capabilities-table table td:first-child,.mdx-content .capabilities-table table th:last-child,.mdx-content .capabilities-table table td:last-child,.mdx-content .capabilities-table table td:first-child a,.mdx-content .capabilities-table table td:last-child a{white-space:nowrap}.mdx-content table img,.mdx-content table svg{max-width:100%;height:auto;display:block}.mdx-content [data-component-part=\"code-block-root\"]{width:100%!important;max-width:100%!important;overflow-x:auto!important;-webkit-overflow-scrolling:touch}.mdx-content [data-component-part=\"code-block-root\"][class*=\"overflow-x-auto\"]{overflow-x:auto!important}.mdx-content [data-component-part=\"code-block-root\"] pre,.mdx-content [data-component-part=\"code-block-root\"] code,.mdx-content [data-component-part=\"code-block-root\"] .shiki,.mdx-content [data-component-part=\"code-block-root\"] .shiki .line,.mdx-content [data-component-part=\"code-block-root\"] .shiki .line>span{white-space:pre!important;word-break:normal!important;overflow-wrap:normal!important}.mdx-content [data-component-part=\"code-block-root\"] pre>code>span.line-diff{min-width:max-content!important}:not(pre)>code{background-color:rgba(0,0,0,0.03);border:1px solid rgba(0,0,0,0.08);border-radius:6px;padding:0.15em 0.4em;font-size:0.875em;color:inherit}:is(html.dark,.dark) :not(pre)>code{background-color:rgba(255,255,255,0.08);border:1px solid rgba(255,255,255,0.08);color:#fafafa}html:not(.dark) .mdx-content [data-component-part=\"code-block-root\"] .line-highlight,html:not(.dark) .mdx-content [data-component-part=\"code-block-root\"] .line-highlight::before{background-color:rgba(115, 115, 115, 0.16)!important}:is(html.dark,.dark) g.node.nodeNeutral span,:is(html.dark,.dark) g.node.nodeNeutral .label,:is(html.dark,.dark) g.node.nodeNeutral .label text,:is(html.dark,.dark) g.node.nodeGray span,:is(html.dark,.dark) g.node.nodeGray .label,:is(html.dark,.dark) g.node.nodeGray .label text,:is(html.dark,.dark) g.node.nodeBlue span,:is(html.dark,.dark) g.node.nodeBlue .label,:is(html.dark,.dark) g.node.nodeBlue .label text,:is(html.dark,.dark) g.node.nodeGreen span,:is(html.dark,.dark) g.node.nodeGreen .label,:is(html.dark,.dark) g.node.nodeGreen .label text,:is(html.dark,.dark) g.node.nodeYellow span,:is(html.dark,.dark) g.node.nodeYellow .label,:is(html.dark,.dark) g.node.nodeYellow .label text,:is(html.dark,.dark) g.node.nodeCyan span,:is(html.dark,.dark) g.node.nodeCyan .label,:is(html.dark,.dark) g.node.nodeCyan .label text,:is(html.dark,.dark) g.node.nodePurple span,:is(html.dark,.dark) g.node.nodePurple .label,:is(html.dark,.dark) g.node.nodePurple .label text,:is(html.dark,.dark) g.node.nodeLightPurple span,:is(html.dark,.dark) g.node.nodeLightPurple .label,:is(html.dark,.dark) g.node.nodeLightPurple .label text{color:#1a1a1a!important;fill:#1a1a1a!important}img[src$=\"embedded-assistant.svg\"]{filter:brightness(0) invert(32%)}a[aria-current=\"location\"] img[src$=\"embedded-assistant.svg\"],a:hover img[src$=\"embedded-assistant.svg\"]{filter:brightness(0) invert(15%)}:is(html.dark,.dark) img[src$=\"embedded-assistant.svg\"]{filter:brightness(0) invert(63%)}:is(html.dark,.dark) a[aria-current=\"location\"] img[src$=\"embedded-assistant.svg\"],:is(html.dark,.dark) a:hover img[src$=\"embedded-assistant.svg\"]{filter:brightness(0) invert(88%)}.errors-tabs [role=\"tablist\"] [role=\"tab\"],.errors-tabs [role=\"tablist\"] [role=\"tab\"] *,.errors-tabs [role=\"tablist\"] button,.errors-tabs [role=\"tablist\"] button *{font-weight:800!important;font-size:1.05em!important}"}],"page":{"pagePath":"api-reference/errors","slug":"/api-reference/errors","pageMetadata":{"title":"Errors","description":"Error messages and solutions from Corti's API","href":"/api-reference/errors"},"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: \"Error messages and solutions from Corti’s API\"\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={a:`a`,blockquote:`blockquote`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,CodeBlock,Heading,Note,Tab,Table,Tabs,Tip}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Corti uses standard HTTP status codes. `,_jsx(_components.code,{children:`4xx`}),` errors indicate a problem with the request; `,_jsx(_components.code,{children:`5xx`}),` errors indicate a problem on Corti’s side. Error responses are in JSON and differ between the SDKs and the REST API. The tabs below cover each.`]}),`\n`,_jsxs(Note,{children:[_jsx(_components.p,{children:`Some Corti products handle errors and authentication differently than what is described below:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Admin API`}),` — Separate from the `,_jsx(_components.code,{children:`Corti API`}),` used for speech to text, text generation, and agentic workflows. See the `,_jsx(_components.a,{href:`/about/admin-api`,children:`Administration API`}),` reference for details. Please `,_jsx(_components.a,{href:`mailto:help@corti.ai`,children:`contact us`}),` if you have interest in this functionality or further questions.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Agents API`}),` — The JSON format of the error response is different. See the `,_jsx(_components.a,{href:`/agentic/overview`,children:`Agents API`}),` docs for more info.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Embedded Assistant`}),` — Authentication is handled differently. See the `,_jsx(_components.a,{href:`https://docs.corti.ai/assistant/authentication`,children:`Embedded Assistant Authentication`}),` docs for those methods.`]}),`\n`]})]}),`\n`,_jsx(`div`,{className:`errors-tabs`,children:_jsxs(Tabs,{children:[_jsxs(Tab,{title:`JavaScript SDK`,id:`javascript-sdk`,\"data-child-heading-ids\":`[\"error-classes\",\"http-status-codes-javascript-sdk\",\"websocket-apis-javascript-sdk\"]`,children:[_jsxs(_components.p,{children:[`The SDK throws typed error classes on any non-2xx response or internal failure. Each class exposes a different set of attributes. See `,_jsx(_components.a,{href:`/sdk/js/overview#error-handling`,children:`Error Handling`}),` for full details.`]}),_jsx(Heading,{level:`2`,id:`error-classes`,children:`Error Classes`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Class`}),_jsx(_components.th,{children:`Thrown when`}),_jsx(_components.th,{children:`Attributes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CortiError`})}),_jsx(_components.td,{children:`API returned a non-2xx HTTP response (4xx / 5xx)`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`message`}),`, `,_jsx(_components.code,{children:`statusCode`}),`, `,_jsx(_components.code,{children:`body`}),`, `,_jsx(_components.code,{children:`rawResponse`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CortiSDKError`})}),_jsx(_components.td,{children:`SDK infrastructure error (e.g. localStorage unavailable)`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`message`}),`, `,_jsx(_components.code,{children:`code`}),`, `,_jsx(_components.code,{children:`cause`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ParseError`})}),_jsx(_components.td,{children:`Input validation failed (e.g. missing PKCE verifier, invalid JWT)`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`message`}),`, `,_jsx(_components.code,{children:`errors`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`JsonError`})}),_jsx(_components.td,{children:`Response body could not be parsed as JSON`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`message`}),`, `,_jsx(_components.code,{children:`errors`})]})]})]})]}),_jsx(Heading,{level:`2`,id:`http-status-codes-javascript-sdk`,children:`HTTP Status Codes (JavaScript SDK)`}),_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`400 — Bad Request`,id:`400-bad-request`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Error code`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`bad_request`})}),_jsx(_components.td,{children:`The request body or query parameters are malformed or missing required fields.`}),_jsx(_components.td,{children:`Double check the fields submitted to be sure of correct format and necessary fields.`})]})})]})}),_jsxs(Accordion,{title:`401 — Unauthorized`,id:`401-unauthorized`,children:[_jsxs(_components.p,{children:[`Token endpoint errors are returned as JSON in the response body. Corti API errors are returned in the `,_jsx(_components.code,{children:`WWW-Authenticate`}),` response header with no body. The header is not accessible from the exception directly; use `,_jsx(_components.code,{children:`.WithRawResponse()`}),` on the request if you need it.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Error code`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_client`})}),_jsx(_components.td,{children:`Client authentication failed. There is a problem with the client ID.`}),_jsxs(_components.td,{children:[`Verify your `,_jsx(_components.code,{children:`client_id`}),` is correct.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unauthorized_client`})}),_jsx(_components.td,{children:`Client authentication failed. There is a problem with the client secret.`}),_jsxs(_components.td,{children:[`Verify your `,_jsx(_components.code,{children:`client_secret`}),` is correct.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_token`})}),_jsxs(_components.td,{children:[`The bearer token is invalid or has expired. Check the `,_jsx(_components.code,{children:`WWW-Authenticate`}),` header for `,_jsx(_components.code,{children:`error_description`}),`.`]}),_jsx(_components.td,{children:`Re-authenticate to obtain a fresh token and retry the request.`})]})]})]})]}),_jsx(Accordion,{title:`403 — Forbidden`,id:`403-forbidden`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Accessing a resource (interaction, recording, transcript, document) that belongs to a different client.`}),_jsx(_components.td,{children:`Verify the resource ID was created by the authenticated client.`})]})})]})}),_jsxs(Accordion,{title:`404 — Not Found`,id:`404-not-found`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Error`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Invalid '{resource_name}' '{resource_id}'`})}),_jsx(_components.td,{children:`The requested resource does not exist.`}),_jsx(_components.td,{children:`Verify the ID and parent resource ID is correct and was created under the authenticated tenant.`})]})})]}),_jsx(Note,{children:_jsx(_components.p,{children:`Attempting to access a resource that belongs to a different OAuth client also returns a 404, not a 403. This is intentional. Returning a 403 would confirm that the resource exists, which is a security risk.`})})]}),_jsxs(Accordion,{title:`429 — Too Many Requests`,id:`429-too-many-requests`,children:[_jsx(_components.p,{children:`You have exceeded the rate limit for the API. The SDK automatically retries with exponential backoff. The default retry limit is 2. Override per request:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` response`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`interactions`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`create`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` maxRetries:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// disable retries for this request`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),_jsxs(_components.p,{children:[`If the error persists, reduce request frequency or contact `,_jsx(_components.a,{href:`mailto:help@corti.ai`,children:`support`}),` to discuss your rate limit requirements.`]})]}),_jsx(Accordion,{title:`500 — Internal Server Error`,id:`500-internal-server-error`,children:_jsxs(_components.p,{children:[`An unexpected error occurred on the Corti side. Double check the request format and retry the request. If the issue persists, contact `,_jsx(_components.a,{href:`mailto:help@corti.ai`,children:`support`}),`.`]})}),_jsx(Accordion,{title:`503 — Service Unavailable`,id:`503-service-unavailable`,children:_jsxs(_components.p,{children:[`The service is temporarily unavailable. Retry with exponential backoff. Monitor the `,_jsx(_components.a,{href:`https://status.corti.ai`,children:`status page`}),`.`]})})]}),_jsx(Heading,{level:`2`,id:`websocket-apis-javascript-sdk`,children:`WebSocket APIs (JavaScript SDK)`}),_jsxs(_components.p,{children:[`WebSocket errors from `,_jsx(_components.code,{children:`/streams`}),` and `,_jsx(_components.code,{children:`/transcribe`}),` are surfaced as plain `,_jsx(_components.code,{children:`Error`}),` objects whose `,_jsx(_components.code,{children:`message`}),` is the server status code (e.g. `,_jsx(_components.code,{children:`CONFIG_DENIED`}),`, `,_jsx(_components.code,{children:`CONFIG_MISSING`}),`, `,_jsx(_components.code,{children:`CONFIG_TIMEOUT`}),`).`]}),_jsxs(Tip,{children:[_jsxs(_components.p,{children:[`Every `,_jsx(_components.code,{children:`CONFIG_*`}),` server message also carries a `,_jsx(_components.code,{children:`reason`}),` field with human-readable details behind the failure. Whether you can read it depends on the mode you connected in:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Default mode`}),` (`,_jsx(_components.code,{children:`client.stream.connect({ id, configuration })`}),` / `,_jsx(_components.code,{children:`client.transcribe.connect({ configuration })`}),`): the SDK handles the handshake-phase and `,_jsx(_components.code,{children:`CONFIG_*`}),` messages internally. It rejects `,_jsx(_components.code,{children:`connect()`}),` with just the bare code. The `,_jsx(_components.code,{children:`reason`}),` is not exposed.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`awaitConfiguration: false`})}),` or `,_jsx(_components.strong,{children:_jsx(_components.a,{href:`/sdk/js/websockets#connecting-without-configuration`,children:`manual mode`})}),`: the raw message, including `,_jsx(_components.code,{children:`msg.reason`}),`, flows through `,_jsx(_components.code,{children:`socket.on('message', …)`}),`.`]}),`\n`]})]}),_jsxs(Accordion,{title:_jsx(_Fragment,{children:_jsx(_components.code,{children:`CONFIG_DENIED`})}),id:`config-denied`,children:[_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`You sent a config message, but it’s invalid.`}),`\n`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsxs(_components.th,{children:[_jsx(_components.code,{children:`reason`}),` from server`]}),_jsx(_components.th,{children:`Likely cause`}),_jsx(_components.th,{children:`Fix`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid language code: must be a valid BCP 47 language tag`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`transcription.primaryLanguage`}),` is not a supported code.`]}),_jsxs(_components.td,{children:[`Use a `,_jsx(_components.a,{href:`https://docs.corti.ai/stt/languages`,children:`supported language code`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid output locale: language should not be empty`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`mode.type: \"facts\"`}),` without `,_jsx(_components.code,{children:`mode.outputLocale`}),`.`]}),_jsxs(_components.td,{children:[`Add `,_jsx(_components.code,{children:`outputLocale`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid output locale: invalid language code: must be a valid BCP 47 language tag`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`mode.type: \"facts\"`}),` with invalid `,_jsx(_components.code,{children:`mode.outputLocale`}),` code.`]}),_jsxs(_components.td,{children:[`Use a `,_jsx(_components.a,{href:`https://docs.corti.ai/stt/languages`,children:`supported language code`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unknown mode`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`mode.type`}),` is not `,_jsx(_components.code,{children:`\"transcription\"`}),` or `,_jsx(_components.code,{children:`\"facts\"`}),`.`]}),_jsx(_components.td,{children:`Use one of the two supported values.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid participants`})}),_jsxs(_components.td,{children:[`Participant `,_jsx(_components.code,{children:`role`}),` is empty, exceeds 100 characters or 10 words, or contains control characters; or `,_jsx(_components.code,{children:`channel`}),` is negative.`]}),_jsxs(_components.td,{children:[`Use a non-empty role (≤100 chars, ≤10 words, no control chars) and a non-negative `,_jsx(_components.code,{children:`channel`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid audio format: MIME type not allowed...`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`audioFormat`}),` MIME type is not in the supported list.`]}),_jsxs(_components.td,{children:[`Use a `,_jsx(_components.a,{href:`https://docs.corti.ai/stt/audio`,children:`supported MIME type`}),` or omit the field.`]})]})]})]})]}),_jsxs(Accordion,{title:_jsx(_Fragment,{children:_jsx(_components.code,{children:`CONFIG_MISSING`})}),id:`config-missing`,children:[_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[`You sent a non-config frame before any valid `,_jsx(_components.code,{children:`config`}),` message arrived.`]}),`\n`]}),_jsxs(_components.p,{children:[`Only reachable when you opt out of the `,_jsx(_components.a,{href:`/sdk/js/websockets#connecting`,children:`automatic handshake`}),`. Default mode sends config for you.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsxs(_components.th,{children:[_jsx(_components.code,{children:`reason`}),` from server`]}),_jsx(_components.th,{children:`Cause`}),_jsx(_components.th,{children:`Fix`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`No valid configuration provided for interaction`})}),_jsx(_components.td,{children:`A non-config frame reached the server before a config message. Typically sendAudio() / sendFlush() / sendEnd() in manual mode, or a raw socket.send() queued before OPEN in awaitConfiguration: false.`}),_jsx(_components.td,{children:\"Be sure to call sendConfiguration() immediately after waitForOpen(), or pass configuration to connect() and let the SDK handle the handshake.`\"})]})})]})]}),_jsxs(Accordion,{title:_jsx(_Fragment,{children:_jsx(_components.code,{children:`CONFIG_TIMEOUT`})}),id:`config-timeout`,children:[_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[`The 10-second handshake window elapsed without any `,_jsx(_components.code,{children:`config`}),` message arriving.`]}),`\n`]}),_jsxs(_components.p,{children:[`Only reachable in `,_jsx(_components.a,{href:`/sdk/js/websockets#connecting-without-configuration`,children:`manual mode`}),`. The `,_jsx(_components.a,{href:`/sdk/js/websockets#connecting`,children:`default handshake`}),` sends config well within the 10s budget.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsxs(_components.th,{children:[_jsx(_components.code,{children:`reason`}),` from server`]}),_jsx(_components.th,{children:`Cause`}),_jsx(_components.th,{children:`Fix`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manual mode: no configuration provided within 10s`}),_jsx(_components.td,{children:`Server’s 10s handshake timer expired.`}),_jsxs(_components.td,{children:[`Call `,_jsx(_components.code,{children:`sendConfiguration()`}),` immediately after `,_jsx(_components.code,{children:`waitForOpen()`}),`.`]})]})})]})]})]}),_jsxs(Tab,{title:`C# .NET SDK`,id:`c%23-net-sdk`,\"data-child-heading-ids\":`[\"exceptions\",\"http-status-codes-c%23-net-sdk\",\"websocket-apis-c%23-net-sdk\"]`,children:[_jsxs(_components.p,{children:[`The SDK throws typed exceptions on any non-2xx response. Each exception extends `,_jsx(_components.code,{children:`CortiClientApiException`}),`, which exposes `,_jsx(_components.code,{children:`Message`}),`, `,_jsx(_components.code,{children:`StatusCode`}),`, and `,_jsx(_components.code,{children:`Body`}),`. See `,_jsx(_components.a,{href:`/sdk/dotnet/overview#error-handling`,children:`Error Handling`}),` for full details.`]}),_jsx(Heading,{level:`2`,id:`exceptions`,children:`Exceptions`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Exception class`}),_jsx(_components.th,{children:`Thrown when`}),_jsx(_components.th,{children:`Attributes`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CortiClientApiException`})}),_jsx(_components.td,{children:`Any non-2xx HTTP response`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Message`}),`, `,_jsx(_components.code,{children:`StatusCode`}),`, `,_jsx(_components.code,{children:`Body`})]})]})})]}),_jsxs(_components.p,{children:[`Each status code throws a typed subclass with a more specific `,_jsx(_components.code,{children:`Body`}),`. See the accordions below for details.`]}),_jsx(Heading,{level:`2`,id:`http-status-codes-c#-net-sdk`,children:`HTTP Status Codes (C# .NET SDK)`}),_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`400 — Bad Request`,id:`400-bad-request-1`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Exception class`}),_jsx(_components.th,{children:`Error code`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BadRequestError`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`bad_request`})}),_jsx(_components.td,{children:`The request body or query parameters are malformed or missing required fields.`}),_jsx(_components.td,{children:`Double check the fields submitted to be sure of correct format and necessary fields.`})]})})]})}),_jsxs(Accordion,{title:`401 — Unauthorized`,id:`401-unauthorized-1`,children:[_jsxs(_components.p,{children:[`Token endpoint errors are returned as JSON in the response body. Corti API errors are returned in the `,_jsx(_components.code,{children:`WWW-Authenticate`}),` response header with no body. The header is not accessible from the exception directly; use `,_jsx(_components.code,{children:`.WithRawResponse()`}),` on the request if you need it.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Exception class`}),_jsx(_components.th,{children:`Error code`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`UnauthorizedError`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_client`})}),_jsx(_components.td,{children:`Client authentication failed. There is a problem with the client ID.`}),_jsxs(_components.td,{children:[`Verify your `,_jsx(_components.code,{children:`client_id`}),` is correct.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`UnauthorizedError`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`unauthorized_client`})}),_jsx(_components.td,{children:`Client authentication failed. There is a problem with the client secret.`}),_jsxs(_components.td,{children:[`Verify your `,_jsx(_components.code,{children:`client_secret`}),` is correct.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`UnauthorizedError`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_token`})}),_jsx(_components.td,{children:`The bearer token is invalid or has expired.`}),_jsx(_components.td,{children:`Re-authenticate to obtain a fresh token and retry the request.`})]})]})]})]}),_jsx(Accordion,{title:`403 — Forbidden`,id:`403-forbidden-1`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Exception class`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ForbiddenError`})}),_jsx(_components.td,{children:`Accessing a resource (interaction, recording, transcript, document) that belongs to a different client.`}),_jsx(_components.td,{children:`Verify the resource ID was created by the authenticated client.`})]})})]})}),_jsxs(Accordion,{title:`404 — Not Found`,id:`404-not-found-1`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Exception class`}),_jsx(_components.th,{children:`Error code`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`NotFoundError`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Invalid '{resource_name}' '{resource_id}'`})}),_jsx(_components.td,{children:`The requested resource does not exist.`}),_jsx(_components.td,{children:`Verify the ID and parent resource ID is correct and was created under the authenticated tenant.`})]})})]}),_jsx(Note,{children:_jsx(_components.p,{children:`Attempting to access a resource that belongs to a different OAuth client also returns a 404, not a 403. This is intentional. Returning a 403 would confirm that the resource exists, which is a security risk.`})})]}),_jsx(Accordion,{title:`422 — Unprocessable Entity`,id:`422-unprocessable-entity`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Exception class`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`UnprocessableEntityError`})}),_jsx(_components.td,{children:`Request validation failed.`}),_jsxs(_components.td,{children:[`Check `,_jsx(_components.code,{children:`Body`}),` for `,_jsx(_components.code,{children:`Code`}),`, `,_jsx(_components.code,{children:`Description`}),`, `,_jsx(_components.code,{children:`HowToFix`}),`, `,_jsx(_components.code,{children:`Detail`}),`, and `,_jsx(_components.code,{children:`Cause`}),` fields.`]})]})})]})}),_jsx(Accordion,{title:`429 — Too Many Requests`,id:`429-too-many-requests-1`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Exception class`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CortiClientApiException`})}),_jsx(_components.td,{children:`Rate limit exceeded after retries exhausted (default: 2 retries with backoff).`}),_jsxs(_components.td,{children:[`Reduce request frequency or contact `,_jsx(_components.a,{href:`mailto:help@corti.ai`,children:`support`}),` to discuss your rate limit requirements.`]})]})})]})}),_jsx(Accordion,{title:`500 — Internal Server Error`,id:`500-internal-server-error-1`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Exception class`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`InternalServerError`})}),_jsxs(_components.td,{children:[`An unexpected error occurred on the Corti side. `,_jsx(_components.code,{children:`Body`}),` contains `,_jsx(_components.code,{children:`Detail`}),`, `,_jsx(_components.code,{children:`Type`}),`, `,_jsx(_components.code,{children:`Status`}),`, and `,_jsx(_components.code,{children:`RequestId`}),`.`]}),_jsxs(_components.td,{children:[`Double check your request format and retry the request. If the issue persists, contact `,_jsx(_components.a,{href:`mailto:help@corti.ai`,children:`support`}),`.`]})]})})]})}),_jsx(Accordion,{title:`502 — Bad Gateway`,id:`502-bad-gateway`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Exception class`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BadGatewayError`})}),_jsxs(_components.td,{children:[`A gateway error occurred. `,_jsx(_components.code,{children:`Body`}),` contains `,_jsx(_components.code,{children:`Detail`}),`, `,_jsx(_components.code,{children:`Type`}),`, `,_jsx(_components.code,{children:`Status`}),`, and `,_jsx(_components.code,{children:`RequestId`}),`.`]}),_jsxs(_components.td,{children:[`Retry the request. If the issue persists, contact `,_jsx(_components.a,{href:`mailto:help@corti.ai`,children:`support`}),`.`]})]})})]})}),_jsx(Accordion,{title:`503 — Service Unavailable`,id:`503-service-unavailable-1`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Exception class`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CortiClientApiException`})}),_jsx(_components.td,{children:`The service is temporarily unavailable.`}),_jsxs(_components.td,{children:[`Retry with exponential backoff. Monitor the `,_jsx(_components.a,{href:`https://status.corti.ai`,children:`status page`}),`.`]})]})})]})}),_jsx(Accordion,{title:`504 — Gateway Timeout`,id:`504-gateway-timeout`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Exception class`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`GatewayTimeoutError`})}),_jsxs(_components.td,{children:[`The gateway timed out. `,_jsx(_components.code,{children:`Body`}),` contains `,_jsx(_components.code,{children:`Detail`}),`, `,_jsx(_components.code,{children:`Type`}),`, `,_jsx(_components.code,{children:`Status`}),`, and `,_jsx(_components.code,{children:`RequestId`}),`.`]}),_jsxs(_components.td,{children:[`Retry the request. If the issue persists, contact `,_jsx(_components.a,{href:`mailto:help@corti.ai`,children:`support`}),`.`]})]})})]})})]}),_jsx(Heading,{level:`2`,id:`websocket-apis-c#-net-sdk`,children:`WebSocket APIs (C# .NET SDK)`}),_jsxs(_components.p,{children:[`WebSocket errors from `,_jsx(_components.code,{children:`/streams`}),` and `,_jsx(_components.code,{children:`/transcribe`}),` surface as exceptions thrown by `,_jsx(_components.code,{children:`ConnectAsync()`}),` (with `,_jsx(_components.code,{children:`Message`}),` set to the server status code, e.g. `,_jsx(_components.code,{children:`CONFIG_DENIED`}),`, `,_jsx(_components.code,{children:`CONFIG_MISSING`}),`, `,_jsx(_components.code,{children:`CONFIG_TIMEOUT`}),`) or as typed events on the socket.`]}),_jsxs(Tip,{children:[_jsxs(_components.p,{children:[`Every `,_jsx(_components.code,{children:`CONFIG_*`}),` server message also carries a `,_jsx(_components.code,{children:`Reason`}),` field with human-readable details behind the failure. Whether you can read it depends on how you connect:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Default mode`}),` (`,_jsx(_components.code,{children:`stream.ConnectAsync(new StreamConfig { … })`}),` / `,_jsx(_components.code,{children:`transcribe.ConnectAsync(new TranscribeConfig { … })`}),`): the SDK handles the handshake-phase and `,_jsx(_components.code,{children:`CONFIG_*`}),` messages internally. It throws from `,_jsx(_components.code,{children:`ConnectAsync()`}),` with just the bare code. The `,_jsx(_components.code,{children:`Reason`}),` is not exposed.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.a,{href:`/sdk/dotnet/websockets#connecting-without-configuration`,children:`Manual mode`})}),` (`,_jsx(_components.code,{children:`ConnectAsync()`}),` with no config): the raw message, including `,_jsx(_components.code,{children:`msg.Reason`}),`, flows through the `,_jsx(_components.code,{children:`StreamConfigStatusMessage`}),` / `,_jsx(_components.code,{children:`TranscribeConfigStatusMessage`}),` event. Subscribe `,_jsx(_components.strong,{children:`before`}),` calling `,_jsx(_components.code,{children:`ConnectAsync()`}),` to catch handshake-phase events.`]}),`\n`]})]}),_jsxs(Accordion,{title:_jsx(_Fragment,{children:_jsx(_components.code,{children:`CONFIG_DENIED`})}),id:`config-denied-1`,children:[_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`You sent a config message, but it’s invalid.`}),`\n`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsxs(_components.th,{children:[_jsx(_components.code,{children:`reason`}),` from server`]}),_jsx(_components.th,{children:`Likely cause`}),_jsx(_components.th,{children:`Fix`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid language code: must be a valid BCP 47 language tag`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`transcription.primaryLanguage`}),` is not a syntactically valid BCP-47 tag (e.g. `,_jsx(_components.code,{children:`\"english\"`}),`, `,_jsx(_components.code,{children:`\"en_US\"`}),`, empty string).`]}),_jsxs(_components.td,{children:[`Use a `,_jsx(_components.a,{href:`https://docs.corti.ai/stt/languages`,children:`supported language code`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid output locale: language should not be empty`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`mode.type: \"facts\"`}),` without `,_jsx(_components.code,{children:`mode.outputLocale`}),` (or with an empty value).`]}),_jsxs(_components.td,{children:[`Set `,_jsx(_components.code,{children:`mode.outputLocale`}),` to a valid BCP-47 code whenever `,_jsx(_components.code,{children:`mode.type`}),` is `,_jsx(_components.code,{children:`facts`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid output locale: invalid language code: must be a valid BCP 47 language tag`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`mode.type: \"facts\"`}),` with a syntactically invalid `,_jsx(_components.code,{children:`mode.outputLocale`}),`.`]}),_jsxs(_components.td,{children:[`Use a `,_jsx(_components.a,{href:`https://docs.corti.ai/stt/languages`,children:`supported language code`}),` for `,_jsx(_components.code,{children:`outputLocale`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unknown mode`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`mode.type`}),` is not `,_jsx(_components.code,{children:`transcription`}),` or `,_jsx(_components.code,{children:`facts`}),`.`]}),_jsx(_components.td,{children:`Use one of the two supported values.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid participants`})}),_jsxs(_components.td,{children:[`Participant `,_jsx(_components.code,{children:`role`}),` is empty, exceeds 100 characters or 10 words, or contains control characters; or `,_jsx(_components.code,{children:`channel`}),` is negative.`]}),_jsxs(_components.td,{children:[`Use a non-empty role (≤100 chars, ≤10 words, no control chars) and a non-negative `,_jsx(_components.code,{children:`channel`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid audio format: MIME type not allowed...`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`audioFormat`}),` MIME type is not in the supported list.`]}),_jsxs(_components.td,{children:[`Use a `,_jsx(_components.a,{href:`https://docs.corti.ai/stt/audio`,children:`supported MIME type`}),` or omit the field.`]})]})]})]})]}),_jsxs(Accordion,{title:_jsx(_Fragment,{children:_jsx(_components.code,{children:`CONFIG_MISSING`})}),id:`config-missing-1`,children:[_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[`You sent a non-config frame before any valid `,_jsx(_components.code,{children:`config`}),` message arrived.`]}),`\n`]}),_jsxs(_components.p,{children:[`Only reachable in `,_jsx(_components.a,{href:`/sdk/dotnet/websockets#connecting-without-configuration`,children:`manual mode`}),`. Default mode sends config for you.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsxs(_components.th,{children:[_jsx(_components.code,{children:`Reason`}),` from server`]}),_jsx(_components.th,{children:`Cause`}),_jsx(_components.th,{children:`Fix`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`No valid configuration provided for interaction`})}),_jsxs(_components.td,{children:[`A non-config frame reached the server before a config message. Typically a `,_jsx(_components.code,{children:`Send(byte[], …)`}),` audio call, or a `,_jsx(_components.code,{children:`Send(StreamFlushMessage, …)`}),` / `,_jsx(_components.code,{children:`Send(StreamEndMessage, …)`}),` call before any `,_jsx(_components.code,{children:`Send(StreamConfigMessage, …)`}),`.`]}),_jsxs(_components.td,{children:[`Call `,_jsx(_components.code,{children:`Send(new StreamConfigMessage { … }, …)`}),` (or `,_jsx(_components.code,{children:`TranscribeConfigMessage`}),`) as the first frame after `,_jsx(_components.code,{children:`ConnectAsync()`}),` returns, `,_jsx(_components.strong,{children:`or`}),` pass the config directly to `,_jsx(_components.code,{children:`ConnectAsync(new StreamConfig { … })`}),` and let the SDK handle the handshake.`]})]})})]})]}),_jsxs(Accordion,{title:_jsx(_Fragment,{children:_jsx(_components.code,{children:`CONFIG_TIMEOUT`})}),id:`config-timeout-1`,children:[_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[`The 10-second handshake window elapsed without any `,_jsx(_components.code,{children:`config`}),` message arriving.`]}),`\n`]}),_jsxs(_components.p,{children:[`Only reachable in `,_jsx(_components.a,{href:`/sdk/dotnet/websockets#connecting-without-configuration`,children:`manual mode`}),`. The default handshake sends config well within the 10s budget.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsxs(_components.th,{children:[_jsx(_components.code,{children:`Reason`}),` from server`]}),_jsx(_components.th,{children:`Cause`}),_jsx(_components.th,{children:`Fix`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`no configuration provided within 10s`})}),_jsx(_components.td,{children:`Server’s 10s handshake timer expired without receiving a config message.`}),_jsxs(_components.td,{children:[`Call `,_jsx(_components.code,{children:`Send(new StreamConfigMessage { … }, …)`}),` (or `,_jsx(_components.code,{children:`TranscribeConfigMessage`}),`) immediately after `,_jsx(_components.code,{children:`ConnectAsync()`}),` returns, `,_jsx(_components.strong,{children:`or`}),` pass the config directly to `,_jsx(_components.code,{children:`ConnectAsync(new StreamConfig { … })`}),` and let the SDK handle the handshake.`]})]})})]})]})]}),_jsxs(Tab,{title:`REST API`,id:`rest-api`,\"data-child-heading-ids\":`[\"http-status-codes-rest-api\",\"websocket-apis-rest-api\"]`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Resource and API errors`}),` (all endpoints except the OAuth token endpoint) return JSON with `,_jsx(_components.code,{children:`requestid`}),`, `,_jsx(_components.code,{children:`status`}),`, `,_jsx(_components.code,{children:`type`}),`, `,_jsx(_components.code,{children:`detail`}),`, and `,_jsx(_components.code,{children:`validationErrors`}),` fields:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"requestid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003cstring>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`400`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003cstring>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003cstring>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"validationErrors\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Authentication errors`}),` from the OAuth token endpoint return `,_jsx(_components.code,{children:`error`}),` and `,_jsx(_components.code,{children:`error_description`}),` fields:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"invalid_client\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error_description\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Client authentication failed.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(Heading,{level:`2`,id:`http-status-codes-rest-api`,children:`HTTP Status Codes (REST API)`}),_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`400 — Bad Request`,id:`400-bad-request-2`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Error code`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_request`})}),_jsx(_components.td,{children:`The request is missing a required parameter or is otherwise malformed.`}),_jsxs(_components.td,{children:[`Ensure required fields (`,_jsx(_components.code,{children:`grant_type`}),`,`,_jsx(_components.code,{children:`scope`}),`) are present and correctly formatted.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unsupported_grant_type`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.code,{children:`grant_type`}),` value is not recognised by the server.`]}),_jsxs(_components.td,{children:[`This API requires a `,_jsx(_components.code,{children:`grant_type`}),` of `,_jsx(_components.code,{children:`client_credentials`}),`. Corti Assistant requires alternate methods for `,_jsx(_components.code,{children:`grant_type`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_scope`})}),_jsx(_components.td,{children:`The requested scope does not exist or is not permitted for this client.`}),_jsxs(_components.td,{children:[`Use a valid scope. This API requires `,_jsx(_components.code,{children:`openid`}),`.`]})]})]})]})}),_jsxs(Accordion,{title:`401 — Unauthorized`,id:`401-unauthorized-2`,children:[_jsxs(_components.p,{children:[`Token endpoint errors are returned as JSON in the response body. Corti API errors are returned in the `,_jsx(_components.code,{children:`WWW-Authenticate`}),` response header with no body. Check the header directly if the response body is empty.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Error code`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_client`})}),_jsx(_components.td,{children:`Client authentication failed. There is a problem with the client ID.`}),_jsxs(_components.td,{children:[`Verify your `,_jsx(_components.code,{children:`client_id`}),` is correct.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unauthorized_client`})}),_jsx(_components.td,{children:`Client authentication failed. There is a problem with the client secret`}),_jsxs(_components.td,{children:[`Verify your `,_jsx(_components.code,{children:`client_secret`}),` is correct.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_token`})}),_jsxs(_components.td,{children:[`The bearer token is invalid or has expired. Check the `,_jsx(_components.code,{children:`WWW-Authenticate`}),` header for `,_jsx(_components.code,{children:`error_description`}),`.`]}),_jsx(_components.td,{children:`Re-authenticate to obtain a fresh token and retry the request.`})]})]})]})]}),_jsx(Accordion,{title:`403 — Forbidden`,id:`403-forbidden-2`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Accessing a resource (interaction, recording, transcript, document) that belongs to a different client.`}),_jsx(_components.td,{children:`Verify the resource ID was created by the authenticated client.`})]})})]})}),_jsx(Accordion,{title:`404 — Not Found`,id:`404-not-found-2`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Error`}),_jsx(_components.th,{children:`When it occurs`}),_jsx(_components.th,{children:`How to resolve`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Invalid '{resource_name}' '{resource_id}'`})}),_jsx(_components.td,{children:`The requested resource does not exist.`}),_jsx(_components.td,{children:`Verify the ID and parent resource ID is correct and was created under the authenticated tenant.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`'{resource_name}' not found`})}),_jsx(_components.td,{children:`The requested resource does not exist.`}),_jsx(_components.td,{children:`Verify the ID and parent resource ID is correct and was created under the authenticated tenant.`})]})]})]})}),_jsx(Accordion,{title:`429 — Too Many Requests`,id:`429-too-many-requests-2`,children:_jsxs(_components.p,{children:[`You have exceeded the rate limit for the API. Retry the request after a delay, using exponential backoff. If the error persists, reduce request frequency or contact `,_jsx(_components.a,{href:`mailto:help@corti.ai`,children:`support`}),` to discuss your rate limit requirements.`]})}),_jsx(Accordion,{title:`500 — Internal Server Error`,id:`500-internal-server-error-2`,children:_jsxs(_components.p,{children:[`An unexpected error occurred on the Corti side. Double check your request format and retry the request. If the issue persists, contact `,_jsx(_components.a,{href:`mailto:help@corti.ai`,children:`support`}),`.`]})}),_jsx(Accordion,{title:`503 — Service Unavailable`,id:`503-service-unavailable-2`,children:_jsxs(_components.p,{children:[`The service is temporarily unavailable. Retry with exponential backoff. Monitor the `,_jsx(_components.a,{href:`https://status.corti.ai`,children:`status page`}),`.`]})})]}),_jsx(Heading,{level:`2`,id:`websocket-apis-rest-api`,children:`WebSocket APIs (REST API)`}),_jsxs(_components.p,{children:[`WebSocket errors from `,_jsx(_components.code,{children:`/streams`}),` and `,_jsx(_components.code,{children:`/transcribe`}),` arrive as plain JSON messages on the socket: `,_jsx(_components.code,{children:`{ type: \"CONFIG_DENIED\", reason: \"…\" }`}),`, `,_jsx(_components.code,{children:`{ type: \"CONFIG_MISSING\", reason: \"…\" }`}),`, etc. Without an SDK in the middle, you see every server message verbatim, including the `,_jsx(_components.code,{children:`reason`}),` field on every `,_jsx(_components.code,{children:`CONFIG_*`}),` event.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The raw protocol is manual mode out of the box.`}),` There’s no SDK layer handling the handshake for you. You open the socket, send `,_jsx(_components.code,{children:`{ type: \"config\", configuration: { … } }`}),` yourself, and listen for `,_jsx(_components.code,{children:`CONFIG_ACCEPTED`}),` before sending audio. See the `,_jsx(_components.a,{href:`/api-reference/streams`,children:`Streams API reference`}),` for the full protocol.`]})}),_jsx(Note,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`The server does not close the socket on `,_jsx(_components.code,{children:`CONFIG_DENIED`}),` or `,_jsx(_components.code,{children:`CONFIG_MISSING`}),`.`]}),` Both codes reject the input but keep the connection open. Each subsequent non-config frame triggers a fresh `,_jsx(_components.code,{children:`CONFIG_MISSING`}),` response, one per frame, until the client closes the socket. SDK consumers don’t see this because the SDK calls `,_jsx(_components.code,{children:`close()`}),` on rejection internally. Raw-protocol clients should close the socket themselves once they receive either rejection.`]})}),_jsxs(Accordion,{title:_jsx(_Fragment,{children:_jsx(_components.code,{children:`CONFIG_DENIED`})}),id:`config-denied-2`,children:[_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`You sent a config message, but it’s invalid.`}),`\n`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsxs(_components.th,{children:[_jsx(_components.code,{children:`reason`}),` from server`]}),_jsx(_components.th,{children:`Likely cause`}),_jsx(_components.th,{children:`Fix`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid language code: must be a valid BCP 47 language tag`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`transcription.primaryLanguage`}),` is not a syntactically valid BCP-47 tag (e.g. `,_jsx(_components.code,{children:`\"english\"`}),`, `,_jsx(_components.code,{children:`\"en_US\"`}),`, empty string).`]}),_jsxs(_components.td,{children:[`Use a `,_jsx(_components.a,{href:`https://docs.corti.ai/stt/languages`,children:`supported language code`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid output locale: language should not be empty`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`mode.type: \"facts\"`}),` without `,_jsx(_components.code,{children:`mode.outputLocale`}),` (or with an empty value).`]}),_jsxs(_components.td,{children:[`Set `,_jsx(_components.code,{children:`mode.outputLocale`}),` to a valid BCP-47 code whenever `,_jsx(_components.code,{children:`mode.type`}),` is `,_jsx(_components.code,{children:`facts`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid output locale: invalid language code: must be a valid BCP 47 language tag`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`mode.type: \"facts\"`}),` with a syntactically invalid `,_jsx(_components.code,{children:`mode.outputLocale`}),`.`]}),_jsxs(_components.td,{children:[`Use a `,_jsx(_components.a,{href:`https://docs.corti.ai/stt/languages`,children:`supported language code`}),` for `,_jsx(_components.code,{children:`outputLocale`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unknown mode`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`mode.type`}),` is not `,_jsx(_components.code,{children:`transcription`}),` or `,_jsx(_components.code,{children:`facts`}),`.`]}),_jsx(_components.td,{children:`Use one of the two supported values.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid participants`})}),_jsxs(_components.td,{children:[`Participant `,_jsx(_components.code,{children:`role`}),` is empty, exceeds 100 characters or 10 words, or contains control characters; or `,_jsx(_components.code,{children:`channel`}),` is negative.`]}),_jsxs(_components.td,{children:[`Use a non-empty role (≤100 chars, ≤10 words, no control chars) and a non-negative `,_jsx(_components.code,{children:`channel`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid audio format: MIME type not allowed...`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`audioFormat`}),` MIME type is not in the supported list.`]}),_jsxs(_components.td,{children:[`Use a `,_jsx(_components.a,{href:`https://docs.corti.ai/stt/audio`,children:`supported MIME type`}),` or omit the field.`]})]})]})]})]}),_jsxs(Accordion,{title:_jsx(_Fragment,{children:_jsx(_components.code,{children:`CONFIG_MISSING`})}),id:`config-missing-2`,children:[_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[`You sent a non-config frame before any valid `,_jsx(_components.code,{children:`config`}),` message arrived.`]}),`\n`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsxs(_components.th,{children:[_jsx(_components.code,{children:`reason`}),` from server`]}),_jsx(_components.th,{children:`Cause`}),_jsx(_components.th,{children:`Fix`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`No valid configuration provided for interaction`})}),_jsxs(_components.td,{children:[`A non-config frame (binary audio, `,_jsx(_components.code,{children:`{ type: \"flush\" }`}),`, `,_jsx(_components.code,{children:`{ type: \"end\" }`}),`) reached the server before a `,_jsx(_components.code,{children:`{ type: \"config\", configuration: { … } }`}),` message.`]}),_jsxs(_components.td,{children:[`Send the config message as the first frame after the WebSocket opens. Wait for `,_jsx(_components.code,{children:`CONFIG_ACCEPTED`}),` before sending any other frame.`]})]})})]})]}),_jsxs(Accordion,{title:_jsx(_Fragment,{children:_jsx(_components.code,{children:`CONFIG_TIMEOUT`})}),id:`config-timeout-2`,children:[_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[`The 10-second handshake window elapsed without any `,_jsx(_components.code,{children:`config`}),` message arriving.`]}),`\n`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsxs(_components.th,{children:[_jsx(_components.code,{children:`reason`}),` from server`]}),_jsx(_components.th,{children:`Cause`}),_jsx(_components.th,{children:`Fix`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`no configuration provided within 10s`})}),_jsx(_components.td,{children:`Server’s 10s handshake timer expired without receiving a config message.`}),_jsxs(_components.td,{children:[`Send `,_jsx(_components.code,{children:`{ type: \"config\", configuration: { … } }`}),` immediately after the WebSocket opens.`]})]})})]})]})]})]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Errors","description":"Error messages and solutions from Corti's API","href":"/api-reference/errors"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Error Classes","slug":"error-classes","depth":2,"children":[],"tabId":"javascript-sdk"},{"title":"HTTP Status Codes (JavaScript SDK)","slug":"http-status-codes-javascript-sdk","depth":2,"children":[],"tabId":"javascript-sdk"},{"title":"WebSocket APIs (JavaScript SDK)","slug":"websocket-apis-javascript-sdk","depth":2,"children":[],"tabId":"javascript-sdk"},{"title":"Exceptions","slug":"exceptions","depth":2,"children":[],"tabId":"c%23-net-sdk"},{"title":"HTTP Status Codes (C# .NET SDK)","slug":"http-status-codes-c#-net-sdk","depth":2,"children":[],"tabId":"c%23-net-sdk"},{"title":"WebSocket APIs (C# .NET SDK)","slug":"websocket-apis-c#-net-sdk","depth":2,"children":[],"tabId":"c%23-net-sdk"},{"title":"HTTP Status Codes (REST API)","slug":"http-status-codes-rest-api","depth":2,"children":[],"tabId":"rest-api"},{"title":"WebSocket APIs (REST API)","slug":"websocket-apis-rest-api","depth":2,"children":[],"tabId":"rest-api"}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/corti/f39b9e0170d6232a/api-reference/corti.js","/_mintlify/custom/corti/8c15918c79eb9f3c/generate-events-nav.js"],"subdomain":"corti","siteName":"Corti API Documentation","title":"Errors - Corti API Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-06T13:37:09.337Z","originalFileLocation":"api-reference/errors.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=\"Error messages and solutions from Corti\u0026#x27;s API\">\u003cmeta data-mint-head name=\"application-name\" content=\"Corti API Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/corti/gI_ok5T7zaR8y4z1/_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/corti/gI_ok5T7zaR8y4z1/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/corti/gI_ok5T7zaR8y4z1/_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/corti/gI_ok5T7zaR8y4z1/_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/corti/gI_ok5T7zaR8y4z1/_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/corti/gI_ok5T7zaR8y4z1/_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/corti/gI_ok5T7zaR8y4z1/_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/corti/gI_ok5T7zaR8y4z1/_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/corti/gI_ok5T7zaR8y4z1/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Errors - Corti API Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Error messages and solutions from Corti\u0026#x27;s API\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Corti API Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.corti.ai/api-reference/errors\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://corti.mintlify.site/_mintlify/api/og/v2?division=Errors\u0026amp;title=Errors\u0026amp;description=Error+messages+and+solutions+from+Corti%27s+API\u0026amp;theme=f2ff4eac94d47d8fe457bb02\u0026amp;signature=d571f2c341ec9c4bce370ece14f030286fe798b21c76cb6c50c867c29de4c375\">\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=\"Errors - Corti API Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Error messages and solutions from Corti\u0026#x27;s API\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://corti.mintlify.site/_mintlify/api/og/v2?division=Errors\u0026amp;title=Errors\u0026amp;description=Error+messages+and+solutions+from+Corti%27s+API\u0026amp;theme=f2ff4eac94d47d8fe457bb02\u0026amp;signature=d571f2c341ec9c4bce370ece14f030286fe798b21c76cb6c50c867c29de4c375\">\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/corti/gI_ok5T7zaR8y4z1/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Corti API Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3F3F46\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.corti.ai/api-reference/errors\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/errors.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.corti.ai/#organization\",\"name\":\"Corti API Documentation\",\"url\":\"https://docs.corti.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/corti/en_RPjQCFb1qJpbU/logo/corti_light.svg?fit=max\u0026auto=format\u0026n=en_RPjQCFb1qJpbU\u0026q=85\u0026s=effbca890e531e034f6b66ce8e15aa6c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.corti.ai#website\",\"name\":\"Corti API Documentation\",\"url\":\"https://docs.corti.ai\",\"publisher\":{\"@id\":\"https://docs.corti.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.corti.ai/api-reference/errors#webpage\",\"url\":\"https://docs.corti.ai/api-reference/errors\",\"name\":\"Errors\",\"description\":\"Error messages and solutions from Corti's API\",\"dateModified\":\"2026-10-06T13:37:09.337Z\",\"isPartOf\":{\"@id\":\"https://docs.corti.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.corti.ai/api-reference/errors#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.corti.ai/api-reference/errors#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Corti API Documentation\",\"item\":\"https://docs.corti.ai\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Errors\",\"item\":\"https://docs.corti.ai/api-reference/errors\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.corti.ai/api-reference/errors#article\",\"headline\":\"Errors\",\"name\":\"Errors\",\"description\":\"Error messages and solutions from Corti's API\",\"url\":\"https://docs.corti.ai/api-reference/errors\",\"mainEntityOfPage\":{\"@id\":\"https://docs.corti.ai/api-reference/errors#webpage\"},\"dateModified\":\"2026-10-06T13:37:09.337Z\",\"publisher\":{\"@id\":\"https://docs.corti.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.corti.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Corti API Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Corti API Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/errors.md","siteName":"Corti API Documentation","nav":{"global":null,"tabs":[{"tab":"Home","icon":"house","pages":[{"title":"Home","href":"/get_started/welcome"}]},{"tab":"Corti Models","icon":"microchip","pages":[{"title":"Corti Models","href":"/models/welcome"}]},{"tab":"Agentic Framework","icon":"layers","pages":[{"title":"Agentic Framework","href":"/agentic/overview"}]},{"tab":"Speech to Text","icon":"audio-lines","pages":[{"title":"Speech to Text","href":"/stt/overview"}]},{"tab":"Healthcare","icon":"heart-pulse","pages":[{"title":"Healthcare","href":"/healthcare"}]},{"tab":"API Reference","icon":"square-code","pages":[{"title":"Welcome to the Corti API Reference","sidebarTitle":"Welcome","mode":"wide","href":"/api-reference/welcome"},{"group":"Corti Models APIs","icon":"microchip","pages":[{"group":"Models","pages":[{"title":"List available models","deprecated":null,"version":null,"openapi":"/api-reference/corti-models/corti-models-openapi.yml get /v1/models","href":"/api-reference/corti-models/models/list-available-models"}]},{"group":"Chat","pages":[{"title":"Create chat completion","deprecated":null,"version":null,"openapi":"/api-reference/corti-models/corti-models-openapi.yml post /v1/chat/completions","href":"/api-reference/corti-models/chat/create-chat-completion"}]},{"group":"Completions","pages":[{"title":"Create completion","deprecated":null,"version":null,"openapi":"/api-reference/corti-models/corti-models-openapi.yml post /v1/completions","href":"/api-reference/corti-models/completions/create-completion"}]},{"group":"Responses","pages":[{"title":"Create response","deprecated":null,"version":null,"openapi":"/api-reference/corti-models/corti-models-openapi.yml post /v1/responses","href":"/api-reference/corti-models/responses/create-response"}]},{"group":"Anthropic","pages":[{"title":"Create message (Anthropic)","deprecated":null,"version":null,"openapi":"/api-reference/corti-models/corti-models-openapi.yml post /anthropic/v1/messages","href":"/api-reference/corti-models/anthropic/create-message-anthropic"}]},{"group":"Embeddings","pages":[{"title":"Create embeddings","deprecated":null,"version":null,"openapi":"/api-reference/corti-models/corti-models-openapi.yml post /v1/embeddings","href":"/api-reference/corti-models/embeddings/create-embeddings"}]}]},{"group":"Agentic APIs","icon":"layers","pages":[{"group":"Agents","pages":[{"title":"List agents","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/agents","href":"/agentic-v2/agents/list-agents"},{"title":"Create an agent","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml post /agentic/agents","href":"/agentic-v2/agents/create-an-agent"},{"title":"Get an agent","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/agents/{agentId}","href":"/agentic-v2/agents/get-an-agent"},{"title":"Delete an agent","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml delete /agentic/agents/{agentId}","href":"/agentic-v2/agents/delete-an-agent"},{"title":"Update an agent (partial)","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml patch /agentic/agents/{agentId}","href":"/agentic-v2/agents/update-an-agent-partial"}]},{"group":"Agent Card","pages":[{"title":"Get the A2A agent card","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/agents/{agentId}/.well-known/agent-card.json","href":"/agentic-v2/agent-card/get-the-a2a-agent-card"}]},{"group":"A2A","pages":[{"title":"A2A JSON-RPC binding","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml post /agentic/agents/{agentId}/a2a","href":"/agentic-v2/a2a/a2a-json-rpc-binding"},{"title":"Send a message (A2A REST)","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml post /agentic/agents/{agentId}/a2a/message:send","href":"/agentic-v2/a2a/send-a-message-a2a-rest"},{"title":"Stream a message (A2A REST)","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml post /agentic/agents/{agentId}/a2a/message:stream","href":"/agentic-v2/a2a/stream-a-message-a2a-rest"},{"title":"List tasks (A2A REST)","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/agents/{agentId}/a2a/tasks","href":"/agentic-v2/a2a/list-tasks-a2a-rest"},{"title":"Get a task (A2A REST)","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/agents/{agentId}/a2a/tasks/{taskId}","href":"/agentic-v2/a2a/get-a-task-a2a-rest"},{"title":"Cancel a task (A2A REST)","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml post /agentic/agents/{agentId}/a2a/tasks/{taskId}:cancel","href":"/agentic-v2/a2a/cancel-a-task-a2a-rest"},{"title":"Subscribe to task events (A2A REST)","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml post /agentic/agents/{agentId}/a2a/tasks/{taskId}:subscribe","href":"/agentic-v2/a2a/subscribe-to-task-events-a2a-rest"}]},{"group":"Usage","pages":[{"title":"Get an agent's usage","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/agents/{agentId}/usage","href":"/agentic-v2/usage/get-an-agents-usage"}]},{"group":"Connectors","pages":[{"title":"List an agent's connectors","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/agents/{agentId}/connectors","href":"/agentic-v2/connectors/list-an-agents-connectors"},{"title":"Attach a connector","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml post /agentic/agents/{agentId}/connectors","href":"/agentic-v2/connectors/attach-a-connector"},{"title":"Get an agent-scoped connector","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/agents/{agentId}/connectors/{agentConnectorId}","href":"/agentic-v2/connectors/get-an-agent-scoped-connector"},{"title":"Remove a connector","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml delete /agentic/agents/{agentId}/connectors/{agentConnectorId}","href":"/agentic-v2/connectors/remove-a-connector"},{"title":"Update an agent-scoped connector (partial)","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml patch /agentic/agents/{agentId}/connectors/{agentConnectorId}","href":"/agentic-v2/connectors/update-an-agent-scoped-connector-partial"}]},{"group":"Contexts","pages":[{"title":"List contexts","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/contexts","href":"/agentic-v2/contexts/list-contexts"},{"title":"Get a context","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/contexts/{contextId}","href":"/agentic-v2/contexts/get-a-context"},{"title":"Delete or expire a context","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml delete /agentic/contexts/{contextId}","href":"/agentic-v2/contexts/delete-or-expire-a-context"},{"title":"Export the observability trace for a context","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/contexts/{contextId}/trace","href":"/agentic-v2/contexts/export-the-observability-trace-for-a-context"},{"title":"List tasks within a context","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/contexts/{contextId}/tasks","href":"/agentic-v2/contexts/list-tasks-within-a-context"},{"title":"Get a task within a context","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/contexts/{contextId}/tasks/{taskId}","href":"/agentic-v2/contexts/get-a-task-within-a-context"}]},{"group":"Artifacts","pages":[{"title":"Get an artifact","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/contexts/{contextId}/tasks/{taskId}/artifacts/{artifactId}","href":"/agentic-v2/artifacts/get-an-artifact"}]},{"group":"Registry","pages":[{"title":"List available registry connectors","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/registry/connectors","href":"/agentic-v2/registry/list-available-registry-connectors"},{"title":"Get registry connector details and configuration schema","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/registry/connectors/{connectorId}","href":"/agentic-v2/registry/get-registry-connector-details-and-configuration-schema"}]},{"group":"Feedback","pages":[{"title":"List feedback for a task","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml get /agentic/contexts/{contextId}/tasks/{taskId}/feedback","href":"/agentic-v2/feedback/list-feedback-for-a-task"},{"title":"Submit feedback for a task","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml post /agentic/contexts/{contextId}/tasks/{taskId}/feedback","href":"/agentic-v2/feedback/submit-feedback-for-a-task"},{"title":"Delete a feedback resource","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi-v2.yml delete /agentic/contexts/{contextId}/tasks/{taskId}/feedback/{feedbackId}","href":"/agentic-v2/feedback/delete-a-feedback-resource"}]}]},{"group":"Web Socket APIs","icon":"handshake","pages":[{"group":"Transcribe","pages":[{"title":"Real-time stateless dictation","sidebarTitle":"Stateless dictation","tag":"WSS","href":"/api-reference/transcribe"}]},{"group":"Streams","pages":[{"title":"Real-time conversational transcript generation and fact extraction (FactsR™)","sidebarTitle":"Conversational fact extraction","tag":"WSS","href":"/api-reference/streams"}]}]},{"group":"REST APIs","icon":"arrow-up-down","pages":[{"group":"Interactions","pages":[{"title":"List All Interactions","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /interactions/","href":"/api-reference/interactions/list-all-interactions"},{"title":"Create Interaction","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /interactions/","href":"/api-reference/interactions/create-interaction"},{"title":"Get Existing Interaction","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /interactions/{id}","href":"/api-reference/interactions/get-existing-interaction"},{"title":"Delete Interaction","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml delete /interactions/{id}","href":"/api-reference/interactions/delete-interaction"},{"title":"Update Interaction","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml patch /interactions/{id}","href":"/api-reference/interactions/update-interaction"},{"title":"Update Interaction Retention Policy","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml put /interactions/{id}/retention-policy","href":"/api-reference/interactions/update-interaction-retention-policy"}]},{"group":"Recordings","pages":[{"title":"List Recordings","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /interactions/{id}/recordings/","href":"/api-reference/recordings/list-recordings"},{"title":"Upload Recording","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /interactions/{id}/recordings/","href":"/api-reference/recordings/upload-recording"},{"title":"Get Recording","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /interactions/{id}/recordings/{recordingId}","href":"/api-reference/recordings/get-recording"},{"title":"Delete Recording","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml delete /interactions/{id}/recordings/{recordingId}","href":"/api-reference/recordings/delete-recording"}]},{"group":"Transcripts","pages":[{"title":"List Transcripts","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /interactions/{id}/transcripts/","href":"/api-reference/transcripts/list-transcripts"},{"title":"Create Transcript","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /interactions/{id}/transcripts/","href":"/api-reference/transcripts/create-transcript"},{"title":"Get Transcript","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /interactions/{id}/transcripts/{transcriptId}","href":"/api-reference/transcripts/get-transcript"},{"title":"Delete Transcript","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml delete /interactions/{id}/transcripts/{transcriptId}","href":"/api-reference/transcripts/delete-transcript"},{"title":"Get Transcript Status","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /interactions/{id}/transcripts/{transcriptId}/status","href":"/api-reference/transcripts/get-transcript-status"}]},{"group":"Facts","pages":[{"title":"List Fact Groups","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /factgroups/","href":"/api-reference/facts/list-fact-groups"},{"title":"List Facts","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /interactions/{id}/facts/","href":"/api-reference/facts/list-facts"},{"title":"Add Facts","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /interactions/{id}/facts/","href":"/api-reference/facts/add-facts"},{"title":"Update Facts","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml patch /interactions/{id}/facts/","href":"/api-reference/facts/update-facts"},{"title":"Update Fact","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml patch /interactions/{id}/facts/{factId}","href":"/api-reference/facts/update-fact"},{"title":"Extract Facts","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /tools/extract-facts","href":"/api-reference/facts/extract-facts"}]},{"group":"Documents (Classic)","pages":[{"title":"List Documents","deprecated":true,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /interactions/{id}/documents/","href":"/api-reference/documents-classic/list-documents"},{"title":"Generate Document","deprecated":true,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /interactions/{id}/documents/","href":"/api-reference/documents-classic/generate-document"},{"title":"Get Document","deprecated":true,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /interactions/{id}/documents/{documentId}","href":"/api-reference/documents-classic/get-document"},{"title":"Delete Document","deprecated":true,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml delete /interactions/{id}/documents/{documentId}","href":"/api-reference/documents-classic/delete-document"},{"title":"Update Document","deprecated":true,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml patch /interactions/{id}/documents/{documentId}","href":"/api-reference/documents-classic/update-document"}]},{"group":"Templates (Classic)","pages":[{"title":"List Template Sections","deprecated":true,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /templateSections/","href":"/api-reference/templates-classic/list-template-sections"},{"title":"List Templates","deprecated":true,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /templates/","href":"/api-reference/templates-classic/list-templates"},{"title":"Get Template","deprecated":true,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /templates/{key}","href":"/api-reference/templates-classic/get-template"}]},{"group":"Codes (Legacy)","pages":[{"title":"List Codes","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /interactions/{id}/codes/","href":"/api-reference/codes-legacy/list-codes"},{"title":"Select Codes","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml put /interactions/{id}/codes/","href":"/api-reference/codes-legacy/select-codes"},{"title":"Generate Codes","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /interactions/{id}/codes/","href":"/api-reference/codes-legacy/generate-codes"}]},{"group":"Codes","pages":[{"title":"Predict Codes","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /tools/coding/","href":"/api-reference/codes/predict-codes"}]},{"group":"Guided Templates","pages":[{"title":"List templates","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /documents/templates/","href":"/api-reference/guided-templates/list-templates"},{"title":"Create template","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /documents/templates/","href":"/api-reference/guided-templates/create-template"},{"title":"Get template","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /documents/templates/{templateID}","href":"/api-reference/guided-templates/get-template"},{"title":"Delete template","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml delete /documents/templates/{templateID}","href":"/api-reference/guided-templates/delete-template"},{"title":"Update template metadata","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml patch /documents/templates/{templateID}","href":"/api-reference/guided-templates/update-template-metadata"},{"title":"List template versions","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /documents/templates/{templateID}/versions/","href":"/api-reference/guided-templates/list-template-versions"},{"title":"Create template version","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /documents/templates/{templateID}/versions/","href":"/api-reference/guided-templates/create-template-version"},{"title":"Get template version","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /documents/templates/{templateID}/versions/{versionID}","href":"/api-reference/guided-templates/get-template-version"},{"title":"Delete template version","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml delete /documents/templates/{templateID}/versions/{versionID}","href":"/api-reference/guided-templates/delete-template-version"},{"title":"Publish template version","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /documents/templates/{templateID}/versions/{versionID}/publish","href":"/api-reference/guided-templates/publish-template-version"}]},{"group":"Guided Sections","pages":[{"title":"List sections","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /documents/sections/","href":"/api-reference/guided-sections/list-sections"},{"title":"Create section","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /documents/sections/","href":"/api-reference/guided-sections/create-section"},{"title":"Get section","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /documents/sections/{sectionID}","href":"/api-reference/guided-sections/get-section"},{"title":"Delete section","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml delete /documents/sections/{sectionID}","href":"/api-reference/guided-sections/delete-section"},{"title":"Update section metadata","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml patch /documents/sections/{sectionID}","href":"/api-reference/guided-sections/update-section-metadata"},{"title":"List section versions","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /documents/sections/{sectionID}/versions/","href":"/api-reference/guided-sections/list-section-versions"},{"title":"Create section version","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /documents/sections/{sectionID}/versions/","href":"/api-reference/guided-sections/create-section-version"},{"title":"Get section version","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /documents/sections/{sectionID}/versions/{versionID}","href":"/api-reference/guided-sections/get-section-version"},{"title":"Delete section version","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml delete /documents/sections/{sectionID}/versions/{versionID}","href":"/api-reference/guided-sections/delete-section-version"},{"title":"Publish section version","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /documents/sections/{sectionID}/versions/{versionID}/publish","href":"/api-reference/guided-sections/publish-section-version"},{"title":"Get section impact","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /documents/sections/{sectionID}/impact","href":"/api-reference/guided-sections/get-section-impact"}]},{"group":"Guided Documents","pages":[{"title":"List documents","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /documents/","href":"/api-reference/guided-documents/list-documents"},{"title":"Generate a structured document","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml post /documents/","href":"/api-reference/guided-documents/generate-a-structured-document"},{"title":"Get document","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /documents/{documentID}","href":"/api-reference/guided-documents/get-document"},{"title":"Delete document","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml delete /documents/{documentID}","href":"/api-reference/guided-documents/delete-document"},{"title":"Update document","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml patch /documents/{documentID}","href":"/api-reference/guided-documents/update-document"}]},{"group":"Languages","pages":[{"title":"List Languages","deprecated":null,"version":null,"openapi":"/api-reference/auto-generated-openapi.yml get /languages/","href":"/api-reference/languages/list-languages"}]}]},{"group":"Admin APIs","icon":"shield-check","pages":[{"group":"Auth","pages":[{"title":"Authenticate user and get access token","deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml post /auth/token","href":"/api-reference/admin/auth/authenticate-user-and-get-access-token"}]},{"group":"Customers","pages":[{"title":"List customers for a project","deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml get /projects/{projectId}/customers","href":"/api-reference/admin/customers/list-customers-for-a-project"},{"title":"Create a new customer","deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml post /projects/{projectId}/customers","href":"/api-reference/admin/customers/create-a-new-customer"},{"title":"Delete a customer","deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml delete /projects/{projectId}/customers/{customerId}","href":"/api-reference/admin/customers/delete-a-customer"},{"title":"Update a customer","deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml patch /projects/{projectId}/customers/{customerId}","href":"/api-reference/admin/customers/update-a-customer"},{"title":"Get quotas for a customer","deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml get /projects/{projectId}/customers/{customerId}/quotas","href":"/api-reference/admin/customers/get-quotas-for-a-customer"}]},{"group":"Projects","pages":[{"title":"Get quotas for all tenants within a project","deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml get /projects/{projectId}/quotas","href":"/api-reference/admin/projects/get-quotas-for-all-tenants-within-a-project"}]},{"group":"Users","pages":[{"title":"List users for a customer","deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml get /projects/{projectId}/customers/{customerId}/users","href":"/api-reference/admin/users/list-users-for-a-customer"},{"title":"Create a new user and add it to the customer","deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml post /projects/{projectId}/customers/{customerId}/users","href":"/api-reference/admin/users/create-a-new-user-and-add-it-to-the-customer"},{"title":"Get a user by ID","deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml get /projects/{projectId}/customers/{customerId}/users/{userId}","href":"/api-reference/admin/users/get-a-user-by-id"},{"title":"Update a user","deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml patch /projects/{projectId}/customers/{customerId}/users/{userId}","href":"/api-reference/admin/users/update-a-user"},{"title":"Get usage consumption for a user within a time window","deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml get /projects/{projectId}/customers/{customerId}/users/{userId}/consumption","href":"/api-reference/admin/users/get-usage-consumption-for-a-user-within-a-time-window"},{"title":"Delete a user","description":null,"deprecated":null,"version":null,"openapi":"/api-reference/admin/admin-openapi.yml delete /projects/{projectId}/customers/{customerId}/users/{userId}/consumption","href":"/api-reference/admin/users/delete-a-user"}]}]},{"group":"Errors","icon":"triangle-alert","pages":[{"title":"Errors","href":"/api-reference/errors"}]},{"group":"Agentic APIs v1 (deprecated)","icon":"layers","pages":[{"group":"Agents","pages":[{"title":"List Agents","description":"This endpoint retrieves a list of all agents that can be called by the Corti Agent Framework.\n","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi.yml get /agents","href":"/agentic/agents/list-agents"},{"title":"Create Agent","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi.yml post /agents","href":"/agentic/agents/create-agent"},{"title":"Get Agent by ID","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi.yml get /agents/{id}","href":"/agentic/agents/get-agent-by-id"},{"title":"Delete Agent by ID","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi.yml delete /agents/{id}","href":"/agentic/agents/delete-agent-by-id"},{"title":"Update Agent by ID","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi.yml patch /agents/{id}","href":"/agentic/agents/update-agent-by-id"},{"title":"Get Agent Card","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi.yml get /agents/{id}/agent-card.json","href":"/agentic/agents/get-agent-card"},{"title":"Send Message to Agent","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi.yml post /agents/{id}/v1/message:send","href":"/agentic/agents/send-message-to-agent"},{"title":"Get Task by ID","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi.yml get /agents/{id}/v1/tasks/{taskId}","href":"/agentic/agents/get-task-by-id"},{"title":"Get Context by ID","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi.yml get /agents/{id}/v1/contexts/{contextId}","href":"/agentic/agents/get-context-by-id"},{"title":"Delete Context by ID","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi.yml delete /agents/{id}/v1/contexts/{contextId}","href":"/agentic/agents/delete-context-by-id"},{"title":"List Registry Experts","deprecated":null,"version":null,"openapi":"/agentic/auto-generated-openapi.yml get /agents/registry/experts","href":"/agentic/agents/list-registry-experts"}]}]}]}]},"basePath":"","title":"Errors - Corti API Documentation","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["10e4515597"],"chunks":["BannerMarkdown-6DXXLlfN.js","dist-CmKHfscc.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-C3kuh_dz.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}