Developers
Multi Post Social API Documentation: Posts, Channels, Analytics, Webhooks
Updated · Multi Post Social guide
The Multi Post Social API gives your code the same abilities as the dashboard: list channels, create drafts, schedule posts, upload media, read analytics and receive webhooks when something happens. It is a plain REST API with JSON bodies, API keys per workspace and rate limits that scale with the plan. An MCP server exposes the same actions to AI agents. This page is the reference; the developers page covers use cases and the integrations guide covers no-code connections.
Overview and base URL
All requests go to the versioned base URL below over HTTPS. Request and response bodies are JSON. Times are ISO 8601 strings in UTC. Lists are paginated with a cursor. Every response includes a request id header you can quote to support.
Base URL (planned): https://api.multipostsocial.com/v1
Content-Type: application/json
Pagination: ?limit=50&cursor=<next_cursor from the previous response>The API mirrors the product’s data model: a workspace has channels; a post belongs to one channel and shares a group id with its sibling versions created in the same composer session; ideas live on the Create board; analytics are read per channel and per post.
Authentication
Create an API key in Settings under API keys. Keys are scoped to one workspace and shown once; only the prefix is stored afterwards. Send the key in the Authorization header. Keys can be revoked at any time, and each key has a label so you can tell Zapier from your own script in the activity log.
Authorization: Bearer mps_live_7f3a... # one key per integration
X-Workspace: ws_01h... # optional when a key spans several workspaces (Agency plans)Never put a key in client-side code or a public repository. Use environment variables, and rotate a key you suspect has leaked from the same settings screen. The security guide explains how keys and sessions are protected.
Endpoints
| Method and path | Purpose | Notes |
|---|---|---|
| GET /channels | List connected channels with network, handle, status and posting schedule | Read-only; connecting a channel requires the network login in the dashboard |
| GET /posts | List posts filtered by status, channel, date range or group id | Cursor paginated |
| POST /posts | Create a draft, queue a post, or schedule it | One request per channel, or pass several channel_ids to create a group |
| GET /posts/{id} | Read one post with status, slot time and stats | |
| PATCH /posts/{id} | Edit text, media, time or status | Published posts are read-only |
| DELETE /posts/{id} | Remove a draft or scheduled post | Published posts cannot be deleted through the API |
| POST /media | Upload an image or video and get a media id | Multipart; limits per network are validated at post time |
| GET /analytics/overview | Totals and rates for a date range across channels | History depends on the plan |
| GET /analytics/posts | Per-post impressions, reach, engagement and clicks | |
| GET /analytics/best-times | Heat map values per channel | Needs two weeks of published posts |
| GET /ideas and POST /ideas | Read and add ideas on the Create board | |
| GET, POST, DELETE /webhooks | Manage webhook endpoints | Essentials plan and above |
Request and response examples
Create a post for two channels and add it to each channel’s queue:
POST /v1/posts
{
"channel_ids": ["ch_instagram_01", "ch_linkedin_01"],
"text": "Three small changes that made our Monday planning shorter.",
"overrides": {
"ch_linkedin_01": { "text": "Three changes that made our Monday planning 20 minutes shorter. Details below." }
},
"media_ids": ["med_9a1"],
"first_comment": "#contentplanning #smallbusiness",
"tags": ["Tips"],
"action": "queue" // "queue" | "schedule" | "now" | "draft"
}
201 Created
{
"group_id": "grp_7k2",
"posts": [
{ "id": "post_a1", "channel_id": "ch_instagram_01", "status": "queued", "scheduled_at": "2026-11-03T09:00:00Z" },
{ "id": "post_a2", "channel_id": "ch_linkedin_01", "status": "queued", "scheduled_at": "2026-11-03T08:00:00Z" }
]
}Read analytics for the last 30 days:
GET /v1/analytics/overview?from=2026-10-01&to=2026-10-31
200 OK
{
"range": { "from": "2026-10-01", "to": "2026-10-31" },
"totals": { "posts": 42, "impressions": 184320, "reach": 149100, "engagements": 6210, "clicks": 2890 },
"engagement_rate": 3.37,
"by_channel": [ { "channel_id": "ch_instagram_01", "impressions": 98400, "engagement_rate": 4.1 } ]
}Errors
| Status | Code | Meaning | What to do |
|---|---|---|---|
| 400 | validation_error | A field is missing or over a network limit | Read errors[].field and errors[].message |
| 401 | unauthorized | Missing or revoked key | Create a new key in Settings |
| 403 | forbidden | The key’s role cannot do this (for example publish without approval) | Ask an admin to change the role or approval setting |
| 404 | not_found | No such post, channel or media in this workspace | Check the id and the workspace header |
| 409 | channel_disconnected | The channel needs a reconnect in the dashboard | Reconnect, then retry |
| 422 | network_rejected | The network refused the post (format, policy, duplicate) | Read the network message in details |
| 429 | rate_limited | Too many requests for the plan | Wait for Retry-After seconds |
| 5xx | server_error | Something failed on our side | Retry with backoff; quote the request id to support |
{
"error": { "code": "validation_error", "message": "Text exceeds the X limit of 280 characters",
"errors": [ { "field": "overrides.ch_x_01.text", "message": "312 of 280 characters" } ] },
"request_id": "req_01hz..."
}Rate limits per plan
Limits are counted per workspace across all keys. Responses include the remaining budget in headers. When you hit a limit the API returns 429 with a Retry-After header; back off and retry. The numbers below are the same as on the pricing page.
| Feature | Free | Essentials | Team | Agency | Enterprise |
|---|---|---|---|---|---|
| Canva, Drive, Dropbox, Unsplash, Zapier, Make | Yes | Yes | Yes | Yes | Yes |
| API keys | 1 | 3 | 5 | 10 | Custom |
| API requests per 30 days | 3,000 | 7,500 | 15,000 | 50,000 | Custom |
| Webhooks | No | Yes | Yes | Yes | Yes |
| MCP server for AI agents | Yes | Yes | Yes | Yes | Yes |
X-RateLimit-Limit-15m: 100
X-RateLimit-Remaining-15m: 97
X-RateLimit-Limit-30d: 7500
Retry-After: 120 # only on 429
Webhooks
Register an HTTPS endpoint and receive a signed POST when an event happens. Each delivery includes an event type, the object, a timestamp and a signature header computed with your webhook secret. Verify the signature before you trust a payload. Deliveries are retried with backoff for 24 hours, and the dashboard shows the last 50 deliveries per endpoint.
| Event | When it fires | Payload |
|---|---|---|
| post.published | A post went live on the network | post with network_url |
| post.failed | The network rejected a post or the token expired | post with fail_reason |
| post.approval_requested | A contributor submitted a post for approval | post, author |
| post.approved and post.rejected | An approver acted | post, approver, note |
| channel.disconnected | A channel token expired or was revoked | channel |
| inbox.item_received | A new comment, message or mention arrived | inbox item |
| report.ready | A scheduled report was generated | report with download_url |
POST https://example.com/hooks/mps
X-MPS-Signature: t=1730000000,v1=5f1a...
{
"id": "evt_01hz...", "type": "post.published", "created_at": "2026-11-03T09:00:04Z",
"data": { "post": { "id": "post_a1", "channel_id": "ch_instagram_01", "network_url": "https://..." } }
}MCP server for AI agents
The Model Context Protocol server lets an AI agent such as a desktop assistant or a chat model use your workspace through typed tools, with the same key and the same permissions as the API. A typical session: the agent reads last month’s analytics, drafts a week of posts in your tone, creates them as drafts, and you approve them in the dashboard. Publishing directly is possible only when the workspace setting Allow agents to schedule is on; otherwise the agent can only create drafts and approval requests.
| Tool | What it does | Permission |
|---|---|---|
| list_channels | Returns channels with network, handle and next free slots | Read |
| create_draft | Creates a draft post for one or more channels with per-network text | Write (drafts) |
| schedule_post | Queues or schedules a post | Write; requires the Allow agents to schedule setting, otherwise it submits for approval |
| get_analytics | Overview or per-post numbers for a date range | Read |
| list_ideas and create_idea | Reads and adds ideas on the Create board | Read / Write |
| get_inbox | Returns open inbox items for triage; replies still happen in the dashboard | Read |
{
"mcpServers": {
"multi-post-social": {
"url": "https://mcp.multipostsocial.com", // planned
"headers": { "Authorization": "Bearer mps_live_..." }
}
}
}SDKs and versioning
The API is versioned in the path. Breaking changes get a new version and the old one stays available for at least 12 months with notices in the changelog. Additive changes, such as new fields, arrive without a version bump, so parse responses leniently. Official SDKs for JavaScript and Python are planned; until then, any HTTP client works and the examples above are complete. Status of the API and each network connection is on the status page.
Safe use of the API
Automation multiplies whatever you give it. Keep agents on draft-only permissions until you trust their output, respect each network’s posting rules on frequency and duplicate content, and never store keys in client code. The acceptable use policy applies to posts created through the API exactly as in the dashboard, and abuse of the API can suspend the workspace.
Frequently Asked Questions
Is the Multi Post Social API available on the free plan?
Yes, with one key and 3,000 requests per 30 days. Higher plans add keys, requests and webhooks; the table above lists the limits.
Can the API connect a new channel?
No. Connecting a channel requires the network’s own login screen, which happens in the dashboard. The API lists and uses channels that are already connected.
How do I test without posting for real?
Create posts with action set to draft, or point your code at a workspace with a test channel. Published posts cannot be deleted through the API, so be careful with action now.
Can an AI agent publish without a human?
Only if a workspace admin turns on Allow agents to schedule. By default agents create drafts and approval requests that a person reviews.
Where do I report an API problem?
Use the contact page with the request id from the response header. Service incidents appear on the status page.
Get an API key in two minutes
Create a free Multi Post Social account, open Settings and generate your first key.
Keep Reading
- DevelopersREST API, webhooks, MCP, rate limits.
- IntegrationsDesign tools, storage, automation and the API.
- Security2FA, permissions, data handling and reporting.
- PricingPlans, limits, billing and a full comparison table.
- ChangelogNew features and fixes, dated.
- Multi Post Social homeStart here: what Multi Post Social does and how to begin free.