Social media APIs for developers
A social media API lets your code publish, read, or manage posts on a social network. There are three ways to get one: call each platform's own API (X, Bluesky, Threads, Instagram, LinkedIn, TikTok, YouTube) with your own developer app, pay a unified social media API provider that stores the account connections and gives you one endpoint, or use an open-source library that wraps the platform APIs in one interface while you keep your own apps and tokens. This page compares the three, lists what each platform requires before you can post, and ends with a tested example.
Platform facts below come from each platform's own developer documentation, and provider descriptions from each provider's own site, read on 30 October 2026 unless a linked guide says otherwise. We don't list prices: they change often, so check each pricing page.
The three options
| Option | What it means for you |
|---|---|
| Native platform APIs | Your own developer app on each network, its own review, tokens, limits, and billing. No intermediary, most control, most work. |
| Unified social media API | One provider, one API key, one request shape. The provider stores account connections and usually the platform apps, and passes on each network's rules. |
| Open-source library | One interface in your code over the native APIs, with your own apps and tokens. Some libraries can also call a unified provider behind the same interface. |
Most teams pick on two questions: who should own the platform apps and their review, and how many networks do you need on day one. One or two networks you control usually means native APIs. Many networks for many customers, fast, usually means a unified API.
Native platform APIs: what each one requires
Every network runs its own API with its own access rules. Before your code can post for anyone outside your own test accounts, expect some form of app review on most of them.
| Platform | What you need to post, and the main limit |
|---|---|
| X | A developer app and an OAuth 2.0 user token with tweet.write. Pay-per-use credits; no general free tier. |
| Bluesky | No developer account or key. Log in as the account (app password or OAuth). About 1,666 new records an hour per account. |
| Threads | A Meta app with threads_content_publish, App Review for users outside your app's roles. 250 API posts per profile per 24 hours. |
| A professional (Business or Creator) account and a Meta app. 100 API-published posts per account in a moving 24 hours; a carousel counts as one. | |
w_member_social to post as a member, or w_organization_social plus an admin or poster role on the Page. | |
| TikTok | A TikTok app with video.publish. Until TikTok audits the app, everything it posts is private. |
| YouTube | A Google Cloud project and an OAuth token with youtube.upload. 100 videos.insert calls a day by default. |
Sources: Instagram content publishing (updated 20 October 2026), LinkedIn Posts API, TikTok Content Posting API, and YouTube quota costs, read 30 October 2026. The X, Bluesky, and Threads rows summarise our guides to those APIs, which cite their sources and dates.
Native APIs also differ in shape. Instagram and Threads publish in two steps (create a container, then publish it), TikTok asks the creator to confirm privacy and consent first, YouTube uploads are resumable, and Bluesky writes a record to the account's repository. That is most of the work a unified API or a library hides.
Unified social media APIs
A unified API provider stores your users' account connections and, for most networks, registers the platform apps and passes their reviews. Some ask you to bring your own developer app for certain networks, so check each provider's docs per platform. You send one request and the provider fans it out. The trade-off is a dependency: the provider's coverage, limits, and pricing become yours. Providers describe themselves on their own sites (read 30 October 2026) as:
- Ayrshare: a unified social media API to post, schedule, and analyze, with an MCP server for AI agents.
- Upload-Post: one API call to post on TikTok, Instagram, YouTube, and more, with Python and JavaScript SDKs.
- Outstand: a unified social media API for AI agents, schedulers, and analytics dashboards.
- bundle.social: one API for publishing, analytics, and comments, plus Instagram and Facebook DMs.
- Zernio: marketing infrastructure for agents behind one API key, with an MCP server (getlate.dev now redirects there).
- Post for Me: a unified developer API to post and schedule content across TikTok, Instagram, Facebook, X, LinkedIn, YouTube, Threads, Pinterest, and Bluesky.
- Blotato: a social media API and MCP server for AI agents.
Schedulers with an API sit close to this group: your code feeds posts to a tool your team also uses by hand. Buffer has a GraphQL API, Postiz is open source and can be self-hosted, and PostFast exposes an API. If you want the whole tool on your own server, Mixpost describes itself as open-source, self-hosted social media management. Enterprise suites such as Hootsuite and Sprout Social also offer APIs.
Open-source libraries
A library keeps you on the native APIs but saves you writing each client. Per-platform
libraries cover one network well: twitter-api-v2 for X,
@atproto/api for Bluesky, and googleapis for YouTube.
Meta's Graph API (Instagram, Threads, Facebook) is plain HTTPS, so most teams call it
with fetch.
Social SDK is an open-source (MIT) TypeScript library that puts many
networks behind one posts.publish call. It has direct adapters for X,
Bluesky, Threads, Instagram, LinkedIn, TikTok, and YouTube, so the platform apps and
tokens stay yours, and it can also run the same call through managed backends,
Zernio, Post for Me, and PostFast in the 0.5.0 npm release. Every call returns one
typed outcome per destination, including unknown when a write may or
may not have landed, so your code can check before it retries instead of posting
twice.
Posting to two networks from TypeScript
This posts the same text to X and Bluesky with Social SDK's direct adapters. A
managed backend uses the same publish call shape, but its accounts are
the provider's account references and each provider adds its own requirements (the
backend pages list them), so moving between them is a mapping step, not a rewrite.
npm install @opencoredev/social-sdk
import { createSocial, connectedAccountRef } from "@opencoredev/social-sdk";
import { bluesky } from "@opencoredev/social-sdk/bluesky";
import { x } from "@opencoredev/social-sdk/x";
const env = (name: string): string => {
const value = process.env[name];
if (!value) throw new Error(`Set ${name}`);
return value;
};
// Direct adapters: your own X app token and a Bluesky session, no intermediary.
const social = createSocial({
backends: {
x: x({ auth: { userId: env("X_USER_ID"), accessToken: env("X_ACCESS_TOKEN") } }),
bluesky: bluesky({
backend: "bluesky",
auth: {
service: "https://bsky.social",
did: env("BLUESKY_DID"),
accessJwt: env("BLUESKY_ACCESS_JWT"),
},
}),
},
});
const result = await social.posts.publish({
targets: [
{ account: connectedAccountRef({ backend: "x", platform: "x", accountId: env("X_USER_ID") }) },
{
account: connectedAccountRef({
backend: "bluesky",
platform: "bluesky",
accountId: env("BLUESKY_DID"),
}),
},
],
content: { text: "Release notes for v2 are up." },
});
// One typed outcome per destination; a failure on one network doesn't hide the other.
for (const outcome of result.outcomes) {
console.log(outcome.account.platform, outcome.state);
}
We type-checked this against @opencoredev/social-sdk 0.5.0 from npm and
ran it on 30 October 2026 on Node.js 24 with a stub fetch. It made one
POST https://api.x.com/2/tweets and one
com.atproto.repo.createRecord call to bsky.social, and
printed x published and bluesky published. To try it with no
keys at all, use the mock backend.
The platforms overview adds Threads to the same call,
and managed backends compares the providers.
How to choose
- One or two networks, your own accounts: the native API, or a per-platform library.
- Many networks for your customers, shipped this week: a unified API, after checking its platform list and how account connections work.
- Many networks, but you want to own the apps and tokens: an open-source multi-platform library.
- Your team already schedules in a tool: that scheduler's API.
- Not sure yet: a library that supports both direct adapters and managed backends lets you start on one and move later.
Common questions
- What is a social media API?
- An HTTP interface that lets code act on a social network: publish posts, upload media, read posts and comments, or fetch analytics, for an account that authorized your app.
- Is there a free social media API?
- It depends on the network. Bluesky needs no developer account or key. X bills pay-per-use and has no general free tier. Meta, LinkedIn, TikTok, and YouTube require app review, an audit, or quota limits before you can post publicly for other users; check each platform's terms for costs.
- What is a unified social media API?
- One API from a provider that posts to many networks for you. The provider stores the account connections and, for most networks, the platform apps.
- Can I post to several networks with one API call?
- Yes, through a unified API, or with a library such as Social SDK that sends one call to each network's own API and returns a result per network.
- Which social media APIs work with AI agents?
- Several unified providers ship MCP servers. Social SDK has an agent integration guide and returns per-destination outcomes an agent can check before it retries.
Sources
Read on 30 October 2026:
- Instagram content publishing: professional accounts, the 100-post 24-hour limit
- LinkedIn Posts API:
w_member_social,w_organization_social, Page roles - TikTok Content Posting API: get started:
video.publish, private posting until audit - YouTube Data API quota costs: the default 100
videos.insertcalls a day - Provider home pages linked in Unified social media APIs: how each provider describes its product
- Our X API pricing, Bluesky API, and Threads API guides, for those rows