Submit a video and get back a cleaned version with the “um”s, “uh”s, and overlong silences cut out. The job transcribes the audio, detects filler words, removes them along with dead air, and renders one finished video — no review step, no edit decisions to make. It’s built for recordings where a human spoke off the cuff: webinars, screen recordings, interviews, all-hands.
Create a Removal Job
- Endpoint:
POST /v3/filler-word-removals - Purpose: Start a removal job for a source video. Returns a
filler_word_removal_idto poll.
Quick Example
Response
202 Accepted immediately; the job runs asynchronously.
Request Body
Idempotency
Pass anIdempotency-Key header to make retries safe — replaying the same key returns the original job instead of creating a duplicate.
Get a Removal Job
- Endpoint:
GET /v3/filler-word-removals/{filler_word_removal_id} - Purpose: Fetch a job’s live status and, once it completes, the cleaned video plus removal statistics.
Quick Example
Path Parameters
Response
Response Fields
video_url is a pre-signed link with a limited lifetime. Download the file soon after the job completes, or re-fetch this endpoint for a fresh link.video_url — when the run finds nothing to cut, the output is a copy of the original video and the charge is automatically refunded, so your polling code never needs a special no-change branch.
Polling Pattern
Removal jobs are processed asynchronously. Poll until status reachescompleted or failed.
Status transitions: pending → running → completed | failed
callback_url over tight polling — HeyGen will POST you the finished job instead (filler_word_removal.success / filler_word_removal.fail webhook events). Treat the webhook as a completion signal and fetch the authoritative result from GET /v3/filler-word-removals/{filler_word_removal_id}.
Asset Inputs
Thevideo field accepts two input formats:
By URL — any publicly accessible HTTPS link:
POST /v3/assets (see Upload Assets):

