Skip to content

Sync API docs from bc3: add and remove clients on a project (PUT /projects/:id/people/client_users, client_enablement) - #443

Merged
jeremy merged 2 commits into
masterfrom
sync-project-client-users
Sep 8, 2026
Merged

Sync API docs from bc3: add and remove clients on a project (PUT /projects/:id/people/client_users, client_enablement)#443
jeremy merged 2 commits into
masterfrom
sync-project-client-users

Conversation

@jeremy

@jeremy jeremy commented Sep 8, 2026

Copy link
Copy Markdown
Member

Forward sync of the project clients API shipped in bc3#13098, merged and deployed to production:

  • people.md: new Add and remove clients on a project section — PUT /projects/:id/people/client_users.json grants and revokes client access and invites brand-new clients via create: [{email_address, name?, title?, company_name?}]; only client users may be granted or revoked here. Invitations are all-or-nothing: 422 with an errors array naming each bad email_address and its messages, 429 when the new addresses would exceed the account's user limit. Response mirrors Update who can access a projectgranted and revoked arrays of people with client: true
  • people.md: new Enable or disable clients on a project section — POST/DELETE /projects/:id/client_enablement.json, answering {"clients_enabled": true}; PUT client_users returns 403 until the project is enabled, and DELETE returns 403 while client users remain
  • Both added to the section's endpoint list

The client_users change is the second commit (533f05f) and is exactly sections/people.md, +73.

The first commit (f2e03d6) is a parity catch-up: the mirror was at exact parity with bc3 88549ca619 (the #441 sync), and five bc3 doc changes merged since then were never mirrored. They're all on bc3 master and deployed, so they ride along here as their own commit rather than a separate PR:

  • Subtasks (bc3#12659): new sections/subtasks.md; subtasks_count, subtasks_completed_count, subtasks_url on to-do and card payloads in todos.md, card_table_cards.md, everything.md, reports.md; card_table_steps.md and my_assignments.md point at the subtask endpoints
  • Enroll people (bc3#9962): POST /account/enrollments/people.json in people.md
  • Get a recording (bc3#10158): GET /recordings/:id.json in recordings.md
  • Backlinks (bc3#13121): new sections/backlinks.md
  • To-do list templates (bc3#12953): new sections/template_library.md
  • README.md endpoint index gains Backlinks, Subtasks and To-do list templates

Each commit is the sync script's output run from the corresponding bc3 commit (e8f0d765ba then 1d8d4ce95d), so the mirror lands at exact parity with bc3 master.

Reviews on this PR will be addressed.

Synced from bc3 doc/api/ by script/api/sync_to_bc3_api — not a hand-edit.

…library, get a recording

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.
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.
Copilot AI balanced review requested due to automatic review settings September 8, 2026 23:40
@jeremy
jeremy merged commit 3517477 into master Sep 8, 2026
1 check passed
@jeremy
jeremy deleted the sync-project-client-users branch September 8, 2026 23:44

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Moderate documentation errors include unsupported recording scope, incorrect completion-response expectations, and invalid IDs in client-access examples.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Synchronizes deployed API documentation from bc3, adding project client management and several recently shipped API capabilities.

Changes:

  • Documents client enrollment, project access, and client enablement.
  • Adds backlinks, subtasks, recording lookup, and template-library APIs.
  • Updates related payload examples, endpoint links, and the README index.
File summaries
File Description
sections/todos.md Adds subtask metadata and guidance.
sections/template_library.md Documents to-do list template operations.
sections/subtasks.md Documents the subtask API.
sections/reports.md Adds subtask metadata to report examples.
sections/recordings.md Documents generic recording retrieval.
sections/people.md Documents enrollment and project client management.
sections/my_assignments.md Points completion actions to subtask endpoints.
sections/everything.md Adds subtask fields to payload examples.
sections/card_table_steps.md Relates legacy steps to subtasks.
sections/card_table_cards.md Adds subtask metadata and URLs.
sections/backlinks.md Documents recording backlinks.
README.md Adds new resources to the endpoint index.
Review details

Suppressed comments (7)

sections/backlinks.md:20

  • This new response example omits the route markers required for section JSON responses by AGENTS.md:43. Add matching <!-- START GET /recordings/2/backlinks.json --> and <!-- END GET /recordings/2/backlinks.json --> comments around the JSON block so tooling can identify it consistently.
###### Example JSON Response
```json

sections/people.md:371

  • Write-request examples must be enclosed by matching route markers (AGENTS.md:45, with the marker format at AGENTS.md:43). This new client update request is currently unmarked.
###### Example JSON Request
```json
{
  "grant": [
    1049715915

sections/people.md:411

  • This new JSON response is missing the matching route markers required by AGENTS.md:43. Mark it explicitly as the POST response; that also avoids implying that the shown true payload documents the DELETE result.
###### Example JSON Response
```json
{
  "clients_enabled": true
}

sections/people.md:418

  • The section introduces both POST and DELETE, but the copyable example only exercises POST. Paired-method sections document both commands (for example sections/messages.md:493-508 and sections/card_table_columns.md:208-223), so add a DELETE cURL block; otherwise readers cannot directly exercise the newly documented disable operation.
```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
**sections/subtasks.md:210**
* Write-request examples must be enclosed by matching route markers (`AGENTS.md:45`, with the marker format at `AGENTS.md:43`). This new POST example is currently unmarked.
Example JSON Request
{
  "title": "Book the room",

sections/subtasks.md:250

  • Write-request examples must be enclosed by matching route markers (AGENTS.md:45, with the marker format at AGENTS.md:43). This new PUT example is currently unmarked.
###### Example JSON Request

```json
{
  "title": "Book the big room",

sections/subtasks.md:310

  • Write-request examples must be enclosed by matching route markers (AGENTS.md:45, with the marker format at AGENTS.md:43). This new reposition request is currently unmarked.
###### Example JSON Request

```json
{
  "position": 4
  • Files reviewed: 12/12 changed files
  • Comments generated: 5
  • Review effort level: Balanced

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread sections/card_table_steps.md
Comment thread sections/card_table_steps.md
Comment thread sections/people.md
Comment thread sections/people.md
Comment thread sections/people.md

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 533f05f4f1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread sections/recordings.md
Comment thread sections/people.md
Comment thread sections/people.md
Comment thread sections/backlinks.md
Comment thread sections/template_library.md
Comment thread sections/people.md
Comment thread sections/template_library.md
Comment thread sections/template_library.md
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-08T23:50:34.407627Z 533f05f PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants