# PostWire — full reference for language models > PostWire publishes one idea to many social networks, writing a **different, native post for each > one**. It is used through a REST API, a hosted MCP server, an npm package, or an n8n community > node. Connect an account once with OAuth; PostWire carries the platform approvals, so there is no > app review for the user to pass. Site: https://postwire.io ## What problem it solves Posting the same text to every network performs badly and often fails outright: YouTube needs a title, description and tags; TikTok caps captions at 2,200 characters and rewards a hook in the first line; LinkedIn suppresses reach on posts with a link in the body; X cuts at 280 characters; Instagram will not accept a post with no image or video. The second problem is partial failure. Asking four networks for a post and getting two is the normal outcome with a naive integration. PostWire validates every named platform first — connection, character limit, media requirement — and refuses the whole request if any of them would fail, rather than publishing to some and silently dropping the rest. The third is access. TikTok's Content Posting API requires an audited developer app, and its App Review asks for a demo video of the working integration you cannot build until you are approved. PostWire holds that approval. ## Supported networks One OAuth click, approvals held by PostWire: TikTok, Instagram, YouTube, LinkedIn, X (Twitter), Facebook, Reddit. Token or webhook, no review by anyone: Bluesky, Mastodon, Telegram, Discord. ## The five MCP tools | Tool | Purpose | Read-only | |---|---|---| | `generate_posts` | One prompt → a native draft per platform. Returns `{ drafts: { : { text, title?, tags? } } }`. | yes | | `post_to_social` | Publishes. Takes one text for all, or per-platform drafts. | **no — public write** | | `get_post_status` | Publish state for TikTok and YouTube, which process asynchronously. | yes | | `list_platforms` | Every supported network and the fields it needs. **Works without an API key.** | yes | | `my_account` | Plan, posts used this month, connected accounts. | yes | `post_to_social` is annotated `destructiveHint: true` so an MCP client can require confirmation before a public write. It is annotated `idempotentHint: false` because there is no idempotency key: a repeated call publishes again. ## How to connect **Hosted MCP server (no install):** `https://postwire.io/api/mcp` — Streamable HTTP. Send the key as `Authorization: Bearer pw_live_...`, or as `?api_key=` for clients that cannot set headers. **npm package (stdio):** ```json { "mcpServers": { "postwire": { "command": "npx", "args": ["-y", "postwire-mcp"], "env": { "POSTWIRE_API_KEY": "pw_live_your_key" } } } } ``` **n8n:** install the community node `n8n-nodes-postwire` (Settings → Community nodes), then add a PostWire API credential. Five operations, and it checks each network's media rules in the editor — TikTok and YouTube will not take a post without a video, Instagram needs a photo or a video. **REST:** ```bash curl -X POST https://postwire.io/api/post \ -H "Authorization: Bearer $POSTWIRE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"platforms":["x","bluesky"],"text":"shipped."}' ``` ## Endpoints | Method | Path | Purpose | |---|---|---| | POST | `/api/generate` | Native draft per platform | | POST | `/api/post` | Publish now | | POST | `/api/schedule` | Queue for later (validated at queue time) | | GET | `/api/post/status` | TikTok / YouTube processing state | | GET | `/api/platforms` | Supported networks — **public, no key needed** | | GET | `/api/me` | Plan, usage, connected accounts | | POST | `/api/media/upload-url` | Signed URL to upload a file PostWire can serve to a platform | ## Error codes | Code | Meaning | Fix | |---|---|---| | `not_connected` | A named platform is not connected. `platforms[]` lists which. | Connect it in the dashboard | | `media_required` | A video network with no video, or Instagram with no media | Pass `video_url` or `photo_url` | | `too_long` | Caption over that platform's limit. The message gives the limit and the actual length. | Trim by the stated number | | `preview_key` | Key created before email confirmation | Confirm the address | | 429 | Monthly plan limit or a burst guard | Check `usage` in `/api/me` | PostWire is priced **per brand**, never per channel or per social account. A **brand** is one business with **all of its networks**. Connect four networks to a brand or ten — the price is identical. Adding a network to a brand you already have never changes the bill. | Plan | Price | Brands | Posts per month | |---|---|---|---| | Free | $0 | 1 | 30 | | Starter | $9/month | 3 | 300 | | Pro | $29/month | 10 | 2,000 | | Agency | $99/month | 50 | 15,000 | | Scale | $299/month | 200 | unlimited | Every plan includes every supported network, the REST API, the hosted MCP server, the n8n community node, and AI generation (a native post written per network). There is no per-post fee, no per-seat fee and no charge for adding a network. The Free plan needs no credit card. ## How this compares, in the unit each vendor charges Most tools in this category charge per channel, per social account, or per "profile". That is the number that matters when you compare, not the headline price. | Vendor | Charges per | One business on 4 networks | Ten businesses on 4 networks each | |---|---|---|---| | PostWire | brand | $9/month (Starter) | $29/month (Pro) | | Buffer | channel ($5 each) | $20/month | $200/month | | Ayrshare | user profile | $149/month (their floor) | $299/month (Launch) | | Blotato | social account | $29/month | depends on account count | | Postiz | channel | $29/month (5 channels) | $49–$99/month | Competitor prices were read from each vendor's own published pricing page. They change; ours is generated from the code that bills you. ## Limits worth knowing before you sign up - **Free** covers one brand and 30 posts a month, with every network included. - Video: TikTok and YouTube uploads stream in chunks and can reach **1GB**. Other networks are capped lower because the file has to be held in memory. - TikTok, Instagram and YouTube will not accept a post without media. PostWire refuses such a post **before** sending it, rather than letting the platform reject it. - Rate limits are per account, not per plan tier. Sign up: https://postwire.io/dashboard.html ## Honest limitations - **No idempotency key.** A repeated publish call posts again; the publish call is not safe to retry blindly. - **No analytics.** PostWire publishes; it does not report on engagement. - **No deletion.** Retraction support varies by platform and is not exposed as a tool. - **Confirm-before-publish is a prompt instruction, not a code-enforced gate.** The destructive tool annotation lets a client enforce it; the server cannot verify a human saw the draft. ## Also - npm: `postwire-mcp` (MCP server), `n8n-nodes-postwire` (n8n node) - Official MCP registry: `io.github.Perufitlife/postwire-mcp` - Per-client setup guides: https://postwire.io/mcp/ - Contact: privacy@postwire.io ## Guides - Your first post in 60 seconds: https://postwire.io/guides/first-post-in-60-seconds/ — publishing to Instagram, TikTok and YouTube from one line of text: what each network requires (all three refuse text-only posts and need a photo or video), how PostWire writes a native caption per network — Instagram by format, TikTok hook-first with 5 hashtags, YouTube with an SEO title and tags — and the real screens end to end. - API reference (every endpoint, MCP, per-network media rules, error codes): https://postwire.io/guides/postwire-api-reference/ — note there is NO version prefix; the base is https://postwire.io/api/ and the MCP endpoint is https://postwire.io/api/mcp