Skip to content
reelspanDocs

Get started

Migrate from Upload-Post

Move an Upload-Post integration to Reelspan - the endpoint map, the auth header change, the field names that differ, and what you gain on the way.

Reelspan takes the same request shapes as Upload-Post: the same form fields (user, platform[], title, scheduled_date, async_upload, {platform}_title and the rest), the same per-network results in the answer, and webhooks with the same event names and payloads. Most integrations move by changing the base URL, the key and the paths.

1. Change the base URL and the key

Upload-Post Reelspan
Base URL https://api.upload-post.com/api https://api.reelspan.com/v1
Auth header Authorization: Apikey <key> Authorization: Apikey <key> or Authorization: Bearer <key>

Reelspan reads both schemes, so the header can stay as it is: only the key changes. Create a key in the dashboard under Developers → API keys; see Authentication.

curl -X POST https://api.reelspan.com/v1/posts/video \
  -H "Authorization: Bearer $REELSPAN_API_KEY" \
  -F "user=my-brand" \
  -F "platform[]=tiktok" \
  -F "platform[]=youtube" \
  -F "title=Launch day" \
  -F "[email protected]"

2. Change the paths

Paths drop the /uploadposts prefix and use /v1/... names. Bodies and query parameters stay the same unless a note says otherwise.

Publishing

Upload-Post Reelspan
POST /api/upload POST /v1/posts/video
POST /api/upload_photos POST /v1/posts/photos
POST /api/upload_text POST /v1/posts/text
POST /api/upload_document POST /v1/posts/document
GET /api/uploadposts/status GET /v1/posts/status
GET /api/uploadposts/history GET /v1/posts
POST /api/uploadposts/posts/retry POST /v1/posts/retry
POST /api/uploadposts/posts/unpublish POST /v1/posts/unpublish
POST /api/uploadposts/posts/edit POST /v1/posts/edit
POST /api/uploadposts/posts/repost POST /v1/posts/repost
POST /api/uploadposts/posts/save POST /v1/posts/save (Pinterest)
POST /api/uploadposts/youtube/thumbnail POST /v1/youtube/thumbnail

Scheduling and the queue

Upload-Post Reelspan
GET /api/uploadposts/schedule GET /v1/scheduled (pages of up to 200; 50 when you send no limit)
GET /api/uploadposts/schedule/{job_id} GET /v1/scheduled/{job_id}
PATCH /api/uploadposts/schedule/{job_id} PATCH /v1/scheduled/{job_id}
GET /api/uploadposts/schedule/{job_id}/thumbnail GET /v1/scheduled/{job_id}/thumbnail (a 302 to the image; ?format=json for the link)
GET /api/uploadposts/schedule/{job_id}/preview GET /v1/scheduled/{job_id}/preview
DELETE /api/uploadposts/schedule/{job_id} DELETE /v1/scheduled/{job_id}
GET / POST /api/uploadposts/queue/settings GET / POST /v1/queue/settings
GET /api/uploadposts/queue/preview GET /v1/queue/preview
GET /api/uploadposts/queue/next-slot GET /v1/queue/next-slot
POST / DELETE /api/uploadposts/queue/slot-full POST / DELETE /v1/queue/slot-full

Profiles and accounts

Upload-Post Reelspan
GET /api/uploadposts/me GET /v1/me
GET / POST /api/uploadposts/users/preferences GET / POST /v1/preferences (adds timezone)
POST /api/uploadposts/users POST /v1/profiles
GET /api/uploadposts/users GET /v1/profiles
GET /api/uploadposts/users/{username} GET /v1/profiles/{username}
PATCH /api/uploadposts/users/{username} PATCH /v1/profiles/{username}
DELETE /api/uploadposts/users DELETE /v1/profiles
DELETE /api/uploadposts/users/social DELETE /v1/accounts (same profile_username and social_platform)
POST /api/uploadposts/users/generate-jwt POST /v1/connect-links (same body, same access_url, valid 48 hours)
GET /api/uploadposts/users/validate-jwt GET /v1/connect-links/validate
POST /api/uploadposts/users/discord/credentials, …/telegram/credentials POST /v1/accounts/{platform}, one route for every credential network
POST /api/uploadposts/oauth/{platform}/start POST /v1/oauth/{platform}/start

Lookups and analytics

