There is no Reelspan app in Zapier yet. A Code by Zapier step (JavaScript) calls the Reelspan REST API directly, and one step posts to every network you name. A Webhooks by Zapier trigger can then catch each network's result.
Trigger (new row, new file…) → Code by Zapier (publish) → …
Webhooks by Zapier: Catch Hook → filter → notifyBefore you start
- In Reelspan, create a profile (for example
my-brand) and connect the networks you post to. - Create an API key under Developers → API keys. A test key (
rs_test_…) lets you build and test the Zap without posting anything. - Have the video at a public
httpsURL, for example from the trigger step. Google Drive and Dropbox share links work.
Post a video
Add an action step: Code by Zapier → Run JavaScript. Under Input Data, add:
| Key | Value |
|---|---|
apiKey |
your key |
user |
my-brand |
platforms |
tiktok,youtube,instagram |
title |
the caption, mapped from an earlier step |
videoUrl |
the video's URL, mapped from an earlier step |
Then paste this code. The video endpoint takes multipart/form-data, so the code builds that body by hand from text fields:
const fields = [
['user', inputData.user],
...inputData.platforms.split(',').map((p) => ['platform[]', p.trim()]),
['title', inputData.title],
['video', inputData.videoUrl],
['async_upload', 'true'],
];
const boundary = `reelspan${Date.now()}`;
const body =
fields.map(([name, value]) => `--${boundary}\r\nContent-Disposition: form-data; name="${name}"\r\n\r\n${value}\r\n`).join('') +
`--${boundary}--\r\n`;
const res = await fetch('https://api.reelspan.com/v1/posts/video', {
method: 'POST',
headers: {
Authorization: `Bearer ${inputData.apiKey}`,
'Content-Type': `multipart/form-data; boundary=${boundary}`,
},
body,
});
const json = await res.json();
if (!res.ok) throw new Error(json.message || `Reelspan answered ${res.status}`);
return { request_id: json.request_id, total_platforms: json.total_platforms };async_upload makes Reelspan answer at once with a request_id while the networks work in the background, which keeps the step well inside Zapier's time limit. Add more fields from Post a video as more [name, value] pairs, for example ['youtube_title', '…'] or ['privacy_level', 'SELF_ONLY'].
Post text
Text posts take JSON. In a Run JavaScript step with apiKey, user, platforms and text as Input Data:
const res = await fetch('https://api.reelspan.com/v1/posts/text', {
method: 'POST',
headers: { Authorization: `Bearer ${inputData.apiKey}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
user: inputData.user,
platform: inputData.platforms.split(',').map((p) => p.trim()),
title: inputData.text,
async_upload: 'true',
}),
});
const json = await res.json();
if (!res.ok) throw new Error(json.message || `Reelspan answered ${res.status}`);
return { request_id: json.request_id };Set platforms to sandbox to try it without a connected account. See Post text for the networks that take text.
Read the results
With a webhook
- Create a second Zap that starts with Webhooks by Zapier → Catch Hook and copy its URL.
- Set that URL as your Reelspan webhook in the dashboard or with
POST /v1/webhook. - Reelspan sends an
upload_completedevent as each network finishes, so the Zap runs once per network. Filter onresult successto act on failures, and mapplatform,result urlandresult error.
Webhooks by Zapier needs a paid Zapier plan. See Webhooks for the full payload.
By polling
In a later step (after a Delay by Zapier, for example), call GET https://api.reelspan.com/v1/posts/status?request_id=… with the same Authorization header. status is pending or in_progress while networks are still working, then completed or failed, and results lists each finished network with its success, post_url and error_message. See Post status.
Keep the key safe
Input Data is visible to anyone who can edit the Zap. Give the key only the scopes the Zap needs (Publish and Read here), and use one key per Zap so you can revoke it alone. See Authentication.
Troubleshooting
| What you see | Likely cause | Fix |
|---|---|---|
| An error about the API key | Missing or wrong key | Check apiKey in Input Data |
400 about user or platform |
A required field is missing or misspelt | Send user, at least one network, title and the video |
Invalid platforms |
A network name is wrong | Use the ids from Networks, such as google_business, comma-separated |
A network shows skipped |
It isn't connected on that profile | Connect it, or drop it from platforms |
| Posts show as done but nothing appears | You are using a test key | Switch to a live key (rs_live_…) |