Developers · REST API and MCP server

The social media API for products and AI agents.One request, twenty networks.

Breakreach is a social media API to publish and schedule posts on Instagram, TikTok, X, LinkedIn, YouTube and 15 more networks, with a hosted MCP server for AI agents, billed from $5 a month per connected account.

OpenAPI spec
Instagram
TikTok
X
LinkedIn
YouTube
Facebook
Threads
Pinterest
Bluesky
Reddit
Telegram
Discord
Slack
Mastodon
WordPress
Ghost
Dev.to
Hashnode
Tumblr
Google Business Profile
curl https://api.breakreach.com/v1/posts \  -H "Authorization: Bearer $BREAKREACH_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "content": "Meet Morning Light, our new blend. Out tomorrow.",    "accountIds": ["6701a2f4c9e84b0012a3b4c5",                   "6701a2f4c9e84b0012a3b4c6",                   "6701a2f4c9e84b0012a3b4c7"],    "media": ["https://cdn.northbeam.coffee/launch.jpg"],    "scheduledAt": "2026-10-06T09:00:00"  }'
POST /v1/postsSending
{  "post": {    "id": "6702c1d8f2a94e0012b7c6d1",    "status": "scheduled",    "scheduledAt": "2026-10-06T07:00:00.000Z",    "accounts": [      "instagram (northbeam.coffee)",      "linkedin (Northbeam Coffee)",      "x (northbeam)"    ]  }}
Scheduled · Tue, 9:00 AM
northbeam.coffee

northbeam.coffee Meet Morning Light, our new blend. Out tomorrow.

REST API
38 operations over JSON: posts, media, scheduling, analytics, comments, Google reviews, DMs, Comment to DM and DM automations.
MCP server
33 tools for Claude, ChatGPT, Cursor and any MCP client, with OAuth 2.1.
Webhooks
Posts, connected accounts and Instagram Comment to DM, signed with HMAC-SHA256.

Post to every network with one API callThree steps, about five minutes.

  1. app.breakreach.com/northbeam/settings?tab=api
    Settings
    GeneralAccountsScheduleTeamBillingAPI & MCP
    API & MCP

    Connect AI agents and automations to Breakreach. Included on every plan.

    API keysCreate key

    Copy this key now: it won't be shown again.

    br_7c1e9a40d25f83b6e0a4c917d2b85f3e61a09c4d7e2b58f1
    br_7c1e9a40d...Never used

Every request carries your key as Authorization: Bearer br_…. A key belongs to your user, so it reaches every workspace you are a member of: pass workspace with a slug to pick one, or leave it out to use your first workspace. Keys don't expire; you revoke one by deleting it in the same settings tab.

Call the API from a server or a script. The key is a secret, and the API doesn't answer browser requests from other websites. Success responses are JSON with status 200, errors are { "error": "…" } with a 4xx or 5xx status.

SDKs and a command lineTyped, and safe to retry.

npm install breakreach gives TypeScript and Node a typed method per endpoint, and the breakreach command to post from a terminal, a CI job or an agent's shell. Both are generated from the OpenAPI spec, and retry timeouts and restarts with one Idempotency-Key per call, so a retry never posts twice.

import { Breakreach } from "breakreach"; const br = new Breakreach(); // BREAKREACH_API_KEYconst { accounts } = await br.listAccounts(); const { post } = await br.createPost({  content: "Meet Morning Light, our new blend.",  accountIds: accounts.map((a) => a.id),  media: ["https://cdn.northbeam.coffee/launch.jpg"],  useNextSlot: true,});

What the API supports on each networkChecked against the publishing code, not a feature list.

