{
"message": "Client account is suspended. If you believe this is a mistake, contact us."
}
{
"message": "The selected model does not support Text To Image.",
"errors": {
"model": [
"This model is not available on your plan. Please upgrade to access it."
]
}
}
{
"message": "Too Many Attempts."
}
Audio
Audio/Video Transcription
Unified transcription — auto-detects URL or file upload for audio and video sources (YouTube, X, Twitch, Kick, TikTok, X/Twitter Spaces).
{
"message": "Client account is suspended. If you believe this is a mistake, contact us."
}
{
"message": "The selected model does not support Text To Image.",
"errors": {
"model": [
"This model is not available on your plan. Please upgrade to access it."
]
}
}
{
"message": "Too Many Attempts."
}
Unified transcription endpoint that replaces the five v1 endpoints (vid2txt, aud2txt, videofile2txt, audiofile2txt, transcribe). Accepts URLs or multipart file uploads. Returns a request_id for status polling.
Source detection is automatic: pass a public URL in source_url (audio and video both use this one field), or upload a file via multipart source_file. There are no video_url / audio_url fields.
Prerequisite: Consult the Model Selection endpoint to identify a valid model slug and check supported languages.
OpenAI SDK users: This endpoint is also available via the OpenAI-compatible surface as POST /v1/audio/transcriptions at https://oai.deapi.ai/v1. Maximum file size per upload is 20 MB for audio and 50 MB for video, subject to a global 75 MB request body cap. See OpenAI Compatibility and Limits & Quotas.
WhisperLargeV3 supports segment timestamps only and does not support diarization. WhisperLargeV3Ct2 adds word-level timestamps, per-segment confidence scores and speaker labels — and is the only model that accepts TikTok sources.
TikTok requires WhisperLargeV3Ct2. A TikTok source_url submitted with any other model — WhisperLargeV3 included — is rejected with 422 before the job is queued, and nothing is charged. Every other source (YouTube, X, Twitch, Kick, X/Twitter Spaces and uploaded files) runs on both models. The same pairing applies to quotes: platform: "tiktok" on /price is only valid with WhisperLargeV3Ct2.
Segment timestamps are free.include_ts: true with the default ts_level: "segment" costs exactly the same as a plain transcription — on every model, WhisperLargeV3Ct2 included. Only finer granularity is billed: on WhisperLargeV3Ct2, ts_level: "word" — and diarize, which carries the surcharge at any granularity, segment included — multiplies the duration-based price by 1.5. See Pricing.
Granularity is validated against the model. The levels a model accepts are published as info.limits.timestamp_levels by GET /api/v2/models. WhisperLargeV3 publishes ["segment"] and supports_diarization: false, so ts_level: "word" is rejected with 422 and an errors.ts_level entry, and diarize: true is rejected with 422 and an errors.diarize entry. WhisperLargeV3Ct2 publishes ["segment", "word"]. Read the model’s advertised levels before sending anything other than segment. See Errors.
A source with no speech returns an empty result, not an error. If the video or audio carries no recognisable words — silence, music only, ambient noise — the job still completes with status: "done" and the transcript comes back empty: no segments, no words, no speakers. Treat an empty transcript as a valid outcome and branch on it explicitly, rather than assuming the job failed. A job that genuinely failed reports status: "error" with an error_reason instead.
Set include_metadata: true to have the job-status response carry a metadata object describing the source — title, channel, uploader, upload date and engagement counts.
Metadata is a paid add-on: 0.005 USD per request. It is charged only on sources that can actually return it, so an uploaded file — which has no source to describe — returns null and is never charged. See Pricing.
Only URL sources have metadata, and how much you get depends on the platform. The field names are the same either way, and anything a platform does not expose comes back as null rather than being omitted.
Sanctum personal access token, sent as Authorization: Bearer <token>. The token is opaque — it carries no claims and no embedded expiry, so do not attempt to decode it. Issue and revoke tokens from your account dashboard.
Transcription parameters. Provide exactly one of source_url or source_file.
From a source URL
From an uploaded file
A source is MANDATORY and comes in exactly one of two shapes — source_url for a hosted video/audio, or source_file for an upload. Sending neither is a 422, and sending both is a 422 as well; the oneOf below is that choice, not a pair of optional fields. Everything else applies to both. The /price twin of this endpoint accepts a third shape, duration_seconds, which this one does not.
Timestamp granularity. Only applies when include_ts is true, otherwise ignored. Granularity affects the price on models that price timestamps separately: segment is included in the base price, while word and char carry a surcharge. The levels a model offers are published as info.limits.timestamp_levels by GET /api/v2/models; requesting an unsupported level is rejected.
Label each timed unit with a detected speaker. Requires a model whose info.features.supports_diarization is true, and implies include_ts. Carries the timestamp surcharge at ANY granularity, including segment.
Language hint for the transcription, e.g. en or pl. Region subtags are stripped (en-us becomes en), and auto means auto-detect. Omit to auto-detect. When a model publishes info.limits.languages via GET /api/v2/models, requesting a language outside that list is rejected; a model publishing no such list accepts any value.
If true, the job-status response carries a metadata object describing the source — title, channel, uploader, upload date and engagement counts such as views, likes and comments. Only URL sources have any; an uploaded file returns null. YouTube resolves through the official Data API and returns a smaller block — id, title, channel, description, duration_seconds, extractor, view_count, like_count — because that API has no equivalent for the rest; the field names match the other platforms. Fields absent on a platform are null rather than omitted. On models that price metadata this carries a flat surcharge, charged only on sources that can return it — an upload, which has no source to describe, is never charged for the flag.
Optional HTTPS URL to receive webhook notifications for job status changes (processing, completed, failed). Must be HTTPS. Max 2048 characters. A per-request URL is self-contained: it is delivered even when the account has no webhook configuration, or the account webhook is disabled. See the webhooks block at the top level of this document for the event payloads and the headers each delivery carries.
Optional per-request HMAC secret (min. 32 chars) used to sign the webhook callback. Overrides the account-default secret for this job only. If omitted, the account-default secret signs the callback; if no secret exists at all, the callback is still delivered but UNSIGNED (empty X-DeAPI-Signature header). Requires webhook_url to also be set.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"deAPI","colors":{"primary":"#FD9A00","light":"#FFAD33","dark":"#E58A00"},"logo":{"light":"https://mintcdn.com/deapi-f9ba3abb/gSOvhf4F2Dm8oAad/logo/deapi-light.svg?fit=max\u0026auto=format\u0026n=gSOvhf4F2Dm8oAad\u0026q=85\u0026s=e44c94d9c161aa9264f717cd49f375e5","dark":"https://mintcdn.com/deapi-f9ba3abb/gSOvhf4F2Dm8oAad/logo/deapi-dark.svg?fit=max\u0026auto=format\u0026n=gSOvhf4F2Dm8oAad\u0026q=85\u0026s=4f204c43a4a41d8f476b76d91ac5ee7c"},"favicon":"https://mintcdn.com/deapi-f9ba3abb/-BqpLinCKwOHWbhI/favicon.png?fit=max\u0026auto=format\u0026n=-BqpLinCKwOHWbhI\u0026q=85\u0026s=295488219f7cfd2b9a7007447e093121","api":{"openapi":["openapi.json","openapi-v2.json"]},"navbar":{"links":[{"href":"https://app.deapi.ai/dashboard","label":"Dashboard"},{"href":"https://status.deapi.ai/","label":"Status"},{"href":"https://github.com/deapi-ai","label":"GitHub"}],"primary":{"type":"button","label":"Get API Key","href":"https://app.deapi.ai/dashboard"}},"footer":{"socials":{"github":"https://github.com/deapi-ai","twitter":"https://x.com/deAPI_","discord":"https://discord.com/invite/UFfK5YRBsr","x":"https://x.com/deAPI_"}},"search":{"prompt":"Search deAPI docs..."},"seo":{"indexing":"all"},"contextual":{"options":["copy","view","chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"deapi-f9ba3abb","hasAudioNarration":false,"actualSubdomain":"deapi-f9ba3abb","customDomains":["docs.deapi.ai"],"gitSource":{"type":"github","owner":"deapi-ai","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad9fda4f7b413b0bdc2fd82","collectionId":"a0ac662e-4b69-4e6b-9f36-6f740d5d6d6e","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad9fda4f7b413b0bdc2fd82"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6ad9fda4f7b413b0bdc2fd82","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"API v2 (Latest)","count":49},{"language":"default","tag":"API v1 (Deprecated)","count":42},{"language":"default","tag":"Guides","count":18},{"language":"default","tag":"Generation","count":14},{"language":"default","tag":"Analysis","count":12},{"language":"default","tag":"Videos","count":12},{"language":"default","tag":"Transformation","count":10},{"language":"default","tag":"Images","count":10},{"language":"default","tag":"Get started","count":8},{"language":"default","tag":"API Keys","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api/v2/audio/transcriptions","slug":"/api/v2/audio/transcriptions","pageMetadata":{"title":"Audio/Video Transcription","openapi":"openapi-v2.json POST /api/v2/audio/transcriptions","description":"Unified transcription — auto-detects URL or file upload for audio and video sources (YouTube, X, Twitch, Kick, TikTok, X/Twitter Spaces).","href":"/api/v2/audio/transcriptions"},"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: \"Unified transcription — auto-detects URL or file upload for audio and video sources (YouTube, X, Twitch, Kick, TikTok, X/Twitter Spaces).\"\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`,code:`code`,em:`em`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,Info,Note,Table,Tip,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Unified transcription endpoint that replaces the five v1 endpoints (`,_jsx(_components.code,{children:`vid2txt`}),`, `,_jsx(_components.code,{children:`aud2txt`}),`, `,_jsx(_components.code,{children:`videofile2txt`}),`, `,_jsx(_components.code,{children:`audiofile2txt`}),`, `,_jsx(_components.code,{children:`transcribe`}),`). Accepts URLs or multipart file uploads. Returns a `,_jsx(_components.code,{children:`request_id`}),` for status polling.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Source detection is automatic: pass a public URL in `,_jsx(_components.code,{children:`source_url`}),` (audio and video both use this one field), or upload a file via multipart `,_jsx(_components.code,{children:`source_file`}),`. There are no `,_jsx(_components.code,{children:`video_url`}),` / `,_jsx(_components.code,{children:`audio_url`}),` fields.`]})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Prerequisite:`}),` Consult the `,_jsx(_components.a,{href:`/api/v2/utilities/models`,children:`Model Selection`}),` endpoint to identify a valid model `,_jsx(_components.code,{children:`slug`}),` and check supported languages.`]})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`OpenAI SDK users:`}),` This endpoint is also available via the OpenAI-compatible surface as `,_jsx(_components.code,{children:`POST /v1/audio/transcriptions`}),` at `,_jsx(_components.code,{children:`https://oai.deapi.ai/v1`}),`. Maximum file size per upload is `,_jsx(_components.strong,{children:`20 MB for audio`}),` and `,_jsx(_components.strong,{children:`50 MB for video`}),`, subject to a global `,_jsx(_components.strong,{children:`75 MB`}),` request body cap. See `,_jsx(_components.a,{href:`/openai-compatibility`,children:`OpenAI Compatibility`}),` and `,_jsx(_components.a,{href:`/limits-and-quotas#file-uploads`,children:`Limits \u0026 Quotas`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`WhisperLargeV3`}),` supports `,_jsx(_components.code,{children:`segment`}),` timestamps only and does not support diarization. `,_jsx(_components.code,{children:`WhisperLargeV3Ct2`}),` adds `,_jsx(_components.code,{children:`word`}),`-level timestamps, per-segment confidence scores and speaker labels — and is the only model that accepts TikTok sources.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`TikTok requires `,_jsx(_components.code,{children:`WhisperLargeV3Ct2`}),`.`]}),` A TikTok `,_jsx(_components.code,{children:`source_url`}),` submitted with any other model — `,_jsx(_components.code,{children:`WhisperLargeV3`}),` included — is rejected with `,_jsx(_components.code,{children:`422`}),` before the job is queued, and nothing is charged. Every other source (YouTube, X, Twitch, Kick, X/Twitter Spaces and uploaded files) runs on both models. The same pairing applies to quotes: `,_jsx(_components.code,{children:`platform: \"tiktok\"`}),` on `,_jsx(_components.a,{href:`/api/v2/audio/transcriptions-price`,children:_jsx(_components.code,{children:`/price`})}),` is only valid with `,_jsx(_components.code,{children:`WhisperLargeV3Ct2`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Segment timestamps are free.`}),` `,_jsx(_components.code,{children:`include_ts: true`}),` with the default `,_jsx(_components.code,{children:`ts_level: \"segment\"`}),` costs exactly the same as a plain transcription — on every model, `,_jsx(_components.code,{children:`WhisperLargeV3Ct2`}),` included. Only finer granularity is billed: on `,_jsx(_components.code,{children:`WhisperLargeV3Ct2`}),`, `,_jsx(_components.code,{children:`ts_level: \"word\"`}),` — and `,_jsx(_components.code,{children:`diarize`}),`, which carries the surcharge at `,_jsx(_components.em,{children:`any`}),` granularity, `,_jsx(_components.code,{children:`segment`}),` included — multiplies the duration-based price by 1.5. See `,_jsx(_components.a,{href:`/pricing`,children:`Pricing`}),`.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Granularity is validated against the model.`}),` The levels a model accepts are published as `,_jsx(_components.code,{children:`info.limits.timestamp_levels`}),` by `,_jsx(_components.a,{href:`/api/v2/utilities/models`,children:`GET /api/v2/models`}),`. `,_jsx(_components.code,{children:`WhisperLargeV3`}),` publishes `,_jsx(_components.code,{children:`[\"segment\"]`}),` and `,_jsx(_components.code,{children:`supports_diarization: false`}),`, so `,_jsx(_components.code,{children:`ts_level: \"word\"`}),` is rejected with `,_jsx(_components.code,{children:`422`}),` and an `,_jsx(_components.code,{children:`errors.ts_level`}),` entry, and `,_jsx(_components.code,{children:`diarize: true`}),` is rejected with `,_jsx(_components.code,{children:`422`}),` and an `,_jsx(_components.code,{children:`errors.diarize`}),` entry. `,_jsx(_components.code,{children:`WhisperLargeV3Ct2`}),` publishes `,_jsx(_components.code,{children:`[\"segment\", \"word\"]`}),`. Read the model’s advertised levels before sending anything other than `,_jsx(_components.code,{children:`segment`}),`. See `,_jsx(_components.a,{href:`/api/v2/errors`,children:`Errors`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A source with no speech returns an empty result, not an error.`}),` If the video or audio carries no recognisable words — silence, music only, ambient noise — the job still completes with `,_jsx(_components.code,{children:`status: \"done\"`}),` and the transcript comes back empty: no segments, no words, no speakers. Treat an empty transcript as a valid outcome and branch on it explicitly, rather than assuming the job failed. A job that genuinely failed reports `,_jsx(_components.code,{children:`status: \"error\"`}),` with an `,_jsx(_components.code,{children:`error_reason`}),` instead.`]}),`\n`,_jsx(Heading,{level:`2`,id:`source-metadata`,children:`Source metadata`}),`\n`,_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`include_metadata: true`}),` to have the job-status response carry a `,_jsx(_components.code,{children:`metadata`}),` object describing the source — title, channel, uploader, upload date and engagement counts.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Metadata is a `,_jsx(_components.strong,{children:`paid add-on: 0.005 USD per request`}),`. It is charged only on sources that can actually return it, so an uploaded file — which has no source to describe — returns `,_jsx(_components.code,{children:`null`}),` and is never charged. See `,_jsx(_components.a,{href:`/pricing`,children:`Pricing`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[`Only URL sources have metadata, and how much you get depends on the platform. The field names are the same either way, and anything a platform does not expose comes back as `,_jsx(_components.code,{children:`null`}),` rather than being omitted.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Metadata`}),_jsx(_components.th,{style:{textAlign:`center`},children:`TikTok`}),_jsx(_components.th,{style:{textAlign:`center`},children:`YouTube`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`id`}),`, `,_jsx(_components.code,{children:`title`}),`, `,_jsx(_components.code,{children:`description`}),`, `,_jsx(_components.code,{children:`channel`})]}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`duration_seconds`}),`, `,_jsx(_components.code,{children:`extractor`})]}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`view_count`}),`, `,_jsx(_components.code,{children:`like_count`})]}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`comment_count`})}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`repost_count`}),`, `,_jsx(_components.code,{children:`save_count`})]}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`uploader`}),`, `,_jsx(_components.code,{children:`uploader_url`})]}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`channel_id`}),`, `,_jsx(_components.code,{children:`channel_url`})]}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`webpage_url`})}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`timestamp`}),`, `,_jsx(_components.code,{children:`upload_date`})]}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`thumbnails[]`})}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`fulltitle`}),`, `,_jsx(_components.code,{children:`has_audio`}),`, `,_jsx(_components.code,{children:`is_live`})]}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`tags`}),`, `,_jsx(_components.code,{children:`categories`}),`, `,_jsx(_components.code,{children:`chapters`}),`, `,_jsx(_components.code,{children:`heatmap`}),`, `,_jsx(_components.code,{children:`availability`}),`, `,_jsx(_components.code,{children:`channel_follower_count`})]}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅*`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`* Present in the response schema, but may come back `,_jsx(_components.code,{children:`null`}),` depending on the individual TikTok video.`]})]})}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":"Audio/Video Transcription","openapi":"openapi-v2.json POST /api/v2/audio/transcriptions","description":"Unified transcription — auto-detects URL or file upload for audio and video sources (YouTube, X, Twitch, Kick, TikTok, X/Twitter Spaces).","href":"/api/v2/audio/transcriptions"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Source metadata","slug":"source-metadata","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Client API v2"],"summary":"Transcribe audio or video to text","description":"Unified transcription — auto-detects URL or file upload for audio and video sources (YouTube, X, Twitch, Kick, TikTok, X/Twitter Spaces).","operationId":"createTranscription","parameters":["677e0fc7-b132-4ae0-9342-d2daede773e1"],"requestBody":"af03e39c-99ca-44e9-9ff8-608db8c7eaab","responses":{"200":"a91080d9-b413-4685-9444-7ad80a0e41bf","401":"d32b7e3f-ff99-40eb-9b05-ead4ceec67fa","403":"6a33be9a-1148-4cf2-87df-c445f3e0f9bf","422":"69db52f0-0110-4ccc-ab9f-160f9c01bad2","429":"d9038462-24c2-448d-a917-95208e1d4e8f"},"security":["fb193f12-e4d1-4608-820c-a8d10f5de8c4"],"method":"post","type":"path","servers":["e0e49a8e-d368-42c9-8377-07c35e662b8c"],"path":"/api/v2/audio/transcriptions","baseUrlOptions":["https://api.deapi.ai"],"title":"Transcribe audio or video to text","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"677e0fc7-b132-4ae0-9342-d2daede773e1":{"name":"Accept","in":"header","required":true,"schema":{"type":"string","default":"application/json","enum":["application/json"],"isRequired":true,"uniqueKey":"","typeLabel":"enum\u003cstring>"}}},"requestBody":{"description":"Transcription parameters. Provide exactly one of source_url or source_file.","required":true,"content":{"multipart/form-data":{"schema":{"oneOf":[{"type":"object","title":"From a source URL","description":"A source is MANDATORY and comes in exactly one of two shapes — `source_url` for a hosted video/audio, or `source_file` for an upload. Sending neither is a 422, and sending both is a 422 as well; the `oneOf` below is that choice, not a pair of optional fields. Everything else applies to both. The `/price` twin of this endpoint accepts a third shape, `duration_seconds`, which this one does not.","required":["model","source_url"],"properties":{"source_url":{"description":"URL of video/audio to transcribe (YouTube, Twitter/X, Twitch, Kick, TikTok, Twitter Spaces). Mutually exclusive with source_file.","type":"string","example":"https://www.youtube.com/watch?v=jNQXAC9IVRw","isRequired":true,"uniqueKey":"oneOf.0.source_url","typeLabel":"string"},"model":{"description":"The model to use for transcription. Available models can be retrieved via the GET /api/v2/models endpoint.","type":"string","example":"WhisperLargeV3","isRequired":true,"uniqueKey":"oneOf.0.model","typeLabel":"string"},"source_file":{"description":"Audio or video file to transcribe. Supported audio: aac, mpeg, ogg, wav, webm, flac. Supported video: mp4, mpeg, quicktime, avi, wmv, ogg. Mutually exclusive with source_url.","type":"string","format":"binary","uniqueKey":"oneOf.0.source_file","typeLabel":"file"},"include_ts":{"oneOf":[{"description":"Should transcription include timestamps. Implied when `diarize` is true. Segment-level timestamps are included in the base price — see `ts_level`.","type":"boolean","example":false,"default":false,"uniqueKey":"oneOf.0.include_ts.oneOf.0","typeLabel":"boolean"},{"description":"Should transcription include timestamps. Implied when `diarize` is true. Segment-level timestamps are included in the base price — see `ts_level`.","type":"null","example":false,"default":false,"uniqueKey":"oneOf.0.include_ts.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.include_ts","typeLabel":"boolean | null"},"ts_level":{"oneOf":[{"description":"Timestamp granularity. Only applies when `include_ts` is true, otherwise ignored. Granularity affects the price on models that price timestamps separately: `segment` is included in the base price, while `word` and `char` carry a surcharge. The levels a model offers are published as `info.limits.timestamp_levels` by GET /api/v2/models; requesting an unsupported level is rejected.","type":"string","example":"word","default":"segment","enum":["segment","word","char",null],"uniqueKey":"oneOf.0.ts_level.oneOf.0","typeLabel":"enum\u003cstring>"},{"description":"Timestamp granularity. Only applies when `include_ts` is true, otherwise ignored. Granularity affects the price on models that price timestamps separately: `segment` is included in the base price, while `word` and `char` carry a surcharge. The levels a model offers are published as `info.limits.timestamp_levels` by GET /api/v2/models; requesting an unsupported level is rejected.","type":"null","example":"word","default":"segment","enum":["segment","word","char",null],"uniqueKey":"oneOf.0.ts_level.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.ts_level","typeLabel":"enum\u003cstring> | null"},"diarize":{"oneOf":[{"description":"Label each timed unit with a detected speaker. Requires a model whose `info.features.supports_diarization` is true, and implies `include_ts`. Carries the timestamp surcharge at ANY granularity, including `segment`.","type":"boolean","example":false,"default":false,"uniqueKey":"oneOf.0.diarize.oneOf.0","typeLabel":"boolean"},{"description":"Label each timed unit with a detected speaker. Requires a model whose `info.features.supports_diarization` is true, and implies `include_ts`. Carries the timestamp surcharge at ANY granularity, including `segment`.","type":"null","example":false,"default":false,"uniqueKey":"oneOf.0.diarize.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.diarize","typeLabel":"boolean | null"},"lang":{"oneOf":[{"description":"Language hint for the transcription, e.g. `en` or `pl`. Region subtags are stripped (`en-us` becomes `en`), and `auto` means auto-detect. Omit to auto-detect. When a model publishes `info.limits.languages` via GET /api/v2/models, requesting a language outside that list is rejected; a model publishing no such list accepts any value.","type":"string","example":"en","maxLength":16,"uniqueKey":"oneOf.0.lang.oneOf.0","typeLabel":"string"},{"description":"Language hint for the transcription, e.g. `en` or `pl`. Region subtags are stripped (`en-us` becomes `en`), and `auto` means auto-detect. Omit to auto-detect. When a model publishes `info.limits.languages` via GET /api/v2/models, requesting a language outside that list is rejected; a model publishing no such list accepts any value.","type":"null","example":"en","maxLength":16,"uniqueKey":"oneOf.0.lang.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.lang","typeLabel":"string | null"},"include_metadata":{"oneOf":[{"description":"If true, the job-status response carries a `metadata` object describing the source — title, channel, uploader, upload date and engagement counts such as views, likes and comments. Only URL sources have any; an uploaded file returns null. YouTube resolves through the official Data API and returns a smaller block — id, title, channel, description, duration_seconds, extractor, view_count, like_count — because that API has no equivalent for the rest; the field names match the other platforms. Fields absent on a platform are null rather than omitted. On models that price metadata this carries a flat surcharge, charged only on sources that can return it — an upload, which has no source to describe, is never charged for the flag.","type":"boolean","example":false,"default":false,"uniqueKey":"oneOf.0.include_metadata.oneOf.0","typeLabel":"boolean"},{"description":"If true, the job-status response carries a `metadata` object describing the source — title, channel, uploader, upload date and engagement counts such as views, likes and comments. Only URL sources have any; an uploaded file returns null. YouTube resolves through the official Data API and returns a smaller block — id, title, channel, description, duration_seconds, extractor, view_count, like_count — because that API has no equivalent for the rest; the field names match the other platforms. Fields absent on a platform are null rather than omitted. On models that price metadata this carries a flat surcharge, charged only on sources that can return it — an upload, which has no source to describe, is never charged for the flag.","type":"null","example":false,"default":false,"uniqueKey":"oneOf.0.include_metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.include_metadata","typeLabel":"boolean | null"},"return_result_in_response":{"oneOf":[{"description":"If true, the result will be returned directly in the response instead of only download url.","type":"boolean","example":false,"default":false,"uniqueKey":"oneOf.0.return_result_in_response.oneOf.0","typeLabel":"boolean"},{"description":"If true, the result will be returned directly in the response instead of only download url.","type":"null","example":false,"default":false,"uniqueKey":"oneOf.0.return_result_in_response.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.return_result_in_response","typeLabel":"boolean | null"},"webhook_url":{"oneOf":[{"description":"Optional HTTPS URL to receive webhook notifications for job status changes (processing, completed, failed). Must be HTTPS. Max 2048 characters. A per-request URL is self-contained: it is delivered even when the account has no webhook configuration, or the account webhook is disabled. See the `webhooks` block at the top level of this document for the event payloads and the headers each delivery carries.","type":"string","format":"uri","example":"https://your-server.com/webhooks/deapi","maxLength":2048,"uniqueKey":"oneOf.0.webhook_url.oneOf.0","typeLabel":"string\u003curi>"},{"description":"Optional HTTPS URL to receive webhook notifications for job status changes (processing, completed, failed). Must be HTTPS. Max 2048 characters. A per-request URL is self-contained: it is delivered even when the account has no webhook configuration, or the account webhook is disabled. See the `webhooks` block at the top level of this document for the event payloads and the headers each delivery carries.","type":"null","format":"uri","example":"https://your-server.com/webhooks/deapi","maxLength":2048,"uniqueKey":"oneOf.0.webhook_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.webhook_url","typeLabel":"string\u003curi> | null"},"webhook_secret":{"oneOf":[{"description":"Optional per-request HMAC secret (min. 32 chars) used to sign the webhook callback. Overrides the account-default secret for this job only. If omitted, the account-default secret signs the callback; if no secret exists at all, the callback is still delivered but UNSIGNED (empty X-DeAPI-Signature header). Requires `webhook_url` to also be set.","type":"string","example":"a1b2c3d4e5f60708091a2b3c4d5e6f7081920a1b2c3d4e5f60708091a2b3c4d5","maxLength":255,"minLength":32,"uniqueKey":"oneOf.0.webhook_secret.oneOf.0","typeLabel":"string"},{"description":"Optional per-request HMAC secret (min. 32 chars) used to sign the webhook callback. Overrides the account-default secret for this job only. If omitted, the account-default secret signs the callback; if no secret exists at all, the callback is still delivered but UNSIGNED (empty X-DeAPI-Signature header). Requires `webhook_url` to also be set.","type":"null","example":"a1b2c3d4e5f60708091a2b3c4d5e6f7081920a1b2c3d4e5f60708091a2b3c4d5","maxLength":255,"minLength":32,"uniqueKey":"oneOf.0.webhook_secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.webhook_secret","typeLabel":"string | null"}},"uniqueKey":"oneOf.0","typeLabel":"From a source URL · object"},{"type":"object","title":"From an uploaded file","description":"A source is MANDATORY and comes in exactly one of two shapes — `source_url` for a hosted video/audio, or `source_file` for an upload. Sending neither is a 422, and sending both is a 422 as well; the `oneOf` below is that choice, not a pair of optional fields. Everything else applies to both. The `/price` twin of this endpoint accepts a third shape, `duration_seconds`, which this one does not.","required":["model","source_file"],"properties":{"source_file":{"description":"Audio or video file to transcribe. Supported audio: aac, mpeg, ogg, wav, webm, flac. Supported video: mp4, mpeg, quicktime, avi, wmv, ogg. Mutually exclusive with source_url.","type":"string","format":"binary","isRequired":true,"uniqueKey":"oneOf.1.source_file","typeLabel":"file"},"model":{"description":"The model to use for transcription. Available models can be retrieved via the GET /api/v2/models endpoint.","type":"string","example":"WhisperLargeV3","isRequired":true,"uniqueKey":"oneOf.1.model","typeLabel":"string"},"source_url":{"description":"URL of video/audio to transcribe (YouTube, Twitter/X, Twitch, Kick, TikTok, Twitter Spaces). Mutually exclusive with source_file.","type":"string","example":"https://www.youtube.com/watch?v=jNQXAC9IVRw","uniqueKey":"oneOf.1.source_url","typeLabel":"string"},"include_ts":{"oneOf":[{"description":"Should transcription include timestamps. Implied when `diarize` is true. Segment-level timestamps are included in the base price — see `ts_level`.","type":"boolean","example":false,"default":false,"uniqueKey":"oneOf.1.include_ts.oneOf.0","typeLabel":"boolean"},{"description":"Should transcription include timestamps. Implied when `diarize` is true. Segment-level timestamps are included in the base price — see `ts_level`.","type":"null","example":false,"default":false,"uniqueKey":"oneOf.1.include_ts.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.include_ts","typeLabel":"boolean | null"},"ts_level":{"oneOf":[{"description":"Timestamp granularity. Only applies when `include_ts` is true, otherwise ignored. Granularity affects the price on models that price timestamps separately: `segment` is included in the base price, while `word` and `char` carry a surcharge. The levels a model offers are published as `info.limits.timestamp_levels` by GET /api/v2/models; requesting an unsupported level is rejected.","type":"string","example":"word","default":"segment","enum":["segment","word","char",null],"uniqueKey":"oneOf.1.ts_level.oneOf.0","typeLabel":"enum\u003cstring>"},{"description":"Timestamp granularity. Only applies when `include_ts` is true, otherwise ignored. Granularity affects the price on models that price timestamps separately: `segment` is included in the base price, while `word` and `char` carry a surcharge. The levels a model offers are published as `info.limits.timestamp_levels` by GET /api/v2/models; requesting an unsupported level is rejected.","type":"null","example":"word","default":"segment","enum":["segment","word","char",null],"uniqueKey":"oneOf.1.ts_level.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.ts_level","typeLabel":"enum\u003cstring> | null"},"diarize":{"oneOf":[{"description":"Label each timed unit with a detected speaker. Requires a model whose `info.features.supports_diarization` is true, and implies `include_ts`. Carries the timestamp surcharge at ANY granularity, including `segment`.","type":"boolean","example":false,"default":false,"uniqueKey":"oneOf.1.diarize.oneOf.0","typeLabel":"boolean"},{"description":"Label each timed unit with a detected speaker. Requires a model whose `info.features.supports_diarization` is true, and implies `include_ts`. Carries the timestamp surcharge at ANY granularity, including `segment`.","type":"null","example":false,"default":false,"uniqueKey":"oneOf.1.diarize.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.diarize","typeLabel":"boolean | null"},"lang":{"oneOf":[{"description":"Language hint for the transcription, e.g. `en` or `pl`. Region subtags are stripped (`en-us` becomes `en`), and `auto` means auto-detect. Omit to auto-detect. When a model publishes `info.limits.languages` via GET /api/v2/models, requesting a language outside that list is rejected; a model publishing no such list accepts any value.","type":"string","example":"en","maxLength":16,"uniqueKey":"oneOf.1.lang.oneOf.0","typeLabel":"string"},{"description":"Language hint for the transcription, e.g. `en` or `pl`. Region subtags are stripped (`en-us` becomes `en`), and `auto` means auto-detect. Omit to auto-detect. When a model publishes `info.limits.languages` via GET /api/v2/models, requesting a language outside that list is rejected; a model publishing no such list accepts any value.","type":"null","example":"en","maxLength":16,"uniqueKey":"oneOf.1.lang.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.lang","typeLabel":"string | null"},"include_metadata":{"oneOf":[{"description":"If true, the job-status response carries a `metadata` object describing the source — title, channel, uploader, upload date and engagement counts such as views, likes and comments. Only URL sources have any; an uploaded file returns null. YouTube resolves through the official Data API and returns a smaller block — id, title, channel, description, duration_seconds, extractor, view_count, like_count — because that API has no equivalent for the rest; the field names match the other platforms. Fields absent on a platform are null rather than omitted. On models that price metadata this carries a flat surcharge, charged only on sources that can return it — an upload, which has no source to describe, is never charged for the flag.","type":"boolean","example":false,"default":false,"uniqueKey":"oneOf.1.include_metadata.oneOf.0","typeLabel":"boolean"},{"description":"If true, the job-status response carries a `metadata` object describing the source — title, channel, uploader, upload date and engagement counts such as views, likes and comments. Only URL sources have any; an uploaded file returns null. YouTube resolves through the official Data API and returns a smaller block — id, title, channel, description, duration_seconds, extractor, view_count, like_count — because that API has no equivalent for the rest; the field names match the other platforms. Fields absent on a platform are null rather than omitted. On models that price metadata this carries a flat surcharge, charged only on sources that can return it — an upload, which has no source to describe, is never charged for the flag.","type":"null","example":false,"default":false,"uniqueKey":"oneOf.1.include_metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.include_metadata","typeLabel":"boolean | null"},"return_result_in_response":{"oneOf":[{"description":"If true, the result will be returned directly in the response instead of only download url.","type":"boolean","example":false,"default":false,"uniqueKey":"oneOf.1.return_result_in_response.oneOf.0","typeLabel":"boolean"},{"description":"If true, the result will be returned directly in the response instead of only download url.","type":"null","example":false,"default":false,"uniqueKey":"oneOf.1.return_result_in_response.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.return_result_in_response","typeLabel":"boolean | null"},"webhook_url":{"oneOf":[{"description":"Optional HTTPS URL to receive webhook notifications for job status changes (processing, completed, failed). Must be HTTPS. Max 2048 characters. A per-request URL is self-contained: it is delivered even when the account has no webhook configuration, or the account webhook is disabled. See the `webhooks` block at the top level of this document for the event payloads and the headers each delivery carries.","type":"string","format":"uri","example":"https://your-server.com/webhooks/deapi","maxLength":2048,"uniqueKey":"oneOf.1.webhook_url.oneOf.0","typeLabel":"string\u003curi>"},{"description":"Optional HTTPS URL to receive webhook notifications for job status changes (processing, completed, failed). Must be HTTPS. Max 2048 characters. A per-request URL is self-contained: it is delivered even when the account has no webhook configuration, or the account webhook is disabled. See the `webhooks` block at the top level of this document for the event payloads and the headers each delivery carries.","type":"null","format":"uri","example":"https://your-server.com/webhooks/deapi","maxLength":2048,"uniqueKey":"oneOf.1.webhook_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.webhook_url","typeLabel":"string\u003curi> | null"},"webhook_secret":{"oneOf":[{"description":"Optional per-request HMAC secret (min. 32 chars) used to sign the webhook callback. Overrides the account-default secret for this job only. If omitted, the account-default secret signs the callback; if no secret exists at all, the callback is still delivered but UNSIGNED (empty X-DeAPI-Signature header). Requires `webhook_url` to also be set.","type":"string","example":"a1b2c3d4e5f60708091a2b3c4d5e6f7081920a1b2c3d4e5f60708091a2b3c4d5","maxLength":255,"minLength":32,"uniqueKey":"oneOf.1.webhook_secret.oneOf.0","typeLabel":"string"},{"description":"Optional per-request HMAC secret (min. 32 chars) used to sign the webhook callback. Overrides the account-default secret for this job only. If omitted, the account-default secret signs the callback; if no secret exists at all, the callback is still delivered but UNSIGNED (empty X-DeAPI-Signature header). Requires `webhook_url` to also be set.","type":"null","example":"a1b2c3d4e5f60708091a2b3c4d5e6f7081920a1b2c3d4e5f60708091a2b3c4d5","maxLength":255,"minLength":32,"uniqueKey":"oneOf.1.webhook_secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.webhook_secret","typeLabel":"string | null"}},"uniqueKey":"oneOf.1","typeLabel":"From an uploaded file · object"}],"uniqueKey":"","typeLabel":"From a source URL · object | From an uploaded file · object"},"examples":{"Example":{"title":"Example","value":{"source_url":"https://www.youtube.com/watch?v=jNQXAC9IVRw","model":"WhisperLargeV3","source_file":"\u003cstring>","include_ts":false,"ts_level":"word","diarize":false,"lang":"en","include_metadata":false,"return_result_in_response":false,"webhook_url":"https://your-server.com/webhooks/deapi","webhook_secret":"a1b2c3d4e5f60708091a2b3c4d5e6f7081920a1b2c3d4e5f60708091a2b3c4d5"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"a91080d9-b413-4685-9444-7ad80a0e41bf":{"description":"ID of the inference request.","headers":{"X-RateLimit-Policy":{"description":"Every window that applies, as `\u003climit>;w=\u003cseconds>` elements. Always present on a throttled response, so a single element means there is no daily limit — do not infer that from the absence of the Daily-* headers. `300;w=60` is minute-only; `3;w=60, 100;w=86400` is both.","schema":{"type":"string","example":"3;w=60, 100;w=86400"}},"X-RateLimit-Source":{"description":"Where the limit came from, so you know what would change it:\n`tier` — your account tier's rate for this endpoint;\n`fallback` — no rate configured for this tier and endpoint, degraded default in force;\n`model` — a per-model override for the model in the request, unaffected by your tier\n(only when the request carried a recognised `model`, otherwise the tier pool applies);\n`static` — a flat limit outside the tier system, identical for every account.\n\nIf you ever see `fallback`, tell us: it means no rate is configured for that tier and endpoint.","schema":{"type":"string","example":"tier","enum":["tier","fallback","model","static"]}},"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute (RPM)","schema":{"type":"integer","example":3}},"X-RateLimit-Remaining":{"description":"Remaining requests in current minute window","schema":{"type":"integer","example":2}},"X-RateLimit-Reset":{"description":"Epoch second at which the minute (RPM) window refills. Fixed window — the value does not drift as you spend the quota. Describes the same window as X-RateLimit-Limit, including on a daily rejection.","schema":{"type":"integer","example":1755800460}},"X-RateLimit-Daily-Limit":{"description":"Maximum requests allowed per day (RPD)","schema":{"type":"integer","example":100}},"X-RateLimit-Daily-Remaining":{"description":"Remaining requests in current day window","schema":{"type":"integer","example":95}},"X-RateLimit-Daily-Reset":{"description":"Epoch second at which the daily (RPD) window refills — 86400 s after the first request that opened this bucket's window, not a calendar midnight. Present only when a daily limit applies.","schema":{"type":"integer","example":1755846000}}},"content":{"application/json":{"schema":{"required":["data"],"properties":{"data":{"description":"Information from success endpoint","required":["request_id"],"properties":{"request_id":{"description":"UUID identifying the created inference request. Pass it to `GET /api/v2/jobs/{job_request}` to poll status and collect the result.","type":"string","format":"uuid","example":"c08a339c-73e5-4d67-a4d5-231302fbff9a","isRequired":true,"uniqueKey":"data.request_id","typeLabel":"string\u003cuuid>"}},"type":"object","isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{"request_id":"c08a339c-73e5-4d67-a4d5-231302fbff9a"}}}},"exampleType":"generated"}},"exampleType":"generated"},"d32b7e3f-ff99-40eb-9b05-ead4ceec67fa":{"description":"Unauthorized user.","content":{"application/json":{"schema":{"properties":{"data":{"description":"Information from success endpoint","type":"object","uniqueKey":"data","typeLabel":"object"},"message":{"description":"Error general message","type":"string","uniqueKey":"message","typeLabel":"string"},"errors":{"description":"Information about errors","type":"array","items":{"oneOf":[{}],"uniqueKey":"errors.items.[INDEX]","typeLabel":"any"},"uniqueKey":"errors","typeLabel":"any[]"},"statusCode":{"description":"Status code","type":"integer","uniqueKey":"statusCode","typeLabel":"integer"},"code":{"description":"A stable, machine-readable reason, on the responses that publish one. Refused credentials (401): `missing_key` — no Bearer credentials arrived at all; `invalid_key` — a key was presented but is unknown, carries the wrong secret, or is malformed; `key_expired` — past its expiry date; `key_revoked` — deactivated. Refused requests: `insufficient_permissions` (403), `ip_not_allowed` (403), `active_key_limit_reached` (422), `insufficient_balance` (422), `key_limit_exceeded` (402), `rate_limited` (429). Absent wherever a response publishes no code, so treat an unknown value as the status code alone — the list grows.","type":"string","enum":["missing_key","invalid_key","key_expired","key_revoked","insufficient_permissions","ip_not_allowed","active_key_limit_reached","insufficient_balance","key_limit_exceeded","rate_limited"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{},"message":"\u003cstring>","errors":["\u003cunknown>"],"statusCode":123,"code":"missing_key"}}},"exampleType":"generated"}},"exampleType":"generated"},"6a33be9a-1148-4cf2-87df-c445f3e0f9bf":{"description":"The account is suspended. Applies to every endpoint that spends credits — generation, transcription and prompt enhancement — and is returned before any validation runs, so a suspended account sees this rather than a 422 about the body. Price-estimate endpoints are not gated and keep working.","content":{"application/json":{"schema":{"properties":{"message":{"description":"Human-readable explanation. No `errors` object accompanies this response.","type":"string","example":"Client account is suspended. If you believe this is a mistake, contact us.","uniqueKey":"message","typeLabel":"string"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Client account is suspended. If you believe this is a mistake, contact us."}}},"exampleType":"generated"}},"exampleType":"generated"},"69db52f0-0110-4ccc-ab9f-160f9c01bad2":{"description":"Validation failed. Common errors include: model does not exist, model does not support the inference type for this endpoint, the model is not available on your plan (it requires a higher tier than your account has — upgrade to use it), or invalid request parameters.","content":{"application/json":{"schema":{"properties":{"message":{"description":"General error message","type":"string","example":"The selected model does not support Text To Image.","uniqueKey":"message","typeLabel":"string"},"errors":{"description":"Detailed validation errors by field. A model your plan does not cover is reported on the \"model\" field with the message \"This model is not available on your plan. Please upgrade to access it.\" Such a model is also omitted from GET /models.","type":"object","example":{"model":["This model is not available on your plan. Please upgrade to access it."]},"uniqueKey":"errors","typeLabel":"object"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"The selected model does not support Text To Image.","errors":{"model":["This model is not available on your plan. Please upgrade to access it."]}}}},"exampleType":"generated"}},"exampleType":"generated"},"d9038462-24c2-448d-a917-95208e1d4e8f":{"description":"Rate limit exceeded. Check X-RateLimit-Type header to determine if minute (RPM) or daily (RPD) limit was hit.","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute (RPM)","schema":{"type":"integer","example":3}},"X-RateLimit-Remaining":{"description":"Remaining requests in current minute window","schema":{"type":"integer","example":2}},"X-RateLimit-Daily-Limit":{"description":"Maximum requests allowed per day (RPD)","schema":{"type":"integer","example":100}},"X-RateLimit-Daily-Remaining":{"description":"Remaining requests in current day window","schema":{"type":"integer","example":95}},"X-RateLimit-Type":{"description":"Which limit rejected the request. Sent only on 429. Read it before anything else on the response: it decides what the other `X-RateLimit-*` headers are counting.\n\n`minute` — the per-request RPM window. `daily` — the per-request RPD window; the Daily-* pair is the one at 0.\n\n`key-creation` — the hourly cap on keys created over the API (`POST /api/v2/keys`), per account and shared by its ADMIN keys. The whole `X-RateLimit-*` set describes that bucket and there are no Daily-* headers.\n\n`ip-not-allowed` — too many calls from an address your key's IP whitelist refuses. Counted against that address, never against your account.","schema":{"type":"string","example":"minute","enum":["minute","daily","key-creation","ip-not-allowed"]}},"Retry-After":{"description":"Seconds until the window that rejected you frees up (60 for minute, up to 86400 for daily). Counted from when that window opened, not to a calendar boundary. Sent only on 429.","schema":{"type":"integer","example":60}},"X-RateLimit-Reset":{"description":"Epoch second at which the minute (RPM) window refills. Fixed window — the value does not drift as you spend the quota. Describes the same window as X-RateLimit-Limit, including on a daily rejection.","schema":{"type":"integer","example":1755800460}},"X-RateLimit-Daily-Reset":{"description":"Epoch second at which the daily (RPD) window refills — 86400 s after the first request that opened this bucket's window, not a calendar midnight. Present only when a daily limit applies.","schema":{"type":"integer","example":1755846000}},"X-RateLimit-Source":{"description":"Where the limit came from, so you know what would change it:\n`tier` — your account tier's rate for this endpoint;\n`fallback` — no rate configured for this tier and endpoint, degraded default in force;\n`model` — a per-model override for the model in the request, unaffected by your tier\n(only when the request carried a recognised `model`, otherwise the tier pool applies);\n`static` — a flat limit outside the tier system, identical for every account.\n\nIf you ever see `fallback`, tell us: it means no rate is configured for that tier and endpoint.","schema":{"type":"string","example":"tier","enum":["tier","fallback","model","static"]}},"X-RateLimit-Policy":{"description":"Every window that applies, as `\u003climit>;w=\u003cseconds>` elements. Always present on a throttled response, so a single element means there is no daily limit — do not infer that from the absence of the Daily-* headers. `300;w=60` is minute-only; `3;w=60, 100;w=86400` is both.","schema":{"type":"string","example":"3;w=60, 100;w=86400"}}},"content":{"application/json":{"schema":{"description":"Rate limit exceeded response","properties":{"message":{"description":"Error message","type":"string","example":"Too Many Attempts.","uniqueKey":"message","typeLabel":"string"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Too Many Attempts."}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"fb193f12-e4d1-4608-820c-a8d10f5de8c4":{"bearerAuth":{"type":"http","description":"Sanctum personal access token, sent as `Authorization: Bearer \u003ctoken>`. The token is opaque — it carries no claims and no embedded expiry, so do not attempt to decode it. Issue and revoke tokens from your account dashboard.","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"e0e49a8e-d368-42c9-8377-07c35e662b8c":{"url":"https://api.deapi.ai","description":"Production API Server base URL"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","description":"Sanctum personal access token, sent as `Authorization: Bearer \u003ctoken>`. The token is opaque — it carries no claims and no embedded expiry, so do not attempt to decode it. Issue and revoke tokens from your account dashboard.","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Sanctum personal access token, sent as `Authorization: Bearer \u003ctoken>`. The token is opaque — it carries no claims and no embedded expiry, so do not attempt to decode it. Issue and revoke tokens from your account dashboard.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi-v2.json"},"subdomain":"deapi-f9ba3abb","siteName":"deAPI","title":"Audio/Video Transcription - deAPI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-12T09:05:32.615Z","originalFileLocation":"api/v2/audio/transcriptions.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=\"Unified transcription — auto-detects URL or file upload for audio and video sources (YouTube, X, Twitch, Kick, TikTok, X/Twitter Spaces).\">\u003cmeta data-mint-head name=\"application-name\" content=\"deAPI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Audio/Video Transcription - deAPI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Unified transcription — auto-detects URL or file upload for audio and video sources (YouTube, X, Twitch, Kick, TikTok, X/Twitter Spaces).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"deAPI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.deapi.ai/api/v2/audio/transcriptions\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://deapi-f9ba3abb.mintlify.app/_mintlify/api/og/v2?division=Audio\u0026amp;title=Audio%2FVideo+Transcription\u0026amp;description=Unified+transcription+%E2%80%94+auto-detects+URL+or+file+upload+for+audio+and+video+sources+%28YouTube%2C+X%2C+Twitch%2C+Kick%2C+TikTok%2C+X%2FTwitter+Spaces%29.\u0026amp;theme=4c928ee8ac6977ca60ea2061\u0026amp;signature=d18366c0237335da0736c53a1f593d89afd535f3aaee68e07308b9dc55ab03bb\">\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=\"Audio/Video Transcription - deAPI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Unified transcription — auto-detects URL or file upload for audio and video sources (YouTube, X, Twitch, Kick, TikTok, X/Twitter Spaces).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://deapi-f9ba3abb.mintlify.app/_mintlify/api/og/v2?division=Audio\u0026amp;title=Audio%2FVideo+Transcription\u0026amp;description=Unified+transcription+%E2%80%94+auto-detects+URL+or+file+upload+for+audio+and+video+sources+%28YouTube%2C+X%2C+Twitch%2C+Kick%2C+TikTok%2C+X%2FTwitter+Spaces%29.\u0026amp;theme=4c928ee8ac6977ca60ea2061\u0026amp;signature=d18366c0237335da0736c53a1f593d89afd535f3aaee68e07308b9dc55ab03bb\">\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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"deAPI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FD9A00\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.deapi.ai/api/v2/audio/transcriptions\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api/v2/audio/transcriptions.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.deapi.ai/#organization\",\"name\":\"deAPI\",\"url\":\"https://docs.deapi.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/deapi-f9ba3abb/gSOvhf4F2Dm8oAad/logo/deapi-light.svg?fit=max\u0026auto=format\u0026n=gSOvhf4F2Dm8oAad\u0026q=85\u0026s=e44c94d9c161aa9264f717cd49f375e5\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.deapi.ai#website\",\"name\":\"deAPI\",\"url\":\"https://docs.deapi.ai\",\"publisher\":{\"@id\":\"https://docs.deapi.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.deapi.ai/api/v2/audio/transcriptions#webpage\",\"url\":\"https://docs.deapi.ai/api/v2/audio/transcriptions\",\"name\":\"Audio/Video Transcription\",\"description\":\"Unified transcription — auto-detects URL or file upload for audio and video sources (YouTube, X, Twitch, Kick, TikTok, X/Twitter Spaces).\",\"dateModified\":\"2026-08-12T09:05:32.615Z\",\"isPartOf\":{\"@id\":\"https://docs.deapi.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.deapi.ai/api/v2/audio/transcriptions#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.deapi.ai/api/v2/audio/transcriptions#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Audio\",\"item\":\"https://docs.deapi.ai/api/v2/audio/speech\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Audio/Video Transcription\",\"item\":\"https://docs.deapi.ai/api/v2/audio/transcriptions\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.deapi.ai/api/v2/audio/transcriptions#apireference\",\"headline\":\"Audio/Video Transcription\",\"name\":\"Audio/Video Transcription\",\"description\":\"Unified transcription — auto-detects URL or file upload for audio and video sources (YouTube, X, Twitch, Kick, TikTok, X/Twitter Spaces).\",\"url\":\"https://docs.deapi.ai/api/v2/audio/transcriptions\",\"mainEntityOfPage\":{\"@id\":\"https://docs.deapi.ai/api/v2/audio/transcriptions#webpage\"},\"dateModified\":\"2026-08-12T09:05:32.615Z\",\"publisher\":{\"@id\":\"https://docs.deapi.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.deapi.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"deAPI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"deAPI","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/introduction"}]},{"tab":"API v2 (Latest)","groups":[{"group":"Overview","pages":[{"title":"API Overview","href":"/api/v2/overview"},{"title":"Errors","href":"/api/v2/errors"}]},{"group":"Images","pages":[{"title":"Image Generation","openapi":"openapi-v2.json POST /api/v2/images/generations","href":"/api/v2/images/generations"},{"title":"Image Generation Price Calculation","openapi":"openapi-v2.json POST /api/v2/images/generations/price","href":"/api/v2/images/generations-price"},{"title":"Image Edit","openapi":"openapi-v2.json POST /api/v2/images/edits","href":"/api/v2/images/edits"},{"title":"Image Edit Price Calculation","openapi":"openapi-v2.json POST /api/v2/images/edits/price","href":"/api/v2/images/edits-price"},{"title":"Image OCR","openapi":"openapi-v2.json POST /api/v2/images/ocr","href":"/api/v2/images/ocr"},{"title":"Image OCR Price Calculation","openapi":"openapi-v2.json POST /api/v2/images/ocr/price","href":"/api/v2/images/ocr-price"},{"title":"Image Background Removal","openapi":"openapi-v2.json POST /api/v2/images/background-removals","href":"/api/v2/images/background-removals"},{"title":"Image Background Removal Price Calculation","openapi":"openapi-v2.json POST /api/v2/images/background-removals/price","href":"/api/v2/images/background-removals-price"},{"title":"Image Upscale","openapi":"openapi-v2.json POST /api/v2/images/upscales","href":"/api/v2/images/upscales"},{"title":"Image Upscale Price Calculation","openapi":"openapi-v2.json POST /api/v2/images/upscales/price","href":"/api/v2/images/upscales-price"}]},{"group":"Videos","pages":[{"title":"Video Generation","openapi":"openapi-v2.json POST /api/v2/videos/generations","href":"/api/v2/videos/generations"},{"title":"Video Generation Price Calculation","openapi":"openapi-v2.json POST /api/v2/videos/generations/price","href":"/api/v2/videos/generations-price"},{"title":"Video Animation (Image-to-Video)","openapi":"openapi-v2.json POST /api/v2/videos/animations","href":"/api/v2/videos/animations"},{"title":"Video Animation Price Calculation","openapi":"openapi-v2.json POST /api/v2/videos/animations/price","href":"/api/v2/videos/animations-price"},{"title":"Video Audio Sync (Audio-to-Video)","openapi":"openapi-v2.json POST /api/v2/videos/audio-syncs","href":"/api/v2/videos/audio-syncs"},{"title":"Video Audio Sync Price Calculation","openapi":"openapi-v2.json POST /api/v2/videos/audio-syncs/price","href":"/api/v2/videos/audio-syncs-price"},{"title":"Video Replacement","openapi":"openapi-v2.json POST /api/v2/videos/replacements","href":"/api/v2/videos/replacements"},{"title":"Video Replacement Price Calculation","openapi":"openapi-v2.json POST /api/v2/videos/replacements/price","href":"/api/v2/videos/replacements-price"},{"title":"Video Upscale","openapi":"openapi-v2.json POST /api/v2/videos/upscales","href":"/api/v2/videos/upscales"},{"title":"Video Upscale Price Calculation","openapi":"openapi-v2.json POST /api/v2/videos/upscales/price","href":"/api/v2/videos/upscales-price"},{"title":"Video Description","openapi":"openapi-v2.json POST /api/v2/videos/descriptions","href":"/api/v2/videos/descriptions"},{"title":"Video Description Price Calculation","openapi":"openapi-v2.json POST /api/v2/videos/descriptions/price","href":"/api/v2/videos/descriptions-price"}]},{"group":"Audio","pages":[{"title":"Text-to-Speech","openapi":"openapi-v2.json POST /api/v2/audio/speech","href":"/api/v2/audio/speech"},{"title":"Text-to-Speech Price Calculation","openapi":"openapi-v2.json POST /api/v2/audio/speech/price","href":"/api/v2/audio/speech-price"},{"title":"Text-to-Music","openapi":"openapi-v2.json POST /api/v2/audio/music","href":"/api/v2/audio/music"},{"title":"Text-to-Music Price Calculation","openapi":"openapi-v2.json POST /api/v2/audio/music/price","description":"Estimate the price of a text-to-music generation request. Requires duration and inference_steps parameters.","href":"/api/v2/audio/music-price"},{"title":"Audio/Video Transcription","openapi":"openapi-v2.json POST /api/v2/audio/transcriptions","href":"/api/v2/audio/transcriptions"},{"title":"Transcription Price Calculation","openapi":"openapi-v2.json POST /api/v2/audio/transcriptions/price","description":"Estimate the price of a transcription request. Provide one of: source_url, source_file, or duration_seconds.","href":"/api/v2/audio/transcriptions-price"}]},{"group":"Embeddings","pages":[{"title":"Embeddings","openapi":"openapi-v2.json POST /api/v2/embeddings","href":"/api/v2/embeddings/embeddings"},{"title":"Embeddings Price Calculation","openapi":"openapi-v2.json POST /api/v2/embeddings/price","href":"/api/v2/embeddings/embeddings-price"}]},{"group":"Prompt Enhancement","pages":[{"title":"Prompt Enhancement - Overview","href":"/api/v2/prompt-enhancement/overview"},{"title":"Prompt Booster","openapi":"openapi-v2.json POST /api/v2/prompts/enhancements","href":"/api/v2/prompt-enhancement/prompt-booster"},{"title":"Prompt Booster Price","openapi":"openapi-v2.json POST /api/v2/prompts/enhancements/price","href":"/api/v2/prompt-enhancement/prompt-booster-price"}]},{"group":"Utilities","pages":[{"title":"Check Balance","openapi":"openapi-v2.json GET /api/v2/account/balance","href":"/api/v2/utilities/balance"},{"title":"Get Job Results","openapi":"openapi-v2.json GET /api/v2/jobs/{job_request}","href":"/api/v2/utilities/jobs"},{"title":"Model Selection","openapi":"openapi-v2.json GET /api/v2/models","href":"/api/v2/utilities/models"}]},{"group":"API Keys","pages":[{"title":"Get Current Key","openapi":"openapi-v2.json GET /api/v2/key","href":"/api/v2/keys/get-current-key"},{"title":"Get Current Key Usage","openapi":"openapi-v2.json GET /api/v2/key/usage","href":"/api/v2/keys/get-current-key-usage"},{"title":"List Keys","openapi":"openapi-v2.json GET /api/v2/keys","href":"/api/v2/keys/list-keys"},{"title":"Create Key","openapi":"openapi-v2.json POST /api/v2/keys","href":"/api/v2/keys/create-key"},{"title":"Get Key","openapi":"openapi-v2.json GET /api/v2/keys/{id}","href":"/api/v2/keys/get-key"},{"title":"Update Key","openapi":"openapi-v2.json PATCH /api/v2/keys/{id}","href":"/api/v2/keys/update-key"},{"title":"Delete Key","openapi":"openapi-v2.json DELETE /api/v2/keys/{id}","href":"/api/v2/keys/delete-key"},{"title":"Get Key Usage","openapi":"openapi-v2.json GET /api/v2/keys/{id}/usage","href":"/api/v2/keys/get-key-usage"}]},{"group":"Account","pages":[{"title":"Get Account Billing","openapi":"openapi-v2.json GET /api/v2/account","href":"/api/v2/account/get-account"},{"title":"Get Account Usage","openapi":"openapi-v2.json GET /api/v2/account/usage","href":"/api/v2/account/usage"},{"title":"List Payments","openapi":"openapi-v2.json GET /api/v2/account/payments","href":"/api/v2/account/payments"}]}]},{"tab":"API v1 (Deprecated)","pages":[{"title":"API v1 (Deprecated)","href":"/api/v1/overview"}]}]},"title":"Audio/Video Transcription - deAPI","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Bbp7I60D.js","utils-C3RIvJha.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DqD-vLt8.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B31Loprg.js","snippetPresets-DKpk-b8t.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Cj65AhOR.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BXtn5gcC.js","shallow-RY2b03Cp.js","getApiPlaygroundDisplay-B0jeiPk3.js","CodeSnippet-CYgBjjwn.js","CodeSnippets-DOngDrYB.js","Page-n7I5XbKb.js","getPastedJson-DRQbJx-T.js","icon-CQiQCicY.js","MethodPill-BKTLdNtu.js","DuplicateIcon-B9jpAdat.js","createIcon-DCddRrXv.js","DynamicMarkdown-a8hUKrw6.js","SectionHeading-eECVV2eH.js","axios-vUo_bRtp.js","Markdown--GF7ZIpf.js","clsx-DZLdJUrt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-2LoAhjKH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Zwc0ZncM.js"]}