2026-10-08 · 4 min read
Caption videos in Make with the HTTP module
Make scenarios often end with a video that still needs captions. You do not need a custom app for that step. The caption.sh API is three HTTP calls, and Make's HTTP module covers all of them.
The scenario
- HTTP, Make a request: POST https://api.caption.sh/v1/videos with a JSON body holding the video URL. The response is a 202 with a job_id.
- Repeater or Sleep, then HTTP, Make a request: GET https://api.caption.sh/v1/jobs/{job_id}. Use a router to loop until status is done, and send status error to a failure route.
- HTTP, Get a file: GET https://api.caption.sh/v1/jobs/{job_id}/result. The output is the captioned MP4, ready for Drive, Dropbox or a social module.
Authentication
Create an API key in the caption.sh dashboard. In each HTTP module add a header named Authorization with the value Bearer followed by your key. Store the key in a Make connection or a scenario variable instead of typing it into every module, so rotating it is one edit.
The submit body
{
"source_url": "{{1.video_url}}",
"options": { "max_words": 3 }
}Set the body type to raw and the content type to JSON. The video has to be reachable by URL. If an earlier module produced a file, use the upload flow: the submit call returns a signed upload URL, you PUT the bytes to it, and the job starts when the upload finishes.
Polling without burning operations
Every poll costs a Make operation, so do not poll every second. Sleep for ten seconds between checks and cap the loop, for example at 30 passes. A 402 on the submit means the prepaid balance is empty and a 422 means the input was rejected, so neither is worth retrying.
When this is the wrong tool
caption.sh burns captions into the video. It does not export SRT or VTT sidecar files. If a later step needs a transcript file, get it from a transcription module and use caption.sh for the version people watch on a feed.
Try it
Judge the output in the playground at caption.sh first, then build the three modules above. The reference is at caption.sh/docs and the OpenAPI spec is at api.caption.sh/openapi.json.