Platforms

Platform Guides

What Relaycast can post to each social network, how each account connects, and where the per-platform rules live.

Relaycast publishes to ten networks through one request shape. You send one POST /v1/posts with shared content and media, list the accounts in targets, and add platform-specific settings in targets[].options. Each target is validated against its platform's rules before anything is queued, so content a platform would reject comes back as a 400 instead of a failed job.

Supported platforms

PlatformIDConnects withText onlyImagesVideoMulti-image / carouselOther formats
X (Twitter)twitterOAuth 2.0YesUp to 4 (or 1 GIF)1Up to 4 imagesThreads, polls, quote posts, Communities
InstagraminstagramOAuth (Instagram Login or Facebook Login)NoJPEG1 (as a Reel)Carousel of 2–10Reels, Stories, trial reels, collaborators
FacebookfacebookOAuth (Facebook Login)Yes (optional link card)Up to 101Up to 10 photosReels, Stories, unpublished Page posts
LinkedInlinkedinOAuth 2.0Yes (optional article link)Up to 201Up to 20 imagesPDF documents, Company Page mentions
TikToktiktokOAuth (Login Kit)No1–10 photos1Photo posts (1–10)Inbox (draft) mode
YouTubeyoutubeGoogle OAuthNoNoExactly 1NoFirst comment, custom thumbnail
ThreadsthreadsOAuthYes (optional link card)YesYesCarousel up to 20 itemsQuote posts, topic tags
PinterestpinterestOAuth 2.0No11Carousel of 2–5 imagesBoard required
BlueskyblueskyApp passwordYes (auto link card)Up to 41Up to 4 imagesQuote posts, reply/quote controls, content warnings
Google Business Profilegoogle_businessGoogle OAuthYes1 photoNoNoEvents, offers, call-to-action buttons

Document (PDF) media ("type": "document") is accepted by LinkedIn only. Sending a document to any other account returns a validation_error for that account.

Live streaming

Live Publish restreams one source (HLS, MP4, DASH, RTMP, RTSP, SRT or a media library video) to several platforms at once:

PlatformLiveHow
YouTubeYesConnected channel: the broadcast is created, started and completed automatically
FacebookPages: yes · profiles/groups: stream keyPages through the API (publish_video); profiles and groups as custom RTMP
TwitchYesConnected channel (live-only: Twitch can't receive posts)
Instagram, X, TikTok, LinkedInStream keyCustom RTMP destination with the server URL and key from the platform (each platform decides who gets live access)
Kick and any RTMP/RTMPS serverStream keyCustom RTMP destination
Threads, Pinterest, Bluesky, Google BusinessNoThese platforms have no live streaming

Features by platform

PlatformSchedulingPost analyticsComments / inbox
X (Twitter)YesImpressions, likes, replies, reposts + quotes, bookmarks, clicks (own posts, first 30 days)No
InstagramYesLikes, comments, plus insights (views, reach, shares, saves…)DM inbox and comment-to-DM automations
FacebookYesReactions, comments, shares; impressions/clicks need read_insightsMessenger inbox (opt-in)
LinkedInYesLikes, comments; impressions/clicks need extra LinkedIn accessNo
TikTokYesViews, likes, comments, shares (needs video.list)No
YouTubeYesViews, likes, commentsNo (a first comment can be posted)
ThreadsYesViews, likes, replies, reposts + quotes + sharesNo
PinterestYesImpressions, saves, clicks, reactions, comments (last 90 days)No
BlueskyYesLikes, replies, reposts + quotes, bookmarksNo
Google Business ProfileYesNot available (Google retired the per-post API)No

Scheduling is handled by Relaycast, not by the platform: a scheduled post is held in the queue and sent at scheduledFor, so every platform supports it the same way. See Scheduling.

Analytics are loaded per post from the dashboard (Posts → Analytics); see Analytics. The inbox and comment automations are covered in Inbox & Comment Automation.

How posting works per platform

  1. Validation. Each target's text (its own content override, or the shared content), the shared media, and its options are checked against that platform's rules. Problems are returned per account ID in error.details.
  2. Queueing. One target is created per account and one credit is charged per target.
  3. Publishing. The worker downloads the media, uploads it to the platform, and records the platform's post ID and URL on the target (externalPostId, externalUrl). Temporary failures (timeouts, rate limits, 5xx) are retried with exponential backoff. Permanent failures (bad content, revoked access) mark the target failed and refund its credit.
  4. Revoked access. If a platform reports that access was revoked, the account is set to reconnect_required and has to be reconnected from Integrations before it can be used again.

Media is shared by all targets in a post. Only the text can be overridden per account (targets[].content). To send different media to different platforms, create separate posts.

Connecting accounts

Every platform except Bluesky connects through OAuth from the dashboard: open Integrations, pick the platform, and approve access on the platform's consent screen. To let your own users connect from your app, use a connect link. Bluesky connects with an app password, either in the dashboard or with POST /v1/accounts/bluesky.

If you run your own deployment, each OAuth platform needs an app registered with that platform and its client ID and secret set in the environment. The redirect URI to register is:

https://social-publish-kappa.vercel.app/api/integrations/<platform>/callback

where <platform> is the platform ID from the table above (for example google_business). To use a different redirect URI for one platform, for example a public HTTPS tunnel for a platform that rejects localhost, set <PLATFORM>_REDIRECT_URI (for example TIKTOK_REDIRECT_URI). You can also connect accounts through your own platform apps; see OAuth Apps (BYOK).

PlatformEnvironment variables
X (Twitter)TWITTER_CLIENT_ID, TWITTER_CLIENT_SECRET
Instagram (Instagram Login)INSTAGRAM_APP_ID, INSTAGRAM_APP_SECRET
Instagram (Facebook Login)FACEBOOK_APP_ID, FACEBOOK_APP_SECRET
FacebookFACEBOOK_APP_ID, FACEBOOK_APP_SECRET
LinkedInLINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET
TikTokTIKTOK_CLIENT_KEY, TIKTOK_CLIENT_SECRET
YouTubeGOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET
ThreadsTHREADS_APP_ID, THREADS_APP_SECRET
PinterestPINTEREST_APP_ID, PINTEREST_APP_SECRET
Google Business ProfileGOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET (same Google client as YouTube)

META_GRAPH_VERSION optionally pins the Graph API version used for Facebook, Instagram and Instagram via Facebook Login.

Finding account IDs

targets[].accountId is the Relaycast account ID, not the platform's user ID. List your connected accounts with GET /v1/accounts:

curl https://social-publish-api.onrender.com/v1/accounts -H "x-access-key: $RELAYCAST_API_KEY"

Platform options

Each platform page has an Options section with a table generated from the same definitions the API validates against, plus a complete request example. The generic rules for targets[].options are in Platform Options.

This page is also available as Markdown.