Summary
--due on both basecamp todo (create) and basecamp todos update is accepted and the command returns ok: true, but the due_on field is not persisted on the to-do. The resulting to-do has due_on: null.
This is high-impact: a to-do silently created without a due date does not surface in reports overdue / reports assigned / schedule views, so deadlines can be missed without any error shown to the user.
Version
$ basecamp version
basecamp version 0.7.2
(latest release at time of report — v0.7.2, 2026-03-26)
Reproduction
# create with a due date
basecamp todo "test due" -p "<PROJECT>" --list <LIST_ID> --due "2026-12-31"
# => {"ok": true, ...}
# verify
basecamp todos list -p "<PROJECT>" --list <LIST_ID> --json | jq '.data[] | {content, due_on}'
# => due_on is null
Same result with basecamp todos update <ID> --due "2026-12-31" (and with -d), and also with natural-language values like --due "tomorrow". The command reports success but due_on stays null.
Expected vs actual
- Expected:
due_on set to the provided date.
- Actual:
due_on remains null; no error or warning.
Note: the binary clearly contains date validation (todo due_on must be in YYYY-MM-DD format), and a valid YYYY-MM-DD value passes without error — so this looks like the parsed flag value is not being included in the API request payload, rather than a validation/format issue.
Workaround
Setting due_on directly via the Basecamp 3 API works:
PUT https://3.basecampapi.com/<ACCOUNT>/buckets/<BUCKET>/todos/<ID>.json
{ "content": "<existing content>", "due_on": "2026-12-31" }
Environment
- macOS (darwin), arm64
- basecamp-cli 0.7.2 installed to
~/.local/bin/basecamp
Summary
--dueon bothbasecamp todo(create) andbasecamp todos updateis accepted and the command returnsok: true, but thedue_onfield is not persisted on the to-do. The resulting to-do hasdue_on: null.This is high-impact: a to-do silently created without a due date does not surface in
reports overdue/reports assigned/ schedule views, so deadlines can be missed without any error shown to the user.Version
(latest release at time of report — v0.7.2, 2026-03-26)
Reproduction
Same result with
basecamp todos update <ID> --due "2026-12-31"(and with-d), and also with natural-language values like--due "tomorrow". The command reports success butdue_onstaysnull.Expected vs actual
due_onset to the provided date.due_onremainsnull; no error or warning.Note: the binary clearly contains date validation (
todo due_on must be in YYYY-MM-DD format), and a validYYYY-MM-DDvalue passes without error — so this looks like the parsed flag value is not being included in the API request payload, rather than a validation/format issue.Workaround
Setting
due_ondirectly via the Basecamp 3 API works:Environment
~/.local/bin/basecamp