For AI agents

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.

VendorWhat its own site says, as of September 2026
Ayrshare14+ social platforms. Premium plan from $149 a month
Blotato9+ social platforms, with a hosted MCP server
bundle.social15 platforms, with an MCP server
Outstand12 platforms, with an MCP server of 28 tools
Post Bridge10 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 APIUnified social media APIMCP server
What you set upA developer app or OAuth client for every networkOne vendor account and one API keyA URL or config block pasted into the client
Credentials the agent holdsA token per network, each with its own expiryOne vendor keyOne key in the client config
Networks coveredOnly the ones you integrateMany. 9 to 16 social networks across the vendors belowWhatever the server supports
Cost shapeX bills per post. Bluesky charges nothingA monthly plan, often priced by connected accounts or profilesSet by whatever the server calls underneath
SchedulingYou build and run the queueOffered by most vendorsOnly if a queue sits behind the server
Code the agent needsOAuth handling, an HTTP client and retries per networkOne HTTP toolNone. The client discovers the tools
Best whenYou need one network in depth and want no middlemanYou need Instagram, TikTok, Facebook, YouTube, or many networksThe 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.

schedule to X, Bluesky and LinkedIn
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.

hosted MCP server
{
  "mcpServers": {
    "opentweet": {
      "type": "streamable-http",
      "url": "https://mcp.opentweet.io/mcp",
      "headers": { "Authorization": "Bearer ot_your_key" }
    }
  }
}
local MCP server over npx
{
  "mcpServers": {
    "opentweet": {
      "command": "npx",
      "args": ["-y", "@opentweet/mcp-server"],
      "env": { "OPENTWEET_API_KEY": "ot_your_key" }
    }
  }
}
the tool call the agent makes
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"
})
the CLI
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.

XBlueskyLinkedIn
How it connectsSign in with X. No X developer accountatproto OAuth. No App PasswordSign in with LinkedIn. Personal profile only. Reconnect every 60 days
Post lengthThe connected account’s X limit300 graphemes. Long text is not split for you3,000 characters
ThreadsNative thread, up to 25 postsNative threadCombined into one post
ImagesImages and videoUp to 4 images. No link cardsUp to 4 images
AnalyticsYesNoNo

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.

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.