From f2e03d6a3c79491fb662faa16cb6b3d9f7d25ea2 Mon Sep 17 00:00:00 2001 From: Jeremy Daer Date: Tue, 8 Sep 2026 16:39:55 -0700 Subject: [PATCH 1/2] Sync API docs from bc3: subtasks, enroll people, backlinks, template library, get a recording MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Parity catch-up for bc3 doc/api changes merged since the last mirror sync (bc3 88549ca619): - Subtasks (basecamp/bc3#12659): new sections/subtasks.md; `subtasks_count`, `subtasks_completed_count` and `subtasks_url` on to-do and card payloads across todos, card_table_cards, everything and reports; card_table_steps and my_assignments point at the subtask endpoints - Enroll people (basecamp/bc3#9962): POST /account/enrollments/people.json in people.md - Get a recording (basecamp/bc3#10158): GET /recordings/:id.json in recordings.md - Backlinks (basecamp/bc3#13121): new sections/backlinks.md - To-do list templates (basecamp/bc3#12953): new sections/template_library.md - README endpoint index gains Backlinks, Subtasks and To-do list templates Synced from bc3 `doc/api/` by `script/api/sync_to_bc3_api` — not a hand-edit. --- README.md | 3 + sections/backlinks.md | 88 +++++++ sections/card_table_cards.md | 14 +- sections/card_table_steps.md | 12 +- sections/everything.md | 474 ++++++++++++++++++++++++++++++++++- sections/my_assignments.md | 2 +- sections/people.md | 138 ++++++++++ sections/recordings.md | 17 ++ sections/reports.md | 18 ++ sections/subtasks.md | 341 +++++++++++++++++++++++++ sections/template_library.md | 343 +++++++++++++++++++++++++ sections/todos.md | 12 + 12 files changed, 1443 insertions(+), 19 deletions(-) create mode 100644 sections/backlinks.md create mode 100644 sections/subtasks.md create mode 100644 sections/template_library.md diff --git a/README.md b/README.md index cd58715..3186882 100644 --- a/README.md +++ b/README.md @@ -284,6 +284,7 @@ API endpoints - [Account](sections/account.md#account) - [Attachments](sections/attachments.md#attachments) +- [Backlinks](sections/backlinks.md#backlinks) - [Boosts](sections/boosts.md#boosts) - [Calendars](sections/calendars.md#calendars) - [Campfires](sections/campfires.md#campfires) @@ -333,10 +334,12 @@ API endpoints - [Search](sections/search.md#search) - [Spotlights](sections/spotlights.md#spotlights) - [Subscriptions](sections/subscriptions.md#subscriptions) +- [Subtasks](sections/subtasks.md#subtasks) - [Templates](sections/templates.md#templates) - [Timeline](sections/timeline.md#timeline) - [Timesheets](sections/timesheets.md#timesheets) - [To-do list groups](sections/todolist_groups.md#to-do-list-groups) +- [To-do list templates](sections/template_library.md#to-do-list-templates) - [To-do lists](sections/todolists.md#to-do-lists) - [To-do sets](sections/todosets.md#to-do-sets) - [To-dos](sections/todos.md#to-dos) diff --git a/sections/backlinks.md b/sections/backlinks.md new file mode 100644 index 0000000..eb99898 --- /dev/null +++ b/sections/backlinks.md @@ -0,0 +1,88 @@ +Backlinks +========= + +A backlink records that one [recording][recordings] references another in its rich text content. The backlinks endpoint lists the recordings that reference a given recording — the "references to this" shown in the Basecamp UI. + +Only backlinks from projects and pings the current user can access are returned, so two people requesting the same recording's backlinks may see different lists. + +Endpoints: + +- [Get backlinks](#get-backlinks) + +Get backlinks +------------- + +* `GET /recordings/2/backlinks.json` will return the most recent 20 recordings that reference the recording with an ID of `2`, newest first. + +Each entry is a [recording][recordings] — the referencing recording, not the backlink itself. + +###### Example JSON Response +```json +[ + { + "id": 1069480024, + "status": "active", + "visible_to_clients": false, + "created_at": "2026-07-19T14:22:11.000Z", + "updated_at": "2026-07-19T14:22:11.000Z", + "title": "Finalize launch checklist", + "inherits_status": true, + "type": "Todo", + "url": "https://3.basecampapi.com/195539477/buckets/2085958505/todos/1069480024.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958505/todos/1069480024", + "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ4MDAyND9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--0000000000000000000000000000000000000000.json", + "subscription_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480024/subscription.json", + "parent": { + "id": 1069479830, + "title": "Launch", + "type": "Todolist", + "url": "https://3.basecampapi.com/195539477/buckets/2085958505/todolists/1069479830.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958505/todolists/1069479830" + }, + "bucket": { + "id": 2085958505, + "name": "The Leto Laptop", + "type": "Project" + }, + "creator": { + "id": 1049715929, + "attachable_sgid": "BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiK2dpZDovL2JjMy9QZXJzb24vMTA0OTcxNTkyOT9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg9hdHRhY2hhYmxlBjsAVA==--0000000000000000000000000000000000000000", + "name": "Matt Donahue", + "personable_type": "User", + "title": "Global Data Strategist", + "tagline": null, + "location": null, + "created_at": "2026-05-28T17:22:27.821Z", + "updated_at": "2026-05-28T17:22:27.821Z", + "email_address": "matt@honchodesign.com", + "bio": null, + "admin": false, + "owner": false, + "client": false, + "employee": false, + "time_zone": "America/Chicago", + "avatar_url": "https://3.basecampapi.com/195539477/people/BAhpBNlkkT4=--0000000000000000000000000000000000000000/avatar", + "can_ping": true, + "can_manage_projects": true, + "can_manage_people": true, + "can_access_timesheet": true, + "can_access_hill_charts": true + } + } +] +``` + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCOUNT_ID/recordings/2/backlinks.json +``` + +Legacy project-scoped routes +----------------------------- + +The following project-scoped routes are still supported and will remain available, but flat routes above are the canonical form for new integrations. + +* `GET /buckets/1/recordings/2/backlinks.json` → [Get backlinks](#get-backlinks) + +[recordings]: recordings.md#recordings diff --git a/sections/card_table_cards.md b/sections/card_table_cards.md index 5b4a448..f4f1c17 100644 --- a/sections/card_table_cards.md +++ b/sections/card_table_cards.md @@ -35,6 +35,9 @@ Get cards in a column "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480041/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480041/boosts.json", + "subtasks_count": 1, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069480041/subtasks.json", "position": 1, "parent": { "id": 1069479834, @@ -95,7 +98,7 @@ Get cards in a column "title": "Find inspiration", "inherits_status": true, "type": "Kanban::Step", - "url": "https://3.basecampapi.com/195539477/buckets/2085958505/card_tables/steps/1069480042.json", + "url": "https://3.basecampapi.com/195539477/buckets/2085958505/subtasks/1069480042.json", "app_url": "https://3.basecamp.com/195539477/buckets/2085958505/card_tables/cards/1069480041#__recording_1069480042", "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ4MDA0Mj9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--ac919964135c88e0b8d853cf2c2968095f8ce46a.json", "position": 1, @@ -167,7 +170,7 @@ Get cards in a column "can_access_hill_charts": true } ], - "completion_url": "/195539477/buckets/2085958505/steps/1069480042/completions.json" + "completion_url": "https://3.basecampapi.com/195539477/subtasks/1069480042/completion.json" } ] } @@ -205,6 +208,9 @@ Get a card "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480041/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480041/boosts.json", + "subtasks_count": 1, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069480041/subtasks.json", "position": 1, "parent": { "id": 1069479834, @@ -265,7 +271,7 @@ Get a card "title": "Find inspiration", "inherits_status": true, "type": "Kanban::Step", - "url": "https://3.basecampapi.com/195539477/buckets/2085958505/card_tables/steps/1069480042.json", + "url": "https://3.basecampapi.com/195539477/buckets/2085958505/subtasks/1069480042.json", "app_url": "https://3.basecamp.com/195539477/buckets/2085958505/card_tables/cards/1069480041#__recording_1069480042", "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ4MDA0Mj9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--ac919964135c88e0b8d853cf2c2968095f8ce46a.json", "position": 1, @@ -337,7 +343,7 @@ Get a card "can_access_hill_charts": true } ], - "completion_url": "/195539477/buckets/2085958505/steps/1069480042/completions.json" + "completion_url": "https://3.basecampapi.com/195539477/subtasks/1069480042/completion.json" } ] } diff --git a/sections/card_table_steps.md b/sections/card_table_steps.md index 04292b7..8aaed5b 100644 --- a/sections/card_table_steps.md +++ b/sections/card_table_steps.md @@ -1,6 +1,12 @@ Card table steps ================ +These are the card-scoped endpoints for what are now called [subtasks][subtasks]. They will +remain available indefinitely, but their paths speak of cards. The +[subtasks][subtasks] endpoints work on a step under any recording — a to-do included — and are +the ones to use for new integrations. Both operate on the same records and return the same +payload. + Available since Basecamp 5: steps are now also reachable via flat top-level paths (`/card_tables/steps/:id.json`, `/card_tables/cards/:card_id/steps.json`, …) in addition to the historical bucket-scoped paths shown below. Both paths return the same JSON shape and accept the @@ -19,7 +25,8 @@ Endpoints: Get steps in a card -------------------- -Steps are returned unpaginated as part of the [Get a card][card] endpoint payload. +The first 100 steps are returned as part of the [Get a card][card] endpoint payload. A card with +more than that reports the real total in `subtasks_count`; fetch the rest from `subtasks_url`. Create a step ------------------------- @@ -129,7 +136,7 @@ Reposition a step **Required parameters**: * `source_id` – the step id. Step ids can be found via the [Get a card][card] endpoint. -* `position` – Zero indexed. +* `position` – the 1-based position to move it to. This endpoint will return `204 No Content` if successful. @@ -160,3 +167,4 @@ The following project-scoped routes are still supported and will remain availabl [card]: card_table_cards.md#get-a-card [people]: people.md#get-all-people +[subtasks]: subtasks.md#subtasks diff --git a/sections/everything.md b/sections/everything.md index 9027c7a..1a9ac07 100644 --- a/sections/everything.md +++ b/sections/everything.md @@ -113,6 +113,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478944/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478944/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478944/subtasks.json", "position": 1, "parent": { "id": 1069478943, @@ -211,6 +214,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478945/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478945/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478945/subtasks.json", "position": 2, "parent": { "id": 1069478943, @@ -309,6 +315,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478946/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478946/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478946/subtasks.json", "position": 3, "parent": { "id": 1069478943, @@ -407,6 +416,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478947/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478947/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478947/subtasks.json", "position": 4, "parent": { "id": 1069478943, @@ -505,6 +517,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478948/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478948/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478948/subtasks.json", "position": 5, "parent": { "id": 1069478943, @@ -603,6 +618,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478949/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478949/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478949/subtasks.json", "position": 6, "parent": { "id": 1069478943, @@ -701,6 +719,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478934/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478934/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478934/subtasks.json", "position": 1, "parent": { "id": 1069478933, @@ -799,6 +820,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478935/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478935/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478935/subtasks.json", "position": 2, "parent": { "id": 1069478933, @@ -897,6 +921,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478936/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478936/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478936/subtasks.json", "position": 3, "parent": { "id": 1069478933, @@ -995,6 +1022,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478937/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478937/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478937/subtasks.json", "position": 4, "parent": { "id": 1069478933, @@ -1093,6 +1123,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478940/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478940/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478940/subtasks.json", "position": 5, "parent": { "id": 1069478933, @@ -1191,6 +1224,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478941/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478941/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478941/subtasks.json", "position": 6, "parent": { "id": 1069478933, @@ -1289,6 +1325,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478942/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478942/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478942/subtasks.json", "position": 7, "parent": { "id": 1069478933, @@ -1396,6 +1435,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479575/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479575/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479575/subtasks.json", "position": 1, "parent": { "id": 1069479563, @@ -1494,6 +1536,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479576/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479576/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479576/subtasks.json", "position": 2, "parent": { "id": 1069479563, @@ -1592,6 +1637,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479577/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479577/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479577/subtasks.json", "position": 3, "parent": { "id": 1069479563, @@ -1690,6 +1738,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479578/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479578/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479578/subtasks.json", "position": 4, "parent": { "id": 1069479563, @@ -1759,6 +1810,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479579/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479579/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479579/subtasks.json", "position": 5, "parent": { "id": 1069479563, @@ -1828,6 +1882,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479580/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479580/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479580/subtasks.json", "position": 6, "parent": { "id": 1069479563, @@ -1897,6 +1954,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479581/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479581/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479581/subtasks.json", "position": 7, "parent": { "id": 1069479563, @@ -1966,6 +2026,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479582/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479582/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479582/subtasks.json", "position": 8, "parent": { "id": 1069479563, @@ -2035,6 +2098,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479583/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479583/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479583/subtasks.json", "position": 9, "parent": { "id": 1069479563, @@ -2104,6 +2170,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479584/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479584/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479584/subtasks.json", "position": 10, "parent": { "id": 1069479563, @@ -2173,6 +2242,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479528/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479528/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479528/subtasks.json", "position": 1, "parent": { "id": 1069479527, @@ -2267,6 +2339,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479529/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479529/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479529/subtasks.json", "position": 2, "parent": { "id": 1069479527, @@ -2357,6 +2432,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479531/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479531/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479531/subtasks.json", "position": 1, "parent": { "id": 1069479530, @@ -2451,6 +2529,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479532/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479532/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479532/subtasks.json", "position": 2, "parent": { "id": 1069479530, @@ -2541,6 +2622,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479534/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479534/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479534/subtasks.json", "position": 1, "parent": { "id": 1069479533, @@ -2635,6 +2719,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479535/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479535/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479535/subtasks.json", "position": 2, "parent": { "id": 1069479533, @@ -2729,6 +2816,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479537/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479537/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479537/subtasks.json", "position": 1, "parent": { "id": 1069479536, @@ -2819,6 +2909,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479538/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479538/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479538/subtasks.json", "position": 2, "parent": { "id": 1069479536, @@ -2909,6 +3002,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479540/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479540/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479540/subtasks.json", "position": 1, "parent": { "id": 1069479539, @@ -3003,6 +3099,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479543/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479543/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479543/subtasks.json", "position": 2, "parent": { "id": 1069479539, @@ -3093,6 +3192,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479545/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479545/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479545/subtasks.json", "position": 1, "parent": { "id": 1069479544, @@ -3183,6 +3285,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479549/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479549/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479549/subtasks.json", "position": 2, "parent": { "id": 1069479544, @@ -3273,6 +3378,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479501/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479501/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479501/subtasks.json", "position": 1, "parent": { "id": 1069479500, @@ -3342,6 +3450,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479503/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479503/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479503/subtasks.json", "position": 2, "parent": { "id": 1069479500, @@ -3411,6 +3522,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479505/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479505/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479505/subtasks.json", "position": 3, "parent": { "id": 1069479500, @@ -3480,6 +3594,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479507/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479507/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479507/subtasks.json", "position": 4, "parent": { "id": 1069479500, @@ -3574,6 +3691,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479511/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479511/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479511/subtasks.json", "position": 5, "parent": { "id": 1069479500, @@ -3643,6 +3763,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479512/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479512/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479512/subtasks.json", "position": 6, "parent": { "id": 1069479500, @@ -3712,6 +3835,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479513/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479513/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479513/subtasks.json", "position": 7, "parent": { "id": 1069479500, @@ -3781,6 +3907,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479516/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479516/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479516/subtasks.json", "position": 8, "parent": { "id": 1069479500, @@ -3879,6 +4008,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479518/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479518/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479518/subtasks.json", "position": 9, "parent": { "id": 1069479500, @@ -3948,6 +4080,9 @@ Each response is an array of buckets with their matching to-do recordings: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478990/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478990/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478990/subtasks.json", "position": 1, "parent": { "id": 1069478979, @@ -4068,6 +4203,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478951/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478951/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478951/subtasks.json", "parent": { "id": 1069478943, "title": "Project stuff", @@ -4196,6 +4334,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478950/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478950/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478950/subtasks.json", "parent": { "id": 1069478943, "title": "Project stuff", @@ -4324,6 +4465,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478939/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478939/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478939/subtasks.json", "parent": { "id": 1069478933, "title": "General stuff", @@ -4452,6 +4596,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478938/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478938/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478938/subtasks.json", "parent": { "id": 1069478933, "title": "General stuff", @@ -4589,6 +4736,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479564/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479564/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479564/subtasks.json", "parent": { "id": 1069479563, "title": "Meetup setup", @@ -4717,6 +4867,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479573/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479573/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479573/subtasks.json", "parent": { "id": 1069479563, "title": "Meetup setup", @@ -4845,6 +4998,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479572/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479572/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479572/subtasks.json", "parent": { "id": 1069479563, "title": "Meetup setup", @@ -4973,6 +5129,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479571/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479571/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479571/subtasks.json", "parent": { "id": 1069479563, "title": "Meetup setup", @@ -5101,6 +5260,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479570/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479570/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479570/subtasks.json", "parent": { "id": 1069479563, "title": "Meetup setup", @@ -5200,6 +5362,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479569/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479569/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479569/subtasks.json", "parent": { "id": 1069479563, "title": "Meetup setup", @@ -5299,6 +5464,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479568/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479568/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479568/subtasks.json", "parent": { "id": 1069479563, "title": "Meetup setup", @@ -5427,6 +5595,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479567/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479567/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479567/subtasks.json", "parent": { "id": 1069479563, "title": "Meetup setup", @@ -5555,6 +5726,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479566/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479566/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479566/subtasks.json", "parent": { "id": 1069479563, "title": "Meetup setup", @@ -5683,6 +5857,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479565/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479565/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479565/subtasks.json", "parent": { "id": 1069479563, "title": "Meetup setup", @@ -5811,6 +5988,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479574/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479574/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479574/subtasks.json", "parent": { "id": 1069479563, "title": "Meetup setup", @@ -5939,6 +6119,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479510/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479510/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479510/subtasks.json", "parent": { "id": 1069479500, "title": "Restaurants in the area to try", @@ -6063,6 +6246,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479509/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479509/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479509/subtasks.json", "parent": { "id": 1069479500, "title": "Restaurants in the area to try", @@ -6158,6 +6344,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479508/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479508/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479508/subtasks.json", "parent": { "id": 1069479500, "title": "Restaurants in the area to try", @@ -6253,6 +6442,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479506/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479506/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479506/subtasks.json", "parent": { "id": 1069479500, "title": "Restaurants in the area to try", @@ -6352,6 +6544,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479504/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479504/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479504/subtasks.json", "parent": { "id": 1069479500, "title": "Restaurants in the area to try", @@ -6451,6 +6646,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479502/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479502/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479502/subtasks.json", "parent": { "id": 1069479500, "title": "Restaurants in the area to try", @@ -6550,6 +6748,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478980/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478980/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478980/subtasks.json", "parent": { "id": 1069478979, "title": "Health benefits renewal", @@ -6678,6 +6879,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478988/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478988/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478988/subtasks.json", "parent": { "id": 1069478979, "title": "Health benefits renewal", @@ -6777,6 +6981,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478987/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478987/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478987/subtasks.json", "parent": { "id": 1069478979, "title": "Health benefits renewal", @@ -6876,6 +7083,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478986/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478986/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478986/subtasks.json", "parent": { "id": 1069478979, "title": "Health benefits renewal", @@ -6975,6 +7185,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478985/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478985/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478985/subtasks.json", "parent": { "id": 1069478979, "title": "Health benefits renewal", @@ -7099,6 +7312,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478984/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478984/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478984/subtasks.json", "parent": { "id": 1069478979, "title": "Health benefits renewal", @@ -7223,6 +7439,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478983/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478983/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478983/subtasks.json", "parent": { "id": 1069478979, "title": "Health benefits renewal", @@ -7351,6 +7570,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478982/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478982/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478982/subtasks.json", "parent": { "id": 1069478979, "title": "Health benefits renewal", @@ -7479,6 +7701,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478981/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478981/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478981/subtasks.json", "parent": { "id": 1069478979, "title": "Health benefits renewal", @@ -7607,6 +7832,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478989/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478989/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478989/subtasks.json", "parent": { "id": 1069478979, "title": "Health benefits renewal", @@ -7728,6 +7956,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479578/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479578/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479578/subtasks.json", "position": 4, "parent": { "id": 1069479563, @@ -7797,6 +8028,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479579/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479579/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479579/subtasks.json", "position": 5, "parent": { "id": 1069479563, @@ -7866,6 +8100,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479580/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479580/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479580/subtasks.json", "position": 6, "parent": { "id": 1069479563, @@ -7935,6 +8172,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479581/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479581/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479581/subtasks.json", "position": 7, "parent": { "id": 1069479563, @@ -8004,6 +8244,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479582/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479582/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479582/subtasks.json", "position": 8, "parent": { "id": 1069479563, @@ -8073,6 +8316,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479583/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479583/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479583/subtasks.json", "position": 9, "parent": { "id": 1069479563, @@ -8142,6 +8388,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479584/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479584/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479584/subtasks.json", "position": 10, "parent": { "id": 1069479563, @@ -8211,6 +8460,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479501/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479501/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479501/subtasks.json", "position": 1, "parent": { "id": 1069479500, @@ -8280,6 +8532,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479503/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479503/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479503/subtasks.json", "position": 2, "parent": { "id": 1069479500, @@ -8349,6 +8604,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479505/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479505/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479505/subtasks.json", "position": 3, "parent": { "id": 1069479500, @@ -8418,6 +8676,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479511/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479511/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479511/subtasks.json", "position": 5, "parent": { "id": 1069479500, @@ -8487,6 +8748,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479512/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479512/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479512/subtasks.json", "position": 6, "parent": { "id": 1069479500, @@ -8556,6 +8820,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479513/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479513/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479513/subtasks.json", "position": 7, "parent": { "id": 1069479500, @@ -8625,6 +8892,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479518/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479518/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479518/subtasks.json", "position": 9, "parent": { "id": 1069479500, @@ -8703,6 +8973,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479803/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479803/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479803/subtasks.json", "position": 2, "parent": { "id": 1069479800, @@ -8772,6 +9045,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479805/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479805/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479805/subtasks.json", "position": 4, "parent": { "id": 1069479800, @@ -8875,6 +9151,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478944/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478944/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478944/subtasks.json", "position": 1, "parent": { "id": 1069478943, @@ -8973,6 +9252,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478945/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478945/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478945/subtasks.json", "position": 2, "parent": { "id": 1069478943, @@ -9071,6 +9353,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478946/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478946/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478946/subtasks.json", "position": 3, "parent": { "id": 1069478943, @@ -9169,6 +9454,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478947/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478947/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478947/subtasks.json", "position": 4, "parent": { "id": 1069478943, @@ -9267,6 +9555,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478948/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478948/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478948/subtasks.json", "position": 5, "parent": { "id": 1069478943, @@ -9365,6 +9656,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478949/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478949/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478949/subtasks.json", "position": 6, "parent": { "id": 1069478943, @@ -9463,6 +9757,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478934/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478934/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478934/subtasks.json", "position": 1, "parent": { "id": 1069478933, @@ -9561,6 +9858,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478935/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478935/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478935/subtasks.json", "position": 2, "parent": { "id": 1069478933, @@ -9659,6 +9959,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478936/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478936/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478936/subtasks.json", "position": 3, "parent": { "id": 1069478933, @@ -9757,6 +10060,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478937/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478937/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478937/subtasks.json", "position": 4, "parent": { "id": 1069478933, @@ -9855,6 +10161,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478940/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478940/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478940/subtasks.json", "position": 5, "parent": { "id": 1069478933, @@ -9953,6 +10262,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478941/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478941/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478941/subtasks.json", "position": 6, "parent": { "id": 1069478933, @@ -10051,6 +10363,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478942/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958500/recordings/1069478942/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478942/subtasks.json", "position": 7, "parent": { "id": 1069478933, @@ -10158,6 +10473,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479575/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479575/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479575/subtasks.json", "position": 1, "parent": { "id": 1069479563, @@ -10256,6 +10574,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479576/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479576/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479576/subtasks.json", "position": 2, "parent": { "id": 1069479563, @@ -10354,6 +10675,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479577/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479577/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479577/subtasks.json", "position": 3, "parent": { "id": 1069479563, @@ -10452,6 +10776,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479578/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479578/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479578/subtasks.json", "position": 4, "parent": { "id": 1069479563, @@ -10521,6 +10848,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479579/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479579/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479579/subtasks.json", "position": 5, "parent": { "id": 1069479563, @@ -10590,6 +10920,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479580/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479580/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479580/subtasks.json", "position": 6, "parent": { "id": 1069479563, @@ -10659,6 +10992,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479581/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479581/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479581/subtasks.json", "position": 7, "parent": { "id": 1069479563, @@ -10728,6 +11064,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479582/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479582/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479582/subtasks.json", "position": 8, "parent": { "id": 1069479563, @@ -10797,6 +11136,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479583/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479583/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479583/subtasks.json", "position": 9, "parent": { "id": 1069479563, @@ -10866,6 +11208,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479584/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479584/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479584/subtasks.json", "position": 10, "parent": { "id": 1069479563, @@ -10935,6 +11280,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479528/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479528/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479528/subtasks.json", "position": 1, "parent": { "id": 1069479527, @@ -11029,6 +11377,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479529/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479529/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479529/subtasks.json", "position": 2, "parent": { "id": 1069479527, @@ -11119,6 +11470,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479531/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479531/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479531/subtasks.json", "position": 1, "parent": { "id": 1069479530, @@ -11213,6 +11567,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479532/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479532/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479532/subtasks.json", "position": 2, "parent": { "id": 1069479530, @@ -11303,6 +11660,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479534/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479534/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479534/subtasks.json", "position": 1, "parent": { "id": 1069479533, @@ -11397,6 +11757,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479535/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479535/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479535/subtasks.json", "position": 2, "parent": { "id": 1069479533, @@ -11491,6 +11854,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479537/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479537/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479537/subtasks.json", "position": 1, "parent": { "id": 1069479536, @@ -11581,6 +11947,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479538/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479538/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479538/subtasks.json", "position": 2, "parent": { "id": 1069479536, @@ -11671,6 +12040,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479540/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479540/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479540/subtasks.json", "position": 1, "parent": { "id": 1069479539, @@ -11765,6 +12137,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479543/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479543/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479543/subtasks.json", "position": 2, "parent": { "id": 1069479539, @@ -11855,6 +12230,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479545/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479545/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479545/subtasks.json", "position": 1, "parent": { "id": 1069479544, @@ -11945,6 +12323,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479549/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479549/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479549/subtasks.json", "position": 2, "parent": { "id": 1069479544, @@ -12035,6 +12416,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479501/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479501/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479501/subtasks.json", "position": 1, "parent": { "id": 1069479500, @@ -12104,6 +12488,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479503/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479503/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479503/subtasks.json", "position": 2, "parent": { "id": 1069479500, @@ -12173,6 +12560,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479505/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479505/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479505/subtasks.json", "position": 3, "parent": { "id": 1069479500, @@ -12242,6 +12632,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479507/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479507/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479507/subtasks.json", "position": 4, "parent": { "id": 1069479500, @@ -12336,6 +12729,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479511/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479511/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479511/subtasks.json", "position": 5, "parent": { "id": 1069479500, @@ -12405,6 +12801,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479512/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479512/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479512/subtasks.json", "position": 6, "parent": { "id": 1069479500, @@ -12474,6 +12873,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479513/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479513/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479513/subtasks.json", "position": 7, "parent": { "id": 1069479500, @@ -12543,6 +12945,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479516/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479516/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479516/subtasks.json", "position": 8, "parent": { "id": 1069479500, @@ -12641,6 +13046,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479518/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069479518/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479518/subtasks.json", "position": 9, "parent": { "id": 1069479500, @@ -12710,6 +13118,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478990/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958501/recordings/1069478990/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069478990/subtasks.json", "position": 1, "parent": { "id": 1069478979, @@ -12844,6 +13255,9 @@ combined `/tasks` report. "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479813/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479813/boosts.json", + "subtasks_count": 1, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479813/subtasks.json", "position": 1, "parent": { "id": 1069479807, @@ -12904,7 +13318,7 @@ combined `/tasks` report. "title": "Get budget approval signoffs from CFO", "inherits_status": true, "type": "Kanban::Step", - "url": "https://3.basecampapi.com/195539477/buckets/2085958504/card_tables/steps/1069479814.json", + "url": "https://3.basecampapi.com/195539477/buckets/2085958504/subtasks/1069479814.json", "app_url": "https://3.basecamp.com/195539477/buckets/2085958504/card_tables/cards/1069479813#__recording_1069479814", "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ3OTgxND9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--99b24c91e73794e06d0ac4da55d2b4acc888a3b8.json", "position": 1, @@ -12951,7 +13365,7 @@ combined `/tasks` report. "completed": false, "due_on": "2026-05-31", "assignees": [], - "completion_url": "/195539477/buckets/2085958504/steps/1069479814/completions.json" + "completion_url": "https://3.basecampapi.com/195539477/subtasks/1069479814/completion.json" } ] } @@ -12981,6 +13395,9 @@ combined `/tasks` report. "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480041/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480041/boosts.json", + "subtasks_count": 1, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069480041/subtasks.json", "position": 1, "parent": { "id": 1069479834, @@ -13041,7 +13458,7 @@ combined `/tasks` report. "title": "Find inspiration", "inherits_status": true, "type": "Kanban::Step", - "url": "https://3.basecampapi.com/195539477/buckets/2085958505/card_tables/steps/1069480042.json", + "url": "https://3.basecampapi.com/195539477/buckets/2085958505/subtasks/1069480042.json", "app_url": "https://3.basecamp.com/195539477/buckets/2085958505/card_tables/cards/1069480041#__recording_1069480042", "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ4MDA0Mj9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--ac919964135c88e0b8d853cf2c2968095f8ce46a.json", "position": 1, @@ -13113,7 +13530,7 @@ combined `/tasks` report. "can_access_hill_charts": true } ], - "completion_url": "/195539477/buckets/2085958505/steps/1069480042/completions.json" + "completion_url": "https://3.basecampapi.com/195539477/subtasks/1069480042/completion.json" } ] }, @@ -13134,6 +13551,9 @@ combined `/tasks` report. "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480291/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480291/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069480291/subtasks.json", "position": 1, "parent": { "id": 1069479837, @@ -13225,6 +13645,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480289/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480289/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069480289/subtasks.json", "parent": { "id": 1069479836, "title": "Figuring it out", @@ -13346,6 +13769,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479813/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479813/boosts.json", + "subtasks_count": 1, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479813/subtasks.json", "position": 1, "parent": { "id": 1069479807, @@ -13406,7 +13832,7 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "title": "Get budget approval signoffs from CFO", "inherits_status": true, "type": "Kanban::Step", - "url": "https://3.basecampapi.com/195539477/buckets/2085958504/card_tables/steps/1069479814.json", + "url": "https://3.basecampapi.com/195539477/buckets/2085958504/subtasks/1069479814.json", "app_url": "https://3.basecamp.com/195539477/buckets/2085958504/card_tables/cards/1069479813#__recording_1069479814", "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ3OTgxND9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--99b24c91e73794e06d0ac4da55d2b4acc888a3b8.json", "position": 1, @@ -13453,7 +13879,7 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "completed": false, "due_on": "2026-05-31", "assignees": [], - "completion_url": "/195539477/buckets/2085958504/steps/1069479814/completions.json" + "completion_url": "https://3.basecampapi.com/195539477/subtasks/1069479814/completion.json" } ] } @@ -13483,6 +13909,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480041/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480041/boosts.json", + "subtasks_count": 1, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069480041/subtasks.json", "position": 1, "parent": { "id": 1069479834, @@ -13543,7 +13972,7 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "title": "Find inspiration", "inherits_status": true, "type": "Kanban::Step", - "url": "https://3.basecampapi.com/195539477/buckets/2085958505/card_tables/steps/1069480042.json", + "url": "https://3.basecampapi.com/195539477/buckets/2085958505/subtasks/1069480042.json", "app_url": "https://3.basecamp.com/195539477/buckets/2085958505/card_tables/cards/1069480041#__recording_1069480042", "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ4MDA0Mj9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--ac919964135c88e0b8d853cf2c2968095f8ce46a.json", "position": 1, @@ -13615,7 +14044,7 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "can_access_hill_charts": true } ], - "completion_url": "/195539477/buckets/2085958505/steps/1069480042/completions.json" + "completion_url": "https://3.basecampapi.com/195539477/subtasks/1069480042/completion.json" } ] }, @@ -13636,6 +14065,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480291/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480291/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069480291/subtasks.json", "position": 1, "parent": { "id": 1069479837, @@ -13727,6 +14159,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480041/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480041/boosts.json", + "subtasks_count": 1, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069480041/subtasks.json", "position": 1, "parent": { "id": 1069479834, @@ -13787,7 +14222,7 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "title": "Find inspiration", "inherits_status": true, "type": "Kanban::Step", - "url": "https://3.basecampapi.com/195539477/buckets/2085958505/card_tables/steps/1069480042.json", + "url": "https://3.basecampapi.com/195539477/buckets/2085958505/subtasks/1069480042.json", "app_url": "https://3.basecamp.com/195539477/buckets/2085958505/card_tables/cards/1069480041#__recording_1069480042", "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ4MDA0Mj9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--ac919964135c88e0b8d853cf2c2968095f8ce46a.json", "position": 1, @@ -13859,7 +14294,7 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "can_access_hill_charts": true } ], - "completion_url": "/195539477/buckets/2085958505/steps/1069480042/completions.json" + "completion_url": "https://3.basecampapi.com/195539477/subtasks/1069480042/completion.json" } ] } @@ -13902,6 +14337,9 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCO "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480290/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480290/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069480290/subtasks.json", "position": 1, "parent": { "id": 1069479835, @@ -14007,6 +14445,9 @@ combined `/tasks` report. "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479801/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479801/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479801/subtasks.json", "position": 1, "parent": { "id": 1069479800, @@ -14301,6 +14742,9 @@ combined `/tasks` report. "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069479861/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069479861/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479861/subtasks.json", "position": 2, "parent": { "id": 1069479829, @@ -14419,6 +14863,9 @@ combined `/tasks` report. "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479813/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479813/boosts.json", + "subtasks_count": 1, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479813/subtasks.json", "position": 1, "parent": { "id": 1069479807, @@ -14479,7 +14926,7 @@ combined `/tasks` report. "title": "Get budget approval signoffs from CFO", "inherits_status": true, "type": "Kanban::Step", - "url": "https://3.basecampapi.com/195539477/buckets/2085958504/card_tables/steps/1069479814.json", + "url": "https://3.basecampapi.com/195539477/buckets/2085958504/subtasks/1069479814.json", "app_url": "https://3.basecamp.com/195539477/buckets/2085958504/card_tables/cards/1069479813#__recording_1069479814", "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ3OTgxND9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--99b24c91e73794e06d0ac4da55d2b4acc888a3b8.json", "position": 1, @@ -14526,7 +14973,7 @@ combined `/tasks` report. "completed": false, "due_on": "2026-05-31", "assignees": [], - "completion_url": "/195539477/buckets/2085958504/steps/1069479814/completions.json" + "completion_url": "https://3.basecampapi.com/195539477/subtasks/1069479814/completion.json" } ] }, @@ -14547,6 +14994,9 @@ combined `/tasks` report. "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480291/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480291/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069480291/subtasks.json", "position": 1, "parent": { "id": 1069479837, diff --git a/sections/my_assignments.md b/sections/my_assignments.md index b238bab..fc696e4 100644 --- a/sections/my_assignments.md +++ b/sections/my_assignments.md @@ -646,7 +646,7 @@ Act on assignments Assignments are created and changed through the to-do, card, and card table step endpoints, not through `/my/assignments`. A card table step is returned nested under its parent card as a `children` entry, and it's acted on through its own step endpoints, not the parent card's: * **Assign or unassign** — pass `assignee_ids` when updating a [to-do](todos.md#update-a-to-do) or a [card](card_table_cards.md#update-a-card); include `notify: true` to notify the people you add. A card table step is assigned on the step itself via [Update a step](card_table_steps.md#update-a-step) (`PUT /card_tables/steps/:id.json`), not the parent card. -* **Complete or reopen** — a to-do uses its [completion](todos.md#complete-a-to-do) endpoint (`POST`/`DELETE /todos/:id/completion.json`). A card table step uses [Change step completion status](card_table_steps.md#change-step-completion-status) — `PUT /card_tables/steps/:step_id/completions.json` with `completion: "on"` to complete or `"off"` to reopen. A card has no completion endpoint: it's completed by moving it into a done column and reopened by moving it out, via [Move a card](card_table_cards.md#move-a-card) (`POST /card_tables/cards/:id/moves.json` with the destination `column_id`). +* **Complete or reopen** — a to-do uses its [completion](todos.md#complete-a-to-do) endpoint (`POST`/`DELETE /todos/:id/completion.json`). A subtask uses its [completion](subtasks.md#complete-a-subtask) endpoint (`POST`/`DELETE /subtasks/:id/completion.json`). A card has no completion endpoint: it's completed by moving it into a done column and reopened by moving it out, via [Move a card](card_table_cards.md#move-a-card) (`POST /card_tables/cards/:id/moves.json` with the destination `column_id`). * **Reschedule** — update a [to-do](todos.md#update-a-to-do) with `due_on` and, optionally, `starts_on`. A [card](card_table_cards.md#update-a-card) is rescheduled with `due_on` only — cards have no `starts_on` — and a card table [step](card_table_steps.md#update-a-step) likewise takes `due_on`, on its own update endpoint. **Note:** these updates replace omitted fields. A to-do update and a card table step update both clear any field you don't send — including `assignee_ids`, `due_on`, and (for steps) `title` — so resend the current values you want to keep. A card update is the one that preserves omitted `title` and `content`, but even there `due_on` is cleared unless you resend it. In short: to change only assignees or only the due date, echo the record's other current fields in the same request. diff --git a/sections/people.md b/sections/people.md index e372738..096f63b 100644 --- a/sections/people.md +++ b/sections/people.md @@ -6,6 +6,7 @@ Endpoints: - [Get all people](#get-all-people) - [Get people on a project](#get-people-on-a-project) - [Update who can access a project](#update-who-can-access-a-project) +- [Enroll people](#enroll-people) - [Get pingable people](#get-pingable-people) - [Get person](#get-person) - [Get my personal info](#get-my-personal-info) @@ -207,6 +208,143 @@ curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/j ``` +Enroll people +------------- + +* `POST /account/enrollments/people.json` enrolls one or more people on the account, sending each new person an invitation. Unlike [Update who can access a project](#update-who-can-access-a-project), which grants and revokes access to a single project, this endpoint adds people to the account itself and can optionally grant them access to several projects at once. + +The caller must be able to manage people on the account; otherwise the request is rejected with `403 Forbidden`. + +**Parameters**: + +* `people` - a required array of people to enroll. Each entry must have `name` and `email_address`, and may include an optional `title` and `company_name`. An `email_address` that already belongs to someone on the account re-enrolls that existing person rather than creating a duplicate. +* `project_ids` - an optional array of project IDs to grant the enrolled people access to. IDs that aren't integers, that the caller can't manage people on, or that aren't visible to the caller are silently ignored — the request still succeeds, but access is only granted for the projects that pass those checks, so a `201` does not guarantee every requested project was granted. +* `notify` - an optional boolean (default `true`). When `false` (also accepts `"false"`, `"0"`, `0`), no invitation emails are sent to newly enrolled people. + +###### Example JSON Request + +```json +{ + "people": [ + { + "name": "Victor Copper", + "email_address": "victor@hanchodesign.com", + "title": "Prankster", + "company_name": "Hancho Design" + }, + { + "name": "Amy Rivera", + "email_address": "amy@honchodesign.com" + } + ], + "project_ids": [ + 1049715914 + ], + "notify": true +} +``` + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \ + -d '{"people":[{"name":"Victor Copper","email_address":"victor@hanchodesign.com"}]}' -X POST \ + https://3.basecampapi.com/$ACCOUNT_ID/account/enrollments/people.json +``` + +The response is a `201 Created` whose body is an array with one entry per enrolled person, in request order. Each entry carries a `status` of `"created"` for a newly invited person or `"existing"` for someone who was already on the account, alongside the full person representation. + +###### Example JSON Response + +```json +[ + { + "status": "created", + "id": 1049715956, + "attachable_sgid": "BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiK2dpZDovL2JjMy9QZXJzb24vMTA0OTcxNTk1Nj9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg9hdHRhY2hhYmxlBjsAVA==--e842ca0bf3c9a7c8d03a4dede5fd838e947fe5c1", + "name": "Victor Copper", + "personable_type": "User", + "title": "Prankster", + "tagline": null, + "location": null, + "created_at": "2026-07-21T01:05:54.042Z", + "updated_at": "2026-07-21T01:05:54.042Z", + "email_address": "victor@hanchodesign.com", + "bio": null, + "admin": false, + "owner": false, + "client": false, + "employee": false, + "time_zone": "America/Chicago", + "avatar_url": "https://3.basecampapi.com/195539477/people/BAhpBPRkkT4=--a31ea55b015ce2f5f714df6e51f42245d949ed3a/avatar", + "company": { + "id": 1033447819, + "name": "Hancho Design" + }, + "can_ping": true, + "can_manage_projects": false, + "can_manage_people": false, + "can_access_timesheet": false, + "can_access_hill_charts": true + }, + { + "status": "existing", + "id": 1049715915, + "attachable_sgid": "BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiK2dpZDovL2JjMy9QZXJzb24vMTA0OTcxNTkxNT9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg9hdHRhY2hhYmxlBjsAVA==--56bb1f99675fd8fe08f93a706a5d2ddaa8412625", + "name": "Amy Rivera", + "personable_type": "User", + "title": "Central Web Coordinator", + "tagline": "I never said most of the things I said", + "location": null, + "created_at": "2026-05-28T17:22:23.206Z", + "updated_at": "2026-05-28T17:22:23.206Z", + "email_address": "amy@honchodesign.com", + "bio": "I never said most of the things I said", + "admin": false, + "owner": false, + "client": false, + "employee": false, + "time_zone": "America/Chicago", + "avatar_url": "https://3.basecampapi.com/195539477/people/BAhpBMtkkT4=--9927c47a4cbee30a7f9aea667882496aba799149/avatar", + "can_ping": true, + "can_manage_projects": true, + "can_manage_people": true, + "can_access_timesheet": true, + "can_access_hill_charts": true + } +] +``` + + +**Validation and error responses** + +Enrollment is all-or-nothing: if any entry can't be enrolled, the whole request is rolled back and nobody is created. + +* Per-entry validation failures return `422 Unprocessable Entity` with an `errors` array. Each element names the zero-based `index` of the offending entry and a `messages` list. Messages include `"name is required"`, `"email_address is required"`, `"email_address is invalid"`, and `"email_address is duplicated"` (email addresses must be unique within a single request, compared case-insensitively). + +```json +{ + "errors": [ + { + "index": 1, + "messages": [ + "email_address is invalid" + ] + } + ] +} +``` + +* Structural problems with the request return `422 Unprocessable Entity` with a single `error` message. A missing, non-array, or empty `people` value returns `"Provide at least one person with name and email_address."`; an entry that isn't an object returns `"Each entry in people must be an object with name and email_address."`. + +```json +{ + "error": "Provide at least one person with name and email_address." +} +``` + +* When the account has reached its user limit and the request would create at least one new person, the response is `507 Insufficient Storage` with `{ "error": "The user limit for this account has been reached." }`. Re-enrolling only people who already exist on the account succeeds even at the limit. + Get pingable people ------------------- diff --git a/sections/recordings.md b/sections/recordings.md index ad090ab..5ef16d2 100644 --- a/sections/recordings.md +++ b/sections/recordings.md @@ -6,6 +6,7 @@ Most of the data structures in the Basecamp 5 API are represented as "Recordings Endpoints: - [Get recordings](#get-recordings) +- [Get a recording](#get-a-recording) - [Trash a recording](#trash-a-recording) - [Archive a recording](#archive-a-recording) - [Unarchive a recording](#unarchive-a-recording) @@ -27,6 +28,21 @@ _Optional query parameters_: Examples: `/projects/recordings.json?type=Todo`, `/projects/recordings.json?type=Message&bucket=1`, `/projects/recordings.json?type=Document&bucket=1,2&sort=updated_at&direction=asc` +Get a recording +--------------- + +* `GET /recordings/2.json` will return the generic JSON representation of the recording with an ID of `2`. + +This endpoint is useful when you have a recording ID but do not yet know its specific type. The response includes the recording's `type`, which can then be used to follow up with the corresponding type-specific endpoint if needed. + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \ + https://3.basecampapi.com/$ACCOUNT_ID/recordings/2.json +``` + + Trash a recording ----------------- @@ -76,6 +92,7 @@ Legacy project-scoped routes The following project-scoped routes are still supported and will remain available, but flat routes above are the canonical form for new integrations. +* `GET /buckets/1/recordings/2.json` → [Get a recording](#get-a-recording) * `PUT /buckets/1/recordings/2/status/trashed.json` → [Trash a recording](#trash-a-recording) * `PUT /buckets/1/recordings/2/status/archived.json` → [Archive a recording](#archive-a-recording) * `PUT /buckets/1/recordings/2/status/active.json` → [Unarchive a recording](#unarchive-a-recording) diff --git a/sections/reports.md b/sections/reports.md index a9f3cfc..6dc3b3b 100644 --- a/sections/reports.md +++ b/sections/reports.md @@ -108,6 +108,9 @@ _Optional query parameters_: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479538/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958502/recordings/1069479538/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479538/subtasks.json", "position": 2, "parent": { "id": 1069479536, @@ -226,6 +229,9 @@ The response includes four groups: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479805/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479805/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479805/subtasks.json", "position": 4, "parent": { "id": 1069479800, @@ -307,6 +313,9 @@ The response includes four groups: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479803/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479803/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479803/subtasks.json", "position": 2, "parent": { "id": 1069479800, @@ -376,6 +385,9 @@ The response includes four groups: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479804/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479804/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479804/subtasks.json", "position": 3, "parent": { "id": 1069479800, @@ -670,6 +682,9 @@ The response includes four groups: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069479861/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069479861/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479861/subtasks.json", "position": 2, "parent": { "id": 1069479829, @@ -764,6 +779,9 @@ The response includes four groups: "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479801/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069479801/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069479801/subtasks.json", "position": 1, "parent": { "id": 1069479800, diff --git a/sections/subtasks.md b/sections/subtasks.md new file mode 100644 index 0000000..a851535 --- /dev/null +++ b/sections/subtasks.md @@ -0,0 +1,341 @@ +Subtasks +======== + +To determine if a resource accepts subtasks, check for the presence of `subtasks_count` and `subtasks_url` attributes in its JSON response — today that means [to-dos][todos] and [cards][card]. + +For historical reasons the wire type says `Kanban::Step` rather than `Subtask`; they are the same thing. + +Endpoints: + +- [Get a recording's subtasks](#get-a-recordings-subtasks) +- [Get a subtask](#get-a-subtask) +- [Create a subtask](#create-a-subtask) +- [Update a subtask](#update-a-subtask) +- [Complete a subtask](#complete-a-subtask) +- [Uncomplete a subtask](#uncomplete-a-subtask) +- [Reposition a subtask](#reposition-a-subtask) +- [Delete a subtask](#delete-a-subtask) + +Get a recording's subtasks +-------------------------- + +* `GET /recordings/3/subtasks.json` will return a [paginated list][pagination] of the subtasks of the recording with an ID of `3`, in position order. + +###### Example JSON Response + +```json +[ + { + "id": 1069479877, + "status": "active", + "visible_to_clients": false, + "created_at": "2026-07-02T00:23:00.000Z", + "updated_at": "2026-07-02T00:23:00.000Z", + "title": "Hero shot on the desk", + "inherits_status": true, + "type": "Kanban::Step", + "url": "https://3.basecampapi.com/195539477/buckets/2085958504/subtasks/1069479877.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958504/todos/1069479876#__recording_1069479877", + "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ3OTg3Nz9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--266e5283e4c42aa18671e82d04300ff0bb59db40.json", + "position": 1, + "parent": { + "id": 1069479876, + "title": "Shot list - indoor and outdoor", + "type": "Todo", + "url": "https://3.basecampapi.com/195539477/buckets/2085958504/todos/1069479876.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958504/todos/1069479876" + }, + "bucket": { + "id": 2085958504, + "name": "The Leto Laptop", + "type": "Project" + }, + "creator": { + "id": 1049715929, + "attachable_sgid": "BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiK2dpZDovL2JjMy9QZXJzb24vMTA0OTcxNTkyOT9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg9hdHRhY2hhYmxlBjsAVA==--d79103e78a10cd9f8ecda7470ea315674ac8a79a", + "name": "Matt Donahue", + "personable_type": "User", + "title": "Global Data Strategist", + "tagline": null, + "location": null, + "created_at": "2026-08-12T12:01:07.949Z", + "updated_at": "2026-08-12T12:01:07.949Z", + "email_address": "matt@honchodesign.com", + "bio": null, + "admin": false, + "owner": false, + "client": false, + "employee": false, + "time_zone": "America/Chicago", + "avatar_url": "https://3.basecampapi.com/195539477/people/BAhpBNlkkT4=--0f3c77d8c13069d514fd3f0ad694a67e426bad0f/avatar", + "can_ping": true, + "can_manage_projects": true, + "can_manage_people": true, + "can_access_timesheet": true, + "can_access_hill_charts": true + }, + "completed": false, + "due_on": null, + "assignees": [], + "completion_url": "https://3.basecampapi.com/195539477/subtasks/1069479877/completion.json" + } +] +``` + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCOUNT_ID/recordings/3/subtasks.json +``` + + +Get a subtask +------------- + +* `GET /subtasks/2.json` will return the subtask with an ID of `2`. + +###### Example JSON Response + +```json +{ + "id": 1069479879, + "status": "active", + "visible_to_clients": false, + "created_at": "2026-07-02T02:18:00.000Z", + "updated_at": "2026-07-02T02:18:00.000Z", + "title": "Outdoors, natural light", + "inherits_status": true, + "type": "Kanban::Step", + "url": "https://3.basecampapi.com/195539477/buckets/2085958504/subtasks/1069479879.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958504/todos/1069479876#__recording_1069479879", + "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ3OTg3OT9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--5b8a6fa77957d7d7efbdfb7e0e301a6ca5b61787.json", + "position": 3, + "parent": { + "id": 1069479876, + "title": "Shot list - indoor and outdoor", + "type": "Todo", + "url": "https://3.basecampapi.com/195539477/buckets/2085958504/todos/1069479876.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958504/todos/1069479876" + }, + "bucket": { + "id": 2085958504, + "name": "The Leto Laptop", + "type": "Project" + }, + "creator": { + "id": 1049715929, + "attachable_sgid": "BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiK2dpZDovL2JjMy9QZXJzb24vMTA0OTcxNTkyOT9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg9hdHRhY2hhYmxlBjsAVA==--d79103e78a10cd9f8ecda7470ea315674ac8a79a", + "name": "Matt Donahue", + "personable_type": "User", + "title": "Global Data Strategist", + "tagline": null, + "location": null, + "created_at": "2026-08-12T12:01:07.949Z", + "updated_at": "2026-08-12T12:01:07.949Z", + "email_address": "matt@honchodesign.com", + "bio": null, + "admin": false, + "owner": false, + "client": false, + "employee": false, + "time_zone": "America/Chicago", + "avatar_url": "https://3.basecampapi.com/195539477/people/BAhpBNlkkT4=--0f3c77d8c13069d514fd3f0ad694a67e426bad0f/avatar", + "can_ping": true, + "can_manage_projects": true, + "can_manage_people": true, + "can_access_timesheet": true, + "can_access_hill_charts": true + }, + "completed": false, + "due_on": null, + "assignees": [ + { + "id": 1049715938, + "attachable_sgid": "BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiK2dpZDovL2JjMy9QZXJzb24vMTA0OTcxNTkzOD9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg9hdHRhY2hhYmxlBjsAVA==--4ccc567a0a3b10e354bca909b704637b601f0b16", + "name": "Annie Bryan", + "personable_type": "User", + "title": "Central Markets Manager", + "tagline": "To open a store is easy, to keep it open is an art", + "location": null, + "created_at": "2026-08-12T12:01:09.160Z", + "updated_at": "2026-08-12T12:01:09.160Z", + "email_address": "annie@honchodesign.com", + "bio": "To open a store is easy, to keep it open is an art", + "admin": false, + "owner": false, + "client": false, + "employee": true, + "time_zone": "America/Chicago", + "avatar_url": "https://3.basecampapi.com/195539477/people/BAhpBOJkkT4=--732a71fbd28ec10d9bf4466abd3588a8bea40bdb/avatar", + "company": { + "id": 1033447817, + "name": "Honcho Design" + }, + "can_ping": true, + "can_manage_projects": true, + "can_manage_people": true, + "can_access_timesheet": true, + "can_access_hill_charts": true + } + ], + "completion_url": "https://3.basecampapi.com/195539477/subtasks/1069479879/completion.json" +} +``` + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" https://3.basecampapi.com/$ACCOUNT_ID/subtasks/2.json +``` + + +Create a subtask +---------------- + +* `POST /recordings/3/subtasks.json` creates a subtask under the recording with an ID of `3`. Only [to-dos][todos] and [cards][card] accept subtasks; other recordings will return `403 Forbidden`. + +**Required parameters**: `title` of the subtask. + +_Optional parameters_: + +* `due_on` - due date (ISO 8601) of the subtask. +* `assignee_ids` - an array of people ids that will be assigned to this subtask. Please see the [Get people][people] endpoints to retrieve them. + +This endpoint will return `201 Created` with the current JSON representation of the subtask if the creation was a success. See [Get a subtask](#get-a-subtask) for more info on the payload. + +###### Example JSON Request + +```json +{ + "title": "Book the room", + "due_on": "2021-01-01", + "assignee_ids": [30068628, 270913789] +} +``` + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \ + -d '{"title": "Book the room", "due_on": "2021-01-01", "assignee_ids": [30068628, 270913789]}' \ + https://3.basecampapi.com/$ACCOUNT_ID/recordings/3/subtasks.json +``` + + +Update a subtask +---------------- + +* `PUT /subtasks/2.json` allows changing of the subtask with an ID of `2`. + +_Optional parameters_: + +* `title` - of the subtask. +* `due_on` - due date (ISO 8601) of the subtask. +* `assignee_ids` - an array of people ids that will be assigned to this subtask. Please see the [Get people][people] endpoints to retrieve them. + +**Note:** this is a partial update — any parameter you omit is left unchanged. To clear a value, send it explicitly: + +| To… | Send | +| ----------------------- | -------------------- | +| leave a value unchanged | omit the parameter | +| clear the due date | `"due_on": null` | +| remove all assignees | `"assignee_ids": []` | + +This endpoint will return `200 OK` with the current JSON representation of the subtask if the update was a success. See [Get a subtask](#get-a-subtask) for more info on the payload. + +###### Example JSON Request + +```json +{ + "title": "Book the big room", + "due_on": "2021-01-01", + "assignee_ids": [30068628, 270913789] +} +``` + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \ + -d '{"title": "Book the big room", "due_on": "2021-01-01", "assignee_ids": [30068628, 270913789]}' -X PUT \ + https://3.basecampapi.com/$ACCOUNT_ID/subtasks/2.json +``` + + +Complete a subtask +------------------ + +* `POST /subtasks/2/completion.json` will mark the subtask with an ID of `2` as completed. + +This endpoint will return `204 No Content` if successful. No parameters are required. + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" -X POST \ + https://3.basecampapi.com/$ACCOUNT_ID/subtasks/2/completion.json +``` + + +Uncomplete a subtask +-------------------- + +* `DELETE /subtasks/2/completion.json` will mark the subtask with an ID of `2` as uncompleted. + +This endpoint will return `204 No Content` if successful. No parameters are required. + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" -X DELETE \ + https://3.basecampapi.com/$ACCOUNT_ID/subtasks/2/completion.json +``` + + +Reposition a subtask +-------------------- + +* `PUT /subtasks/2/position.json` moves the subtask with an ID of `2` to a new position among its siblings. + +**Required parameters**: + +* `position` – the 1-based position to move it to. + +This endpoint will return `204 No Content` if successful. + +###### Example JSON Request + +```json +{ + "position": 4 +} +``` + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \ + -d '{"position": 4}' -X PUT \ + https://3.basecampapi.com/$ACCOUNT_ID/subtasks/2/position.json +``` + + +Delete a subtask +---------------- + +* `DELETE /subtasks/2.json` will delete the subtask with an ID of `2`. + +No parameters required. Returns `204 No Content` if successful. On accounts where deleting is limited to admins and the subtask's creator, everyone else gets a `403 Forbidden`. + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -X DELETE \ + https://3.basecampapi.com/$ACCOUNT_ID/subtasks/2.json +``` + + +[card]: card_table_cards.md#get-a-card +[pagination]: ../README.md#pagination +[people]: people.md#get-all-people +[todos]: todos.md#get-a-to-do diff --git a/sections/template_library.md b/sections/template_library.md new file mode 100644 index 0000000..e788537 --- /dev/null +++ b/sections/template_library.md @@ -0,0 +1,343 @@ +To-do list templates +==================== + +Endpoints: + +- [Get the template library](#get-the-template-library) +- [Create a to-do list from a template](#create-a-to-do-list-from-a-template) +- [Get a template copy](#get-a-template-copy) + +Get the template library +------------------------ + +* `GET /template_library.json` returns the account's to-do list template library, its to-do set, and its active to-do list templates in title order. + +The bucket and to-do set IDs can be used with the existing [to-do list](todolists.md) and [to-do](todos.md) endpoints to create and manage template contents. + +###### Example JSON Response + +```json +{ + "bucket": { + "id": 2085958495, + "name": "To-do List Templates", + "type": "TemplateLibrary" + }, + "todoset": { + "id": 1069478899, + "title": "To-do List Templates", + "type": "Todoset", + "url": "https://3.basecampapi.com/195539477/buckets/2085958495/todosets/1069478899.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958495/todosets/1069478899" + }, + "todolists": [ + { + "id": 1069480199, + "status": "active", + "visible_to_clients": false, + "created_at": "2026-08-27T16:03:42.233Z", + "updated_at": "2026-08-27T16:03:42.974Z", + "title": "Assigned launch checklist", + "inherits_status": true, + "type": "Todolist", + "url": "https://3.basecampapi.com/195539477/buckets/2085958495/todolists/1069480199.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958495/todolists/1069480199", + "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ4MDE5OT9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--c8f44544c2376fdb5fa8216cb38cbbd5afd3b95e.json", + "comments_count": 0, + "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958495/recordings/1069480199/comments.json", + "boosts_count": 0, + "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958495/recordings/1069480199/boosts.json", + "bubble_up_url": "https://3.basecampapi.com/195539477/buckets/2085958495/recordings/1069480199/bubble_up.json", + "position": 1, + "parent": { + "id": 1069478899, + "title": "To-do List Templates", + "type": "Todoset", + "url": "https://3.basecampapi.com/195539477/buckets/2085958495/todosets/1069478899.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958495/todosets/1069478899" + }, + "bucket": { + "id": 2085958495, + "name": "To-do List Templates", + "type": "TemplateLibrary" + }, + "creator": { + "id": 1049715913, + "attachable_sgid": "BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiK2dpZDovL2JjMy9QZXJzb24vMTA0OTcxNTkxMz9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg9hdHRhY2hhYmxlBjsAVA==--e627c45e6b34e08862da23906862412620e4d5d9", + "name": "Victor Cooper", + "personable_type": "User", + "title": "Chief Strategist", + "tagline": "Don't let your dreams be dreams", + "location": "Chicago, IL", + "created_at": "2026-08-27T16:01:09.786Z", + "updated_at": "2026-08-27T16:01:10.505Z", + "email_address": "victor@honchodesign.com", + "bio": "Don't let your dreams be dreams", + "admin": true, + "owner": true, + "client": false, + "employee": true, + "time_zone": "America/Chicago", + "avatar_url": "https://3.basecampapi.com/195539477/people/BAhpBMlkkT4=--5fe7b70fbee7a7f0e2e1e19df7579e5d880c753d/avatar", + "company": { + "id": 1033447817, + "name": "Honcho Design" + }, + "can_ping": true, + "can_manage_projects": true, + "can_manage_people": true, + "can_access_timesheet": true, + "can_access_hill_charts": true + }, + "description": "", + "description_attachments": [], + "completed": false, + "completed_ratio": "0/1", + "name": "Assigned launch checklist", + "color": null, + "groups_url": "https://3.basecampapi.com/195539477/buckets/2085958495/todolists/1069480199/groups.json", + "todos_url": "https://3.basecampapi.com/195539477/buckets/2085958495/todolists/1069480199/todos.json", + "app_todos_url": "https://3.basecamp.com/195539477/buckets/2085958495/todolists/1069480199/todos", + "comments_app_url": "https://3.basecamp.com/195539477/buckets/2085958495/recordings/1069480199/comments" + }, + { + "id": 1069480198, + "status": "active", + "visible_to_clients": false, + "created_at": "2026-08-27T16:03:41.820Z", + "updated_at": "2026-08-27T16:03:41.820Z", + "title": "Project kickoff", + "inherits_status": true, + "type": "Todolist", + "url": "https://3.basecampapi.com/195539477/buckets/2085958495/todolists/1069480198.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958495/todolists/1069480198", + "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ4MDE5OD9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--c8c70a454e67b2c5c3c2cb5edd7eef362e936011.json", + "comments_count": 0, + "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958495/recordings/1069480198/comments.json", + "boosts_count": 0, + "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958495/recordings/1069480198/boosts.json", + "bubble_up_url": "https://3.basecampapi.com/195539477/buckets/2085958495/recordings/1069480198/bubble_up.json", + "position": 2, + "parent": { + "id": 1069478899, + "title": "To-do List Templates", + "type": "Todoset", + "url": "https://3.basecampapi.com/195539477/buckets/2085958495/todosets/1069478899.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958495/todosets/1069478899" + }, + "bucket": { + "id": 2085958495, + "name": "To-do List Templates", + "type": "TemplateLibrary" + }, + "creator": { + "id": 1049715913, + "attachable_sgid": "BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiK2dpZDovL2JjMy9QZXJzb24vMTA0OTcxNTkxMz9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg9hdHRhY2hhYmxlBjsAVA==--e627c45e6b34e08862da23906862412620e4d5d9", + "name": "Victor Cooper", + "personable_type": "User", + "title": "Chief Strategist", + "tagline": "Don't let your dreams be dreams", + "location": "Chicago, IL", + "created_at": "2026-08-27T16:01:09.786Z", + "updated_at": "2026-08-27T16:01:10.505Z", + "email_address": "victor@honchodesign.com", + "bio": "Don't let your dreams be dreams", + "admin": true, + "owner": true, + "client": false, + "employee": true, + "time_zone": "America/Chicago", + "avatar_url": "https://3.basecampapi.com/195539477/people/BAhpBMlkkT4=--5fe7b70fbee7a7f0e2e1e19df7579e5d880c753d/avatar", + "company": { + "id": 1033447817, + "name": "Honcho Design" + }, + "can_ping": true, + "can_manage_projects": true, + "can_manage_people": true, + "can_access_timesheet": true, + "can_access_hill_charts": true + }, + "description": "", + "description_attachments": [], + "completed": false, + "completed_ratio": "0/0", + "name": "Project kickoff", + "color": null, + "groups_url": "https://3.basecampapi.com/195539477/buckets/2085958495/todolists/1069480198/groups.json", + "todos_url": "https://3.basecampapi.com/195539477/buckets/2085958495/todolists/1069480198/todos.json", + "app_todos_url": "https://3.basecamp.com/195539477/buckets/2085958495/todolists/1069480198/todos", + "comments_app_url": "https://3.basecamp.com/195539477/buckets/2085958495/recordings/1069480198/comments" + } + ] +} +``` + + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \ + https://3.basecampapi.com/$ACCOUNT_ID/template_library.json +``` + +Create a to-do list from a template +------------------------------------ + +* `POST /template_library/copies.json` starts copying a to-do list template into a project's to-do set. + +**Required parameters**: + +* `template_recording_id` - the ID of a to-do list in the template library. +* `destination_parent_id` - the ID of the destination project's to-do set. + +###### Example JSON Request + + +```json +{ + "template_recording_id": 1069480198, + "destination_parent_id": 1069479838 +} +``` + + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \ + -d '{"template_recording_id":1069480198,"destination_parent_id":1069479838}' -X POST \ + https://3.basecampapi.com/$ACCOUNT_ID/template_library/copies.json +``` + +A successful request returns `201 Created` with a copy resource. Follow its `url` to track progress. + + +```json +{ + "id": 3, + "status": "pending", + "source_recording_id": 1069480198, + "destination_parent_id": 1069479838, + "url": "https://3.basecampapi.com/195539477/template_library/copies/3.json" +} +``` + + +When the template contains assignments or completion subscriptions for people who do not have access to the destination project, the response is `422 Unprocessable Entity` and identifies the people who would be added: + + +```json +{ + "error": "people_confirmation_required", + "people": [ + { + "id": 1049715915, + "name": "Amy Rivera", + "avatar_url": "https://3.basecampapi.com/195539477/people/BAhpBMtkkT4=--9927c47a4cbee30a7f9aea667882496aba799149/avatar" + } + ] +} +``` + + +Repeat the request with `adding_people_confirmed` set to `true` to grant those people access and start the copy. + +Get a template copy +------------------- + +* `GET /template_library/copies/1.json` returns the current state of a template copy. + +Only the person who started the copy can retrieve it. Requests from anyone else return `404 Not Found`, so poll with the same credentials that created the copy. + +The status is `pending`, `processing`, `completed`, or `failed`. Poll the URL no more than once per second while the copy is pending or processing. A completed response includes the newly created to-do list. + +###### Example JSON Response + +```json +{ + "id": 3, + "status": "completed", + "source_recording_id": 1069480198, + "destination_parent_id": 1069479838, + "url": "https://3.basecampapi.com/195539477/template_library/copies/3.json", + "destination_todolist": { + "id": 1069480208, + "status": "active", + "visible_to_clients": false, + "created_at": "2026-08-27T16:04:17.805Z", + "updated_at": "2026-08-27T16:04:17.837Z", + "title": "Project kickoff", + "inherits_status": true, + "type": "Todolist", + "url": "https://3.basecampapi.com/195539477/buckets/2085958504/todolists/1069480208.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958504/todolists/1069480208", + "bookmark_url": "https://3.basecampapi.com/195539477/my/bookmarks/BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiLmdpZDovL2JjMy9SZWNvcmRpbmcvMTA2OTQ4MDIwOD9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg1yZWFkYWJsZQY7AFQ=--0494faefccb620dc9b3828034fb8c1600bae73f6.json", + "subscription_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069480208/subscription.json", + "comments_count": 0, + "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069480208/comments.json", + "boosts_count": 0, + "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069480208/boosts.json", + "bubble_up_url": "https://3.basecampapi.com/195539477/buckets/2085958504/recordings/1069480208/bubble_up.json", + "position": 3, + "parent": { + "id": 1069479838, + "title": "To-dos", + "type": "Todoset", + "url": "https://3.basecampapi.com/195539477/buckets/2085958504/todosets/1069479838.json", + "app_url": "https://3.basecamp.com/195539477/buckets/2085958504/todosets/1069479838" + }, + "bucket": { + "id": 2085958504, + "name": "The Leto Laptop", + "type": "Project" + }, + "creator": { + "id": 1049715913, + "attachable_sgid": "BAh7BkkiC19yYWlscwY6BkVUewdJIglkYXRhBjsAVEkiK2dpZDovL2JjMy9QZXJzb24vMTA0OTcxNTkxMz9leHBpcmVzX2luBjsAVEkiCHB1cgY7AFRJIg9hdHRhY2hhYmxlBjsAVA==--e627c45e6b34e08862da23906862412620e4d5d9", + "name": "Victor Cooper", + "personable_type": "User", + "title": "Chief Strategist", + "tagline": "Don't let your dreams be dreams", + "location": "Chicago, IL", + "created_at": "2026-08-27T16:01:09.786Z", + "updated_at": "2026-08-27T16:01:10.505Z", + "email_address": "victor@honchodesign.com", + "bio": "Don't let your dreams be dreams", + "admin": true, + "owner": true, + "client": false, + "employee": true, + "time_zone": "America/Chicago", + "avatar_url": "https://3.basecampapi.com/195539477/people/BAhpBMlkkT4=--5fe7b70fbee7a7f0e2e1e19df7579e5d880c753d/avatar", + "company": { + "id": 1033447817, + "name": "Honcho Design" + }, + "can_ping": true, + "can_manage_projects": true, + "can_manage_people": true, + "can_access_timesheet": true, + "can_access_hill_charts": true + }, + "description": "", + "description_attachments": [], + "completed": false, + "completed_ratio": "0/0", + "name": "Project kickoff", + "color": null, + "groups_url": "https://3.basecampapi.com/195539477/buckets/2085958504/todolists/1069480208/groups.json", + "todos_url": "https://3.basecampapi.com/195539477/buckets/2085958504/todolists/1069480208/todos.json", + "app_todos_url": "https://3.basecamp.com/195539477/buckets/2085958504/todolists/1069480208/todos", + "comments_app_url": "https://3.basecamp.com/195539477/buckets/2085958504/recordings/1069480208/comments" + } +} +``` + + +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \ + https://3.basecampapi.com/$ACCOUNT_ID/template_library/copies/1.json +``` diff --git a/sections/todos.md b/sections/todos.md index e6507e3..46f3706 100644 --- a/sections/todos.md +++ b/sections/todos.md @@ -45,6 +45,9 @@ This endpoint without any parameters returns only active, pending (i.e. not comp "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480013/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480013/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069480013/subtasks.json", "position": 1, "parent": { "id": 1069480012, @@ -112,6 +115,11 @@ Get a to-do * `GET /todos/2.json` will return the to-do with an ID of `2`. +The `steps` array holds the to-do's first 100 [subtasks][subtasks], read-only here. `subtasks_count` +is the real total, so a to-do with more than 100 is detectable; `subtasks_url` returns a +[paginated list][2] of all of them. +Use the [subtasks][subtasks] endpoints to create, update, complete and reorder them. + ###### Example JSON Response ```json @@ -132,6 +140,9 @@ Get a to-do "comments_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480015/comments.json", "boosts_count": 0, "boosts_url": "https://3.basecampapi.com/195539477/buckets/2085958505/recordings/1069480015/boosts.json", + "subtasks_count": 0, + "subtasks_completed_count": 0, + "subtasks_url": "https://3.basecampapi.com/195539477/recordings/1069480015/subtasks.json", "parent": { "id": 1069480012, "title": "Strategy ideas", @@ -430,3 +441,4 @@ The following project-scoped routes are still supported and will remain availabl [3]: rich_text.md [4]: people.md#get-all-people [todoset]: todosets.md#get-to-do-set +[subtasks]: subtasks.md#subtasks From 533f05f4f1e1f2033d88576c2322ab2601157441 Mon Sep 17 00:00:00 2001 From: Jeremy Daer Date: Tue, 8 Sep 2026 16:39:56 -0700 Subject: [PATCH 2/2] Sync API docs from bc3: add and remove clients on a project MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Projects can now take on clients over the API, per basecamp/bc3#13098: - PUT /projects/:id/people/client_users.json grants and revokes client access, and invites brand-new clients via `create` entries; invitations are all-or-nothing (422 with per-address `errors`, 429 over the user limit) - POST/DELETE /projects/:id/client_enablement.json enable and disable client access on the project, answering `{"clients_enabled": true}` Synced from bc3 `doc/api/` by `script/api/sync_to_bc3_api` — not a hand-edit. --- sections/people.md | 73 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/sections/people.md b/sections/people.md index 096f63b..a262988 100644 --- a/sections/people.md +++ b/sections/people.md @@ -7,6 +7,8 @@ Endpoints: - [Get people on a project](#get-people-on-a-project) - [Update who can access a project](#update-who-can-access-a-project) - [Enroll people](#enroll-people) +- [Add and remove clients on a project](#add-and-remove-clients-on-a-project) +- [Enable or disable clients on a project](#enable-or-disable-clients-on-a-project) - [Get pingable people](#get-pingable-people) - [Get person](#get-person) - [Get my personal info](#get-my-personal-info) @@ -345,6 +347,77 @@ Enrollment is all-or-nothing: if any entry can't be enrolled, the whole request * When the account has reached its user limit and the request would create at least one new person, the response is `507 Insufficient Storage` with `{ "error": "The user limit for this account has been reached." }`. Re-enrolling only people who already exist on the account succeeds even at the limit. +Add and remove clients on a project +----------------------------------- + +* `PUT /projects/1/people/client_users.json` grants and revokes client access to a project, and invites brand-new clients by email. + +Clients are external collaborators who log in to see only what you choose to share with them. The project must have client access enabled first — see [Enable or disable clients on a project](#enable-or-disable-clients-on-a-project). This endpoint returns `403 Forbidden` when clients are not enabled on the project. + +This is the client-side counterpart to [Update who can access a project](#update-who-can-access-a-project). Only client users may be granted here: a `grant` ID belonging to a team member is rejected rather than cross-graded into client access, and a newly `create`d person is always enrolled as a client. Likewise, `revoke` only removes client users. + +**Parameters**: Requests should include at least one of the following parameters. + +* `grant` - an array of existing client people IDs to add to the project. +* `revoke` - an array of client people IDs to remove from the project. +* `create` - an array of new clients to invite, each with an `email_address` and optional `name`, `title`, and `company_name` properties. When `name` is omitted it defaults to the email address. + +Invitations are all-or-nothing: if any `create` entry is invalid the response is `422 Unprocessable Entity` with an `errors` array naming each bad `email_address` and its `messages`, and if the new addresses would exceed the account's user limit the response is `429 Too Many Requests`. In either case nobody is invited. Addresses that already belong to people on the account don't count toward the limit, and a repeated address counts once. + +###### Example JSON Request +```json +{ + "grant": [ + 1049715915 + ], + "revoke": [ + 1049715944 + ], + "create": [ + { + "name": "Annie Bryan", + "email_address": "annie@springfield.example.com", + "title": "Owner", + "company_name": "Springfield Elementary" + } + ] +} +``` +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \ + -d '{"grant":[2],"revoke":[3,4]}' -X PUT \ + https://3.basecampapi.com/$ACCOUNT_ID/projects/1/people/client_users.json +``` + +The response mirrors [Update who can access a project](#update-who-can-access-a-project): a `granted` and a `revoked` array of the affected [people](#get-person), each with `client` set to `true`. + + +Enable or disable clients on a project +-------------------------------------- + +* `POST /projects/1/client_enablement.json` enables client access on a project so clients can be added to it. +* `DELETE /projects/1/client_enablement.json` disables client access on a project. + +Enabling clients is a separate, deliberate step from adding them: it turns on the project's client-facing surface and applies the default client visibility. By default the project's timeline and most of its docked tools become visible to clients — the card table, Campfire, and Doors stay private — and content added afterward inherits that default, so you adjust visibility per tool and per item from there. Because enabling reconfigures project-wide client visibility this way, adding clients never enables the project implicitly — enable first, then add. + +`POST` returns `403 Forbidden` unless the project can have clients (the account supports clients and the project is a standard project). `DELETE` returns `403 Forbidden` while the project still has any client users; remove them first (see above). + +###### Example JSON Response +```json +{ + "clients_enabled": true +} +``` +###### Copy as cURL + +```shell +curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" -X POST \ + https://3.basecampapi.com/$ACCOUNT_ID/projects/1/client_enablement.json +``` + + Get pingable people -------------------