Auto captions API, $0.02 a minute

Word-by-word captions, burned into any video with one call

Send a video URL and get back an MP4 with TikTok-style captions burned in, plus SRT, VTT, ASS and a word-timed transcript. It costs $0.02 per output minute with transcription included, and a 30-second clip renders in 30 to 43 seconds. No ffmpeg to install, no GPU, no queue to run.

  • Transcription included
  • Clips up to 15 minutes
  • Right-to-left scripts
style: "bold"

Word timings

Quick start

One POST, one captioned MP4

Send the clip's URL and a style. The call waits up to 60 seconds for the result, so a 30-second clip comes back finished in the same response.

curl "https://api.reelsdk.com/v1/captions" \
  -H "Authorization: Bearer $REELSDK_KEY" \
  --json '{
    "video_url": "https://your.app/clip.mp4",
    "style": "bold"
  }'
200 OK, finished in 36 s
{
  "job": {
    "id": "job_ujzde8gxd6ncf10epf91",
    "op": "captions",
    "status": "succeeded",
    "stage": null,
    "created_at": "2026-10-26T09:14:03.512Z",
    "finished_at": "2026-10-26T09:14:39.087Z",
    "outputs": {
      "video": "https://api.reelsdk.com/f/out/job_ujzde8gxd6ncf10epf91/video.mp4",
      "transcript": "https://api.reelsdk.com/f/out/job_ujzde8gxd6ncf10epf91/transcript.json",
      "srt": "https://api.reelsdk.com/f/out/job_ujzde8gxd6ncf10epf91/captions.srt",
      "vtt": "https://api.reelsdk.com/f/out/job_ujzde8gxd6ncf10epf91/captions.vtt",
      "ass": "https://api.reelsdk.com/f/out/job_ujzde8gxd6ncf10epf91/captions.ass"
    },
    "result": null,
    "duration_s": 30.03,
    "error": null,
    "usage": {
      "output_seconds": 30.03,
      "audio_seconds": 30.03,
      "tts_characters": 0,
      "images": 0
    },
    "poll_url": "https://api.reelsdk.com/v1/jobs/job_ujzde8gxd6ncf10epf91"
  }
}

Jobs that outlast the wait answer 202 with a poll_url. Add webhook_url and we POST the finished job to you instead.

Caption styles

Three presets, or your own style

Same clip, same words. These frames were rendered by the caption engine with each preset's real fonts.

  • Frame captioned with the bold preset: CAPTIONS KEEP in white uppercase Montserrat Black, with KEEP highlighted yellow

    "bold"default

    The spoken word turns yellow and pops, in uppercase with punctuation dropped.

    Font
    Montserrat Black
    Position
    Middle
    Words
    3 at a time
    Highlight
    #FFE14D
  • Frame captioned with the karaoke preset: Captions keep them watching in white Poppins, a cyan fill sweeping through each word

    "karaoke"

    A cyan fill sweeps through each word while it's spoken.

    Font
    Poppins ExtraBold
    Position
    Bottom
    Words
    5 at a time
    Highlight
    #3DDCFF
  • Frame captioned with the minimal preset: Captions keep them watching, in small white Poppins on a translucent box

    "minimal"

    Quiet white text on a soft rounded box, punctuation kept.

    Font
    Poppins Bold
    Position
    Bottom
    Words
    7 at a time
    Highlight
    #FFFFFF

Start from a preset, change what you need

Pass a style object instead of a name. Anything you leave out comes from the preset, and colors take hex codes or names like yellow, gold or magenta.

"style": {
  "preset": "karaoke",
  "font": "Anton",
  "position": "middle",
  "max_words": 2,
  "uppercase": true,
  "highlight_color": "#FF5C8A",
  "size": 1.3
}

What you control

Everything a captioning pipeline needs, in one field or two

  • Transcription built in

    Whisper large-v3-turbo transcribes the audio and detects the language. Add a prompt of up to 500 characters so names, brands and jargon come out spelled right.

  • Fonts, colors and layout

    Montserrat, Anton, Bebas Neue or Poppins, at the top, middle or bottom, 1 to 8 words at a time and 0.5x to 2x size, in your own text, highlight and outline colors.

  • Right-to-left and non-Latin scripts

    Arabic, Hebrew, Persian, Urdu and other right-to-left languages read the right way, karaoke fill included. Bundled Noto fonts cover Japanese, Chinese, Korean, Thai, Devanagari, Lao and Myanmar.

  • Subtitle files with every render

    Each job also returns transcript.json with a start and end time for every word, plus captions.srt, captions.vtt and captions.ass.

  • Your framing, your audio

    The clip keeps its aspect ratio and frame rate up to 60 fps, with the short side capped at 1,080 px. AAC audio is copied untouched and HDR footage is tone-mapped to standard range.

  • Wait, poll or webhook

    Calls wait up to 60 seconds for the finished job, or 300 with ?wait=. Longer jobs answer 202 with a poll_url, or we POST the job to your webhook_url, signed with HMAC-SHA256.