NetworkWhat a post can carryOptions in the requestWhat you can read back
InstagramProfessional account1 photo, 1 video published as a Reel, or a carousel of 2 to 10 photos and videos. Media requiredStories through MCPPost metrics, comments, DMs
TikTokAny account1 video (caption up to 2,200 characters), or a photo post of up to 35 images. Media requiredtiktokSettings: privacy (private unless set), comments, duet, stitchPublic video stats
XAny accountText, with up to 4 images, 1 GIF or 1 videoNonePost metrics, replies, DMs
LinkedInPersonal profile onlyText with 1 image or 1 MP4 video, or 2 to 20 images as a carousel (a PDF, one page per image); a PDF URL posts as a documentNoneNot yet
YouTubeChannel1 video, titled from the first line, publicTitle and privacy through MCPChannel stats, video performance
FacebookPagesText, up to 10 photos or 1 videoNonePost metrics, comments, Messenger
ThreadsProfileText, 1 image or 1 videoNonePost metrics, comments
PinterestAccount1 image or 1 MP4/MOV video (an image sent with it is the cover), title from the first line. Media requiredpinterestBoardId (required), pinterestLinkAccount stats
BlueskyAccountText up to 300 characters, with up to 10 images or 1 videoNonePost metrics, account stats
RedditUser accountText post (first line is the title), or a link post to your imageredditSubreddit, redditFlairTextPost metrics (no views), account stats
TelegramChannel, with our bot as adminText, or 1 photo or video with a captionNoneAccount stats
DiscordChannel webhookText with up to 4 imagesNoneNone
SlackOne channel, picked when adding our Slack appText with up to 10 JPG, PNG or GIF photos; a video or WebP goes in as a linkNoneNone
MastodonAccount on any serverText (500 characters on most servers) with up to 4 photos or 1 video, publicNonePost metrics (no views), account stats
WordPressSelf-hosted site (5.6+, HTTPS), Author or aboveA post titled from the first line, as editor blocks; first photo is the featured image, more photos and a video follow the textNoneNone
GhostSite, with a custom integration's Admin API key (self-hosted or Ghost(Pro) Publisher and up)A post titled from the first line; first photo is the feature image, more photos and a video follow the textarticleSettings: tags, canonicalUrl, asDraft, newsletter and emailSegmentMembers count
Dev.toAccount, with its API keyAn article titled from the first line, Markdown body; first photo is the cover, more photos follow. No videoarticleSettings: tags (4), canonicalUrl, asDraft, aiDisclosureArticle views, reactions, comments; followers
HashnodeBlogs on Hashnode Pro, with a personal access tokenAn article titled from the first line, Markdown body; first photo is the cover, more photos follow. No videoarticleSettings: tags (15), canonicalUrl, asDraftPost views, reactions, comments; followers
TumblrBlogs of your account (main, side and group blogs)Text, with up to 30 photos or 1 video above itarticleSettings: tags, asDraftLikes and reblogs (no views); followers
Google Business ProfileVerified locations you own or manage, each one an accountAn update: text up to 1,500 characters with 1 photo (converted to JPEG); no video, no events or offersgoogleBusinessSettings: button (BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP or CALL), buttonUrlReviews and star ratings; no post metrics
Not supported anywhere yet: X threads and polls, first comments and LinkedIn Company Pages. YouTube comments wait on Google's approval. Checked October 7, 2026.

Media goes in as public URLs. Instagram, TikTok, Pinterest and YouTube need at least one photo or video; the other networks also take text alone. The type is read from the file extension (.jpg, .png, .webp, .gif, .mp4, .mov, .webm), so a link without one is skipped. POST /v1/media copies any public URL to Breakreach storage and returns a permanent link with the right extension, which is the safe path for files behind expiring or signed URLs, and POST /v1/media/upload takes a file from your disk (multipart, up to 100 MB). Photos are converted on the way out where a network insists: JPEG for Instagram and TikTok, recompressed under 2 MB for Bluesky.

Text is yours to size. Bluesky is cut at 300 characters, a Pinterest description at 800, a TikTok video caption at 2,200, and Reddit and Pinterest take the first line as the title. X, LinkedIn, Instagram, Threads and Facebook get your text as sent, so keep X at 280 characters yourself or the network refuses the post.

No developer app to registerThe reviews are done. You connect accounts and post.

