# Post to All Social Media at Once with One API (2026) · PostLake > Markdown version of https://postlake.dev/guides/post-to-all-social-media-at-once . The canonical page for humans. > PostLake is the social media API for AI agents: https://postlake.dev/llms.txt Post to *every* network in one call. Cross-posting usually means nine APIs. PostLake takes one request, fans out to the accounts you address, and returns one Post with a targets array. Platforms is a filter on that set, not a magic "create these networks" list. **In short:** Address a profile (every connected account) or filter with platforms[]. One POST; read targets[] for per-network status. Partial success is normal. ## When this guide is for you The job is true cross-posting, launches, announcements, agent outputs, and you refuse nine publish paths. ## Before you start Same setup the [docs quickstart](https://docs.postlake.dev/quickstart.md) uses. Do this once: - Sign up at [app.postlake.dev](https://app.postlake.dev) and verify your email (unlocks free credits). - On **Channels**, create a **profile** (e.g. `my-brand`) and connect at least one account. **Bluesky is the fastest first channel**: no app review. Instagram/TikTok/Facebook need each platform's review before API posting. - Account menu → **API Keys** → create a key (`sk_live_…`). It shows once; treat it like a password. ## One request. Every connected account Same as the docs quickstart: name the profile (or omit it if you only have one). That posts to **every account under it**. Use `platforms` only to narrow: ``` curl -X POST https://api.postlake.dev/v1/posts \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: launch-day-001" \ -d '{ "text": "We just shipped something 🚀", "profile": "my-brand" }' # Optional: only some networks on that profile # "platforms": ["bluesky", "linkedin", "threads"] ``` ## Step by step 1. Connect every account you want under one profile on Channels (Bluesky first to verify the path). 1. POST `/v1/posts` with `text` + `profile`. Omit `platforms` for all accounts on the profile. 1. Read `targets[]`: one entry per account, each with `state` and `url` or `error`. 1. Treat `partial` as expected when one network rejects, others still publish; failed targets are free. 1. Need one board/page among duplicates? Use `accounts: ["acc_…"]` instead of `platforms` (filter hits all matches). ## Read the response (don't skip this) You get one `Post` with an overall `state` and a `targets[]` array. One entry per account. **Always check each target**; partial success is normal. ``` { "id": "post_a1b2c3", "state": "partial", "targets": [ { "platform": "bluesky", "state": "published", "url": "https://bsky.app/…" }, { "platform": "linkedin", "state": "failed", "error": { "type": "invalid_request", "message": "…", "retryable": false } } ] } ``` - `published`: every target succeeded. `partial`: some published, some failed. `failed`: none published. `processing`: still going (async networks like TikTok). - **You're only charged for targets that actually publish.** Failed targets cost nothing. - Send an `Idempotency-Key` header on writes so a retry never double-posts. - Full detail: [Publishing](https://docs.postlake.dev/publishing) · [Errors & retries](https://docs.postlake.dev/errors) ## Where the post goes Same rules as the docs. Pick one addressing style: - **By profile**: `"profile": "my-brand"` posts to every account under that profile (the name on Channels). - **Filter networks**: `"platforms": ["bluesky", "linkedin"]` narrows that set. It is a **filter, not a selector**: if you have two Pinterest boards, both match `pinterest`. - **By account id**: `"accounts": ["acc_…"]` for exact channels (copy an id on Channels, or `GET /v1/social-accounts`). - One profile and you omit `profile`? PostLake uses that profile. Multiple profiles and you omit it? You'll get an error that names them. See [Publishing: where to post](https://docs.postlake.dev/publishing). ## Do more (same API) - **Schedule**: add `scheduledAt` as UTC (trailing `Z`), or a naive local time plus `timezone` (IANA, e.g. `Europe/London`). Credits charge when it fires. [Scheduling docs](https://docs.postlake.dev/scheduling) · [scheduling guide](/guides/schedule-posts-api). - **Media**: `POST /v1/media`, then pass the `med_…` id in `media`. [Media docs](https://docs.postlake.dev/media). - **Per-network caption**: `textOverrides` (e.g. shorter text for X). **Per-network options**: `platformOptions` (Pinterest `boardId`, TikTok privacy, …). Live option lists: `GET /v1/platforms/{platform}`. - **Validate first**: `POST /v1/posts/validate` runs the same checks without publishing (free). - Tailor captions with `textOverrides`; Pinterest/TikTok/etc. via `platformOptions`. - Check limits with `GET /v1/platforms` so a long caption doesn't fail the strictest network. ## Pitfalls specific to this path - `platforms: ["pinterest"]` posts to **every** connected Pinterest account on the profile. Use `accounts` to pick one. - X costs more credits (and is blocked on free monthly credits); plan the mix before a five-network blast. - Always send `Idempotency-Key` for launch posts that might be retried. Prefer an assistant over Post everywhere at once code? Point it at [MCP](https://docs.postlake.dev/mcp) (`https://api.postlake.dev/mcp`). Prefer the dashboard? Use [Quickstart → No code](https://docs.postlake.dev/quickstart). ## Common questions ### How do I post to all social media at once? POST /v1/posts with your API key and a profile name. PostLake publishes to every account under that profile and returns targets[] with each status and URL. See docs → Publishing. ### What happens if one network fails? The others still publish. Overall state becomes partial; only the failed target shows an error. You're only charged for targets that publish. ### Can I change the content per network? Yes, textOverrides for captions, platformOptions for network-specific fields (e.g. Pinterest boardId), in the same request. ### How much does cross-posting cost? Credits per successful target (X costs more because X charges us). Failed targets are free. Free tier includes monthly credits; X/TikTok need purchased credits on free. ## Go deeper in the docs These guides stay short on purpose. Canonical behaviour lives here: [Docs ### Quickstart Account, first channel, first post, MCP or API.](https://docs.postlake.dev/quickstart) [Docs ### Publishing Request body, addressing. Partial success, lifecycle.](https://docs.postlake.dev/publishing) [Docs ### Scheduling UTC or local time plus timezone, edit/cancel, fire-time credits.](https://docs.postlake.dev/scheduling) [Docs ### Platforms Limits, media rules, live platformOptions.](https://docs.postlake.dev/platforms) Also: [Media](https://docs.postlake.dev/media) · [Errors](https://docs.postlake.dev/errors) · [MCP](https://docs.postlake.dev/mcp) · [Analytics](https://docs.postlake.dev/analytics) ## Related guides - [Schedule posts via API](https://postlake.dev/guides/schedule-posts-api.md) - [Post with Python](https://postlake.dev/guides/python.md) - [Build an AI social agent](https://postlake.dev/guides/ai-social-media-agent.md) - [Cross-platform analytics](https://postlake.dev/guides/social-media-analytics-api.md) [All guides](https://postlake.dev/guides/index.md) · [Full docs](https://docs.postlake.dev/) · [llms.txt](https://postlake.dev/llms.txt) Plain markdown for agents: https://postlake.dev/guides/post-to-all-social-media-at-once.md · https://postlake.dev/llms.txt