Reelspan posts to a Discord channel through a webhook you make in the channel's settings. Messages show the webhook's name and picture as the author, with the video or photos attached as files.
What you can post
| Post | How it appears |
|---|---|
| Video | A message with the video attached as a file, which Discord plays inline |
| Photos | A message with up to 10 photos attached. photos[] can mix photos and videos |
| Text | A plain message |
Messages hold 2,000 characters. Longer text is cut to fit, ending in …, and the result carries a warning.
The result's url links to the message (https://discord.com/channels/…) when the webhook belongs to a server, and post_id is the message id.
Connect your channel
All you need is the webhook URL. Setup takes about a minute.
- In Discord, open the channel's settings (the gear by its name) → Integrations → Webhooks → New Webhook.
- Give it the name and picture posts should show, then click Copy Webhook URL.
- In the Reelspan dashboard, open Accounts → Connect account, choose the profile and Discord, and paste the URL.
Reelspan checks the webhook with Discord before saving it, encrypted. Only discord.com (and discordapp.com, ptb. and canary.) webhook URLs are accepted, and anything after ? is dropped.
With the API
curl -X POST https://api.reelspan.com/v1/accounts/discord \
-H "Authorization: Bearer $REELSPAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"profile_username": "my-brand", "webhook_url": "https://discord.com/api/webhooks/123456789/abcdef..."}'import { Reelspan } from 'reelspan';
const reelspan = new Reelspan();
await reelspan.accounts.connect('my-brand', 'discord', {
webhook_url: process.env.DISCORD_WEBHOOK_URL,
});import os
from reelspan import Reelspan
reelspan = Reelspan()
reelspan.accounts.connect("my-brand", "discord", webhook_url=os.environ["DISCORD_WEBHOOK_URL"]){ "success": true, "platform": "discord", "account": "Reelspan", "reconnected": false }account is the webhook's name.
| Field | Required | Also accepted (Upload-Post) |
|---|---|---|
webhook_url |
Yes | The same name |
Connecting again replaces the Discord account on that profile. See Connect with credentials.
Example post
Photos to the channel, with a Discord-only message:
curl -X POST https://api.reelspan.com/v1/posts/photos \
-H "Authorization: Bearer $REELSPAN_API_KEY" \
-F "user=my-brand" \
-F "platform[]=discord" \
-F "title=New in the app this week" \
-F "discord_title=New this week: dark mode and faster exports. Screens below." \
-F "photos[][email protected]" \
-F "photos[][email protected]"import { Reelspan } from 'reelspan';
import { readFile } from 'node:fs/promises';
const reelspan = new Reelspan();
const post = await reelspan.posts.photos({
user: 'my-brand',
platforms: ['discord'],
title: 'New in the app this week',
photos: [
{ data: await readFile('photo1.jpg'), name: 'photo1.jpg', type: 'image/jpeg' },
{ data: await readFile('photo2.jpg'), name: 'photo2.jpg', type: 'image/jpeg' },
],
extra: { discord_title: 'New this week: dark mode and faster exports. Screens below.' },
});from reelspan import Reelspan
reelspan = Reelspan()
post = reelspan.posts.photos(
"my-brand", ["discord"], ["photo1.jpg", "photo2.jpg"], "New in the app this week",
extra={"discord_title": "New this week: dark mode and faster exports. Screens below."},
)Fields
| Field | Meaning |
|---|---|
discord_title |
The message text on Discord. Falls back to title. |
title |
The caption every network uses, when discord_title isn't sent. |
discord_thread_id |
Posts into this thread of the webhook's channel (or into an existing forum post). |
discord_thread_name |
In a forum channel, starts a new forum post with this title (up to 100 characters). |
discord_flags |
suppress_embeds (no link previews) and/or suppress_notifications (a silent message), separated by commas. |
discord_max_file_mb |
The file limit of a boosted server, in MB: 10 to 100, default 10. |
Discord has no options of its own in the dashboard composer. A webhook can't comment, so a first_comment isn't posted on Discord; the result says "first_comment": "unsupported" with a warning.
Limits and behaviour
- Files: up to 10 MB each, Discord's limit for webhooks on servers without boosts. On a boosted server, send
discord_max_file_mb(up to 100) to allow larger files. A file over the limit fails the Discord post withfile_too_large; Reelspan doesn't shrink it. - Attachments: up to 10 per message. With more photos, the first 10 are sent.
- Text: 2,000 characters, cut with a warning.
- Author: the webhook's name and picture, set in Discord. Change them there.
After posting
The webhook can change only the messages it sent itself:
- Delete a message with Unpublish.
- Edit its text with Edit a post. Attachments stay as they are; text over 2,000 characters is cut with a warning.
Common errors
| Code | When | Fix |
|---|---|---|
INVALID_WEBHOOK |
Connecting: the URL isn't a Discord webhook, or Discord doesn't know it | Copy the URL again from Integrations → Webhooks. |
reauth_required |
Discord answered 401 or 404: the webhook was deleted | Make a new webhook and connect again. |
file_too_large |
A file is over the limit (10 MB, or discord_max_file_mb) |
Send a smaller file, or raise discord_max_file_mb if the server is boosted. |
discord_error |
Discord refused the message. Retried automatically on 429 and 5xx | Read error for Discord's reason. |
MISSING_FIELD |
Connecting without webhook_url |
Send it. |
Errors when connecting come back as a 400 with the code in error_code. Errors when posting are in that network's result. See Errors.