Automate video editing with n8n: caption and cut by API
Automate video editing with n8n: an HTTP Request node submits a caption or cut job, a Wait node resumes on the webhook, a last node reads the file.

To automate video editing with n8n, call a video editing API from HTTP Request nodes: one node submits the edit as a job, a Wait node pauses the workflow until the job's webhook calls back, and a final node reads the finished file. Each new video from your trigger (a form, a sheet row, a folder) runs the same chain.
Sume has no n8n node; these are plain HTTPS calls. The Sume facts come from the Video captions, Video trim, Jobs and results, and Webhooks docs; the n8n facts come from its HTTP Request node, Wait node, and credentials pages. All were read on 2026-09-29. Anything described as current behavior is read from Sume's code.
Which nodes does a video editing workflow need?
For "caption each new video, then cut it to 15 seconds":
- A trigger that yields a public HTTPS video URL.
- HTTP Request,
POST https://api.sume.com/v1/video-captions, Send Body as JSON:video_url, an optionalstyle, andwebhook_urlset to{{ $execution.resumeUrl }}. Add anIdempotency-Keyheader built from the video's id. A re-run of the workflow has a new resume URL, so the body changes and the old key answers409 idempotency_conflict; give a re-run a new key. - Wait, Resume On Webhook Call, with its HTTP Method matching the POST that Sume sends.
- HTTP Request,
GET https://api.sume.com/v1/video-captions/{id}with thevideo_caption_idfrom the submit node. Continue only whenstatusiscompleted; itsvideo_urlis the captioned file. - HTTP Request,
POST https://api.sume.com/v1/video-trimwith thatvideo_url,start: 0,duration: 15, and the samewebhook_url; a second Wait node; thenGETthe job'sresult_urlfor the cut file'svideo_url.
{
"video_url": "https://example.com/uploads/clip-104.mp4",
"style": "slam",
"webhook_url": "{{ $execution.resumeUrl }}"
}How does the Wait node resume on Sume's webhook?
n8n generates the resume URL at runtime and exposes it as $execution.resumeUrl; its docs say the URL is unique to each execution, and a workflow with several Wait nodes resumes them one after another as the URL is called. Sending webhook_url without a mode puts the Sume job in webhook mode, and Sume POSTs once when the job completes, fails, or is canceled; there are no progress calls.
Treat the POST as a signal, not as the answer: the next node reads the job again with your key. The n8n AI video workflow post covers the Wait node's settings, trusting the resume call, and a time limit for a webhook that never arrives.
- Sume refuses a webhook URL that is not public HTTPS, and in current code one with an explicit non-default port. A self-hosted n8n whose resume URL carries a port such as
:5678won't be accepted. - Keep polling as a backup: the docs call a webhook a delivery optimization, not your only recovery path.
Where does the API key go?
In an n8n credential, not in the node's fields. n8n's HTTP Request credentials include Bearer auth, which its docs describe as header auth with the Name Authorization and the Value Bearer <token>. Use one credential for every Sume node. Sume rejects a request that carries both Authorization: Bearer and x-api-key.
What can each edit take, and what does it cost?
Each node that submits a job is billed on its own, plus a 5.5% agent fee by default. Only the caption job fetches a video from the open internet; cuts and crops read files already on Sume's media host, which is why the caption runs first.
- In current code the caption job refuses a source over 60 seconds or one with no audio stream.
- The caption URL can't be localhost, a private network, or a signed private link.
| Node | Endpoint | Input | Price |
|---|---|---|---|
| Caption | POST /v1/video-captions | Any public HTTPS video, ≤ 60 s, with sound | $0.20 per job |
| Cut | POST /v1/video-trim | A Sume-hosted file, such as the captioned output | up to $0.02 per job |
| Crop or dim | POST /v1/video-filter | A Sume-hosted file, ≤ 300 s | up to $0.02 per job |
Sources
Related posts
More in Integrations
- n8n webhook timeout: respond immediately, then do the work
On n8n Cloud a webhook that hasn't answered in 100 seconds fails with a 524. Set Respond to Immediately, do the slow work after, and dedupe sender retries.
- p-retry npm: retry a paid API POST and stop on errors
p-retry reruns an async function with exponential backoff. Throw AbortError on answers a resend can't fix, and keep one Idempotency-Key per job.
- PHP cURL POST JSON with a Bearer token
json_encode the body, pass the string to CURLOPT_POSTFIELDS, set Content-Type and Authorization headers, then check the status: cURL won't fail on a 4xx.
- Polly retry policy for an HttpClient POST to a paid API
A Polly retry for a paid POST: handle only transient failures, back off exponentially with jitter, honor Retry-After, and resend one idempotency key.
Written by Sume