2026-10-25 · 6 min read

A Caption API for UGC Ads: Burn Word-Timed Captions Into Every Variant

UGC-style ads win on volume. The teams running them profitably are not polishing one hero video; they are shipping ten hook variants a day and letting the platform pick a winner. Anything in that pipeline that requires a human in a timeline editor caps the whole operation. Captions are usually that bottleneck.

Why captions are the bottleneck in UGC production

Talking-head UGC ads are watched muted more often than not, so captions are not an accessibility nice-to-have; they carry the pitch. But most UGC pipelines treat captions as a finishing step: generate the video, hand it to an editor, wait. That works at three videos a week. It falls apart at thirty.

The fix is the same fix applied to every other step: make it a call, not a task. caption.sh is an API that takes a video and returns it with styled, word-timed captions burned in. Send the render output straight to the caption step and the finished ad comes back with no human in the loop.

What a captioned UGC variant looks like as code

curl -X POST https://api.caption.sh/v1/videos \
  -H "Authorization: Bearer $CAPTION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source_url": "https://example.com/hook-variant-3.mp4",
    "options": {
      "font": "luckiest-guy",
      "caps": true
    }
  }'

# returns a job id; poll until done:
curl https://api.caption.sh/v1/jobs/JOB_ID \
  -H "Authorization: Bearer $CAPTION_API_KEY"

# then fetch the finished video:
curl https://api.caption.sh/v1/jobs/JOB_ID/result \
  -H "Authorization: Bearer $CAPTION_API_KEY"

The result endpoint redirects to a signed URL for the finished file. Poll, download, ship. The whole caption step becomes a few lines in whatever script or agent already generates your variants.

What matters for ad creative specifically

  • Word-level timing. Karaoke-style one-word-at-a-time captions are the native grammar of short-form ads. caption.sh times every word to the speech, so the pacing of the pitch survives.
  • A consistent house style. Font, casing and stroke are options on the call, so every variant and every creator's video comes out in the same brand look. luckiest-guy with caps on is the classic direct-response look; fredoka and dynapuff read softer.
  • Throughput that matches generation. If your pipeline renders ten variants in a batch, captions should not be the step that takes the afternoon. Each job is one call and a short poll.
  • Agent-friendly. caption.sh also runs as an MCP server, so an agent that generates the ad can caption it in the same run.

Where this fits in a UGC pipeline

A typical flow: script variants go to an avatar or voice tool, the raw videos land in storage, and a caption job fires per video. The captioned outputs are the files you upload to the ad platform. There is no review step unless you want one, because the style is fixed in the request, not in someone's editor preferences.

Pricing is prepaid at $0.10 per minute of video, which lands well under a cent per second of finished ad. Full option list and docs are at caption.sh/docs.

Back to all articles