Posting through each network's own API means registering a developer app per network, passing its review and paying where access is paid. Meta reviews every permission separately, TikTok keeps unaudited apps on private-only posting, and X charges for API access. With Breakreach, accounts connect through our apps, which went through those reviews: Meta approved our permissions for comments, insights and messages in September 2026, and TikTok approved our Content Posting API audit the same month, so TikTok posts can go out public.

  • Instagram, Facebook and ThreadsSign in with Meta. Instagram needs a professional account, Facebook posts to Pages.
  • TikTok, YouTube, LinkedIn, X, Pinterest, Reddit, BlueskyEach owner signs in once in the dashboard. No keys or developer accounts on your side.
  • LinkedIn tokens last about 60 daysLinkedIn gives no refresh to self-serve apps. GET /v1/accounts returns a warning 14 days before one lapses, so you can ask for a reconnect in time.
  • Telegram and DiscordTelegram: add our bot as an admin of your channel. Discord: paste a channel webhook URL.
  • Slack, Mastodon and WordPressSlack: add our app and pick the channel. Mastodon: type the server, approve there. WordPress: type the site, approve in wp-admin, which creates an application password.
  • Ghost, Dev.to, Hashnode and TumblrGhost: the site and the Admin API key of a custom integration. Dev.to: an API key from its settings. Hashnode: a personal access token, for blogs on Hashnode Pro. Tumblr: approve Breakreach on Tumblr, then pick the blogs.
  • Google Business ProfileSign in with Google and tick the locations to connect, each one an account. Google gates its Business Profile APIs behind an access approval; ours is done.

EndpointsAll 38 operations of /v1.

Posts

  • POST/v1/postsSchedule, publish now, take the next free slot or save a draft, on one or many accounts
  • GET/v1/postsYour posts with status, time, metrics and errors
  • PATCH/v1/posts/:idEdit a post, schedule a draft, retry a failed post or move it back to drafts
  • DELETE/v1/posts/:idUnschedule and remove from Breakreach (never from the network)
  • GET/v1/posts/:id/metricsViews, likes, comments and shares for one post

Media and scheduling

  • POST/v1/mediaCopy a public media URL to Breakreach storage
  • POST/v1/media/uploadUpload a local file (multipart, up to 100 MB)
  • GET/v1/next-slotThe next free slot of the workspace posting schedule
  • GET/v1/pinterest-boardsBoards to pin to

Workspaces and accounts

  • GET/v1/workspacesWorkspaces with their slug and timezone
  • POST/v1/workspacesCreate a workspace, one per customer or brand
  • GET/v1/accountsConnected accounts, with a warning before one expires
  • POST/v1/connect-linksA hosted page where your user connects their own accounts
  • GET/v1/connect-links/:idA link's status and the accounts connected through it
  • DELETE/v1/connect-links/:idRevoke a link; connected accounts stay
  • GET/v1/accounts/statsFollowers and 28-day stats per account
  • GET/v1/accounts/trendsDaily account insights for Facebook, Instagram and Threads

Analytics

  • GET/v1/analyticsTotals and top posts across your Breakreach posts
  • GET/v1/performanceEvery post on an account, including ones not made with Breakreach
  • GET/v1/post-insightsAll metrics, breakdowns and retention for one post

Comments and DMs

  • GET/v1/commentsRecent comments across Instagram, Facebook, Threads and X, and Google reviews
  • GET/v1/posts/:id/commentsLive comments on one of your posts
  • POST/v1/comments/replyReply to a comment or a Google review
  • DELETE/v1/comments/:commentIdDelete a comment (Instagram, Facebook), or your reply to a Google review
  • GET/v1/inboxDM conversations on Instagram, Facebook and X
  • GET/v1/inbox/:conversationId/messagesMessages of one conversation
  • POST/v1/inbox/:conversationId/messagesSend a reply

Comment to DM (Instagram)

  • GET/v1/comment-dm-rulesKeyword rules with their stats
  • POST/v1/comment-dm-rulesDM everyone who comments a keyword on a post, or on every post
  • PATCH/v1/comment-dm-rules/:idChange a rule or pause it
  • DELETE/v1/comment-dm-rules/:idDelete a rule and its activity
  • GET/v1/comment-dm-rules/:id/eventsWho commented, and whether the DM went out
  • GET/v1/comment-dm-rules/mediaThe account's latest posts, to pick one

