HomeAPI & MCP

Make posts from your own tools — or from Claude.

The same engine as the Studio: your brand kits, your language rules, your monthly allowance. Five HTTP endpoints, and an MCP server so PostPop works inside Claude without you leaving the conversation.

Authentication

One bearer token, and it can never do more than you.

Send Authorization: Bearer pp_live_… on every request. A key inherits the plan, allowance and brand kits of the person who made it — nothing more. Only a hash is stored, so a key is shown once and revoking one is immediate and permanent.

Available on Agency and lifetime Tier 3. Every call is a real AI generation, which is why it sits on the plans built for running several brands.

Creating a post

It is asynchronous, and that is not an accident.

Generation takes about twenty seconds — longer than most proxies and HTTP clients will wait. So you get an id back immediately and poll it.

curl -X POST https://getpostpop.com/api/v1/posts \
  -H "Authorization: Bearer pp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "brand_id": "…",
    "topic": "5 reasons to service your laptop before winter",
    "template": "LISTICLE"
  }'

# → 202 { "id": "…", "status": "queued" }
# then poll until status is "ready":

curl https://getpostpop.com/api/v1/posts/ID \
  -H "Authorization: Bearer pp_live_…"
Endpoints

Five of them.

POST/v1/postsCreate a post. Returns 202 and a job id — generation takes about 20 seconds.
GET/v1/posts/{id}Poll a job, or fetch a finished post. Takes either id.
GET/v1/postsRecent posts, newest first. Cursor paginated.
GET/v1/brandsYour brand kits. Every post needs one.
GET/v1/mePlan, posts used, posts left, reset date.
Inside Claude

PostPop as 4 tools.

Paste this into any MCP client — Claude Desktop, Cursor, anything that speaks the protocol — and Claude decides when to use them from what you ask.

{
  "mcpServers": {
    "postpop": {
      "url": "https://getpostpop.com/mcp",
      "headers": { "Authorization": "Bearer pp_live_…" }
    }
  }
}
list_brandsLists the PostPop brand kits this account owns. Call this first if you do not already have a brand_id — every post must be attached to one. Returns id, name, the website it was built from, and the language its posts are written in.
create_postGenerates a finished, on-brand social post: written copy plus rendered slide images, in the brand’s own colours, fonts and language. Takes about 20 seconds and returns when the post is ready. Use this when the user wants an actual post they could publish. Do NOT use it to draft caption text or ideas — it renders images and spends one post from the account’s monthly allowance every time it is called.
get_postFetches a post that was already generated, by its id. Use this to retrieve something made earlier in the conversation or in the PostPop studio. This does NOT create anything and does not affect the monthly allowance.
check_quotaReports how many posts this account has used and has left this month, and which plan it is on. Call before generating several posts so the user is not told mid-run that they have run out.

Only create_post spends a post from your monthly allowance — its description says so to Claude directly, so it will not work through your month while exploring options.

Errors

Written to be acted on.

401Missing, unknown or revoked key.
403Valid key, but the plan does not include API access.
400The request could not be read — the message says what is wrong.
404No post or job with that id on this account.
429Rate limited. 10/min on create, 120/min on reads. Retry-After says how long.

Every error carries a machine-readable error and a message written for a person to act on — or for a model, which over MCP is the same thing.

Make your next post without opening PostPop.

Create a key, paste one config block, and ask Claude for a carousel.

Get your API key →