PlanSend for developers

Approval-aware publishing, from scripts or AI assistants.

Use workspace-scoped API keys to create drafts, request client approval, schedule posts and inspect publishing jobs. The same keys work with the built-in MCP server, so an AI assistant follows the same approval rules as the app.

create-draft.sh
# Create a draft in the workspace this key belongs to
curl https://plansend.io/api/v1/posts \
  -H "Authorization: Bearer $PLANSEND_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Launch week","body":"Ready to review.","channel_ids":[12,15]}'

# Ask the client to approve it
curl -X POST https://plansend.io/api/v1/posts/481/request-approval \
  -H "Authorization: Bearer $PLANSEND_KEY" \
  -H "Content-Type: application/json" \
  -d '{"reviewer_email":"[email protected]"}'
# → { "data": { "review_url": "https://plansend.io/review/…", "expires_at": "…", "emailed": true } }

Authentication

Keys belong to one workspace

Create keys in Settings → API keys. Send the key as a Bearer token. Each key has a scope, read, write or admin, that the server enforces on every request, and the raw key is shown once when it is generated. Every call is written to the workspace audit log.

Version 1

REST endpoints

Responses are JSON under a data key. Errors return { "error": { "code", "message" } } with a matching HTTP status. Writes that change a post require the current revision, so two people can never overwrite each other unknowingly.

GET/api/v1/workspaces

The workspace this key belongs to

GET/api/v1/channels

Connected channels and their status

GET/api/v1/posts

List posts, filter by status

POST/api/v1/posts

Create a draft with channel variants

PATCH/api/v1/posts/:id

Update a draft (requires the current revision)

POST/api/v1/posts/:id/request-approval

Create a review link for the current revision; add reviewer_email to send it by email

POST/api/v1/posts/:id/approve

Approve a specific revision

POST/api/v1/posts/:id/schedule

Schedule an approved revision in a time zone

POST/api/v1/posts/:id/cancel

Cancel a scheduled post

GET/api/v1/jobs

Inspect publishing jobs, retries and errors

GET/api/v1/ai/credits

AI Assist credits used and remaining this month

POST/api/v1/ai/assist

Generate caption, hook, hashtag or rewrite suggestions

Model Context Protocol

The same approval rules, from an assistant

The streamable HTTP endpoint at /mcp exposes PlanSend as tools: list channels, create drafts, request approval, approve a revision, schedule, inspect jobs, and draft copy with AI Assist. Scopes, revision checks and the audit log apply exactly as they do for the REST API.

mcp.json
{
  "mcpServers": {
    "plansend": {
      "url": "https://plansend.io/mcp",
      "headers": { "Authorization": "Bearer $PLANSEND_KEY" }
    }
  }
}

Guarantees

What the API promises

Revision safety

Approvals, schedules and edits reference a revision number. A stale revision is rejected with 409 instead of silently winning.

Idempotent publishing

Each publish job carries an idempotency key per variant and revision, so retries after a network failure never double-post.

Tenant isolation

Every query is scoped to the key's workspace. There is no way to address another workspace's posts, channels or jobs.

Audit trail

Every API and MCP action is recorded with the key id, action and outcome, and is visible to workspace owners.

Sign in to PlanSend

Use the Google account you work with. Your first brand workspace is created automatically.

Continue with Google By continuing you agree to the Terms and Privacy Policy. Clients reviewing posts never need an account.