Video Automation

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

  1. Trigger: a new video appears, for example in a folder, a form, a spreadsheet row or a schedule.
  2. Prepare: n8n collects the title, description, platforms and time.
  3. Publish: one HTTP Request node sends the video to /api/upload.
  4. Report: a Webhook node receives the result and notifies you or updates your list.

Preparation

Step 1: the trigger

Choose what fits your process:

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:

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

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.