DM automations (Instagram, Messenger)

  • GET/v1/dm-automationsFlows with their stats and ref links
  • POST/v1/dm-automationsAnswer keyword DMs, story mentions or ref links with a flow
  • PATCH/v1/dm-automations/:idChange the trigger or the steps, or pause
  • DELETE/v1/dm-automations/:idDelete a flow and its runs
  • GET/v1/dm-automations/:id/runsWho went through it, each step, how it ended

The full contract, with every parameter, is the OpenAPI 3.1 spec. It is public, so you can feed it to a client generator or to your coding agent. Lists take a limit (up to 100 posts per call) and there is no cursor pagination yet.

Scheduling, retries and errorsServer-side, so your script can exit.

A post takes one of three times. scheduledAt is read in the workspace timezone when it has no offset, and a Z or an offset is honoured. useNextSlot takes the next free slot of your posting schedule (weekdays at 11:00 and 16:00 until you change it). publishNow sends it at once. A time in the past publishes immediately.

Temporary failures, like a rate limit, a timeout or a 5xx from the network, are retried up to 3 times, 5, 10 and 15 minutes later, and only on the accounts that failed. Anything else marks the post failed and puts the network's answer in error, prefixed with the account id. A post that went out on some accounts and not others ends published, with the failures listed.

PATCH /v1/posts/:id edits a draft, scheduled or failed post, and giving it a time retries a failed one. To repeat a request safely, send an Idempotency-Key header with any POST: the same key and body within 24 hours return the first response, marked Idempotent-Replayed: true, instead of a second post. The same key with another body answers 422, and 409 while the first request still runs. Errors aren't kept, so a fixed request can reuse its key.

Retry without posting twice
curl https://api.breakreach.com/v1/posts \  -H "Authorization: Bearer $BREAKREACH_API_KEY" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: launch-morning-light" \  -d '{ "content": "Meet Morning Light, our new blend. Out tomorrow.", … }' # The same request again, after a timeout:HTTP/1.1 200 OKIdempotent-Replayed: true { "post": { "id": "6702c1d8f2a94e0012b7c6d1", "status": "scheduled", … } }
Meet Morning Light, our new blend.
6702c1d8f2a94e0012b7c6d1
Scheduled · Tue 9:00 AM
  • northbeam.coffeeWaiting
  • Northbeam CoffeeWaiting
  • northbeamWaiting
post.published→your-app.com/hooks/breakreach200

One post, three accounts. X answered 429 and was retried alone.

WebhooksKnow when a post is out, without polling.

Add an HTTPS endpoint in Settings, API & MCP, per workspace. Breakreach sends post.published when a post went out on at least one account, post.failed when it went out nowhere, and account.connected when an account joins the workspace, from the dashboard or a connect link. Comment to DM adds three: comment_dm.sent after each DM, comment_dm.failed when Instagram refuses one, and comment.received for every comment on an account with a rule (see the Comment to DM API). DM automations add five: dm_automation.started, dm_automation.handoff, dm_automation.finished, dm_automation.failed and message.received (see the DM automations API). Each call is signed: X-Breakreach-Signature is sha256= followed by the HMAC-SHA256 of the raw body with your signing secret.

Each event is sent once, with a 10-second timeout and no retry, so answer quickly and reconcile with GET /v1/posts if your endpoint was down. Webhooks come with the Developer, Pro and Agency plans.

post.published
POST https://your-app.com/hooks/breakreachX-Breakreach-Event: post.publishedX-Breakreach-Signature: sha256=5f2b8e… {  "event": "post.published",  "timestamp": "2026-10-06T07:00:04.112Z",  "post": {    "id": "6702c1d8f2a94e0012b7c6d1",    "content": "Meet Morning Light, our new blend. Out tomorrow.",    "status": "published",    "scheduledAt": "2026-10-06T07:00:00.000Z",    "media": ["https://cdn.northbeam.coffee/launch.jpg"],    "published": [      { "platform": "instagram", "account": "northbeam.coffee",        "platformPostId": "18047…" },      { "platform": "linkedin", "account": "Northbeam Coffee",        "platformPostId": "urn:li:share:7…" },      { "platform": "x", "account": "northbeam",        "platformPostId": "1975…" }    ]  }}
verify.js
import crypto from "node:crypto"; // Sign the raw body, byte for byte as receivedexport function isFromBreakreach(raw, header, secret) {  const mac = crypto.createHmac("sha256", secret);  const expected = "sha256=" + mac.update(raw).digest("hex");  if (header?.length !== expected.length) return false;  return crypto.timingSafeEqual(    Buffer.from(header),    Buffer.from(expected),  );}

