Loading...
Please wait while we prepare your content
Loading...
Please wait while we prepare your content
One REST endpoint set to publish across 18 destinations and answer every DM, comment and mention from a single inbox. API-key auth, queued publishing with retries, signed webhooks — and no per-platform OAuth to write.
Base URL https://api.so-me.studio/v1 · Auth X-API-Key · JSON in, JSON out
Most social APIs stop at publishing. An agent that can post but can't answer the replies is only half an agent — so both live behind the same key, against the same connected accounts.
Create a post once, target any connected destination, and let the queue handle per-platform formatting, media upload, rate limits and retries. Your agent never touches a platform SDK.
DMs, comments and mentions from every connected account land in one unified inbox. Pull the thread, post a reply, mark it handled — all over plain JSON, all in the same workspace as your posts.
No SDK required. Three requests cover the loop an agent runs all day: publish, listen, reply.
curl -X POST \
https://api.so-me.studio/v1/posts \
-H "X-API-Key: $SOME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Ship day 🚀",
"socialMedia": "LINKEDIN",
"postType": "TEXT",
"scheduledAt":
"2026-08-04T09:00:00Z"
}'const { data } = await api(
'/v1/inbox/conversations'
);
for (const c of data) {
const reply = await agent.answer(c);
await api(
`/v1/inbox/conversations/${c.id}`
+ '/reply',
{ method: 'POST',
body: { message: reply } }
);
}await fetch(
BASE + '/v1/webhooks/subscriptions',
{
method: 'POST',
headers: {
'X-API-Key': KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://my-agent.dev/hook',
events: [
'post.published',
'post.failed'
]
})
}
);Everything you can do in the dashboard has a route. Nothing is reserved for the UI.
/v1/posts
Create, update, schedule, unschedule, bulk-delete, retry and resubmit posts. Read the calendar and manage per-post comments.
/v1/drafts
Park work-in-progress content, then convert a draft into a live scheduled post in one call.
/v1/inbox
List conversations, read message threads, reply, archive and manage saved replies across every connected account.
/v1/whatsapp
Create and list approved message templates, upload template media, and send template messages to customers.
/v1/media
Presigned uploads, folders, search, rename, move and bulk delete. Attach any uploaded asset to a post by id.
/v1/analytics
Per-account and per-post metrics, plus platform-native breakdowns for Facebook, Instagram, LinkedIn, YouTube, X and WhatsApp.
/v1/ai
Generate captions, images and UGC video from your agent, then feed the result straight into a post.
/v1/approvals
List everything awaiting review and approve or reject it — so an agent can draft while a human still signs off.
/v1/accounts
Enumerate connected social accounts and their ids — the identifiers every post and conversation is keyed on.
/v1/webhooks
Manage subscriptions, replay deliveries, send test payloads and browse the full event catalog.
/v1/biolinks
Build link-in-bio pages programmatically — buttons, embedded posts, themes, publishing and click analytics.
/v1/teams · /v1/settings
Invite members, set roles, rotate API keys, switch workspaces and read your plan's current usage.
Full request and response schemas — plus the OpenAPI spec — live in the API reference.
Connect an account once in the dashboard; the API inherits it everywhere.
18 destinations
Twitter/X, Instagram, LinkedIn (personal and Page), Facebook, TikTok, YouTube, Threads, Pinterest, Bluesky, Mastodon, Reddit, Google Business Profile, WordPress, Dev.to, Dribbble, Discord and Slack — all from a single POST /v1/posts. WhatsApp sends via approved templates instead.
Unified inbox
Real-time webhook ingestion for Facebook, Instagram, WhatsApp and Twitter/X, plus polled threads for Bluesky, Mastodon, Reddit, Telegram, Discord and Slack. One conversation model for all of them.
20 platforms
OAuth is handled once in the dashboard. The API reads the resulting account ids — you never store, refresh or rotate a platform token yourself.
An agent retries, runs in parallel and reads error bodies literally. The API is shaped around that.
The same X-API-Key works for the REST API, the npm-installed CLI and the MCP server. Issue it once in Settings → API Keys; your agent never sees a platform OAuth token.
A create call returns immediately and the post enters a worker queue with per-platform rate-limit awareness and automatic retries. Failures are re-drivable with POST /v1/posts/:id/retry.
Subscribe to post.published, post.failed, inbox message events, approval decisions, account disconnects and more. Payloads are signed with HMAC-SHA256 so your agent can trust them.
Every key is bound to one workspace. Run a key per client, and an agent physically cannot read or post into another tenant's accounts.
Per-minute and per-month quotas are published per plan and returned as a clean 429 — no silent throttling for a retry loop to misread.
Prefer tools over endpoints? The same workspace is exposed as 200+ MCP tools and a CLI that prints JSON and returns real exit codes.
The API unlocks on Team. Exceed a quota and you get a 429 — never a silent drop.
| Plan | API calls | Rate limit | Webhook deliveries |
|---|---|---|---|
| Free & Solo | No API access | — | — |
| Team | 10,000 calls / month | 60 calls / min | 25,000 deliveries / month |
| Scale | Unlimited | 300 calls / min | Unlimited |
See pricing for current plan prices, or the agent overview if you would rather use MCP tools than raw endpoints.
No sales call, no sandbox request, no per-platform developer account.
Sign up and link any of 20 destinations in the dashboard. OAuth, token refresh and re-auth prompts are handled for you from here on.
Settings → API Keys. Send it as X-API-Key. One key per workspace keeps clients isolated; the same key also drives the CLI and MCP server.
POST /v1/posts to publish or schedule, subscribe to post.published and post.failed, and read GET /v1/inbox/conversations to start answering replies.
Two things, from one key. Posting: create, schedule, publish, retry and delete content across 18 destinations, with presigned media uploads and AI caption/image generation in the same workspace. Messaging: list conversations from the unified inbox, read a thread, reply to DMs and comments, and send approved WhatsApp templates. Around that sit analytics, approvals, bio-links, teams, templates and webhooks — all under https://api.so-me.studio/v1.
Generate a key in Settings → API Keys and send it as the X-API-Key header on every request. Keys are scoped to a single workspace, so running one key per client keeps agents isolated from each other. The same key authenticates the CLI (npm i -g @so-me/cli) and the MCP server.
No. You connect accounts once in the dashboard and the platform tokens stay on our side, encrypted. GET /v1/accounts returns the account ids you reference when posting or replying. Token refresh, re-auth prompts and per-platform quirks are ours to handle, not yours.
Yes. GET /v1/inbox/conversations lists threads across every connected account, GET /v1/inbox/conversations/:id/messages returns the message history for context, and POST /v1/inbox/conversations/:id/reply sends the answer. Facebook, Instagram, WhatsApp and Twitter/X arrive over real-time webhooks; Bluesky, Mastodon, Reddit, Telegram, Discord and Slack are pulled into the same conversation model.
WhatsApp is template-based rather than free-form: POST /v1/whatsapp/templates creates a template for approval, POST /v1/whatsapp/templates/upload-media attaches header media, and POST /v1/whatsapp/templates/send delivers it. Inbound WhatsApp messages land in the same unified inbox as everything else.
No, and that is deliberate. POST /v1/posts returns as soon as the post is accepted; publishing runs through a queue with per-platform rate-limit awareness and automatic retries. Watch the post.published and post.failed webhooks — or poll GET /v1/posts/:id — instead of blocking a request thread on a platform that is having a bad afternoon.
Over 150, across posts, drafts, repurposing, approvals, the inbox, media, accounts, billing and teams — post.published, post.failed, post.approval.requested, account disconnects and more. Manage subscriptions with POST /v1/webhooks/subscriptions, fire a test delivery, replay a failed one, and verify the HMAC-SHA256 signature on receipt.
The API is a Team-and-above feature; Free and Solo have no API access. Team includes 10,000 calls/month at 60 calls/min plus 25,000 webhook deliveries/month. Scale removes the monthly caps and raises the ceiling to 300 calls/min. Exceeding a limit returns 429 Too Many Requests.
Same workspace, three shapes. Use REST from any backend or framework (LangChain, CrewAI, AutoGen, Vertex AI, a plain cron worker). Use the CLI in shells, CI and scheduled jobs. Use the MCP server when the agent should discover 200+ typed tools on its own — that is the Claude, Cursor and Windsurf path.
At docs.so-me.studio, including the OpenAPI spec so you can generate a typed client in any language. This page is the overview; the reference has request and response schemas for every route.
Stop juggling tabs — draft, customize, and publish to 20 platforms from a single calendar.