Platforms Overview
RelayAPI's 22 connected publishing platforms, connection models, and capability boundaries.
Supported publishers
RelayAPI's runtime registry and database schema support 22 connected publishing platforms. Scheduling is handled by RelayAPI for every publisher; provider capabilities and connection requirements still differ.
| Platform | Connection model | Core publisher behavior |
|---|---|---|
| Twitter/X | OAuth 2.0 | Text, media, replies, polls, threads, geo, and sensitive-media labels |
| Meta OAuth | Feed, Reels, Trial Reels, custom covers, and Stories for eligible professional accounts | |
| Meta OAuth + Page selection | Page feed/unpublished posts, geo targeting, Reels/drafts, and Stories | |
| OAuth + profile/organization selection | Personal and organization posts | |
| TikTok | OAuth | Direct video/photo publishing or creator-inbox upload; photos require verified pull URLs |
| YouTube | Google OAuth | Video upload, metadata, visibility, and scheduling |
| OAuth + board selection | Image/video Pins | |
| OAuth | Subreddit self/link posts; one media URL can be submitted as a link | |
| Bluesky | Handle + app password | Text, images, embeds, quotes, and threads |
| Threads | Meta OAuth | Text/media posts, replies, threads, polls, quotes, and location tags |
| Telegram | Managed-bot challenge | Text, single media, and media groups |
| Snapchat | Public Profile OAuth + selection | Saved Story and Spotlight; ordinary Story is currently disabled |
| Google Business | Google OAuth + location selection | Business Profile local posts |
| Embedded signup or direct business credentials | Business messages/templates plus capability-gated groups, block lists, usernames, and template administration | |
| Mastodon | Dynamic per-instance OAuth | Statuses, media, polls, replies, and visibility |
| Discord | Validated incoming webhook | Text, attachments, polls, forum threads, TTS, video links, and embeds |
| Slack | Incoming webhook | Text, blocks, attachments, and public media links; no delete/reconcile |
| SMS | Validated Twilio credentials | SMS/MMS with per-recipient outcomes |
| Beehiiv | API credential | Newsletter publication |
| Kit (ConvertKit) | API credential | Broadcast publication |
| Mailchimp | API credential | Campaign publication |
| Listmonk | Instance credentials | Self-hosted newsletter campaigns |
“Supported” means a concrete publisher is registered and the platform identity can be represented by the current database schema. It does not override provider app review, product tier, regional availability, account type, media policy, or permissions. Check the platform page before relying on a specific content type.
Target selectors and provider identities
Create a connection first. Each targets entry may be a RelayAPI account ID, a
platform key, or a workspace ID:
acc_...selects one exact connected account.- A platform key such as
twitterexpands to every active, authorized Twitter account in the post's workspace boundary. ws_...expands to every active, authorized account in that workspace.
Overlapping selectors are de-duplicated before publishing. Prefer account IDs when a post must reach one exact provider identity; use the broader selectors only when their fan-out is intentional.
const post = await client.posts.create({
content: 'Release 2.0 is live.',
targets: ['acc_x_example', 'acc_linkedin_example'],
scheduled_at: 'now',
target_options: {
twitter: {
content: 'Release 2.0 is live. 🚀',
},
linkedin: {
content: 'We have released version 2.0. Read the full changelog…',
},
},
});curl -X POST https://api.relayapi.dev/v1/posts \
-H "Authorization: Bearer $RELAY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: release-2-announcement" \
-d '{
"content": "Release 2.0 is live.",
"targets": ["acc_x_example", "acc_linkedin_example"],
"scheduled_at": "now",
"target_options": {
"twitter": {"content": "Release 2.0 is live. 🚀"},
"linkedin": {"content": "We have released version 2.0."}
}
}'The post's workspace and every resolved account must be mutually authorized. Organization-scoped accounts are visible to credentials with at least one workspace grant; zero-grant credentials see no operational accounts.
Selector expansion does not let publisher options retarget a provider credential. For example, Snapchat always uses the selected Public Profile, Telegram always uses the challenged chat, and Slack/Discord always use the connected webhook destination. TikTok pull-mode media is restricted to the verified URL prefixes snapshotted when that account connected.
Connection classes
- OAuth — RelayAPI redirects the user and stores encrypted access/refresh credentials. Some platforms require a second provider-identity selection.
- Dynamic OAuth — Mastodon registers an OAuth client on the chosen safe public instance and pins that origin to the account.
- Credential connection — RelayAPI stores an encrypted app password, API key, Twilio credential, or webhook after the strongest validation the provider offers. Slack has no non-mutating webhook probe, so its first publish is the activation check.
- Managed bot — Telegram uses a short-lived challenge and verifies both the human administrator and the managed bot's posting permission.
See Connecting Accounts for the exact flows and credential lifecycle.
Published edits and interactions
RelayAPI exposes provider-backed text edits for published X, Facebook, Discord, and Reddit targets, plus a narrower capability matrix for message/comment editing, read receipts, mentions, moderation, likes, votes, and ratings. These are durable mutations with required idempotency keys; unsupported platform/action pairs fail before provider I/O. See Published Edits and Social Actions.
Native analytics
RelayAPI currently exposes native account analytics for Facebook, Instagram, Twitter/X, LinkedIn, YouTube, TikTok, Pinterest, Threads, Google Business, and WhatsApp when the account type and scopes allow them. Other publishers can still participate in stored cross-platform post analytics when RelayAPI has collected snapshots, but they do not gain a live provider adapter merely because publishing is supported.
See Analytics for endpoint, workspace, cache, and pagination behavior.
Provider outcomes
Provider acknowledgement is not always the same as publication or delivery:
- Snapchat Spotlight can remain in moderation.
- Twilio SMS can be accepted, sent, delivered, partially failed, or unknown per recipient.
- WhatsApp's signed
sentcallback remains nonterminal; onlydelivered/readorfailedterminalizes an outbound target. - Slack incoming webhooks return
okwithout a message ID, so they cannot be reconciled or deleted through this integration. - Telegram returns a Message (or one Message per media-group item) but has no later delivery/read lifecycle in this publisher; RelayAPI persists every album message ID for unpublish.
Use one RelayAPI Idempotency-Key per logical mutation, retain it across retries, and follow Error Handling whenever the provider outcome is uncertain.
Unpublish support
POST /v1/posts/{id}/unpublish attempts provider deletion independently for each published target. RelayAPI currently implements provider delete for Twitter/X, Facebook, LinkedIn, Reddit, Pinterest, Threads, YouTube, Bluesky, Google Business, Telegram, Mastodon, and Discord.
Instagram is intentionally not on that list: the current official Instagram API does not document deletion of published Instagram Media. Slack incoming webhooks also provide no message ID suitable for deletion. Targets on Instagram, Slack, TikTok, Snapchat, WhatsApp, SMS, and the newsletter publishers remain published when no supported provider-delete contract exists; RelayAPI returns a per-target error instead of pretending the remote object was removed.
Found something wrong? Help us improve this page.