Queue a structured-data extraction and return a task_id immediately.
Use this instead of POST /extract/video whenever transcribe is left on and the video may run past ~10 minutes. The extraction itself is fast; the speech-to-text step in front of it is what makes a synchronous request time out. This endpoint has no duration cap.
Accepts the same body as POST /extract/video — JSON, YAML and multipart/form-data all work here too — plus webhook_url. The schema is validated at submit time, so an invalid schema is rejected on the POST, before any transcription.
include_usage is not accepted here: pass it on GET /extract/video/{task_id} once task_status=completed.
Submit-time check: the submit endpoint returns 402 instead of a task_id when the account has almost no credits left. A job can still fail later with 402 when the media needs more than the remaining balance. An invalid or deactivated API key is rejected with 401, and a key without the endpoint’s permission with 403; no task is created in either case.
POST
/
extract
/
video
/
async
Extract structured data from a video asynchronously (long videos)
curl --request POST \
--url https://api.vidnavigator.com/v1/extract/video/async \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"video_url": "https://www.tiktok.com/@user/video/1234567890",
"schema": {
"main_topics": {
"type": "Array",
"description": "List of main topics discussed",
"items": {
"type": "String",
"description": "A topic"
}
},
"sentiment": {
"type": "Enum",
"description": "Overall sentiment of the video",
"enum": [
"positive",
"negative",
"neutral"
]
},
"key_takeaway": {
"type": "String",
"description": "The single most important takeaway"
}
},
"what_to_extract": "<string>",
"transcribe": true,
"webhook_url": "https://example.com/hooks/vidnavigator"
}
'
import requests
url = "https://api.vidnavigator.com/v1/extract/video/async"
payload = {
"video_url": "https://www.tiktok.com/@user/video/1234567890",
"schema": {
"main_topics": {
"type": "Array",
"description": "List of main topics discussed",
"items": {
"type": "String",
"description": "A topic"
}
},
"sentiment": {
"type": "Enum",
"description": "Overall sentiment of the video",
"enum": ["positive", "negative", "neutral"]
},
"key_takeaway": {
"type": "String",
"description": "The single most important takeaway"
}
},
"what_to_extract": "<string>",
"transcribe": True,
"webhook_url": "https://example.com/hooks/vidnavigator"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
video_url: 'https://www.tiktok.com/@user/video/1234567890',
schema: {
main_topics: {
type: 'Array',
description: 'List of main topics discussed',
items: {type: 'String', description: 'A topic'}
},
sentiment: {
type: 'Enum',
description: 'Overall sentiment of the video',
enum: ['positive', 'negative', 'neutral']
},
key_takeaway: {type: 'String', description: 'The single most important takeaway'}
},
what_to_extract: '<string>',
transcribe: true,
webhook_url: 'https://example.com/hooks/vidnavigator'
})
};
fetch('https://api.vidnavigator.com/v1/extract/video/async', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
Extract structured data from an online video of any length. The job runs in the background: you get a task_id immediately, then collect the result by polling or through a webhook.
Use this endpoint instead of POST /extract/video when speech-to-text is needed (transcribe=true) and the video may run past 10 minutes — the synchronous endpoint rejects it with video_too_long. The extraction itself is fast; the transcription in front of it is what takes time.
POST /extract/video/async with the same body as POST /extract/video, plus an optional webhook_url. You get 202 Accepted with a task_id and a check_status_url.
2
Wait for the result
Poll GET /extract/video/{task_id} every few seconds while task_status is processing — polling is free — or receive a webhook when the job finishes.
3
Read the result
On completed, data.result is identical to the synchronous response’s data block, so the same parsing code works for both. On failed, data.error carries the same error code the synchronous endpoint would have returned.
Accepts the same body as the synchronous endpoint — JSON, YAML and multipart/form-data all work. The schema is validated at submit time, so an invalid schema is rejected on the POST, before any transcription is billed.
Billed exactly likePOST /extract/video — the async mode costs nothing extra. Charges are made in the background worker, so pass include_usage=true on the result request (not on the submit) to see them. A failed job has all of its charges reverted.
POST https://api.vidnavigator.com/v1/extract/video/async
Parameter
Type
Required
Description
video_url
string
Yes
URL of the video to extract data from.
schema
object
Yes
Extraction schema (same rules as the synchronous endpoint).
what_to_extract
string
No
Optional guidance for what to extract.
transcribe
boolean
No
Auto-transcribe when no platform transcript is available. Default true.
webhook_url
string
No
Where to POST the result when the job finishes. Overrides the account default set in Studio → API; pass "" to opt this job out of the default. Must be a public https URL. See Webhooks.
include_usage is not accepted on the submit request — pass it on the poll request instead.
curl -X POST "https://api.vidnavigator.com/v1/extract/video/async" \ -H "X-API-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "video_url": "https://www.tiktok.com/@user/video/1234567890", "schema": { "main_topics": { "type": "Array", "description": "List of main topics discussed", "items": { "type": "String", "description": "A topic" } }, "key_takeaway": { "type": "String", "description": "The single most important takeaway" } }, "webhook_url": "https://example.com/hooks/vidnavigator" }'
import timeimport requestsBASE = "https://api.vidnavigator.com"HEADERS = {"X-API-Key": "YOUR_API_KEY"}task = requests.post( f"{BASE}/v1/extract/video/async", headers=HEADERS, json={ "video_url": "https://www.tiktok.com/@user/video/1234567890", "schema": { "key_takeaway": {"type": "String", "description": "The single most important takeaway"} }, },).json()["data"]while True: job = requests.get(BASE + task["check_status_url"], headers=HEADERS).json()["data"] if job["task_status"] != "processing": break time.sleep(5)if job["task_status"] == "completed": print(job["result"]) # the extracted fields print(job["video_info"]["title"]) # the video's metadataelse: print("Failed:", job["error"]["error"], job["error"]["message"])
The Python and JavaScript SDKs (v2.1.0) do the submit and polling for you: client.extract_video_data(...) / vn.extractVideoData(...) return the extracted data and the video’s video_info in one call.
The playground above only covers the submit request. Call the result endpoint with cURL or your HTTP client.
GET https://api.vidnavigator.com/v1/extract/video/{task_id}
Parameter
In
Required
Description
task_id
path
Yes
The task_id returned by POST /extract/video/async.
include_usage
query
No
When true and task_status=completed, attaches a usage block with the final charges.
Polling is free. Results are kept for 1 hour after the job finishes, and reading a task doesn’t delete it.On completed, data.result is identical to the data block of a successful synchronous POST /extract/video response, and data.video_info holds the same video_info the synchronous endpoint returns beside it.
video_info is only present once task_status is completed.On failed, data.result is null and data.error carries the same code the synchronous endpoint would have returned (e.g. transcript_not_available, http_status: 404). All charges are reverted.
Status
error
Description
404
task_not_found
Unknown task_id, expired, owned by another account, or not an extraction task.
Pass webhook_url on the submit request, or configure a default endpoint in Studio → API, to be called back when the job finishes. See Webhooks for the payload and signature verification, and Async Jobs for the full workflow.
Where to POST the result when the job finishes. Overrides the account-level default configured in Studio → API. Pass an empty string to opt this job out of that default. Must be a publicly reachable https URL — private, loopback and link-local hosts are rejected. See https://docs.vidnavigator.com/guides/webhooks
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"VidNavigator API","description":"VidNavigator is an AI-powered video intelligence platform. Transcribe, analyze, extract data, and search across videos from YouTube, TikTok, Instagram, X/Twitter, Facebook, Vimeo, Loom, Dailymotion, Snapchat, and your own uploaded files — all through a single API.","colors":{"primary":"#0070f3","light":"#0070f3","dark":"#0070f3"},"logo":{"light":"https://mintcdn.com/vidnavigator/ymqjYgXcoCCQQJfl/logo/light.png?fit=max\u0026auto=format\u0026n=ymqjYgXcoCCQQJfl\u0026q=85\u0026s=93cdaa477ff6d1e3cdbbe12b52c4c138","dark":"https://mintcdn.com/vidnavigator/ymqjYgXcoCCQQJfl/logo/dark.png?fit=max\u0026auto=format\u0026n=ymqjYgXcoCCQQJfl\u0026q=85\u0026s=21fb3ec0d8016fefb85663ec329dc0c9"},"favicon":"https://mintcdn.com/vidnavigator/ymqjYgXcoCCQQJfl/favicon.ico?fit=max\u0026auto=format\u0026n=ymqjYgXcoCCQQJfl\u0026q=85\u0026s=0e835b267b92f66bf953bf8469ce1309","appearance":{"default":"light"},"navbar":{"links":[{"href":"mailto:support@vidnavigator.com","label":"Support"}],"primary":{"type":"button","label":"VidNavigator AI","href":"https://vidnavigator.com"}},"footer":{"socials":{"x":"https://x.com/hatemmezlini1","github":"https://github.com/orgs/vidnavigator/repositories","linkedin":"https://www.linkedin.com/in/hatem-mezlini-5872a184"}},"fonts":{"heading":{"family":"Inter","weight":600},"body":{"family":"Inter","weight":400}},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"App","icon":"rocket","href":"https://vidnavigator.com"},{"anchor":"Blog","icon":"newspaper","href":"https://vidnavigator.com/blog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"vidnavigator","hasAudioNarration":false,"actualSubdomain":"vidnavigator","customDomains":["docs.vidnavigator.com"],"gitSource":{"type":"github","owner":"vidnavigator","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af0a3be6412adac0128ee49","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"API Reference","count":34},{"language":"default","tag":"Local Files","count":15},{"language":"default","tag":"Guides","count":14},{"language":"default","tag":"Online media","count":13},{"language":"default","tag":"User Guides","count":8},{"language":"default","tag":"Get Started","count":6},{"language":"default","tag":"API Documentation","count":4},{"language":"default","tag":"System","count":2},{"language":"default","tag":"SDKs","count":2},{"language":"default","tag":"Official Libraries","count":2}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","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},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/endpoint/extract-video-async","slug":"/api-reference/endpoint/extract-video-async","pageMetadata":{"title":"Extract Data from Video (Async)","openapi":"POST /extract/video/async","description":"Queue a structured-data extraction and return a `task_id` immediately.\n\n**Use this instead of `POST /extract/video` whenever `transcribe` is left on and the video may run past ~10 minutes.** The extraction itself is fast; the speech-to-text step in front of it is what makes a synchronous request time out. This endpoint has no duration cap.\n\nAccepts the same body as `POST /extract/video` — JSON, YAML and `multipart/form-data` all work here too — plus `webhook_url`. The schema is validated at submit time, so an invalid schema is rejected on the `POST`, before any transcription.\n\n`include_usage` is not accepted here: pass it on `GET /extract/video/{task_id}` once `task_status=completed`.\n\nSee https://docs.vidnavigator.com/guides/async-jobs\n\n**Submit-time check:** the submit endpoint returns `402` instead of a `task_id` when the account has almost no credits left. A job can still fail later with `402` when the media needs more than the remaining balance. An invalid or deactivated API key is rejected with `401`, and a key without the endpoint's permission with `403`; no task is created in either case.","href":"/api-reference/endpoint/extract-video-async"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Queue a structured-data extraction and return a \", _jsx(_components.code, {\n children: \"task_id\"\n }), \" immediately.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsxs(_components.strong, {\n children: [\"Use this instead of \", _jsx(_components.code, {\n children: \"POST /extract/video\"\n }), \" whenever \", _jsx(_components.code, {\n children: \"transcribe\"\n }), \" is left on and the video may run past ~10 minutes.\"]\n }), \" The extraction itself is fast; the speech-to-text step in front of it is what makes a synchronous request time out. This endpoint has no duration cap.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Accepts the same body as \", _jsx(_components.code, {\n children: \"POST /extract/video\"\n }), \" — JSON, YAML and \", _jsx(_components.code, {\n children: \"multipart/form-data\"\n }), \" all work here too — plus \", _jsx(_components.code, {\n children: \"webhook_url\"\n }), \". The schema is validated at submit time, so an invalid schema is rejected on the \", _jsx(_components.code, {\n children: \"POST\"\n }), \", before any transcription.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"include_usage\"\n }), \" is not accepted here: pass it on \", _jsx(_components.code, {\n children: \"GET /extract/video/{task_id}\"\n }), \" once \", _jsx(_components.code, {\n children: \"task_status=completed\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"See \", _jsx(_components.a, {\n href: \"https://docs.vidnavigator.com/guides/async-jobs\",\n children: \"https://docs.vidnavigator.com/guides/async-jobs\"\n })]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Submit-time check:\"\n }), \" the submit endpoint returns \", _jsx(_components.code, {\n children: \"402\"\n }), \" instead of a \", _jsx(_components.code, {\n children: \"task_id\"\n }), \" when the account has almost no credits left. A job can still fail later with \", _jsx(_components.code, {\n children: \"402\"\n }), \" when the media needs more than the remaining balance. An invalid or deactivated API key is rejected with \", _jsx(_components.code, {\n children: \"401\"\n }), \", and a key without the endpoint’s permission with \", _jsx(_components.code, {\n children: \"403\"\n }), \"; no task is created in either case.\"]\n })]\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`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,CodeGroup,Heading,Info,Note,Step,Steps,Table,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Extract structured data from an online video of `,_jsx(_components.strong,{children:`any length`}),`. The job runs in the background: you get a `,_jsx(_components.code,{children:`task_id`}),` immediately, then collect the result by polling or through a `,_jsx(_components.a,{href:`/webhooks`,children:`webhook`}),`.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Use this endpoint instead of `,_jsx(_components.a,{href:`/api-reference/endpoint/extract-video`,children:_jsx(_components.code,{children:`POST /extract/video`})}),` when speech-to-text is needed (`,_jsx(_components.code,{children:`transcribe=true`}),`) and the video may run past `,_jsx(_components.strong,{children:`10 minutes`}),` — the synchronous endpoint rejects it with `,_jsx(_components.code,{children:`video_too_long`}),`. The extraction itself is fast; the transcription in front of it is what takes time.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How It Works`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Submit the job`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`POST /extract/video/async`}),` with the `,_jsx(_components.strong,{children:`same body`}),` as `,_jsx(_components.a,{href:`/api-reference/endpoint/extract-video`,children:_jsx(_components.code,{children:`POST /extract/video`})}),`, plus an optional `,_jsx(_components.code,{children:`webhook_url`}),`. You get `,_jsx(_components.code,{children:`202 Accepted`}),` with a `,_jsx(_components.code,{children:`task_id`}),` and a `,_jsx(_components.code,{children:`check_status_url`}),`.`]})}),_jsx(Step,{title:`Wait for the result`,children:_jsxs(_components.p,{children:[`Poll `,_jsx(_components.code,{children:`GET /extract/video/{task_id}`}),` every few seconds while `,_jsx(_components.code,{children:`task_status`}),` is `,_jsx(_components.code,{children:`processing`}),` — polling is free — or receive a `,_jsx(_components.a,{href:`/webhooks`,children:`webhook`}),` when the job finishes.`]})}),_jsx(Step,{title:`Read the result`,children:_jsxs(_components.p,{children:[`On `,_jsx(_components.code,{children:`completed`}),`, `,_jsx(_components.code,{children:`data.result`}),` is identical to the synchronous response’s `,_jsx(_components.code,{children:`data`}),` block, so the same parsing code works for both. On `,_jsx(_components.code,{children:`failed`}),`, `,_jsx(_components.code,{children:`data.error`}),` carries the same error code the synchronous endpoint would have returned.`]})})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Accepts the same body as the synchronous endpoint — JSON, YAML and `,_jsx(_components.code,{children:`multipart/form-data`}),` all work. The schema is validated at submit time, so an invalid schema is rejected on the `,_jsx(_components.code,{children:`POST`}),`, before any transcription is billed.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`billing`,children:`Billing`}),`\n`,_jsxs(_components.p,{children:[`Billed `,_jsx(_components.strong,{children:`exactly like`}),` `,_jsx(_components.a,{href:`/api-reference/endpoint/extract-video`,children:_jsx(_components.code,{children:`POST /extract/video`})}),` — the async mode costs nothing extra. Charges are made in the background worker, so pass `,_jsx(_components.code,{children:`include_usage=true`}),` on the result request (not on the submit) to see them. A failed job has all of its charges reverted.`]}),`\n`,_jsx(Heading,{level:`2`,id:`submit-the-job`,children:`Submit the job`}),`\n`,_jsx(_components.p,{children:_jsx(_components.code,{children:`POST https://api.vidnavigator.com/v1/extract/video/async`})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`video_url`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`URL of the video to extract data from.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`schema`})}),_jsx(_components.td,{children:`object`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Extraction schema (same rules as the synchronous endpoint).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`what_to_extract`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Optional guidance for what to extract.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`transcribe`})}),_jsx(_components.td,{children:`boolean`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Auto-transcribe when no platform transcript is available. Default `,_jsx(_components.code,{children:`true`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`webhook_url`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Where to POST the result when the job finishes. Overrides the account default set in `,_jsx(_components.a,{href:`https://vidnavigator.com/studio/api`,children:`Studio → API`}),`; pass `,_jsx(_components.code,{children:`\"\"`}),` to opt this job out of the default. Must be a public `,_jsx(_components.code,{children:`https`}),` URL. See `,_jsx(_components.a,{href:`/webhooks`,children:`Webhooks`}),`.`]})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`include_usage`}),` is not accepted on the submit request — pass it on the poll request instead.`]})}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`cURL`,numberOfLines:`18`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`18`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://api.vidnavigator.com/v1/extract/video/async\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"X-API-Key: YOUR_API_KEY\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"video_url\": \"https://www.tiktok.com/@user/video/1234567890\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"schema\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"main_topics\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"type\": \"Array\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"description\": \"List of main topics discussed\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"items\": { \"type\": \"String\", \"description\": \"A topic\" }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"key_takeaway\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"type\": \"String\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"description\": \"The single most important takeaway\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"webhook_url\": \"https://example.com/hooks/vidnavigator\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Python`,numberOfLines:`28`,language:`python`,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:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`28`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` time`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` requests`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`BASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://api.vidnavigator.com\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`HEADERS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"X-API-Key\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"YOUR_API_KEY\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`task `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` requests.post(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`BASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/v1/extract/video/async\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` headers`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`HEADERS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` json`}),_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:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"video_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://www.tiktok.com/@user/video/1234567890\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"schema\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"key_takeaway\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"String\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"description\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"The single most important takeaway\"`}),_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.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).json()[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`while`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` True`}),_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\":`#D4D4D4`},children:` job `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` requests.get(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`BASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` +`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` task[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"check_status_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`], `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`headers`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`HEADERS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).json()[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"data\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` job[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"task_status\"`}),_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:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"processing\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` break`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` time.sleep(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` job[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"task_status\"`}),_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:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"completed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` print`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(job[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"result\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]) `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# the extracted fields`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` print`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(job[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"video_info\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]) `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# the video's metadata`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`else`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` print`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Failed:\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, job[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`], job[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`])`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`JavaScript`,numberOfLines:`21`,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:`21`,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:` BASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.vidnavigator.com'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_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:` HEADERS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'X-API-Key'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'YOUR_API_KEY'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Content-Type'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'application/json'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` };`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`task`}),_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:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` fetch`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`BASE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"/v1/extract/video/async`\"}),_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:` method:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'POST'`}),_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:` headers:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` HEADERS`}),_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:` body:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` JSON`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`stringify`}),_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:` video_url:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://www.tiktok.com/@user/video/1234567890'`}),_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:` schema:`}),_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:` key_takeaway:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'String'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`description:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'The single most important takeaway'`}),_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.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`})).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`json`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`let`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` job`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`do`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Promise`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`r`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` =>`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` setTimeout`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`r`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5000`}),_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\":`#D4D4D4`},children:` ({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` job`}),_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:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` fetch`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`BASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` +`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` task`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`check_status_url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`headers:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` HEADERS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` })).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`json`}),_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\":`#D4D4D4`},children:`} `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`while`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`job`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`task_status`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ===`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'processing'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`job`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`task_status`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ===`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'completed'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ?`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` job`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`result`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`video_info:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` job`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`video_info`}),_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\":`#9CDCFE`},children:` job`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`The `,_jsx(_components.a,{href:`/sdks/python#structured-extraction`,children:`Python`}),` and `,_jsx(_components.a,{href:`/sdks/javascript#structured-extraction`,children:`JavaScript`}),` SDKs (v2.1.0) do the submit and polling for you: `,_jsx(_components.code,{children:`client.extract_video_data(...)`}),` / `,_jsx(_components.code,{children:`vn.extractVideoData(...)`}),` return the extracted `,_jsx(_components.code,{children:`data`}),` and the video’s `,_jsx(_components.code,{children:`video_info`}),` in one call.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`response-202-accepted`,children:`Response (202 Accepted)`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,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:`12`,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:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"success\"`}),_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:` \"data\"`}),_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:` \"task_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"7c9e6679-7425-40de-944b-e07fc1f90ae7\"`}),_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:` \"task_status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"processing\"`}),_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:` \"job_type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"extract_video\"`}),_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:` \"expires_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-09-23T13:00:00Z\"`}),_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:` \"check_status_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/v1/extract/video/7c9e6679-7425-40de-944b-e07fc1f90ae7\"`}),_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:` \"webhook_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://example.com/hooks/vidnavigator\"`}),_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:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Extraction job accepted.\"`})]}),`\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`]})})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:_jsx(_components.code,{children:`error`})}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`missing_parameter`}),`, `,_jsx(_components.code,{children:`request_body_required`}),`, `,_jsx(_components.code,{children:`invalid_schema`}),`, `,_jsx(_components.code,{children:`invalid_parameter`})]}),_jsx(_components.td,{children:`Invalid request or schema.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`401`})}),_jsx(_components.td,{children:`—`}),_jsx(_components.td,{children:`Invalid or deactivated API key.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`402`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`limit_exceeded`})}),_jsx(_components.td,{children:`Less than 60 seconds of transcription credit left. No task is created.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`403`})}),_jsx(_components.td,{children:`—`}),_jsx(_components.td,{children:`The API key lacks permission for this endpoint.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`429`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`too_many_active_jobs`})}),_jsx(_components.td,{children:`Too many jobs already running for this account.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`get-the-result`,children:`Get the result`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`The playground above only covers the submit request. Call the result endpoint with cURL or your HTTP client.`})}),`\n`,_jsx(_components.p,{children:_jsx(_components.code,{children:`GET https://api.vidnavigator.com/v1/extract/video/{task_id}`})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`In`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`task_id`})}),_jsx(_components.td,{children:`path`}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[`The `,_jsx(_components.code,{children:`task_id`}),` returned by `,_jsx(_components.code,{children:`POST /extract/video/async`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`include_usage`})}),_jsx(_components.td,{children:`query`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`When `,_jsx(_components.code,{children:`true`}),` and `,_jsx(_components.code,{children:`task_status=completed`}),`, attaches a `,_jsx(_components.code,{children:`usage`}),` block with the final charges.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Polling is `,_jsx(_components.strong,{children:`free`}),`. Results are kept for `,_jsx(_components.strong,{children:`1 hour after the job finishes`}),`, and reading a task doesn’t delete it.`]}),`\n`,_jsxs(_components.p,{children:[`On `,_jsx(_components.code,{children:`completed`}),`, `,_jsx(_components.code,{children:`data.result`}),` is `,_jsx(_components.strong,{children:`identical`}),` to the `,_jsx(_components.code,{children:`data`}),` block of a successful `,_jsxs(_components.a,{href:`/api-reference/endpoint/extract-video`,children:[`synchronous `,_jsx(_components.code,{children:`POST /extract/video`})]}),` response, and `,_jsx(_components.code,{children:`data.video_info`}),` holds the same `,_jsx(_components.code,{children:`video_info`}),` the synchronous endpoint returns beside it.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`25`,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:`25`,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:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"success\"`}),_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:` \"data\"`}),_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:` \"task_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"7c9e6679-7425-40de-944b-e07fc1f90ae7\"`}),_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:` \"task_status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"completed\"`}),_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:` \"job_type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"extract_video\"`}),_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:` \"created_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-09-23T12:00:00Z\"`}),_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:` \"started_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-09-23T12:00:01Z\"`}),_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:` \"completed_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-09-23T12:04:10Z\"`}),_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:` \"expires_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-09-23T13:04:10Z\"`}),_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:` \"check_status_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/v1/extract/video/7c9e6679-7425-40de-944b-e07fc1f90ae7\"`}),_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:` \"webhook\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_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:` \"result\"`}),_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:` \"main_topics\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"machine learning\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"neural networks\"`}),_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:` \"key_takeaway\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Start with clean data before choosing a model architecture\"`})]}),`\n`,_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:` \"video_info\"`}),_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:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Machine Learning Fundamentals\"`}),_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:` \"channel\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Tech Academy\"`}),_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:` \"duration\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1843.0`}),_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:` \"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://www.youtube.com/watch?v=abc123\"`})]}),`\n`,_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:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`})]}),`\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`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`video_info`}),` is only present once `,_jsx(_components.code,{children:`task_status`}),` is `,_jsx(_components.code,{children:`completed`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`On `,_jsx(_components.code,{children:`failed`}),`, `,_jsx(_components.code,{children:`data.result`}),` is `,_jsx(_components.code,{children:`null`}),` and `,_jsx(_components.code,{children:`data.error`}),` carries the same code the synchronous endpoint would have returned (e.g. `,_jsx(_components.code,{children:`transcript_not_available`}),`, `,_jsx(_components.code,{children:`http_status: 404`}),`). All charges are reverted.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:_jsx(_components.code,{children:`error`})}),_jsx(_components.th,{children:`Description`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`404`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`task_not_found`})}),_jsxs(_components.td,{children:[`Unknown `,_jsx(_components.code,{children:`task_id`}),`, expired, owned by another account, or not an extraction task.`]})]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`webhook`,children:`Webhook`}),`\n`,_jsxs(_components.p,{children:[`Pass `,_jsx(_components.code,{children:`webhook_url`}),` on the submit request, or configure a default endpoint in `,_jsx(_components.a,{href:`https://vidnavigator.com/studio/api`,children:`Studio → API`}),`, to be called back when the job finishes. See `,_jsx(_components.a,{href:`/webhooks`,children:`Webhooks`}),` for the payload and signature verification, and `,_jsx(_components.a,{href:`/guides/async-jobs`,children:`Async Jobs`}),` for the full workflow.`]})]})}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":"Extract Data from Video (Async)","openapi":"POST /extract/video/async","description":"Queue a structured-data extraction and return a `task_id` immediately.\n\n**Use this instead of `POST /extract/video` whenever `transcribe` is left on and the video may run past ~10 minutes.** The extraction itself is fast; the speech-to-text step in front of it is what makes a synchronous request time out. This endpoint has no duration cap.\n\nAccepts the same body as `POST /extract/video` — JSON, YAML and `multipart/form-data` all work here too — plus `webhook_url`. The schema is validated at submit time, so an invalid schema is rejected on the `POST`, before any transcription.\n\n`include_usage` is not accepted here: pass it on `GET /extract/video/{task_id}` once `task_status=completed`.\n\nSee https://docs.vidnavigator.com/guides/async-jobs\n\n**Submit-time check:** the submit endpoint returns `402` instead of a `task_id` when the account has almost no credits left. A job can still fail later with `402` when the media needs more than the remaining balance. An invalid or deactivated API key is rejected with `401`, and a key without the endpoint's permission with `403`; no task is created in either case.","href":"/api-reference/endpoint/extract-video-async"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How It Works","slug":"how-it-works","depth":2,"children":[]},{"title":"Billing","slug":"billing","depth":2,"children":[]},{"title":"Submit the job","slug":"submit-the-job","depth":2,"children":[{"title":"Response (202 Accepted)","slug":"response-202-accepted","depth":3,"children":[]}]},{"title":"Get the result","slug":"get-the-result","depth":2,"children":[]},{"title":"Webhook","slug":"webhook","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Extract structured data from a video asynchronously (long videos)","description":"Queue a structured-data extraction and return a `task_id` immediately.\n\n**Use this instead of `POST /extract/video` whenever `transcribe` is left on and the video may run past ~10 minutes.** The extraction itself is fast; the speech-to-text step in front of it is what makes a synchronous request time out. This endpoint has no duration cap.\n\nAccepts the same body as `POST /extract/video` — JSON, YAML and `multipart/form-data` all work here too — plus `webhook_url`. The schema is validated at submit time, so an invalid schema is rejected on the `POST`, before any transcription.\n\n`include_usage` is not accepted here: pass it on `GET /extract/video/{task_id}` once `task_status=completed`.\n\nSee https://docs.vidnavigator.com/guides/async-jobs\n\n**Submit-time check:** the submit endpoint returns `402` instead of a `task_id` when the account has almost no credits left. A job can still fail later with `402` when the media needs more than the remaining balance. An invalid or deactivated API key is rejected with `401`, and a key without the endpoint's permission with `403`; no task is created in either case.","operationId":"extractVideoDataAsync","tags":["Extraction"],"requestBody":"06ee7607-dd8d-419d-9421-9dc07be5e9d1","responses":{"202":"0bde2e23-3cac-4ea8-b5c7-294c7360728c","400":"78f0bd31-8d53-4d5b-90d1-301b4ef4a09c","402":"a154dd8a-45a2-4bee-be15-828d9da88111","429":"e3317a9f-882a-4b48-9951-69781c4fddb4","500":"916410c3-dcb5-4d3a-9145-ebc6901b1715"},"method":"post","type":"path","servers":["60f91646-d294-421b-a415-bfada5121bc4"],"security":["b0668cc1-4c5d-48b1-a666-ebd7b120eb88"],"path":"/extract/video/async","baseUrlOptions":["https://api.vidnavigator.com/v1"],"title":"Extract structured data from a video asynchronously (long videos)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["video_url","schema"],"properties":{"video_url":{"type":"string","format":"uri","description":"URL of the video to extract data from","example":"https://www.tiktok.com/@user/video/1234567890","isRequired":true,"uniqueKey":"video_url","typeLabel":"string\u003curi>"},"schema":{"type":"object","description":"Custom extraction schema defining the fields to extract. Max 10 root-level fields, max 3 nesting levels. Each field must have `type` and `description`.","additionalProperties":{"type":"object","required":["type","description"],"properties":{"type":{"type":"string","enum":["String","Number","Boolean","Integer","Object","Array","Enum"],"description":"The data type of the field","isRequired":true,"uniqueKey":"schema.additionalProperties.type","typeLabel":"enum\u003cstring>"},"description":{"type":"string","description":"Description of what this field should contain","isRequired":true,"uniqueKey":"schema.additionalProperties.description","typeLabel":"string"},"properties":{"type":"object","description":"Sub-fields for Object type","uniqueKey":"schema.additionalProperties.properties","typeLabel":"object"},"items":{"type":"object","description":"Item schema for Array type","uniqueKey":"schema.additionalProperties.\\items","typeLabel":"object"},"enum":{"type":"array","items":{"type":"string","uniqueKey":"schema.additionalProperties.enum.items.[INDEX]","typeLabel":"string"},"description":"Allowed values for Enum type. The extracted value is always one of these. `values` is accepted as a legacy alias.","uniqueKey":"schema.additionalProperties.enum","typeLabel":"string[]"}},"uniqueKey":"schema.additionalProperties","typeLabel":"object"},"example":{"main_topics":{"type":"Array","description":"List of main topics discussed","items":{"type":"String","description":"A topic"}},"sentiment":{"type":"Enum","description":"Overall sentiment of the video","enum":["positive","negative","neutral"]},"key_takeaway":{"type":"String","description":"The single most important takeaway"}},"isRequired":true,"uniqueKey":"schema","typeLabel":"object"},"what_to_extract":{"type":"string","description":"Optional guidance for what to extract from the transcript","uniqueKey":"what_to_extract","typeLabel":"string"},"transcribe":{"type":"boolean","default":true,"description":"When true, automatically transcribes the video audio if no platform transcript is available.","uniqueKey":"transcribe","typeLabel":"boolean"},"webhook_url":{"type":"string","format":"uri","description":"Where to POST the result when the job finishes. Overrides the account-level default configured in Studio → API. Pass an empty string to opt this job out of that default. Must be a publicly reachable https URL — private, loopback and link-local hosts are rejected. See https://docs.vidnavigator.com/guides/webhooks","example":"https://example.com/hooks/vidnavigator","uniqueKey":"webhook_url","typeLabel":"string\u003curi>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"video_url":"https://www.tiktok.com/@user/video/1234567890","schema":{"main_topics":{"type":"Array","description":"List of main topics discussed","items":{"type":"String","description":"A topic"}},"sentiment":{"type":"Enum","description":"Overall sentiment of the video","enum":["positive","negative","neutral"]},"key_takeaway":{"type":"String","description":"The single most important takeaway"}},"what_to_extract":"\u003cstring>","transcribe":true,"webhook_url":"https://example.com/hooks/vidnavigator"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"0bde2e23-3cac-4ea8-b5c7-294c7360728c":{"description":"Job accepted and started.","content":{"application/json":{"schema":{"type":"object","description":"202 response from an async submit endpoint.","properties":{"status":{"type":"string","enum":["success"],"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"data":{"type":"object","properties":{"task_id":{"type":"string","description":"Identifier to poll with.","example":"550e8400-e29b-41d4-a716-446655440000","uniqueKey":"data.task_id","typeLabel":"string"},"task_status":{"type":"string","enum":["processing"],"uniqueKey":"data.task_status","typeLabel":"enum\u003cstring>"},"job_type":{"type":"string","enum":["transcribe","extract_video","tweet_statement"],"uniqueKey":"data.job_type","typeLabel":"enum\u003cstring>"},"expires_at":{"type":"string","format":"date-time","description":"Results are deleted after this time. Until the job finishes this is a provisional submit-time bound; on completion it is pushed out to finish time + 1 hour.","uniqueKey":"data.expires_at","typeLabel":"string\u003cdate-time>"},"check_status_url":{"type":"string","description":"Relative URL to poll for status and the result.","example":"/v1/transcribe/550e8400-e29b-41d4-a716-446655440000","uniqueKey":"data.check_status_url","typeLabel":"string"},"webhook_url":{"oneOf":[{"type":"string","description":"The URL this job's result will be POSTed to, or null if no webhook applies.","uniqueKey":"data.webhook_url.oneOf.0","typeLabel":"string"},{"type":"null","description":"The URL this job's result will be POSTed to, or null if no webhook applies.","uniqueKey":"data.webhook_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.webhook_url","typeLabel":"string | null"},"message":{"type":"string","uniqueKey":"data.message","typeLabel":"string"},"docs_url":{"type":"string","uniqueKey":"data.docs_url","typeLabel":"string"}},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":"success","data":{"task_id":"550e8400-e29b-41d4-a716-446655440000","task_status":"processing","job_type":"transcribe","expires_at":"2023-11-07T05:31:56Z","check_status_url":"/v1/transcribe/550e8400-e29b-41d4-a716-446655440000","webhook_url":"\u003cstring>","message":"\u003cstring>","docs_url":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"78f0bd31-8d53-4d5b-90d1-301b4ef4a09c":{"description":"Bad request — missing parameters or an invalid extraction schema.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"],"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"error":{"type":"string","enum":["missing_parameter","request_body_required","invalid_schema","invalid_parameter"],"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":"error","error":"missing_parameter","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"a154dd8a-45a2-4bee-be15-828d9da88111":{"description":"Insufficient credits to queue the job; no task is created.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"],"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"error":{"type":"string","enum":["limit_exceeded"],"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"error_code":{"type":"string","enum":["limit_exceeded"],"uniqueKey":"error_code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":"error","error":"limit_exceeded","error_code":"limit_exceeded","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"e3317a9f-882a-4b48-9951-69781c4fddb4":{"description":"Too many jobs already running for this account.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"],"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"error":{"type":"string","enum":["too_many_active_jobs"],"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":"error","error":"too_many_active_jobs","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"916410c3-dcb5-4d3a-9145-ebc6901b1715":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"],"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"error":{"type":"string","enum":["metadata_fetch_failed","audio_extraction_failed","transcription_failed","internal_server_error"],"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":"error","error":"metadata_fetch_failed","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"b0668cc1-4c5d-48b1-a666-ebd7b120eb88":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key authentication. Include your VidNavigator API key in the X-API-Key header.","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"60f91646-d294-421b-a415-bfada5121bc4":{"url":"https://api.vidnavigator.com/v1","description":"Production server"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key authentication. Include your VidNavigator API key in the X-API-Key header.","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"X-API-Key","type":"string","description":"API key authentication. Include your VidNavigator API key in the X-API-Key header.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"X-API-Key"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"vidnavigator","siteName":"VidNavigator API","title":"Extract Data from Video (Async) - VidNavigator API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-08T16:02:49.008Z","originalFileLocation":"api-reference/endpoint/extract-video-async.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=\"light\"}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=\"Queue a structured-data extraction and return a task_id immediately. Use this instead of POST /extract/video whenever transcribe is left on and the video may run past ~10 minutes. The extraction itself is fast; the speech-to-text step in front of it is what makes a synchronous request time out. This endpoint has no duration cap. Accepts the same body as POST /extract/video — JSON, YAML and multipart/form-data all work here too — plus webhook_url. The schema is validated at submit time, so an invalid schema is rejected on the POST, before any transcription. include_usage is not accepted here: pass it on GET /extract/video/{task_id} once task_status=completed. See https://docs.vidnavigator.com/guides/async-jobs Submit-time check: the submit endpoint returns 402 instead of a task_id when the account has almost no credits left. A job can still fail later with 402 when the media needs more than the remaining balance. An invalid or deactivated API key is rejected with 401, and a key without the endpoint\u0026#x27;s permission with 403; no task is created in either case.\">\u003cmeta data-mint-head name=\"application-name\" content=\"VidNavigator API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/vidnavigator/u5leNKUz6hZVupAT/_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/vidnavigator/u5leNKUz6hZVupAT/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/vidnavigator/u5leNKUz6hZVupAT/_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/vidnavigator/u5leNKUz6hZVupAT/_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/vidnavigator/u5leNKUz6hZVupAT/_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/vidnavigator/u5leNKUz6hZVupAT/_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/vidnavigator/u5leNKUz6hZVupAT/_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/vidnavigator/u5leNKUz6hZVupAT/_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/vidnavigator/u5leNKUz6hZVupAT/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Extract Data from Video (Async) - VidNavigator API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Queue a structured-data extraction and return a task_id immediately. Use this instead of POST /extract/video whenever transcribe is left on and the video may run past ~10 minutes. The extraction itself is fast; the speech-to-text step in front of it is what makes a synchronous request time out. This endpoint has no duration cap. Accepts the same body as POST /extract/video — JSON, YAML and multipart/form-data all work here too — plus webhook_url. The schema is validated at submit time, so an invalid schema is rejected on the POST, before any transcription. include_usage is not accepted here: pass it on GET /extract/video/{task_id} once task_status=completed. See https://docs.vidnavigator.com/guides/async-jobs Submit-time check: the submit endpoint returns 402 instead of a task_id when the account has almost no credits left. A job can still fail later with 402 when the media needs more than the remaining balance. An invalid or deactivated API key is rejected with 401, and a key without the endpoint\u0026#x27;s permission with 403; no task is created in either case.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"VidNavigator API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.vidnavigator.com/api-reference/endpoint/extract-video-async\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://vidnavigator.mintlify.site/_mintlify/api/og/v2?division=Online+media\u0026amp;title=Extract+Data+from+Video+%28Async%29\u0026amp;description=Queue+a+structured-data+extraction+and+return+a+%60task_id%60+immediately.%0A%0A**Use+this+instead+of+%60POST+%2Fextract%2Fvideo%60+whenever+%60transcribe%60+is+left+on+and+the+vid\u0026amp;theme=4183d2b78d6895c7da59f8c9\u0026amp;signature=12ef002d90c4018fb1be66f1ca583cdd2dd70065990db40f972f89c0259564c2\">\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=\"Extract Data from Video (Async) - VidNavigator API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Queue a structured-data extraction and return a task_id immediately. Use this instead of POST /extract/video whenever transcribe is left on and the video may run past ~10 minutes. The extraction itself is fast; the speech-to-text step in front of it is what makes a synchronous request time out. This endpoint has no duration cap. Accepts the same body as POST /extract/video — JSON, YAML and multipart/form-data all work here too — plus webhook_url. The schema is validated at submit time, so an invalid schema is rejected on the POST, before any transcription. include_usage is not accepted here: pass it on GET /extract/video/{task_id} once task_status=completed. See https://docs.vidnavigator.com/guides/async-jobs Submit-time check: the submit endpoint returns 402 instead of a task_id when the account has almost no credits left. A job can still fail later with 402 when the media needs more than the remaining balance. An invalid or deactivated API key is rejected with 401, and a key without the endpoint\u0026#x27;s permission with 403; no task is created in either case.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://vidnavigator.mintlify.site/_mintlify/api/og/v2?division=Online+media\u0026amp;title=Extract+Data+from+Video+%28Async%29\u0026amp;description=Queue+a+structured-data+extraction+and+return+a+%60task_id%60+immediately.%0A%0A**Use+this+instead+of+%60POST+%2Fextract%2Fvideo%60+whenever+%60transcribe%60+is+left+on+and+the+vid\u0026amp;theme=4183d2b78d6895c7da59f8c9\u0026amp;signature=12ef002d90c4018fb1be66f1ca583cdd2dd70065990db40f972f89c0259564c2\">\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/vidnavigator/u5leNKUz6hZVupAT/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"VidNavigator API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0070f3\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.vidnavigator.com/api-reference/endpoint/extract-video-async\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/endpoint/extract-video-async.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.vidnavigator.com/#organization\",\"name\":\"VidNavigator API\",\"url\":\"https://docs.vidnavigator.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/vidnavigator/ymqjYgXcoCCQQJfl/logo/light.png?fit=max\u0026auto=format\u0026n=ymqjYgXcoCCQQJfl\u0026q=85\u0026s=93cdaa477ff6d1e3cdbbe12b52c4c138\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.vidnavigator.com#website\",\"name\":\"VidNavigator API\",\"url\":\"https://docs.vidnavigator.com\",\"publisher\":{\"@id\":\"https://docs.vidnavigator.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.vidnavigator.com/api-reference/endpoint/extract-video-async#webpage\",\"url\":\"https://docs.vidnavigator.com/api-reference/endpoint/extract-video-async\",\"name\":\"Extract Data from Video (Async)\",\"description\":\"Queue a structured-data extraction and return a task_id immediately. Use this instead of POST /extract/video whenever transcribe is left on and the video may run past ~10 minutes. The extraction itself is fast; the speech-to-text step in front of it is what makes a synchronous request time out. This endpoint has no duration cap. Accepts the same body as POST /extract/video — JSON, YAML and multipart/form-data all work here too — plus webhook_url. The schema is validated at submit time, so an invalid schema is rejected on the POST, before any transcription. include_usage is not accepted here: pass it on GET /extract/video/{task_id} once task_status=completed. See https://docs.vidnavigator.com/guides/async-jobs Submit-time check: the submit endpoint returns 402 instead of a task_id when the account has almost no credits left. A job can still fail later with 402 when the media needs more than the remaining balance. An invalid or deactivated API key is rejected with 401, and a key without the endpoint's permission with 403; no task is created in either case.\",\"dateModified\":\"2026-11-08T16:02:49.008Z\",\"isPartOf\":{\"@id\":\"https://docs.vidnavigator.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.vidnavigator.com/api-reference/endpoint/extract-video-async#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.vidnavigator.com/api-reference/endpoint/extract-video-async#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Online media\",\"item\":\"https://docs.vidnavigator.com/api-reference/endpoint/transcript\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extract Data from Video (Async)\",\"item\":\"https://docs.vidnavigator.com/api-reference/endpoint/extract-video-async\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.vidnavigator.com/api-reference/endpoint/extract-video-async#apireference\",\"headline\":\"Extract Data from Video (Async)\",\"name\":\"Extract Data from Video (Async)\",\"description\":\"Queue a structured-data extraction and return a task_id immediately. Use this instead of POST /extract/video whenever transcribe is left on and the video may run past ~10 minutes. The extraction itself is fast; the speech-to-text step in front of it is what makes a synchronous request time out. This endpoint has no duration cap. Accepts the same body as POST /extract/video — JSON, YAML and multipart/form-data all work here too — plus webhook_url. The schema is validated at submit time, so an invalid schema is rejected on the POST, before any transcription. include_usage is not accepted here: pass it on GET /extract/video/{task_id} once task_status=completed. See https://docs.vidnavigator.com/guides/async-jobs Submit-time check: the submit endpoint returns 402 instead of a task_id when the account has almost no credits left. A job can still fail later with 402 when the media needs more than the remaining balance. An invalid or deactivated API key is rejected with 401, and a key without the endpoint's permission with 403; no task is created in either case.\",\"url\":\"https://docs.vidnavigator.com/api-reference/endpoint/extract-video-async\",\"mainEntityOfPage\":{\"@id\":\"https://docs.vidnavigator.com/api-reference/endpoint/extract-video-async#webpage\"},\"dateModified\":\"2026-11-08T16:02:49.008Z\",\"publisher\":{\"@id\":\"https://docs.vidnavigator.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.vidnavigator.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"VidNavigator API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"VidNavigator API","nav":{"global":{"anchors":[{"anchor":"App","icon":"rocket","href":"https://vidnavigator.com"},{"anchor":"Blog","icon":"newspaper","href":"https://vidnavigator.com/blog"}]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","groups":[{"group":"API Documentation","pages":[{"title":"API Reference","href":"/api-reference/introduction"},{"title":"Rate Limiting","href":"/api-reference/rate-limiting"},{"title":"Usage Costs","href":"/api-reference/usage-costs"},{"title":"Errors","href":"/api-reference/errors"}]},{"group":"Online media","pages":[{"title":"Get Video Transcript","openapi":"POST /transcript","href":"/api-reference/endpoint/transcript"},{"title":"Transcribe Online Video","openapi":"POST /transcribe","href":"/api-reference/endpoint/transcribe"},{"title":"Transcribe Online Video (Async)","openapi":"POST /transcribe/async","href":"/api-reference/endpoint/transcribe-async"},{"title":"Analyze Video","openapi":"POST /analyze/video","href":"/api-reference/endpoint/analyze-video"},{"title":"Extract Data from Video","openapi":"POST /extract/video","description":"Extract structured data from an online video's transcript using a custom schema.\n\nProvide a `video_url` and a `schema` describing the fields to extract. Optionally include `what_to_extract` to guide the extraction.\n\n**Auto-transcription:** For non-YouTube videos without an existing transcript (e.g. Instagram, TikTok, Facebook), the API automatically transcribes the video audio when `transcribe` is `true` (the default). YouTube videos rely on platform captions and cannot be auto-transcribed. Set `transcribe=false` to disable this behavior.\n\n**Schema format:** Each field must have `type` and `description`. Supported types: `String`, `Number`, `Boolean`, `Integer`, `Object`, `Array`, `Enum`. Max 10 root fields, max 3 nesting levels.\n\n**Content-Type:** Accepts `application/json`, YAML (`application/yaml`, `application/x-yaml`, `text/yaml`), or `multipart/form-data`. For multipart requests, send `video_url` as a form field and `schema` as either a JSON/YAML form value or an uploaded JSON/YAML file (for example, `schema=@fact-check.yaml`). If the uploaded schema file contains a full request body with a nested `schema` property, the nested schema is used and the form `video_url` takes precedence.\n\n**Token usage:** Set `include_usage=true` to include prompt/completion token counts in the response.\n\n**Long videos:** this endpoint is synchronous and holds the connection open for the whole transcription. For media longer than ~10 minutes use `POST /extract/video/async` instead, which returns a `task_id` and can call your webhook when it finishes. Media longer than 10 minutes is rejected here with `video_too_long` (HTTP 400). Send long media to the async endpoint, which has no cap. See https://docs.vidnavigator.com/guides/async-jobs","href":"/api-reference/endpoint/extract-video"},{"title":"Extract Data from Video (Async)","openapi":"POST /extract/video/async","href":"/api-reference/endpoint/extract-video-async"},{"title":"Search YouTube","openapi":"POST /youtube/search","description":"Search YouTube for videos using AI analysis and ranking with optional filters.\n\n**Process:**\n1. Search for relevant videos\n2. AI analysis of video content and transcripts\n3. Intelligent ranking based on query relevance\n4. Structured results with rich metadata\n\nSet `include_usage=true` to receive the `usage` block, with the request's token counts.\n\n**Partial results:** if credits run out mid-search, the endpoint returns HTTP `402` with `status: \"partial\"`, the videos analyzed so far in `data.results`, and `error_code: \"insufficient_credits_video_search\"`.","href":"/api-reference/endpoint/youtube-search"},{"title":"Tweet Claim Analysis","openapi":"POST /tweet/statement","href":"/api-reference/endpoint/tweet-claim-analysis"},{"title":"Tweet Claim Analysis (Async)","openapi":"POST /tweet/statement/async","href":"/api-reference/endpoint/tweet-claim-analysis-async"},{"title":"TikTok Profile Scrape","openapi":"POST /tiktok/profile","href":"/api-reference/endpoint/tiktok-profile"},{"title":"TikTok Keyword Search","openapi":"POST /tiktok/search","href":"/api-reference/endpoint/tiktok-search"},{"title":"TikTok LIVE Search","openapi":"POST /tiktok/live/search","href":"/api-reference/endpoint/tiktok-live-search"},{"title":"TikTok LIVE Room","openapi":"POST /tiktok/live/room","href":"/api-reference/endpoint/tiktok-live-room"}]},{"group":"Local Files","pages":[{"title":"Upload File","openapi":"POST /upload/file","href":"/api-reference/endpoint/upload-file"},{"title":"List Files","openapi":"GET /files","href":"/api-reference/endpoint/list-files"},{"title":"Get File Info","openapi":"GET /file/{file_id}","href":"/api-reference/endpoint/file-info"},{"title":"Get Temporary File URL","openapi":"GET /file/{file_id}/url","href":"/api-reference/endpoint/file-url"},{"title":"Retry File Processing","openapi":"POST /file/{file_id}/retry","href":"/api-reference/endpoint/retry-file"},{"title":"Cancel File Processing","openapi":"POST /file/{file_id}/cancel","href":"/api-reference/endpoint/cancel-file"},{"title":"Delete File","openapi":"DELETE /file/{file_id}/delete","href":"/api-reference/endpoint/delete-file"},{"title":"Analyze Uploaded File","openapi":"POST /analyze/file","href":"/api-reference/endpoint/analyze-file"},{"title":"Extract Data from File","openapi":"POST /extract/file","href":"/api-reference/endpoint/extract-file"},{"title":"Search Files","openapi":"POST /search/file","href":"/api-reference/endpoint/search-file"},{"title":"List Namespaces","openapi":"GET /namespaces","href":"/api-reference/endpoint/list-namespaces"},{"title":"Create Namespace","openapi":"POST /namespaces","href":"/api-reference/endpoint/create-namespace"},{"title":"Rename Namespace","openapi":"PUT /namespaces/{namespace_id}","href":"/api-reference/endpoint/rename-namespace"},{"title":"Delete Namespace","openapi":"DELETE /namespaces/{namespace_id}","href":"/api-reference/endpoint/delete-namespace"},{"title":"Update File Namespaces","openapi":"PUT /file/{file_id}/namespaces","href":"/api-reference/endpoint/update-file-namespaces"}]},{"group":"System","pages":[{"title":"API Health Check","openapi":"GET /health","href":"/api-reference/endpoint/health"},{"title":"Get Usage","openapi":"GET /usage","href":"/api-reference/endpoint/usage"}]}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/sdks/python"}]}]},"basePath":"","title":"Extract Data from Video (Async) - VidNavigator API","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","clsx-D-TRO5q5.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdrJecqK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CHlcWBLM.js"]}