PostEverywhere: The Social Media Post API
Schedule and publish social media content across 11 platforms from a single API.
Connect your social accounts, create posts with platform-specific customizations, upload media, schedule for optimal times, and monitor publishing results — all through one unified interface.
Building with an AI agent or code generator? Point it at developers.posteverywhere.ai/openapi.json. It is generated from the live API and always current, and its field names are authoritative: the upload request takes size (not file_size), and media readiness lives in media_status (not status).
Supported Platforms
| Platform | Post Types | Media |
|---|---|---|
| Feed posts, Stories, Reels | Images, video, carousels | |
| TikTok | Videos, photo carousels | Video, images (up to 35) |
| YouTube | Videos, Shorts | Video |
| Posts, articles | Images, video, PDF carousels | |
| X (Twitter) | Posts, threads | Images, video |
| Posts, Reels | Images, video | |
| Threads | Posts | Images, video |
| Pins | Images | |
| Bluesky | Posts, threads | Images, video |
| Telegram | Channel posts | Images, video, PDF, carousels |
| Discord | Server posts via webhook | Images, video |
What You Can Do
- Schedule posts to multiple platforms simultaneously
- Customize content per platform (hashtags, titles, privacy settings)
- Save drafts with
draft: true, review them, then schedule withPOST /v1/posts/{id}/schedule— ideal for human-in-the-loop agent workflows - Upload media (images and video) with automatic processing
- Schedule many posts by calling Create Post in a loop with different
scheduled_fortimes - Monitor results with per-platform publishing status
- Retry failed posts automatically or on demand
- Generate AI images from text prompts
Two status vocabularies (read this before polling)
A post and each of its destinations use different status names. Mixing them up is the most common integration mistake, so they are listed here in full.
Post status (post_status on a post, and the status filter on GET /posts) is derived
live from the destinations underneath it:
draft · scheduled · publishing · published · partially_failed · failed
Destination status (destination_status on each entry in a post's destinations array) is
the real lifecycle of one platform target:
| Value | Meaning |
|---|---|
queued | Waiting for its scheduled time |
preparing, uploading, publishing, verifying | In flight right now |
retry_scheduled | Failed once, will be retried automatically |
done | Published successfully |
failed | Terminal failure, see the error field |
At the destination level, success is done. published exists only in the post-level
vocabulary above. Filtering destinations on status == "published" matches nothing.
Base URL
https://app.posteverywhere.ai/api/v1
Getting Started
- Create a PostEverywhere account if you don't have one
- Go to Settings > Developers in your dashboard to generate an API key
- Follow the Quick Start guide to make your first API call
SDKs & Tools
Node.js SDK
npm install @posteverywhere/sdk
import { PostEverywhere } from '@posteverywhere/sdk';
const client = new PostEverywhere({ apiKey: 'pe_live_...' });
const post = await client.posts.create({
content: 'Hello from the API!',
account_ids: [123, 456, 789],
scheduled_for: '2026-04-01T10:00:00Z',
});
Command line (CLI)
Log in, connect every platform, and publish straight from your terminal:
npm install -g @posteverywhere/cli
posteverywhere login # browser approve, key saved locally
posteverywhere connect instagram # OAuth opens; the account is auto-detected
posteverywhere post -c "Hello from the CLI!" -a 123,456
Every command supports --json for AI agents. Full guide: CLI.
Claude Code (MCP)
Easiest — connect to the hosted endpoint, nothing to install:
claude mcp add --transport http posteverywhere \
https://mcp.posteverywhere.ai \
--header "Authorization: Bearer pe_live_YOUR_KEY"
Or run it locally via npx:
{
"mcpServers": {
"posteverywhere": {
"command": "npx",
"args": ["-y", "@posteverywhere/mcp"],
"env": { "POSTEVERYWHERE_API_KEY": "pe_live_..." }
}
}
}
Full guide: MCP Server.
cURL
curl -X POST https://app.posteverywhere.ai/api/v1/posts \
-H "Authorization: Bearer pe_live_..." \
-H "Content-Type: application/json" \
-d '{
"content": "Hello from the API!",
"account_ids": [2280, 2281, 2282],
"scheduled_for": "2026-04-15T14:30:00Z"
}'