2026-10-19 · 5 min read
Add captions to Instagram Reels with an API: one call per clip
Most Reels are watched with the sound off, so the caption track carries the message. Captioning one clip by hand is fine, but if you post every day or run accounts for clients, it has to happen in a pipeline. This post is the whole flow: send the vertical clip to caption.sh, get back an MP4 with word-timed karaoke captions burned into the pixels, then upload it to Reels like any other video.
Why burned-in captions survive Instagram
Instagram lets viewers switch its own auto-captions off, and sidecar subtitle files get lost the moment a clip is re-uploaded or repurposed. caption.sh renders the captions into the video itself, so they look identical in the Reels player, in Stories, in the feed preview, and anywhere else the file travels. There is nothing for a platform to strip and nothing for a viewer to toggle.
The API call
Submit the clip with a source URL and the caption options you want. The API answers 202 with a job id, you poll /v1/jobs/{job_id} until the status is done, then download the result MP4:
curl -X POST https://api.caption.sh/v1/videos \
-H "Authorization: Bearer $CAPTION_API_KEY" \
-H "Content-Type: application/json" \
-d '{"source_url":"https://cdn.example.com/reel-clip.mp4","options":{"font":"inter","size":"large","position":0.82}}'Set position as a fraction of the video height, 0 is the top edge and 1 is the bottom edge, so 0.82 parks the caption block just above the Reels interface. The result file is a normal MP4, so the rest of your posting flow does not change.
Styles that read on a phone
The word-by-word karaoke look, each word highlighting as it is spoken, is what short-form viewers expect. caption.sh bundles 18 open source fonts: inter is a clean default and luckiest-guy gives the bold meme style. Size is a preset or a fraction of frame height, so one set of options works across resolutions, and the safe-zone guide at caption.sh/blog/vertical-video-captions-safe-zone shows where the like and comment buttons sit on a 9:16 frame.
Long words never overflow
Every caption group is laid out inside a 90 percent width margin and the renderer shrinks the text until it fits the line limit, so a shouted product name or a long compound word never spills off the frame. Pricing is prepaid at $0.10 per minute of video, which puts a 30 second Reel at five cents. The full option list, fonts, decorations and colors, is at caption.sh/docs.