basecamp / basecamp/basecamp-sdk

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

Open
#844 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
49
Forks
12
Avg merge
20h 47m
Merged PRs (30d)
89

Description

**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.

Contributor guide

Open the contributing guide

Research direction

Start with the OpenAPI draft schema and the message create and update paths, then compare them with bc-api sections/drafts.md and the web editor behavior described here. Trace how the official CLI sends draft message writes and identify the existing publish path. Done means scheduled_posting_at can be set or cleared on draft create/update, publishes at the documented time-zone rule, and is reflected in the OpenAPI spec.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, openapi
Domain
api, backend-api-design
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.