Docs

Reference

Changelog

Changelog

Changelog

Notable changes to the public API and MCP server. Breaking changes will always be announced here first.

2026-08-07

  • Breaking (MCP schedule_post): timing is now an explicit, required when. It takes "draft", "now", "next_slot", or an ISO-8601 timestamp. Previously an omitted scheduled_at meant "publish immediately and irreversibly" — an absent parameter deciding to broadcast, on the surface driven by a model. Omitting both when and scheduled_at now returns no_timing_specified and publishes nothing. scheduled_at still works for one more release and is equivalent to passing that timestamp in when (ignored if when is also given; the response warnings say so). when="draft" creates a draft — no publish job is queued, and drafts do not count against the monthly post limit. when="next_slot" with no posting schedule returns no_queue_slots rather than falling through to publish-now. REST POST /api/posts is unchanged: it already required an explicit publish_now and defaulted to draft.
  • New MCP tool get_queue_slots — read-only; returns the next open slots in your posting schedule as {iso, label}. Slots are computed, not reserved, so use it to show a human real options; use when="next_slot" when you want the server to pick at write time.
  • MCP list_scheduled renamed to list_posts, with a new status filter (scheduled default, plus draft, published, failed, all) so agent-created drafts are findable. list_scheduled stays registered as a deprecated alias for one release and keeps its old scheduled-only behaviour.
  • LinkedIn post visibilityplatform_options for linkedin now accepts visibility: PUBLIC (default) or CONNECTIONS. Discoverable via get_capabilities / GET /api/capabilities.
  • Error envelopes rewritten for agentsplan_limit_reached, no_connected_accounts, and account_inactive no longer end at "upgrade your plan" or "go to Settings", which a caller with no browser cannot do. Each now leads with an action the caller can take and carries structured recovery data: alternatives[] (healthy accounts with health), resets_at, drafts_count_against_limit, and connect_url/reconnect_url/upgrade_url for the human handoff.
  • Six new MCP tools bring the agent surface level with the dashboardpublish_now (send a draft, scheduled or failed post immediately), retry_post (resend only the channels that failed, leaving published ones untouched), duplicate_post (copy content, channels and media into a new draft), delete_post (remove a post in any state), restore_post (undo a delete or cancel), and get_analytics (reach, impressions, likes/comments/shares, engagement rate, per-channel and per-platform breakdowns, daily timeline and top posts over a date window).
  • Removing a post is now reversible from an agent. cancel_post and delete_post soft-delete, and restore_post brings the post back. get_post now also finds deleted posts, returning deleted_at and an outcome of deleted — previously a cancelled post vanished from every read surface. A post whose scheduled time has passed is restored as a draft rather than re-armed, so restoring never publishes anything by itself.
  • New error codes: post_not_publishable, post_not_retryable, post_not_deleted.
  • A platform with no native options now returns {}, not a missing key — on both get_capabilities and GET /api/capabilities. A missing key read as "unknown platform".
  • REST gets the same verbs: POST /api/posts/{id}/cancel, /publish-now, /retry, /duplicate, /restore, plus GET /api/analytics. Each mirrors the MCP tool of the same name; a test asserts GET /api/analytics and get_analytics return identical payloads.
  • DELETE /api/posts/{id} on a scheduled post is no longer a dead end. It told you to "cancel scheduled post before deleting" while no cancel endpoint existed, so a scheduled post could not be removed over REST at all. Cancel now exists. Breaking: that refusal changes from 422 {message} to 409 {error: {code: 'post_not_cancelable', ...}}, matching the error envelope every other endpoint uses.
  • State-conflict errors now return 409, not 422post_not_cancelable, post_not_publishable, post_not_retryable, post_not_deleted. The request body is fine; the post is in a state that does not allow the action.

2026-07-17

  • Per-account publishing status — while a post publishes, each targeted account's pivot.status transitions pending → publishing → published | failed. publishing is transient (a channel is uploading/processing). The post's own status stays scheduled throughout publishing; poll until no account is pending or publishing, then treat a published post that still has a failed account as a partial publish. partial is derived, not a stored status.
  • New MCP tool get_post — retrieve a single post by id with its post-level status, a derived outcome (draft/scheduled/publishing/published/partial/failed), and per_account[] delivery records (status, error_message, platform_url, published_at). Use it to poll a just-published post; list_scheduled now also includes per-account status, and get_stats reports a publishing count.

2026-06-07

  • Developer documentation launched at schedulenchill.com/docs — REST API, MCP server, and reference.

2026-06

  • MCP server available at /mcp with seven tools, three resources, and two prompts.
  • REST API: Posts, Media, and API Keys resources with bearer-token authentication.
  • Platforms: X, LinkedIn (profiles + Pages), Facebook, Instagram, Pinterest, YouTube, TikTok.

Roadmap

  • Outbound webhooks for publish/fail events.
  • Per-key rate limits with X-RateLimit-* headers.
  • Additional platforms: Threads, Bluesky, Google Business Profile.
  • OpenAPI specification and official SDKs.