Specs

Captions API specs

reelsdk captions API specifications
EndpointPOST /v1/captions
Inputvideo_url, any public link to a video ffmpeg can decode (MP4, MOV, WebM, MKV and more), or a file you upload first with POST /v1/uploads (up to 100 MB)
Size and lengthUp to 500 MB and 15 minutes. The clip needs an audio track unless you send your own words.
Video outH.264 MP4 in the source aspect ratio, short side up to 1,080 px, up to 60 fps
Audio outAAC copied as is; other audio is encoded to 192 kbit/s AAC
Files returnedvideo.mp4, transcript.json, captions.srt, captions.vtt, captions.ass
TranscriptionWhisper large-v3-turbo, language detected or set with language, optional prompt up to 500 characters, or skip it with your own words (up to 50,000)
Stylesbold (default), karaoke, minimal, or a style object with 4 fonts, 3 positions, 1 to 8 words and 0.5x to 2x size
ScriptsRight to left for Arabic, Persian, Urdu, Pashto, Sindhi, Hebrew and Yiddish; Noto fonts for CJK, Thai, Devanagari, Lao and Myanmar
Render time30 to 43 seconds for a 30-second 1080x1920 clip, measured end to end
Price$0.02 per output minute, transcription included
DeliveryDownload links live for 7 days; webhooks signed with HMAC-SHA256, 3 delivery attempts

Pricing

$0.02 a minute, transcription included

You pay for the length of the video you get back. No subscription, no minimum, no per-seat plan.

$0.02per output minute

Whisper transcription, burn-in and all four subtitle files are part of that price.

Prepaid credit, and your first $1 of renders is free: that's 50 minutes of captions.

100 minutes of 1080p video at list price, checked October 2026
Provider and planPer minute100 minutes
reelsdkPay as you go, slideshows and captions$0.02/min$2.00
ShotstackPay as you go, $10 for 50 minutes$0.20/min$20.00
ShotstackStarter, $39 a month for 250 minutes$0.16/min$16.00
JSON2VideoProfessional, $49.95 a month for 200 minutes$0.25/min$25.00
CreatomateEssential, $54 a month, 1080p at 25 fps$0.84/min$84.00

Use cases

Where captions earn their keep

  1. 01

    Clips for TikTok, Reels and Shorts

    Most people scroll with the sound off. Burn bold or karaoke captions into vertical clips before your users post or schedule them.

  2. 02

    Podcast and interview clips

    Put guest names, brands and show jargon in the prompt so they come out spelled right, and every word lights up as it's said.

  3. 03

    A captions button in your app

    Caption user uploads in a Lovable, bolt, Supabase or Vercel app without running ffmpeg or GPU workers yourself.

  4. 04

    Subtitles for players and YouTube

    The same call returns captions.vtt and captions.srt, ready for your own player or a YouTube upload next to the MP4.

FAQ

Captions API questions

How much does the captions API cost?

$0.02 per minute of output video, with transcription included. There's no subscription and no minimum: you prepay credit, and your first $1 of renders is free, which covers 50 minutes of captions.

How long does it take to caption a video?

On our measured runs, captioning a 30-second 1080x1920 clip takes 30 to 43 seconds end to end, and a fresh render machine is ready in 1.87 seconds at the median. Create calls wait up to 60 seconds by default, so a clip like that comes back finished in the first response.

Which languages can it caption?

Whisper large-v3-turbo detects the spoken language, or you set it with the language field. Captions run right to left for Arabic, Persian, Urdu, Pashto, Sindhi, Hebrew and Yiddish, and bundled Noto fonts cover Arabic, Hebrew, Japanese, Chinese, Korean, Thai, Devanagari, Lao and Myanmar.

Can I fix how names and brands are spelled?

Yes. Pass a prompt of up to 500 characters with names, brands and jargon and the transcriber uses it as a hint. If you already have a transcript, send your own words array with start and end times and we skip transcription.

What happens to my resolution, frame rate and audio?

Your framing is kept, whether that's 9:16, 16:9, square or anything else. The output is an H.264 MP4 with the short side scaled down to 1,080 px if it's larger, at up to 60 fps. AAC audio is copied without re-encoding, other audio becomes 192 kbit/s AAC, and HDR footage is tone-mapped to standard range.

What are the limits?

Clips can be up to 15 minutes long and 500 MB, and need an audio track unless you send your own words. Each key runs 3 jobs at once and up to 500 a day, a job can run for 10 minutes, and outputs stay downloadable for 7 days.

Can I call it from Lovable, bolt, Supabase or n8n?

Yes. It's one HTTPS request with a JSON body, so it works from Supabase Edge Functions, Cloudflare Workers, Vercel functions, Lovable and bolt apps, n8n or a cron job. There's nothing to install: ffmpeg runs on our side.

Ready to build?

Caption your first 50 minutes free

Sign up and create an API key in a minute. Your first $1 of renders is on us, then it's $0.02 a minute.

Moonlit lake with a lit cabin under the mountains