Summary
basecamp todos show <id> --json returns a data object with fewer fields than the underlying Basecamp 3 API endpoint (GET /buckets/{bucket}/todos/{id}.json), making the CLI output an incomplete view of a to-do.
CLI version
basecamp 0.7.2
Reproduction
ID=<some-todo-id>
PROJECT=<project-id>
BUCKET=<bucket-id>
# Fields surfaced by the CLI:
basecamp todos show "$ID" --in "$PROJECT" --json --jq '.data | keys'
# Fields the API actually returns:
basecamp api get "/buckets/$BUCKET/todos/$ID.json" --agent | jq 'keys'
Observed difference
Data-carrying fields present in the raw API but absent from todos show:
completion_subscribers — the "When done, notify…" recipients shown in the web UI
due_on — due date
starts_on — start date
description_attachments — file attachments embedded in the description
comments_count — comment count on the to-do
boosts_count — boost (reaction) count
A few hypermedia fields (completion_url, comments_url, boosts_url, subscription_url) are also absent — likely intentional, mentioning for completeness.
Impact
The missing fields aren't obviously absent — the call returns ok: true and a data object that looks complete. Automated callers (scripts, AI agents, downstream tooling) querying those fields via --jq get back null or [] with no way to distinguish "field omitted by the CLI" from "field genuinely empty on the server". For interactive use this is usually fine because the user can cross-check in the web UI, but for non-interactive callers it can lead to acting on incomplete information.
Workaround
Use basecamp api get "/buckets/<bucket>/todos/<id>.json" --agent and parse with jq directly.
Created with assistance of AI agent with human review.
Summary
basecamp todos show <id> --jsonreturns adataobject with fewer fields than the underlying Basecamp 3 API endpoint (GET /buckets/{bucket}/todos/{id}.json), making the CLI output an incomplete view of a to-do.CLI version
basecamp 0.7.2Reproduction
Observed difference
Data-carrying fields present in the raw API but absent from
todos show:completion_subscribers— the "When done, notify…" recipients shown in the web UIdue_on— due datestarts_on— start datedescription_attachments— file attachments embedded in the descriptioncomments_count— comment count on the to-doboosts_count— boost (reaction) countA few hypermedia fields (
completion_url,comments_url,boosts_url,subscription_url) are also absent — likely intentional, mentioning for completeness.Impact
The missing fields aren't obviously absent — the call returns
ok: trueand adataobject that looks complete. Automated callers (scripts, AI agents, downstream tooling) querying those fields via--jqget backnullor[]with no way to distinguish "field omitted by the CLI" from "field genuinely empty on the server". For interactive use this is usually fine because the user can cross-check in the web UI, but for non-interactive callers it can lead to acting on incomplete information.Workaround
Use
basecamp api get "/buckets/<bucket>/todos/<id>.json" --agentand parse withjqdirectly.Created with assistance of AI agent with human review.