Made for
Social Media API for Developers: REST, Webhooks and MCP
Updated · Multi Post Social guide
A social media API should let you treat posting, channels and analytics as ordinary resources: create, list, update, delete, and get told when something changes. The Multi Post Social API does that over REST with JSON, API keys per workspace, signed webhooks and clear rate limits per plan. An MCP server exposes the same capabilities to AI agents, with a rule that nothing publishes without a human approval step. This page is the overview; the API documentation has every endpoint and field.
REST API overview
The base URL is /v1 on the API host shown in your workspace settings. Resources mirror the product: channels, posts, media, ideas, inbox, analytics, streams and webhooks. Every list endpoint supports cursor pagination, filtering by status and date, and sparse field selection. Times are ISO 8601 in UTC; the API returns the channel time zone alongside any scheduled time so you can display it correctly.
| Resource | Methods | What it covers |
|---|---|---|
| /v1/channels | GET | Connected channels, status, posting schedule, time zone; connection itself happens in the app through each network’s login |
| /v1/posts | GET, POST, PATCH, DELETE | Create to queue, schedule or draft; per-channel variants; thread items; first comment; retry a failed post |
| /v1/media | POST | Upload by URL or multipart; returns a media id and format checks per network |
| /v1/analytics | GET | Per-post and per-channel metrics, best-time heat map, date-range summaries |
| /v1/inbox | GET, POST | List items, reply, label, assign, mark done |
| /v1/streams | GET, POST, DELETE | Listening streams and their mentions |
| /v1/webhooks | GET, POST, DELETE | Register endpoints for events |
Authentication with API keys
Create a key in Settings → API keys. Keys are scoped to one workspace and one of three scopes: read, write or admin. The full key is shown once; afterwards only the prefix is visible, so store it in your secret manager at creation time. Send it as a bearer token. Rotate a key by creating a new one, switching your integration, then revoking the old one; both work during the overlap. Keys never grant access to the network tokens themselves.
Example: create a post for two channels
One request creates a post group: a base text, an optional variant per channel, media with alt text, a schedule mode (queue, at with a timestamp, now or draft) and tags.
POST /v1/posts
Authorization: Bearer mps_live_7f3a...
Content-Type: application/json
{
"channel_ids": ["ch_8k2v", "ch_1m9q"],
"text": "Three small changes that made our Monday planning shorter.",
"variants": { "ch_1m9q": { "text": "Three changes that shortened our Monday planning." } },
"media": [{ "url": "https://example.com/planning.png", "alt": "A weekly planning board" }],
"schedule": { "mode": "queue" },
"tags": ["Tips"]
}HTTP/1.1 201 Created
{
"group_id": "grp_c4t8",
"posts": [
{ "id": "post_x1", "channel_id": "ch_8k2v", "status": "queued", "scheduled_at": "2026-11-03T09:00:00Z" },
{ "id": "post_x2", "channel_id": "ch_1m9q", "status": "queued", "scheduled_at": "2026-11-03T09:00:00Z" }
]
}Validation errors come back as 422 with a list of problems per channel, such as a caption over the X limit or an image ratio Pinterest rejects. The same checks run in the composer, so the API and the app always agree.
Webhooks
Register an HTTPS endpoint and choose events. Each delivery is signed with an HMAC header you verify with the webhook secret; deliveries retry with backoff for 24 hours and you can replay any event from Settings.
| Event | When it fires | Payload highlights |
|---|---|---|
| post.published | A post reached the network | post id, channel id, network post URL |
| post.failed | A post could not publish | post id, reason code, whether a reconnect is needed |
| post.approval_requested | A contributor submitted a post | post id, author, approvers |
| post.approved / post.rejected | An approver decided | post id, approver, note |
| channel.disconnected | A network token expired or was revoked | channel id, network |
| inbox.received | A new comment, message or mention arrived | item id, kind, channel id, sentiment |
| stream.alert | A listening stream passed its threshold | stream id, count, window |
Rate limits per plan
Limits apply per workspace and reset on a rolling window. Every response carries X-RateLimit-Remaining and X-RateLimit-Reset headers; a 429 includes Retry-After.
| Plan | API keys | Requests per 30 days | Webhooks |
|---|---|---|---|
| Free | 1 | 3,000 | No |
| Essentials | 3 | 7,500 | Yes |
| Team | 5 | 15,000 | Yes |
| Agency | 10 | 50,000 | Yes |
| Enterprise | Custom | Custom | Yes |
Burst limits of 100 requests per 15 minutes apply on every plan. See the pricing page for the rest of each plan.

MCP server for AI agents
The Model Context Protocol server exposes the API as tools an agent such as Claude or ChatGPT can call: read performance for a date range, list upcoming posts, draft a week of posts, add drafts to a workspace, reply to inbox items as drafts, and summarize a listening stream. Two rules are fixed. First, the server uses your API key's scope, so a read key can never write. Second, anything an agent creates lands as a draft or in Needs approval; a person approves in the app before it publishes. The integrations guide shows how to connect an agent in a few minutes, and the AI assistant guide explains how the in-app assistant differs from an external agent.
Safe use of the API
Keep API keys out of client-side code and repositories, use read scope wherever write is not needed, verify webhook signatures, and respect network rules in your automation: no duplicate mass posting, no engagement buying, no scraping of other people's data through the inbox endpoints. Abuse leads to key revocation under the acceptable use policy. Report security issues as described in the security guide.
Frequently Asked Questions
Can I connect a channel through the API?
No. Connecting requires the network’s own OAuth login in the app so that Multi Post Social never handles network passwords. After that, the channel is available to the API.
Is there a sandbox?
Every workspace can create a test channel that accepts posts without publishing anywhere. Use it with a free-plan key to build and test before touching real channels.
Which languages have SDKs?
The API is plain JSON over HTTPS and works with any HTTP client. Official examples cover JavaScript, Python and cURL in the API documentation.
Can an agent publish without approval?
Not through the MCP server. Agent-created posts always wait as drafts or in Needs approval. Direct API calls with a write key can queue posts, which is the intended path for your own automation.
Get a free API key
Create a free account, generate a key in Settings and make your first request against a test channel.
Keep Reading
- API DocsEndpoints, auth, webhooks, limits.
- IntegrationsDesign tools, storage, automation and the API.
- AI AssistantCaptions, rewrites, hashtags and repurposing.
- Security2FA, permissions, data handling and reporting.
- PricingPlans, limits, billing and a full comparison table.
- Multi Post Social homeStart here: what Multi Post Social does and how to begin free.