Cross-post via API
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.
Get started free →Free tier. No card · one API for every network · full MCP access
The job is true cross-posting, launches, announcements, agent outputs, and you refuse nine publish paths.
Same setup the docs quickstart uses. Do this once:
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.sk_live_…). It shows once; treat it like a password.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"]Tool-specific glue on top of the shared setup above:
/v1/posts with text + profile. Omit platforms for all accounts on the profile.targets[]: one entry per account, each with state and url or error.partial as expected when one network rejects, others still publish; failed targets are free.accounts: ["acc_…"] instead of platforms (filter hits all matches).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).Idempotency-Key header on writes so a retry never double-posts.Same rules as the docs. Pick one addressing style:
"profile": "my-brand" posts to every account under that profile (the name on Channels)."platforms": ["bluesky", "linkedin"] narrows that set. It is a filter, not a selector: if you have two Pinterest boards, both match pinterest."accounts": ["acc_…"] for exact channels (copy an id on Channels, or GET /v1/social-accounts).profile? PostLake uses that profile. Multiple profiles and you omit it? You'll get an error that names them.See Publishing: where to post.
scheduledAt as UTC (trailing Z), or a naive local time plus timezone (IANA, e.g. Europe/London). Credits charge when it fires. Scheduling docs · scheduling guide.POST /v1/media, then pass the med_… id in media. Media docs.textOverrides (e.g. shorter text for X). Per-network options: platformOptions (Pinterest boardId, TikTok privacy, …). Live option lists: GET /v1/platforms/{platform}.POST /v1/posts/validate runs the same checks without publishing (free).textOverrides; Pinterest/TikTok/etc. via platformOptions.GET /v1/platforms so a long caption doesn't fail the strictest network.platforms: ["pinterest"] posts to every connected Pinterest account on the profile. Use accounts to pick one.Idempotency-Key for launch posts that might be retried.Prefer an assistant over Post everywhere at once code? Point it at MCP (https://api.postlake.dev/mcp). Prefer the dashboard? Use Quickstart → No code.
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.
The others still publish. Overall state becomes partial; only the failed target shows an error. You're only charged for targets that publish.
Yes, textOverrides for captions, platformOptions for network-specific fields (e.g. Pinterest boardId), in the same request.
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.
These guides stay short on purpose. Canonical behaviour lives here:
Also: Media · Errors · MCP · Analytics
All guides · Full docs · llms.txt · Markdown
Stuck? The docs are the source of truth, start at Publishing.
Open the dashboard →