A social media MCP server for Claude, ChatGPT and CursorThe same actions, for agents.

The MCP server at https://api.breakreach.com/mcp exposes 33 tools. Clients sign in with OAuth 2.1 and dynamic client registration, so a person approves access once and never handles a key; a server-side agent can pass an API key as a Bearer token instead. Breakreach is listed in Claude's connector directory and ChatGPT's plugin directory, so your users add it in a few clicks, without pasting a URL or a key.

MCP still goes a little further than REST: Instagram posts can go out as Stories, YouTube videos take a title and a privacy, and comments can be hidden or deleted.

The Breakreach skill teaches Claude Code, Codex, Cursor and OpenClaw how to post well with it: account ids first, times in the workspace timezone, the media each network needs, and an idempotency key on every post. Install it with npx skills add breakreach/breakreach.

Terminal
# Claude Codeclaude mcp add --transport http \  breakreach https://api.breakreach.com/mcp # Cursor: ~/.cursor/mcp.json, then Connect in# Settings, Tools & MCP{  "mcpServers": {    "breakreach": {      "url": "https://api.breakreach.com/mcp"    }  }} # Codexcodex mcp add breakreach --url https://api.breakreach.com/mcp

Publish

  • create_post
  • update_post
  • delete_post
  • list_posts
  • upload_media
  • get_next_slot
  • list_pinterest_boards

Accounts

  • list_workspaces
  • create_workspace
  • list_accounts
  • create_connect_link
  • get_account_stats
  • get_account_trends

Analytics

  • get_analytics
  • get_post_metrics
  • get_content_performance
  • get_post_insights

Comments and DMs

  • get_post_comments
  • list_recent_comments
  • reply_to_comment
  • hide_comment
  • delete_comment
  • list_conversations
  • get_conversation_messages
  • send_message

Comment to DM

  • list_comment_dm_rules
  • create_comment_dm_rule
  • update_comment_dm_rule
  • delete_comment_dm_rule

DM automations

  • list_dm_automations
  • create_dm_automation
  • update_dm_automation
  • delete_dm_automation

Pricing: pay per connected accountNot per post, not per call.

Billed monthly on the accounts connected across your workspaces. Connect or remove accounts whenever you like.

/ month

About $4.6 per account on average.

  • Accounts 1 to 20$5 per account per month20 × $5 =
  • Accounts 21 to 100$3 per account per month5 × $3 =
  • Account 101 and up$2 per account per monthNot reached

The Developer plan is billed monthly on the accounts connected across the workspaces you own, with graduated tiers: 25 accounts cost 20 × $5 + 5 × $3, so $115. It holds up to 100 workspaces, one per client or product, and includes the MCP server and webhooks. There is no trial and no free account: you can connect an account before paying, and publishing starts with the plan.

The API also comes with every regular plan, from Starter at $29 a month for 5 accounts. Those plans add the calendar, the inbox, team seats and the built-in assistant, and fit better when people schedule by hand as well. On price alone, Zernio costs less per account at every count, and Outstand bills per post instead. Our comparison of social media APIs runs the numbers.

What developers build with it

  • AI agents that postAn agent writes, picks the time and calls create_post, then reads the numbers back with get_post_metrics.
  • Publishing from your own productA release, a new listing or a blog post triggers one POST /v1/posts to your brand's accounts.
  • Agencies and internal toolsOne workspace per client, one key for all of them, with reports built on /v1/performance.
  • Automationsn8n, Make or a cron job call the API with an HTTP node, and a webhook closes the loop.

Building a product where your users connect their own accounts: create a workspace per customer with POST /v1/workspaces, then a link with POST /v1/connect-links, and send it to them. They pick their networks on a hosted page, without a Breakreach login, and come back to your redirectUrl; the account.connectedwebhook tells you when it's done. The networks' consent screens name Breakreach, whose reviewed apps the accounts connect through.

