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.
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.jsonreturnsscheduled_posting_at, documented in bc-apisections/drafts.mdas "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}.jsonwith{"scheduled_posting_at": "2026-09-07T16:00:00Z"}returns 200 and the message unchanged; the drafts listing still showsnull. Wrapping it as{"message": {...}}behaves the same.subject,content,category_id,subscriptions, andnotify; the create parameters addstatusandvisible_to_clients. Neither accepts a posting time.scheduled_posting_atis the read-only draft projection.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 whilestatusisdrafted; publishing at that time would behave exactly as the editor's "Schedule and save". Sendingnullwould 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
PUTrequests, September 2026.