Managed backends
Compare Zernio, Post for Me, PostFast, Postiz, and Buffer by supported operations, platform coverage, webhooks, and pricing.
A managed backend is optional: instead of calling a social platform’s API with credentials you control, the SDK calls Zernio, Post for Me, PostFast, Postiz, or Buffer using your own provider account. Managed providers own the platform apps and account connections; with self-hosted Postiz, you configure your own instance and platform apps; your application keeps tenant authorization and outcome handling.
Direct integrations remain the other route: your platform app, your tokens, your review processes, no provider charges. Each platform page documents that route. Nothing routes through a maintainer-operated service in either mode, and an application can use any of the providers, several, or none.
For native platform APIs, unified social media APIs, and libraries compared side by side, read the social media APIs guide.
Moving off Ayrshare? The Ayrshare alternatives guide maps its profiles and post calls to the SDK.
Compare SDK adapter support
| Zernio | Post for Me | PostFast | Postiz | Buffer | |
|---|---|---|---|---|---|
| Platforms | X, Threads, Bluesky, YouTube, TikTok, Instagram, LinkedIn, Facebook, Pinterest, Reddit (unavailable), Telegram, Discord, Google Business, Snapchat (closed beta) | X, Threads, Bluesky, YouTube, TikTok, Instagram, LinkedIn, Facebook, Pinterest | X, Threads, Bluesky, YouTube, TikTok, Instagram, LinkedIn, Facebook, Pinterest, Telegram, Google Business | X, Threads, Bluesky, YouTube, TikTok, Instagram, LinkedIn, Facebook, Pinterest, Reddit, Mastodon, Telegram, Discord, Google Business, Twitch, plus other Postiz channels | X, Threads, Bluesky, YouTube, TikTok, Instagram, LinkedIn, Facebook, Pinterest, Mastodon, Google Business, Substack |
| Publish | Text, images, video, carousels, LinkedIn documents; now or scheduled | Text, images, video, carousels, LinkedIn documents; now or scheduled | Text, images, video, carousels, LinkedIn documents; scheduled only | Text, images, video, carousels; now or scheduled | Text, images, video, carousels, LinkedIn documents; now, scheduled, or queued |
| Scheduling | Schedule and cancel | Schedule and cancel | Schedule and cancel | Schedule and cancel | Schedule and cancel |
| Post reads and status | posts.get, posts.list, status |
posts.get, posts.list, status |
posts.list, status |
posts.list, status |
posts.get, posts.list, status |
| Media upload | All platforms | All platforms | All platforms | Platforms that take media | — (public HTTPS URLs only) |
| Post analytics | X, Threads, YouTube, TikTok, Instagram, LinkedIn, Facebook, Pinterest, Snapchat; likes, comments and shares on Bluesky; Reddit (unavailable). None for Google Business, Telegram or Discord | Feed-based, all platforms | All platforms | X, Threads, Bluesky, YouTube, TikTok, Instagram, LinkedIn, Facebook, Pinterest, Reddit, Mastodon, Telegram, Discord, Google Business, Twitch | Sent posts; personal API keys |
| Account analytics | Follower counts when Zernio reports them | — | Follower counts (none yet for X and Google Business) | Same platforms as post analytics; last 30 days | Channel reports with analytics.getReport; personal API keys |
| Comments | X, Threads, Bluesky, YouTube, TikTok (Business accounts), Instagram, LinkedIn, Facebook, Reddit | — | — | — | — |
| Messages | X, Bluesky, Instagram, Facebook, Reddit (unavailable), Telegram | — | — | — | — |
| Native post removal | X, Threads, Bluesky, YouTube, LinkedIn, Facebook, Pinterest, Reddit, Telegram, Discord, Google Business | — | — | — | — |
| Webhook verification | X-Zernio-Signature HMAC over raw bytes |
Post-For-Me-Webhook-Secret shared secret |
— (no webhooks; poll status) | — (webhooks are unsigned; poll status) | — (no public webhook API; poll status) |
| Company / pricing | zernio.com | postforme.dev | postfa.st | postiz.com | buffer.com |
| Setup guide | Zernio setup | Post for Me setup | PostFast setup | Postiz setup | Buffer setup |
Zernio’s platform comparison, checked November 4, 2026, lists Reddit as temporarily unavailable: Zernio cannot post to Reddit, read Reddit messages, or sync Reddit analytics because Reddit has blocked third-party apps from its API. The SDK’s Zernio Reddit methods remain, but Zernio refuses those requests for now. See Zernio.
The same comparison marks Google Business Profile, Telegram and Discord as having no post metrics, so expect none from getPostMetrics there. Google deprecated per-post analytics for Business Profiles. Zernio’s separate Performance API reports location-level impressions, clicks, calls, directions and bookings, which are location metrics rather than post metrics; zernioNative.googleBusinessPerformance reads them as daily series, and zernioNative.googleBusinessSearchKeywords reads the search terms that showed a location. Snapchat is in closed beta at Zernio. Account follower counts can be missing without Zernio’s Analytics add-on.
A dash means unimplemented in this SDK, not absent from the vendor API. This manually maintained comparison describes the normalized SDK surface alongside the generated capability matrix; they do not certify a provider account, plan tier, platform permission, or a live request.
You pay the selected provider directly and remain responsible for its plan, platform permissions, add-ons, and connected-account terms.
Publishing formats depend on the platform. YouTube requires video; Instagram, TikTok, and Pinterest require media; Zernio Snapchat takes video only. PostFast Bluesky takes text, images, or one MP4 video of at most 100 MB, never images and video together. Zernio, Post for Me, PostFast and Buffer publish LinkedIn documents; Postiz does not. The listed generic formats do not imply stories, reels, custom thumbnails, or every vendor option. Zernio, Post for Me, Postiz, and Buffer publish now or on a schedule; PostFast schedules only. Cancel deletes the scheduled record for Zernio, PostFast, Postiz, and Buffer; Post for Me retains a draft. Buffer media must already be a public HTTPS URL. Feed scope and metric availability vary by platform and connection permissions.
What managed routes share
- The provider API key stays on your server and is passed to the adapter. Connected accounts are provider records that your application must map to tenants before any operation.
- Provider acceptance is not platform publication. Preserve the provider record, inspect every destination result, and reconcile pending or uncertain deliveries.
- Zernio verifies HMAC over raw bytes. Post for Me checks an endpoint-secret header, which does not authenticate the body, so workers must read current provider state. PostFast and Buffer have no public webhook verifier, and the SDK does not accept unsigned Postiz callbacks; poll those routes. See events.
- Social SDK does not pool keys, resell provider usage, or transfer authorizations between providers. PostFast and Postiz sponsor the project; that does not change how any adapter behaves.
Use two providers together
Register each adapter under its own name in backends. Accounts carry the name as backend, so one publish call can target accounts from both providers and returns one outcome per target. The full example is in examples/snippets/backend-mixed.ts.
import { createSocial } from "@opencoredev/social-sdk";
import { postfast } from "@opencoredev/social-sdk/cloud/postfast";
import { zernio } from "@opencoredev/social-sdk/cloud/zernio";
const social = createSocial({
backends: {
zernio: zernio({ apiKey: process.env.ZERNIO_API_KEY! }),
postfast: postfast({ apiKey: process.env.POSTFAST_API_KEY! }),
},
});
const authorization = { tenantId: "tenant-from-session" };
const zernioAccounts = await social.accounts.list({ backend: "zernio", authorization });
const postfastAccounts = await social.accounts.list({ backend: "postfast", authorization });
const zernioX = zernioAccounts.items.find((item) => item.ref.platform === "x")?.ref;
const postfastLinkedIn = postfastAccounts.items.find(
(item) => item.ref.platform === "linkedin",
)?.ref;
if (!zernioX || !postfastLinkedIn) throw new Error("Connect both destination accounts first.");
const at = new Date(Date.now() + 7 * 86_400_000).toISOString();
const result = await social.posts.publish(
{
targets: [{ account: zernioX }, { account: postfastLinkedIn }],
content: { text: "Registration for the spring cohort is open." },
schedule: { at },
},
{ authorization },
);
PostFast only schedules, so a mixed post that includes a PostFast target needs a future schedule.at within one year. Load authorization.tenantId from the authenticated server session and enforce account grants with an authorization policy. Listing accounts alone is not a tenant grant.