FAQ

Social media API questions, answered.

What developers ask before their first call.

A social media API lets your code publish posts, read analytics and answer comments on social networks without opening each app. Every network has its own API, with its own review process and rules. A unified API like Breakreach puts twenty of them behind one key and one request shape.

Not on Breakreach. The Developer plan costs $5 a month per connected account up to 20, $3 up to 100, then $2, never per post or per call. You can connect an account before paying, and publishing starts with the plan. Buffer's free plan includes its API on 3 channels, and Zernio's first 2 accounts are free.

Yes. POST /v1/posts takes a list of accountIds, so one request schedules the same post on every account you list. Instagram, TikTok, Pinterest and YouTube need a photo or a video in media; X, LinkedIn, Facebook, Threads, Bluesky, Reddit, Telegram, Discord, Slack, Mastodon, WordPress, Ghost, Dev.to, Hashnode, Tumblr and Google Business Profile also take text alone.

No. Accounts connect through Breakreach's own apps, already reviewed by each network: Meta approved our permissions for comments, insights and messages in September 2026, and TikTok approved our Content Posting API audit the same month, so TikTok posts can go out public. You never apply for API access, pay for an X API plan or wait for an app review.

Yes. Pass scheduledAt (read in the workspace timezone unless it carries an offset), set useNextSlot to take the next free slot of your posting schedule, or set publishNow. Scheduled posts publish from Breakreach's servers, so your script can exit right after the call.

Yes. POST /v1/posts with "draft": true saves the post for review in Breakreach without scheduling it, so a deploy or a CMS can propose a post and a person approves it. It needs no publish time and no media yet; a scheduledAt places it on the calendar. It goes out once someone schedules it in the app, or your code calls PATCH /v1/posts/:id with scheduledAt, useNextSlot or publishNow.

Temporary failures (rate limits, timeouts, 5xx) are retried up to 3 times, 5, 10 and 15 minutes later, only for the accounts that failed. Anything else marks the post failed with the network's error in the error field, and fires a post.failed webhook. A post that went out on some accounts but not others is published, with the failures listed in error.

Yes. Every POST takes an Idempotency-Key header, any unique string such as a UUID. Send the same key with the same body again within 24 hours and you get the first response back, marked Idempotent-Replayed: true, instead of a second post, DM or workspace. The same key with a different body answers 422, and 409 while the first request is still running. Errors aren't kept, so a fixed request can reuse its key. MCP create_post takes the same thing as an idempotencyKey argument.

Yes. Create a workspace per customer with POST /v1/workspaces, then POST /v1/connect-links for that workspace, and send your user the link. They pick their networks on a hosted page, without a Breakreach login, approve each connection on the network, and come back to your redirectUrl with the connected platforms in the query. The account.connected webhook fires for each account. The networks' consent screens name Breakreach, since accounts connect through Breakreach's reviewed apps. Links expire after 24 hours by default, up to 7 days, and can be revoked.

Yes, at https://api.breakreach.com/mcp, with 33 tools for posts, media, scheduling, accounts, analytics, comments, DMs, Instagram Comment to DM and DM automations. It signs in with OAuth 2.1 (dynamic client registration) or takes an API key as a Bearer token, and it is listed in Claude's connector directory and ChatGPT's plugin directory.

Yes: npm install breakreach for TypeScript and Node, with the breakreach command line. Both are generated from the OpenAPI 3.1 spec at https://api.breakreach.com/v1/openapi.json, with a typed method per endpoint, and retry with an Idempotency-Key so a retry never posts twice. Call them from a server: keys are secret, and the API doesn't accept browser requests from other sites.

Monthly, on the number of accounts connected across the workspaces you own, with graduated tiers: 25 accounts cost 20 × $5 + 5 × $3 = $115. The count is synced every few hours and a change applies to the next invoice. API access is also included on every regular Breakreach plan, from Starter at $29 a month.

Instagram
TikTok
LinkedIn
YouTube
X
Facebook
Threads

Your first post is one call away.From $5 a month per account.

Billed per connected account. Cancel anytime.