Remove captions
Cleans burned in captions, watermarks, logos and other on screen text off a video and leaves the footage otherwise untouched. This is the tool the app calls Video Remover.
/v1/caption-removerRemove text from a video
fileurlwebhookUrlidrequiredstatusrequiredvideoUrldurationSecondsrequiredcostrequiredrefundedrequiredcreatedAtrequiredcompletedAterrorcurl -X POST "https://api.vsub.io/v1/caption-remover" \
-H "Authorization: Bearer vp_a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90" \
-F "file=@clip.mp4"
# or point it at a url instead
curl -X POST "https://api.vsub.io/v1/caption-remover" \
-H "Authorization: Bearer vp_a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90" \
-H "Content-Type: application/json" \
-d '{ "url": "https://your-app.example.com/clip.mp4" }'{
"id": "7c1f9a2e-4d3b-4a90-8e51-2b7c6d0f4a83",
"status": "processing",
"durationSeconds": 42,
"cost": 0.63,
"refunded": false,
"createdAt": "2026-08-07T02:41:18.000Z"
}Cleaning costs $0.015 per second of footage, with a 5 second minimum, taken from your cash balance rather than from credits. The whole cost is charged when the job is accepted and paid back automatically if it fails. A video longer than 2 minutes, larger than 100MB or in another format is turned away before anything is charged.
/v1/caption-remover/:idGet a caption removal
idrequiredstatusrequiredvideoUrldurationSecondsrequiredcostrequiredrefundedrequiredcreatedAtrequiredcompletedAterrorcurl "https://api.vsub.io/v1/caption-remover/7c1f9a2e-4d3b-4a90-8e51-2b7c6d0f4a83" \
-H "Authorization: Bearer vp_a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90"{
"id": "7c1f9a2e-4d3b-4a90-8e51-2b7c6d0f4a83",
"status": "completed",
"durationSeconds": 42,
"cost": 0.63,
"refunded": false,
"createdAt": "2026-08-07T02:41:18.000Z",
"completedAt": "2026-08-07T02:44:02.000Z",
"videoUrl": "https://files.vsub.io/expire-30-cleaned-9f0c1d5e.mp4"
}The cleaned up mp4 stays available for 30 days. Copy it to your own storage if you need it for longer.
Rather than polling, pass webhookUrl when you create the job and Vsub calls you once it settles, see Webhooks. Removals are not videos, so they don't show up under Video status.
