Skip to content

Expose scheduled publishing for drafts (scheduled_posting_at) as a writable field #844

Description

@bsmarsh333

Summary

The web app can schedule a draft message to publish later ("Post later…" in the message editor), and the API already reports the result: GET /my/drafts.json returns scheduled_posting_at, documented in bc-api sections/drafts.md as "null unless the draft is scheduled to publish later", and the OpenAPI spec in this repository carries it as a required, nullable property of the draft object. There is no way to set it. Requesting a write path so integrations can stage a draft and have Basecamp publish it at a chosen time.

What I tried

  • PUT /buckets/{bucket_id}/messages/{message_id}.json with {"scheduled_posting_at": "2026-09-07T16:00:00Z"} returns 200 and the message unchanged; the drafts listing still shows null. Wrapping it as {"message": {...}} behaves the same.
  • The documented update parameters are subject, content, category_id, subscriptions, and notify; the create parameters add status and visible_to_clients. Neither accepts a posting time.
  • The OpenAPI spec has no schedule operation on any message path; the only occurrence of scheduled_posting_at is the read-only draft projection.
  • Setting the time through the web editor works and is then visible through GET /my/drafts.json, so the field round-trips fine on the read side.

Why it matters

We generate a weekly company report as a draft from an automation account and want Basecamp itself to publish it at 9:00 AM on Monday. Without a write path we have to keep a separate scheduler alive to call the publish endpoint at that moment, which is fragile compared with letting Basecamp own the timing the way the editor already does.

Proposal

Accept scheduled_posting_at (ISO 8601) on message create and update while status is drafted; publishing at that time would behave exactly as the editor's "Schedule and save". Sending null would clear the schedule. Documenting the account or user timezone rule for the value would help too: in our testing, the editor interprets the picked hour in the posting account's timezone, so two accounts in the same company scheduled "9:00 AM" and landed an hour apart.

Environment

Basecamp 4, account with two API identities (a person and an automation user), calls made through the official CLI and raw PUT requests, September 2026.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions