Zernio
Zernio
Overview

Social Posting

XInstagramFacebookLinkedInTikTokYouTubePinterestRedditBlueskyThreadsGoogle Business ProfileSnapchat

Messaging

WhatsAppTelegramDiscordSlack

Telephony

Phone NumbersVoice & CallsSMS

Advertising

Meta AdsGoogle AdsLinkedIn AdsTikTok AdsPinterest AdsX AdsOpenAI Ads

Commerce

Shopify
Dashboard
llms.txtOpenAPI
OverviewPlatformsAPI ReferenceResources

Overview

Publish to 16 platforms with one request shape, and check what each platform's API exposes for analytics, the inbox, webhooks and ads before you build on it.


Publish to 16 platforms with POST /v1/posts and one platforms[] entry per account. Shopify connects as well, for blog articles only. Each platform page follows the same layout: connect, publish, platform fields, media requirements, analytics, inbox, what the platform's API does not expose, and common errors. The tables on this page say what each platform supports, so you can pick the platform page you need.

Platform quick reference

PlatformConnectPostAnalyticsMedia Requirements
XOAuth 2.0Text, Images, Videos, ThreadsYesView
InstagramOAuth 2.0Feed, Stories, Reels, CarouselsYesView
FacebookOAuth 2.0Text, Images, Videos, ReelsYesView
LinkedInOAuth 2.0Text, Images, Videos, DocumentsYesView
TikTokOAuth 2.0VideosYesView
YouTubeOAuth 2.0Videos, ShortsYesView
PinterestOAuth 2.0Pins (Image/Video)YesView
RedditOAuth 2.0Text, Images, Videos, LinksLimitedView
BlueskyApp PasswordText, Images, VideosLimitedView
ThreadsOAuth 2.0Text, Images, VideosYesView
Google Business ProfileOAuth 2.0Updates, PhotosYesView
TelegramBot TokenText, Images, Videos, AlbumsNoView
SnapchatClosed betaOAuth 2.0Stories, Saved Stories, SpotlightYesView
WhatsAppRedirect / CredentialsTemplates, Text, Media, Broadcasts, FlowsNoView
DiscordOAuth 2.0 (Bot)Messages, Embeds, Polls, Forum Posts, ThreadsNoView
SlackOAuth 2.0 (Bot)Messages, Thread RepliesNoView
ShopifyOAuth 2.0 / Admin tokenBlog articles (no social posts)No—

Connect and publish

Every platform except Shopify connects through GET /v1/connect/{platform} with profileId, where {platform} is twitter, instagram, facebook, linkedin, tiktok, youtube, pinterest, reddit, bluesky, threads, googlebusiness, telegram, snapchat, whatsapp, discord or slack. Bluesky and Telegram take credentials instead of OAuth, and 5 platforms add a selection step after OAuth; the connecting accounts guide covers every path. Shopify connects through GET /v1/connect/shopify, which also needs the store's shop domain; see the Shopify page.

One request publishes to several accounts at once. Each entry names its platform and account, and platformSpecificData on an entry carries that platform's fields:

import Zernio from '@zernio/node';

const zernio = new Zernio();

const { data: published } = await zernio.posts.createPost({
  body: {
    content: 'Our changelog for September is out',
    platforms: [
      { platform: 'twitter', accountId: '66b2e19d8c3f5a7e9d0b1c2d' },
      { platform: 'linkedin', accountId: '66b2e19d8c3f5a7e9d0b1c2e' },
      { platform: 'bluesky', accountId: '66b2e19d8c3f5a7e9d0b1c2f' }
    ],
    publishNow: true
  }
});

console.log(published.post.status);

Response (201):

{
  "post": {
    "_id": "65f1c0a9e2b5af0012ab34cd",
    "status": "published",
    "platforms": [
      { "platform": "twitter", "status": "published", "platformPostUrl": "https://x.com/..." },
      { "platform": "linkedin", "status": "published", "platformPostUrl": "https://www.linkedin.com/feed/update/..." },
      { "platform": "bluesky", "status": "published", "platformPostUrl": "https://bsky.app/profile/..." }
    ]
  }
}

Each platform entry succeeds or fails on its own; post lifecycle explains the statuses. The quickstart walks through the API key, the profile and the first scheduled post.

Platform-specific features

Each platform page documents these under Publish and Platform fields:

  • X (twitter): threads, polls, scheduled spaces
  • Instagram: Stories, Reels, carousels, collaborators
  • Facebook: Reels, Stories, Page posts
  • LinkedIn: documents (PDFs), company pages, personal profiles
  • TikTok: privacy settings, duet and stitch controls
  • YouTube: Shorts, playlists, visibility settings
  • Pinterest: boards, rich pins
  • Reddit: subreddits, flairs, NSFW tags, native video uploads with videogif and custom poster support
  • Bluesky: custom feeds, app passwords
  • Threads: reply controls
  • Google Business Profile: location posts, offers, events, performance metrics, search keywords
  • Telegram: channels, groups, silent messages, protected content
  • Snapchat (closed beta): Stories, Saved Stories, Spotlight, public profiles. New connections return 403 PLATFORM_BETA_RESTRICTED until the account is approved; there is no public release date yet.
  • WhatsApp: template messages, broadcasts, contacts, conversations, Flows (interactive forms)
  • Discord: messages, embeds, native polls, forum posts, threads, crosspost
  • Slack: channel messages, thread replies, file uploads, per-message bot identity
  • Shopify (connect-only): storefront blogs and articles, HTML bodies, SEO fields, native scheduled publish

Analytics metrics

The Analytics API returns these metrics per platform:

PlatformImpressionsReachLikesCommentsSharesSavesClicksViews
Instagram
Facebook
X
LinkedIn******
TikTok
YouTube****
Threads
Bluesky
Reddit
Pinterest
Snapchat
Telegram
Discord
Slack
WhatsApp
Google Business Profile*****

* LinkedIn saves: personal accounts only.

** LinkedIn clicks: organization accounts only.

*** LinkedIn views: video posts only.

**** YouTube shares come from the daily Analytics API, not the basic Data API.

***** Google deprecated per-post analytics with no replacement. Use the Performance API for location-level metrics (impressions, clicks, calls, directions, bookings).

Dedicated endpoints go further on 3 platforms: YouTube audience demographics (age, gender, country), Google Business Profile daily performance metrics and search keywords, and the Instagram account, follower and Story endpoints listed on the Instagram page.

Inbox

The Inbox API serves DMs, comments and reviews from every platform through Messages, Comments and Reviews.

DMs

PlatformListFetchSend textAttachmentsQuick repliesButtonsEditArchive
Facebook
Instagram
X
Bluesky
Reddit
Telegram
WhatsApp
SMS
Slack
TikTok

Discord sends outbound DMs from the bot through POST /v1/discord/dms; replies do not arrive, so it is not part of the inbox. See the Discord page.

Comments

PlatformListPostReplyDeleteLikeHide
Facebook
InstagramLimited release
X
Bluesky
Threads
Reddit
YouTube
LinkedIn
TikTok

Like comment covers Facebook, X, Bluesky, Reddit, LinkedIn and TikTok. On LinkedIn it takes the composite comment URN as commentId and an optional reactionType. On Instagram it is in limited release: it needs Meta's instagram_manage_engagement permission, which Zernio holds under Standard Access, so it works for admins, developers and testers of Zernio's Meta app and returns a 403 with code PLATFORM_BETA_RESTRICTED for every other account, and only on accounts connected through Facebook Login (Instagram comments).

Reviews

PlatformListReplyDelete reply
Facebook
Google Business Profile

Webhooks

Message and comment events:

Platformcomment.receivedmessage.receivedmessage.sent
Instagram
Facebook
X
YouTube
LinkedIn
Bluesky
Reddit
Telegram
WhatsApp
TikTok

Message lifecycle events (edits, unsends, delivery status):

Platformmessage.editedmessage.deletedmessage.deliveredmessage.readmessage.failed
Instagram
Facebook
WhatsApp (business-side)
Telegram
X
Bluesky
Reddit

A "no" means the platform's API does not expose the event. Slack fires message.received for DMs and mentions (Slack page). reaction.received fires on Instagram, Facebook, WhatsApp, Telegram and Slack. The webhooks page has every payload.

Account settings

