curl --request GET \
--url https://app.bestvideotranscriptapi.com/v1/transcript \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://app.bestvideotranscriptapi.com/v1/transcript', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.bestvideotranscriptapi.com/v1/transcript"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"content": [
{
"text": "<string>",
"offset": 123,
"duration": 123,
"lang": "<string>"
}
],
"lang": "<string>",
"availableLangs": [
"<string>"
],
"platform": "youtube",
"note": "<string>"
}{
"jobId": "run_cmh2x8k0a00fz2"
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}Get a transcript
Returns the transcript of a video or audio link. Waits up to 25 seconds; if the transcript isn’t ready by then, returns 202 with a jobId to poll at GET /v1/transcript/. The same url, lang and mode within an hour returns the same job and is charged once.
curl --request GET \
--url https://app.bestvideotranscriptapi.com/v1/transcript \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://app.bestvideotranscriptapi.com/v1/transcript', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.bestvideotranscriptapi.com/v1/transcript"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"content": [
{
"text": "<string>",
"offset": 123,
"duration": 123,
"lang": "<string>"
}
],
"lang": "<string>",
"availableLangs": [
"<string>"
],
"platform": "youtube",
"note": "<string>"
}{
"jobId": "run_cmh2x8k0a00fz2"
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "<string>",
"requestId": "<string>",
"availableLangs": [
"<string>"
],
"durationSeconds": 123,
"maxDurationSeconds": 123,
"sizeBytes": 123,
"maxSizeBytes": 123,
"aiMinutesNeeded": 123,
"aiMinutesRemaining": 123,
"refillsAt": "2023-11-07T05:31:56Z",
"billingUrl": "<string>"
}
}Authorizations
Query Parameters
A YouTube link or 11-character video ID, an Instagram reel, a Facebook reel or video, an X post (add /video/ for its nth video), a LinkedIn post, or a public http(s) link to an audio or video file, including the url from POST /v1/uploads.
A language code like en or es-US. Picks the caption track; for AI transcription it's a hint for the spoken language. Leave it out to detect the language.
auto: captions, falling back to AI transcription when there are none. native: captions only. generate: always AI-transcribe the audio.
auto, native, generate true returns content as one string instead of timed segments.
true, false Response
The transcript.
Timed segments, or one string with text=true.
Show child attributes
Show child attributes
The transcript's language.
The caption languages the video has.
youtube, instagram, facebook, x, linkedin, file Present for a post with more than one video.