Skip to main content
POST
Transcribe online videos
Transcribe online videos from platforms like Instagram, TikTok, and more using speech-to-text models when a direct transcript is not available.

Overview

This endpoint is designed for videos where a pre-existing transcript or caption file cannot be retrieved. It downloads the video content and processes it through an AI speech-to-text model to generate a new transcript. This is particularly useful for social media platforms where direct transcript extraction is not possible, such as Instagram Reels that don’t have captions.
YouTube is not supported by this endpoint. For YouTube videos, use the /transcript endpoint instead, which retrieves existing transcripts/captions.

Billing

Speech-to-text processing consumes transcription_hour usage. 1 credit covers 3 hours of video/audio transcription. On a cache miss, one standard_request or residential_request is also charged for the metadata fetch (residential for Instagram, Facebook-watch, Rumble; standard otherwise), plus transcription_hour proportional to the audio duration. On a cache hit (same URL transcribed before, by any user), only transcription_hour is charged — the metadata fetch is skipped. Users with the free_on_cache_hit sponsorship flag get the cache-hit transcription_hour waived (waived: true in the per-charge entry). Set include_usage: true to receive a usage block with the breakdown.

Supported Platforms

VidNavigator can generate transcripts from these platforms using speech-to-text:
  • Instagram
  • X / Twitter (just copy the tweet video link)
  • Facebook (public videos only)
  • TikTok
  • Dailymotion
  • Loom
  • Vimeo

Request Parameters

Instagram carousel posts (e.g. https://www.instagram.com/p/.../) may contain multiple videos and/or images.
  • Select a specific item: Append ?img_index=N to the URL to select a specific item (1-based).
    Example: https://www.instagram.com/p/ABC123/?img_index=2 selects the second item.
  • Transcribe all videos: Set all_videos=true to transcribe all videos in the carousel. The response format changes (see “Success Response”).
If a carousel post contains only images (no videos), the API returns 400 with error=no_videos_found.

Example Usage

Success Response (200 OK)

This endpoint has two success response shapes (a oneOf), depending on whether you set all_videos=true:
  • Single-video response (default): returns data.video_info + data.transcript
  • All-videos response (all_videos=true): returns data.carousel_info + data.videos[]
transcript_text=true affects the shape of each returned transcript (string vs segments) in both response types.

Single-video response (default)

All-videos response (all_videos=true)

Error Responses

400 can include (per OpenAPI): missing_parameter, invalid_parameter, no_videos_found, unsupported_platform.

Authorizations

X-API-Key
string
header
required

API key authentication. Include your VidNavigator API key in the X-API-Key header.

Body

application/json
video_url
string<uri>
required

URL of the video to transcribe. For Instagram carousel posts, append ?img_index=N to select a specific video.

Example:

"https://www.instagram.com/reel/C86ZvEaqRmo/"

transcript_text
boolean
default:false

When true, returns the transcript as a single plain-text string instead of an array of segments.

all_videos
boolean
default:false

For carousel posts only. When true, transcribes ALL videos in the post and returns them in an array. Ignored for non-carousel URLs (reels, TikTok, etc.).

include_usage
boolean
default:false

When true, the response includes a usage block listing every meter charged during this request, the total credits deducted, and the user's remaining balance.

Response

Video transcribed successfully. Response format depends on all_videos parameter.

Single video response (default)

status
enum<string>
Available options:
success
data
object
usage
object

Per-call usage disclosure. Returned only when the caller passes include_usage=true in the request body. Lists every meter that fired during this request and the credits actually deducted. Multiple charges of the same meter inside one request are consolidated into a single entry (their quantities and credits are summed). When a charge was waived through a cache-hit sponsorship (e.g. NGO), it carries waived: true + credits_saved, and a top-level waived.credits_saved summary appears.

For endpoints that involve LLM analysis (/extract/video, /extract/file, /analyze/video, /analyze/file, /youtube/search), the consolidated analysis_request charge entry carries a nested tokens object reporting the LLM input/output token tally for the request.