Guides · 2026-11-07
Publishing videos with n8n: one workflow for all platforms
n8n is a good fit for video publishing: a trigger picks up new clips, one HTTP request sends them to all platforms, and a webhook reports the result. This guide builds the workflow step by step.
Building a separate n8n integration for every social platform is a lot of work. Each one has its own sign-in, upload protocol and error codes, and the access tokens expire at different times. A simpler approach is to let n8n handle the workflow and let a publishing API handle the platforms. This article shows such a setup with Video Automation, but it works the same way with any API that follows the Upload-Post format.
The workflow at a glance
- Trigger: a new video appears, for example in a folder, a form, a spreadsheet row or a schedule.
- Prepare: n8n collects the title, description, platforms and time.
- Publish: one HTTP Request node sends the video to
/api/upload. - Report: a Webhook node receives the result and notifies you or updates your list.
Preparation
- Create an API key in Video Automation under API keys. Treat it like a password.
- Create a profile (for example
acme) and connect the social accounts you want to use. Each platform is connected once through its official sign-in. - In n8n, create a credential of type Header Auth with the name
Authorizationand the valueApikey YOUR_KEY. That keeps the key out of the workflow itself.
Step 1: the trigger
Choose what fits your process:
- Schedule Trigger with a lookup in a spreadsheet or database: publish the row marked for today.
- Webhook from your editing tool or a form: a new clip is sent directly.
- Cloud storage trigger: a file in a "ready" folder starts the flow.
What matters is that n8n ends up with the video either as binary data or as a public URL. Our API accepts both in the video field.
Step 2: prepare the fields
Use a Set or Edit Fields node to build the values the API needs:
| Field | Example | Note |
|---|---|---|
user |
acme |
profile name |
platform[] |
youtube, tiktok, instagram |
repeat the field per platform |
title |
Opening hours over the holidays |
required for YouTube, default caption elsewhere |
scheduled_date |
2026-12-18T10:00:00 |
omit to publish immediately |
timezone |
Europe/Berlin |
time is read in this zone |
Platform-specific fields can be added the same way, for example youtube_description, privacy_level for TikTok or selfDeclaredMadeForKids for YouTube. The API documentation lists all fields.
Step 3: the HTTP Request node
Configure the node as follows:
- Method: POST
- URL:
https://my-video-automation.com/api/upload - Authentication: the Header Auth credential from above
- Body content type: Form-Data (multipart)
- Body parameters: the fields from step 2; for
videochoose "n8n Binary File" and the binary property, or send a URL as text
The node corresponds to this curl request, which is useful for testing outside n8n:
curl -X POST https://my-video-automation.com/api/upload \
-H "Authorization: Apikey YOUR_KEY" \
-F user=acme \
-F "platform[]=youtube" \
-F "platform[]=tiktok" \
-F "platform[]=instagram" \
-F title="Opening hours over the holidays" \
-F video=@holidays.mp4 \
-F scheduled_date=2026-12-18T10:00:00 \
-F timezone=Europe/Berlin
For a scheduled post the response has HTTP status 202 and contains a job_id. Store it, for example in the spreadsheet row, so you can find the post later.
A tip for repeated runs: send an Idempotency-Key header with a value that is unique per video, such as the row ID. If n8n retries the node after a timeout, the API returns the original job instead of creating a second post.
Step 4: receive the result
Publishing happens later, so the HTTP response cannot tell you whether the post succeeded. There are two options.
Webhook (recommended). Create a Webhook node in n8n and register its URL in Video Automation under Webhooks. When an upload finishes or fails, we send an event to n8n. Each delivery is signed with HMAC-SHA256; the signature is in the header X-VA-Signature (and X-Upload-Post-Signature for compatibility). If your n8n instance is not reachable, the delivery is retried up to 6 times. You can verify the signature in a Code node with the webhook secret before you trust the content.
Polling. Alternatively a second workflow can call GET /api/uploadposts/status?job_id=... at intervals. Do not poll more often than every few seconds; the status does not change that fast.
After the webhook, an IF node can route successes to a spreadsheet update and failures to an e-mail or chat message.
Limits to keep in mind
- Requests per minute depend on your plan: 30 in the trial, 60 in Starter, 120 in Pro, 300 in Business and 600 in Agency. For bulk runs use n8n's batching options with a short wait between batches.
- File size: 500 MB per file in the trial, 2 GB in Starter, 4 GB from Pro.
- Uploads: each post to one account counts as one upload. Three platforms mean three uploads.
- Platform limits apply on top, for example YouTube's daily upload quota or TikTok's limit of around 15 posts per creator per day. Details are in the guides on YouTube Shorts and the TikTok API.
Make and other tools
The same pattern works in Make with the HTTP module ("Make a request" with multipart form data) or in any tool that can send form data. If you already have flows for Upload-Post, you only need to change the base URL and the API key; see Upload-Post alternative.
Conclusion
With n8n handling the logic and one API handling the platforms, a video publishing workflow stays small: a trigger, a field mapping, one HTTP request and a webhook. You can test it during the 14-day trial without a card. The plans are on the pricing page, and further questions are answered in the FAQ.