PlatformFeatureEndpoint
FacebookPersistent menu/v1/accounts/{accountId}/messenger-menu
InstagramIce breakers/v1/accounts/{accountId}/instagram-ice-breakers
TelegramBot commands/v1/accounts/{accountId}/telegram-commands

Account settings documents each endpoint.

No inbox

PlatformStatusNotes
PinterestNo APIPinterest exposes no DMs or comments
SnapchatNo APISnapchat exposes no DMs or comments

Platform limitations

PlatformLimitation
InstagramComment likes in limited release
XDMs require the dm.read and dm.write scopes, no archive or unarchive, reply search cached for 2 minutes
BlueskyNo DM attachments, liking a comment requires its cid
ThreadsNo DMs, no comment likes; a comment is a reply to the thread, hide and unhide supported
RedditNo DM attachments
TelegramBot-based, media limits (photos 10 MB, videos 50 MB)
YouTubeNo DMs, no comment likes
LinkedInOrganization accounts only, comment likes need the social-feed scopes
WhatsAppTemplate messages required outside the 24-hour window, no comments
TikTokAccounts connected through TikTok's Business app only; DMs need a Business Account outside the EEA, Switzerland and the UK, and are replies only

Ad platforms

The /v1/ads endpoints create campaigns, boost organic posts, manage audiences and read analytics on 7 ad networks:

PlatformKeyCreateBoostAudiencesAnalytics
Meta Ads (Facebook and Instagram)metaadsYesYesCustomer list, website, lookalike, engagementYes
Google AdsgoogleadsSearch and DisplayYes (engagement, traffic, awareness, video_views)Customer MatchYes
LinkedIn AdslinkedinadsYesYesContact list, company list, engagement retargeting, website retargetingYes
TikTok AdstiktokadsYesSpark AdsCustomer listYes
Pinterest AdspinterestadsYesYesCustomer listYes
X AdsxadsYesYesTailored AudiencesYes
OpenAI Ads (ChatGPT)openaiadsYesNoNoYes

Ad hierarchy

PlatformTop levelMiddleBottom
Meta AdsCampaignAd SetAd
Google AdsCampaignAd GroupAd
LinkedIn AdsCampaign GroupCampaignCreative
TikTok AdsCampaignAd GroupAd
Pinterest AdsCampaignAd GroupPin
X AdsCampaignLine ItemPromoted Tweet
OpenAI AdsCampaignAd GroupChat Card Ad

Each ad platform page has the create and boost calls in Node.js, Python and curl.

Common errors

One entry can fail while the others publish. The request above with a caption over Bluesky's 300-character limit returns 207 with post.status: "partial", the two published entries intact and the reason on the failing one:

{
  "post": {
    "_id": "65f1c0a9e2b5af0012ab34cd",
    "status": "partial",
    "platforms": [
      { "platform": "twitter", "status": "published", "platformPostUrl": "https://x.com/..." },
      { "platform": "linkedin", "status": "published", "platformPostUrl": "https://www.linkedin.com/feed/update/..." },
      { "platform": "bluesky", "status": "failed", "errorMessage": "Bluesky posts cannot exceed 300 characters" }
    ]
  },
  "platformResults": [
    { "platform": "twitter", "status": "published", "error": null },
    { "platform": "linkedin", "status": "published", "error": null },
    { "platform": "bluesky", "status": "failed", "error": "Bluesky posts cannot exceed 300 characters" }
  ]
}

207 is a 2xx status, so fetch(...).ok is true; branch on the status code and on post.status, which post lifecycle defines. Send a shorter customContent on the entry that rejected the text. Error handling covers the envelope.

Related

  • Connecting accounts: the OAuth flow, the selection step and the credential platforms.
  • Create post: every field of the request.
  • Media uploads: upload images and videos instead of hosting them.
  • Analytics: post performance metrics.
  • Ads: campaigns, boosts and ad analytics.
  • Pricing: what connected accounts, analytics, the inbox, ads and outbound messages cost.
Was this page helpful?

X

Publish posts, threads, replies, quotes and polls to X with the Zernio API, then read analytics, retweet, bookmark, follow and answer DMs from the same account.

On this page

Platform quick referenceConnect and publishPlatform-specific featuresAnalytics metricsInboxDMsCommentsReviewsWebhooksAccount settingsNo inboxPlatform limitationsAd platformsAd hierarchyCommon errorsRelated