A social media APIfor AI agents
An AI agent can post to social media in three ways: call each network's own API, call a unified social media API that covers many networks, or connect an MCP server the agent calls as a tool. Direct APIs take the most setup, unified APIs cover the most networks, and MCP needs the least code for an agent running in Claude, Cursor or ChatGPT. OpenTweet is a REST API, a hosted MCP server and a CLI for X, Bluesky and LinkedIn, and one call schedules a post to all three.
Last updated: September 2026
7-day free trial. Cancel anytime.
1. Call each network's own API
The most control and no middleman. Also three auth flows, three token lifecycles, and your own queue.
X. You sign up for a developer account and create an app in the Developer Console. Posting is billed pay-per-use: $0.015 per post, and $0.20 per post that contains a URL, as of September 2026. An agent that shares links pays the higher rate on most of what it posts.
LinkedIn. Posting to a member's own profile uses Share on LinkedIn, a self-serve product you add to an app in the LinkedIn Developer Portal. Access tokens last 60 days. Programmatic refresh tokens are reserved for approved Marketing Developer Platform partners, so a self-serve app has to send the member back through sign-in every 60 days. Company Page posting is a separate API behind LinkedIn review.
Bluesky. The cheapest of the three. atproto OAuth has no pre-registration and no API key: the client_id is the URL of a metadata document you host. There is no fee to post. Each post is capped at 300 graphemes.
Across all three, you write the OAuth handling, store and renew every token, respect three sets of limits, and build the queue that publishes at the right time. That is reasonable for one network. For an agent that posts everywhere, it is most of the project.
2. Use a unified social media API
One key, one request shape, many networks. The vendor holds the network connections.
Ayrshare, Zernio (formerly Late), Outstand, bundle.social, Blotato and Post Bridge each sell one API that posts to many networks. Your agent calls one endpoint and names the networks. This is the only practical route if the agent needs Instagram, TikTok, Facebook, YouTube or Threads, because the vendor has already done the per-network work.
The trade-offs: plans are usually priced by connected accounts or profiles, so cost grows with the number of accounts. You are one layer away from each network, so a network feature reaches you when the vendor adds it. Several of these vendors now ship an MCP server too, which blurs this approach into the next one.
| Vendor | What its own site says, as of September 2026 |
|---|---|
| Ayrshare | 14+ social platforms. Premium plan from $149 a month |
| Blotato | 9+ social platforms, with a hosted MCP server |
| bundle.social | 15 platforms, with an MCP server |
| Outstand | 12 platforms, with an MCP server of 28 tools |
| Post Bridge | 10 social platforms, with MCP access |
| Zernio (formerly Late) | 16 social platforms plus 7 ad networks, with an MCP server |
Listed alphabetically, not ranked. Counts are each vendor's own and may define a network differently. Ayrshare and Blotato compared in depth.
3. Give the agent an MCP server
The agent calls posting tools directly. No HTTP code, no OAuth code.
An MCP server exposes posting as tools, and any MCP client lists them for the model: Claude Desktop, Claude Code, Cursor, Windsurf, ChatGPT, OpenClaw and others. You paste a URL and a key into the client config, and the agent can post from the next message.
An MCP server is a wrapper, so check what sits under it. One built on a network's API inherits that API's costs. One that drives a logged-in browser session automates the website, which is a risk to the account. The LinkedIn case is laid out here. And an MCP server can only schedule if a queue sits behind it. Otherwise the agent has to be running at the moment the post should go out.
The three approaches side by side
A comparison of approaches, not a vendor ranking. They are not exclusive.
| Each network’s API | Unified social media API | MCP server | |
|---|---|---|---|
| What you set up | A developer app or OAuth client for every network | One vendor account and one API key | A URL or config block pasted into the client |
| Credentials the agent holds | A token per network, each with its own expiry | One vendor key | One key in the client config |
| Networks covered | Only the ones you integrate | Many. 9 to 16 social networks across the vendors below | Whatever the server supports |
| Cost shape | X bills per post. Bluesky charges nothing | A monthly plan, often priced by connected accounts or profiles | Set by whatever the server calls underneath |
| Scheduling | You build and run the queue | Offered by most vendors | Only if a queue sits behind the server |
| Code the agent needs | OAuth handling, an HTTP client and retries per network | One HTTP tool | None. The client discovers the tools |
| Best when | You need one network in depth and want no middleman | You need Instagram, TikTok, Facebook, YouTube, or many networks | The agent runs in Claude, Cursor, ChatGPT or another MCP client |
Many unified APIs ship an MCP server, and OpenTweet is a REST API and an MCP server on the same account. Pick by the networks you need first, then by how the agent runs.
Where OpenTweet fits
A narrower product than a unified API, on purpose. Here is where that helps and where it does not.
Three networks, not fifteen
OpenTweet posts to X, Bluesky and LinkedIn. It does not post to Instagram, TikTok, Facebook, Threads or YouTube. If your agent needs those networks, a unified API like Ayrshare or Zernio is the better fit.REST API, MCP server and CLI on one plan
The same ot_ key works for POST /api/v1/posts, the hosted MCP server with 43 tools, and the opentweet CLI. Nothing is sold as a separate API tier.
No X developer account
OpenTweet holds the X connection. You do not create an X app, enroll in pay-per-use billing, or pay per post.
One call, three networks
Name "x", "bluesky" and "linkedin" in platforms. Each network gets its own native post, and each reports its own outcome in results[].
A real scheduler queue
Send scheduled_date and the post waits in a queue that publishes at that time. It shows on the calendar and stays editable until it goes out.
Pick OpenTweet if
- Your agent posts to X, Bluesky, LinkedIn, or any mix of them
- You want REST, MCP and a CLI without buying three products
- You do not want an X developer account or per-post billing
- Posts need to be scheduled, not only published now
Pick something else if
- You need Instagram, TikTok, Facebook, Threads or YouTube
- You need to post as a LinkedIn Company Page
- You need LinkedIn or Bluesky analytics
- You want Bluesky link cards, or long text split into a thread for you
The code
One REST call schedules the same post to all three networks. Leave out platforms and the post follows the account's auto cross-post setting instead, so an unattended agent should always name its targets.
curl -X POST https://opentweet.io/api/v1/posts \
-H "Authorization: Bearer ot_your_key" \
-H "Content-Type: application/json" \
-d '{
"text": "Release 2.4 is out. Notes are in the changelog.",
"platforms": ["x", "bluesky", "linkedin"],
"scheduled_date": "2026-09-22T14:00:00Z"
}'On Advanced and Agency, pick specific accounts with x_account_id, bluesky_account_id and linkedin_account_id. Swap scheduled_date for "publish_now": true to post immediately. Full reference.
{
"mcpServers": {
"opentweet": {
"type": "streamable-http",
"url": "https://mcp.opentweet.io/mcp",
"headers": { "Authorization": "Bearer ot_your_key" }
}
}
}{
"mcpServers": {
"opentweet": {
"command": "npx",
"args": ["-y", "@opentweet/mcp-server"],
"env": { "OPENTWEET_API_KEY": "ot_your_key" }
}
}
}opentweet_create_tweet({
text: "Release 2.4 is out. Notes are in the changelog.",
platforms: ["x", "bluesky", "linkedin"],
scheduled_date: "2026-09-22T14:00:00Z"
})npm install -g @opentweet/cli
opentweet tweet "Release 2.4 is out." --platforms x,bluesky,linkedin --schedule "2026-09-22 14:00"Per-network outcomes and limits are in the cross-posting docs.
What each network gets through OpenTweet
Each network is checked against its own rules. A post that breaks one is skipped on that network with the reason stated, and still goes out on the others.
| X | Bluesky | ||
|---|---|---|---|
| How it connects | Sign in with X. No X developer account | atproto OAuth. No App Password | Sign in with LinkedIn. Personal profile only. Reconnect every 60 days |
| Post length | The connected account’s X limit | 300 graphemes. Long text is not split for you | 3,000 characters |
| Threads | Native thread, up to 25 posts | Native thread | Combined into one post |
| Images | Images and video | Up to 4 images. No link cards | Up to 4 images |
| Analytics | Yes | No | No |
Accounts per plan: 1 / 3 / 10 of each network on Pro, Advanced and Agency, bundled. Cross-posting in full.
Frequently asked questions
What is the best social media API for AI agents?
It depends on the networks. If the agent needs Instagram, TikTok, Facebook, YouTube or Threads, use a unified social media API such as Ayrshare or Zernio. If it posts to X, Bluesky and LinkedIn from an MCP client like Claude or Cursor, OpenTweet covers those three with a REST API, a hosted MCP server and a CLI on one plan. If it only ever posts to one network and you want no middleman, call that network’s API directly.
Can an AI agent post to social media without a developer account?
Yes, through a service that holds the network connections for you. Calling the X API yourself needs an X developer account, an app in the Developer Console, and pay-per-use billing. With OpenTweet or a unified API, the agent holds one API key instead. Bluesky needs no developer account in either case, because atproto OAuth has no pre-registration.
Should an agent use a REST API or an MCP server to post?
Use MCP when the agent runs inside an MCP client such as Claude Desktop, Claude Code, Cursor, Windsurf or ChatGPT: the client discovers the tools and there is no HTTP code to write. Use REST when you write the loop yourself, in a cron job, a backend, or an agent framework. OpenTweet serves both from the same API key, so you can start with one and add the other.
Is there an API to schedule LinkedIn and Bluesky posts?
Yes. POST https://opentweet.io/api/v1/posts with "platforms": ["linkedin", "bluesky"] and a scheduled_date in ISO 8601. The post waits in the OpenTweet queue and publishes to both networks at that time. LinkedIn has no scheduling API of its own, so every LinkedIn scheduler runs a queue like this one.
Does OpenTweet post to Instagram, TikTok or Facebook?
No. OpenTweet posts to X, Bluesky and LinkedIn only. It does not support Instagram, TikTok, Facebook, Threads or YouTube. If your agent needs those networks, a unified social media API like Ayrshare or Zernio is the better fit.
Can the agent post to a LinkedIn Company Page?
Not through OpenTweet. LinkedIn posts go to the personal profile of the member who connected. The LinkedIn sign-in lasts 60 days with no refresh token, so the user reconnects every 60 days in one click, and a thread sent to LinkedIn is combined into one post of up to 3,000 characters.
How much does OpenTweet cost for an agent?
Pro is $11.99 a month with the REST API, the MCP server and the CLI included, and one X, one Bluesky and one LinkedIn account. Advanced is $29 a month with 3 of each, and Agency is $49 a month with 10 of each. There is no per-network add-on and no per-post fee, and every plan starts with a 7-day free trial.
Keep exploring
The API reference, the MCP servers per network, and the schedulers behind them.
REST API reference
Every endpoint, the request fields, and the response shape for POST /api/v1/posts.
Cross-posting docs
The platforms parameter, the results array, and GET /api/v1/cross-posting for per-network limits.
LinkedIn MCP server
Why an MCP server that drives your LinkedIn browser session is a risk, and the official-API alternative.
Bluesky MCP server
The same server on the Bluesky side, over atproto OAuth instead of an App Password.
Cross-posting, in full
What each network gets, the limits side by side, and what cross-posting does not cover.
LinkedIn scheduler
LinkedIn profile posts in the same queue and calendar as X and Bluesky.
Bluesky scheduler
Schedule Bluesky posts and threads with no API key and no App Password.
Ayrshare vs Blotato
Two unified posting APIs compared for agent use, and when each one fits.
Pricing
Three plans from $11.99 a month. The API, MCP server and CLI are on every plan.
Give your agent X, Bluesky and LinkedIn
One API key for the REST API, the hosted MCP server and the CLI. No X developer account, no per-post fee. From $11.99 a month.