Skip to content
reelspanDocs

Integrations

n8n

Post videos and text to 22 networks from an n8n workflow with the HTTP Request node, then check each network's result by polling or with a webhook.

There is no Reelspan node for n8n yet. The built-in HTTP Request node calls the Reelspan REST API directly, and one node posts to every network you name. This page builds a workflow that publishes a video, waits, and reads each network's result.

Trigger → get the video → HTTP Request (publish) → Wait → HTTP Request (status) → IF → notify

Before you start

  1. In Reelspan, create a profile (for example my-brand) and connect the networks you post to.
  2. Create an API key under Developers → API keys. A test key (rs_test_…) lets you build the whole workflow without posting anything.
  3. In n8n, create a credential of type Header Auth with:
    • Name: Authorization
    • Value: Bearer rs_test_… (your key)

Keeping the key in a credential means it never appears in exported workflows.

Post a video

Get the video into the workflow first. Either it is already at a public https URL, or a node such as Google Drive Download puts the file on the item as binary data, usually in a property called data.

Add an HTTP Request node:

Setting Value
Method POST
URL https://api.reelspan.com/v1/posts/video
Authentication Generic Credential Type → Header Auth → your credential
Send Body On
Body Content Type Form-Data

Then add the body parameters:

Name Type Value
user Form Data my-brand
platform[] Form Data tiktok
platform[] Form Data youtube
platform[] Form Data instagram
title Form Data the caption (YouTube uses it as the title)
video n8n Binary File Input Data Field Name: data
async_upload Form Data true

Add one platform[] row per network. To send a URL instead of a file, make video a normal Form Data field with the URL as its value.

With async_upload set, the node returns at once with a request_id:

{
  "success": true,
  "message": "Upload initiated successfully in background.",
  "request_id": "9b1f6c2e8a3d4f50b7e1c9a2d6f3e8b1",
  "total_platforms": 3
}

Every other field from Post a video is another Form Data row: youtube_title and tiktok_title for per-network captions, privacy_level for TikTok, first_comment, and so on.

Post text

Text posts take JSON, so there is no file to handle. In an HTTP Request node, set Method to POST, URL to https://api.reelspan.com/v1/posts/text, the same credential, Send Body on, Body Content Type JSON, Specify Body Using JSON, and:

{
  "user": "my-brand",
  "platform": ["x", "bluesky", "threads"],
  "title": "{{ $json.text }}",
  "async_upload": "true"
}

To try it without a connected account, use "platform": ["sandbox"]. See Post text for the networks that take text.

Read the results

Poll the status

  1. Add a Wait node, for example one or two minutes for a video.
  2. Add an HTTP Request node: GET https://api.reelspan.com/v1/posts/status, the same credential, with the query parameter request_id set to {{ $('Publish').item.json.request_id }} (use your publish node's name).
  3. Add an IF node on {{ $json.status }}. It is pending or in_progress while networks are still working, then completed (at least one network published) or failed. Loop back to the Wait node while it is still working.
{
  "success": true,
  "request_id": "9b1f6c2e8a3d4f50b7e1c9a2d6f3e8b1",
  "status": "in_progress",
  "completed": 1,
  "total": 3,
  "results": [
    { "platform": "tiktok", "success": true, "status": "completed", "post_url": "https://www.tiktok.com/@mybrand/video/7441…", "error_message": null, "error_code": null }
  ]
}

Only networks that have finished appear in results. Each has its own success, post_url and error_message, so send yourself a message for the ones that failed. Poll no more often than every 5 seconds. For a scheduled post, query with job_id instead. See Post status.

Or get a webhook

Instead of waiting and polling, start a second workflow with a Webhook trigger node, and set its production URL as your Reelspan webhook in the dashboard or with POST /v1/webhook. Reelspan sends an upload_completed event as each network finishes, so the workflow runs once per network with that network's result. Deliveries are signed with X-Reelspan-Signature; see Webhooks.

Retry what failed

From the failure branch, call POST https://api.reelspan.com/v1/posts/retry with a JSON body holding the request_id and, optionally, platforms to retry only some. The media is not uploaded again. See Retry.

Schedule instead of posting now

Add scheduled_date (ISO 8601) and timezone (for example Europe/London) to the publish request. Reelspan answers 202 with a job_id and posts at that time even when n8n is off. Or add add_to_queue = true to take the profile's next queue slot. See Scheduled posts.

Tips

  • Send an Idempotency-Key header (for example the file name plus the date) so a retried run never posts twice. See Retrying safely.
  • Log the request_id next to the video in a sheet, so you can trace any post later.
  • Move or mark the source file after it posts, so the workflow doesn't pick it up again.

Troubleshooting

What you see Likely cause Fix
401 Missing or wrong key The credential's name must be Authorization and its value must start with Bearer
400 about user or platform A required field is missing Send user, at least one platform[], title and video
A network shows skipped It isn't connected on that profile Connect it, or drop it from the request
The video arrives empty Wrong binary property Match Input Data Field Name to the property the download node wrote, usually data
Posts show as done but nothing appears You are using a test key Switch the credential to a live key (rs_live_…)

Something unclear or missing? Write to [email protected] and we’ll fix the page.