Changelog
All notable changes to the PostEverywhere API.
2026-05-29 — Bluesky support, accurate post status, media auto-finalize
Bluesky (AT Protocol) is now a supported platform — the 9th. Connect a Bluesky account with a handle + app password, then publish text, images (up to 4), video (MP4), and threads. Links, @mentions, and #hashtags are turned into rich-text facets automatically, and URLs render as link cards. See the Bluesky guide.
post_statusnow reflects real publishing progress. Previously apublish_nowpost could reportscheduledindefinitely because the value was fixed at creation time. The status is now derived from per-destination state and can bescheduled,publishing,published,partially_failed, orfailed— consistent acrossPOST /v1/posts,GET /v1/posts/{id}, the list endpoint, and/results. The?status=list filter now filters on the same real status.- Posts auto-finalize uploaded media. If you attach
media_idsfor media that was uploaded but not yet finalized withPOST /v1/media/{id}/complete,POST /v1/postsnow completes it for you (verifying the file exists) instead of returningmedia_not_ready. The explicit/completecall is still supported and recommended for tighter control. - Clearer errors. Posting
multipart/form-datato/v1/postsnow returns guidance on the correct JSON shape and the upload →media_idsflow. The media status response exposesreadyandaction_requiredfields so polling clients know a/completecall is required.
2026-04-12 — scheduled_for rename, strict field validation, scope visibility
scheduled_for is now the canonical request field for scheduling posts. The old name scheduled_at was a misnomer — it read as a past-tense timestamp (like created_at / updated_at) even though it represented a future moment when the post will publish. scheduled_for makes the intent explicit.
scheduled_foris the canonical request field name (wasscheduled_at). The response also returns the value underscheduled_for, completing the round-trip.scheduled_atis deprecated but still accepted as an alias. Existing integrations built before 2026-04-12 will continue to work unchanged. New integrations should usescheduled_for.- Strict
400validation for unknown media field names. If you sendmedia,media_id,mediaId, orattachmentsin a request body, the API now returns400 invalid_field_namewith a helpfuldid you mean media_ids?hint. The only accepted media field on requests ismedia_ids(an array of UUID strings). - OAuth scope visibility. When a user reconnects a social account and the platform drops scopes from the grant, we now record the drop and alert on the mismatch, so silently-broken integrations surface quickly.
- Body logging for v1 endpoints. The v1 API now logs sanitized request bodies (with API keys and tokens redacted) for debug visibility, making it much easier to trace bad requests when you email developer support.
- Round-trip principle. Every top-level field name in a request body also appears in the response with the same name and meaning. You can take a post you got from
GET /v1/posts/{id}and POST its fields straight back to clone it — no renaming.
v1.0 — March 2026
- Initial public API release
- 18 endpoints across Accounts, Posts, Media, and AI
- Support for 8 platforms: Instagram, TikTok, YouTube, LinkedIn, X, Facebook, Threads, Pinterest
- Bulk scheduling (up to 100 posts per request)
- AI image generation
- MCP server integration for Claude Code
- Node.js SDK
Subscribe to API updates by emailing [email protected].
Resources: