← Postbase

Developer docs

Postbase publishes to your connected social accounts over a REST endpoint and an MCP server. Both use the same API key, obey the same plan limits, and return the same per-platform results.

Authentication

Create a key under API & MCP in the console. It is shown once and cannot be recovered, so store it like a password and revoke it if it leaks. Send it as a bearer token on every request.

Authorization: Bearer pb_live_…

A key carries your full posting permissions and reaches only your own brands. Unauthenticated calls get 401; a call that would exceed your plan gets 403, refused before anything is published rather than reported as an overage afterwards.

Publishing

POSThttps://postbase.whoamie.com/api/post

Publish one piece of text to one or more connected platforms for a brand. Each platform is attempted independently, so a partial failure still publishes the rest.
{
  "brand": "whoamie",
  "platforms": ["instagram", "facebook", "linkedin"],
  "text": "Shipped.",
  "mediaUrl": "https://…/image.jpg",   // optional, required for Instagram
  "mediaKey": "uploads/…/f3a1.mp4"     // optional, from POST /api/uploads
}
The response reports every platform separately. ok is the overall result; a platform that failed carries its own error.
{
  "ok": false,
  "results": [
    { "platform": "instagram", "ok": true,  "id": "1789…4021" },
    { "platform": "facebook",  "ok": true,  "id": "1043…_8891" },
    { "platform": "linkedin",  "ok": true,  "id": "urn:li:share:74984…" },
    { "platform": "tiktok",    "ok": false, "error": "tiktok publishing needs a video upload flow that isn't implemented yet" }
  ]
}
curl -X POST https://postbase.whoamie.com/api/post \
  -H "Authorization: Bearer pb_live_…" \
  -H "Content-Type: application/json" \
  -d '{"brand":"whoamie","platforms":["linkedin"],"text":"Shipped."}'

Reading

GET/api/brands

Your brands and the platforms connected to each. Call this first, because posting to a platform that is not connected fails per-platform, not up front.

GET/api/accounts

Connected accounts across all brands, with the account name each connection resolved to.

GET/api/usage

Posts used this month against your plan. Two numbers, not one: X bills per post and has its own allowance, everything else shares the general one.
{
  "plan": "pro",
  "planLabel": "Pro",
  "postsThisMonth": 412,   "postsLimit": 2500,
  "meteredPostsThisMonth": 18, "meteredPostsLimit": 60,
  "brands": 4, "brandsLimit": 10
}

GET/api/activity

Recent publish attempts, successes and failures alike. This is how you answer “did that actually post?” without reading server logs.

MCP

Postbase is an MCP server, so an AI agent can publish as a tool call. There are two ways to connect one, and which applies is decided by the client rather than by you.

By URL, with OAuth

For clients that add a connector by address — Claude’s Add custom connector dialog and anything else that speaks the MCP authorization spec. Paste https://postbase.whoamie.com/mcp and nothing else: there is no field for a key in those dialogs, and there does not need to be. The client registers itself, sends you here to sign in and approve, and receives its own token.

Approved clients are listed under Keys in the console and can be revoked there, which cuts them off immediately without touching your API keys.

By config, with an API key

For clients configured from a file — Claude Code, Claude Desktop, Cursor — and for anything with no browser to send a person to, such as a server or an n8n AI Agent node.

{
  "mcpServers": {
    "postbase": {
      "type": "http",
      "url": "https://postbase.whoamie.com/mcp",
      "headers": { "Authorization": "Bearer pb_live_…" }
    }
  }
}

Both reach the same endpoint with the same three tools and the same permissions. The difference is only how the caller came by its credential.

Three tools are exposed:

Scheduling

Posts can go out immediately or be queued. The console asks who the post is for rather than what timezone to use: pick an audience and it offers times that are already correct for those readers, shown both on their clock and on yours.

Suggested times are per platform, because they differ. LinkedIn peaks around the professional working day and is quiet at the weekend. Instagram and TikTok peak in the evening. A post going to both is offered slots for each, labelled with which platform it suits. You can always pick an exact time instead.

A queued post can be cancelled or moved from the Scheduled page. Moving cancels the original and queues a replacement, so the identifier changes.

Scheduling is a console feature. The REST API and MCP publish immediately, on the assumption that a caller with its own scheduler does not need ours.

Platform notes

Errors

Something missing or wrong here? Tell us, or see the Terms and Privacy Policy.