Upload-Post Reelspan
GET /api/uploadposts/facebook/pages GET /v1/facebook/pages (profile is required)
POST / DELETE /api/uploadposts/users/facebook-page POST / DELETE /v1/facebook/page; the chosen Page is selected_page_id in GET /v1/facebook/pages
GET /api/uploadposts/facebook/page-info GET /v1/facebook/page-info
GET /api/uploadposts/google-business/locations GET /v1/google-business/locations
POST / DELETE /api/uploadposts/users/google-business-location POST / DELETE /v1/google-business/location; the chosen location is selected_location_id in GET /v1/google-business/locations
GET /api/uploadposts/pinterest/boards GET /v1/pinterest/boards
POST /api/uploadposts/pinterest/boards POST /v1/pinterest/boards (name, description, privacy)
GET / POST /api/uploadposts/pinterest/boards/{board_id}/sections GET / POST /v1/pinterest/boards/{board_id}/sections
GET /api/uploadposts/tiktok/settings GET /v1/tiktok/creator-info (the list is privacy_options, not privacy_level_options)
GET /api/uploadposts/instagram/publishing_limit, …/threads/publishing_limit GET /v1/publishing-limits (both networks in one call, or platform=)
GET /api/uploadposts/reddit/detailed-posts GET /v1/reddit/posts
GET /api/analytics/{profile_username} GET /v1/analytics/{profile_username} (days adds change)
GET /api/uploadposts/total-impressions/{profile_username} GET /v1/analytics/{profile_username}/impressions
GET /api/uploadposts/post-analytics/{request_id} GET /v1/post-analytics/{request_id}
GET /api/uploadposts/post-analytics?platform_post_id=… GET /v1/post-analytics?platform_post_id=… (same platform and user)

Webhooks

Upload-Post Reelspan
GET / POST / DELETE /api/uploadposts/users/notifications GET / POST / DELETE /v1/webhook
POST /api/uploadposts/users/webhook-secret POST /v1/webhook/secret
GET / POST / DELETE /api/uploadposts/users/profile-webhook GET / POST / DELETE /v1/profile-webhook

3. Fields and headers that differ

Upload-Post Reelspan
flair_id (Reddit) reddit_flair_id. subreddit works as before, and so does reddit_subreddit.

The rest carry over as they are: the X-Request-Id and X-External-Id headers (Retrying safely), the gbp_* Google Business fields including EVENT and OFFER posts, facebook_media_type=VIDEO, and PDF, PPT, PPTX, DOC and DOCX documents.

Network fields that Reelspan doesn't read are ignored, not refused, so check each network's page under Networks for the fields it takes.

4. Update your webhook receiver

Event names (upload_completed, social_account_connected, social_account_disconnected, social_account_reauth_required) and payloads are the same; dotted spellings such as social_account.connected are accepted when you subscribe. The headers are renamed, and the signature is built the same way, an HMAC-SHA256 of "{timestamp}.{raw body}":

Upload-Post Reelspan
X-Upload-Post-Signature X-Reelspan-Signature
X-Upload-Post-Timestamp X-Reelspan-Timestamp
X-Upload-Post-Event X-Reelspan-Event
X-Upload-Post-Delivery X-Reelspan-Delivery
User-Agent Upload-Post-Webhooks/1.0 User-Agent Reelspan-Webhooks/1.0

Register the endpoint again on Reelspan: it gets a new signing secret (whsec_…). Reelspan sends webhooks only; there is no Telegram notification channel. See Webhooks.

What you get on top

  • Test keys and a sandbox network. A rs_test_ key runs every check and publishes nothing; the sandbox network needs no connected account. See Test mode.
  • Upload once, post many times. Upload media returns a media_id to use as video_media_id, photo_media_ids[], thumbnail_media_id or cover_media_id, and files over 100 MB go straight to storage in parts.
  • Repeats. repeat_every (day, week, month) and repeat_times schedule a whole series at once; DELETE /v1/scheduled/{job_id}?series=rest cancels the rest of it.
  • Finer retries. Retry can send only some networks again, change their settings first, and run now or at a set time.
  • Webhook deliveries you can see. Failed deliveries are retried with backoff, every delivery is in a log, and you can redeliver one or send a test event.
  • Approval links. Send scheduled posts to a client, who approves each one from a link before it goes out. See Approval links.
  • More analytics. Daily account history, best times to post and period reports.
  • Official SDKs for Node.js and Python with retries and idempotent posts built in. See SDKs.

Not available yet

These Upload-Post endpoints have no Reelspan equivalent today: TikTok hashtag suggestions; comments, DMs and AutoDMs; cached bulk post analytics; Google Business location info and reviews. Editing or unpublishing YouTube videos and Threads posts isn't possible either: Unpublish and Edit a post list the networks that work. If your integration depends on one of these, tell us.

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