ReelspanUpload guidesYouTube

Post to YouTube automatically

Connect YouTube once, then send videos to it from code, a workflow or an AI agent. The same call can post to every other network at the same time.
Sign in with YouTube5,000 characters9:1616:97 sections

01

Connect YouTube

  1. In the dashboard, open Accounts and pick YouTube.
  2. Sign in with YouTube and allow Reelspan to post to your channel.
  3. The account joins the profile you had open; every post to that profile can now include it.

Posting for clients? Send them a connect link so they connect their own YouTube account without a Reelspan login.

02

Get an API key

In the dashboard, open Developers → API keys and create one. Keep it in an environment variable such as REELSPAN_KEY; never in code you share.

03

Post with one request

Send the video as a file, or as a public URL like below. Add more platform[] fields to post the same thing everywhere at once.

curl
curl -X POST https://api.reelspan.com/v1/posts/video \
  -H "Authorization: Bearer $REELSPAN_KEY" \
  -F user=my-brand \
  -F "platform[]=youtube" \
  -F "video=https://example.com/clip.mp4" \
  -F "title=Your description" \
  -F "youtube_description=…"
JavaScript (Node 18+)
const form = new FormData();
form.append('user', 'my-brand');
form.append('platform[]', 'youtube');
form.append('video', 'https://example.com/clip.mp4');
form.append('title', 'Your description');

const res = await fetch('https://api.reelspan.com/v1/posts/video', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.REELSPAN_KEY}` },
  body: form,
});
console.log(await res.json());
Python
import os, requests

res = requests.post(
    "https://api.reelspan.com/v1/posts/video",
    headers={"Authorization": f"Bearer {os.environ['REELSPAN_KEY']}"},
    files=[
        ("user", (None, "my-brand")),
        ("platform[]", (None, "youtube")),
        ("video", (None, "https://example.com/clip.mp4")),
        ("title", (None, "Your description")),
    ],
)
print(res.json())

youtube_title sets YouTube’s title (up to 100 characters), separate from the text.

04

YouTube options

youtube_title
The video title, up to 100 characters (defaults to the post title).
youtube_description
The description, up to 5,000 characters.
youtube_privacy_status
public, unlisted or private.
youtube_tags[]
Tags, repeated once per tag.
youtube_playlist_id
Add the video to one of your playlists.
thumbnail_url
A custom thumbnail from a public image URL.
  • A vertical video up to 3 minutes goes out as a Short.
  • Set the title, tags, privacy, playlist and a custom thumbnail per post.
  • Mark AI-made content where YouTube asks for it.

Every field, with its limits: the docs.

05

Schedule it and check the result

  • Add scheduled_date (ISO 8601) and timezone to post later, or add_to_queue=true to take the next slot of your posting schedule.
  • The response has YouTube’s status and the post’s link. For big files send async_upload=true and check GET /v1/posts/status?request_id=…, or get a signed webhook when it’s live.
  • If YouTube refuses a post, the error says why in plain words, and you can retry just that network.

06

Without code

07

Ideas

  • Cut long videos into Shorts and post them on a daily queue.
  • Upload podcast episodes as unlisted, then publish on schedule.

More on YouTube: what you can post there. Other networks: all upload guides.

Questions?Talk to a person.Contact us