Developers

A social media posting API with idempotency, webhooks and MCP

Everything the OmniPosts app does, your code can do over HTTP: send or schedule a post to every connected channel, read what happened on each one, and be told when something changes. The app uses this same API. It is included in every plan.

Your first post

Create a key in Settings → Agents & API, then send one request. A key can be limited to the scopes it needs, such as posts:write, and given an end date. See Authentication.

curl https://jamp.sh/v1/groups \
  -H "Authorization: Bearer omniposts_..." \
  -H "Idempotency-Key: 6f1c2a52-launch-post-1" \
  -H "Content-Type: application/json" \
  -d '{"body": "We shipped.", "targets": [{"channelId": "CHANNEL_ID"}]}'

The answer is 201 when every channel accepted the post, or 207 when some rejected it, with the reason for each. Add "queue": true to send it at your next free posting time, or scheduledFor for a time of your own. Retry with the same key and nothing new is created.

What you can rely on

Agents: the MCP server and scoped keys

OmniPosts runs an MCP server at https://jamp.sh/mcp with the posting API as tools: list channels, check a post before sending it, send or queue it, and follow each channel's result. Claude Code, Cursor and other MCP clients connect with an API key in the Authorization header. See Connect an agent and MCP server.

The contract

What changed lately is on the changelog.