# API and MCP changelog

Every change to the Integration API, events, the MCP server and endpoint URLs, newest first. The API changes in place at `https://thread.page/api/integrations/v1`; `info.version` in the [OpenAPI description](https://thread.page/api/integrations/v1/openapi.json) goes up with each release that changes the contract.

## 1.1.0

### Integration API

#### Added

- `GET /statuses` and the MCP tool `list_statuses`: the workspace's list of thread statuses, at Edit and organize. A thread's `status` is now an open string, a key of that list, with `status_name` beside it. An unknown status is `invalid_request` with `details.statuses`.
- `thread.statuses_changed`: the list changed; on a delete, `replaced: {from, to}`.
- The endpoint preset `github_release`: a note for each GitHub release.
- `reply_url`: a connection made with **Send notes you @ to a URL** replies in its response or later at this URL of the request.

- The level Read and add (`read_add`): read and search notes, add notes, threads and reminders, and change or move to Trash the notes the connection added.
- Routes for everything a level allows, the same as the MCP tools: `PUT /notes/{note_id}/content`, `PATCH /notes/{note_id}`, `POST /notes/{note_id}/move`, `/trash` and `/restore`, `GET /notes/{note_id}/versions` and `/versions/{version_id}`, `POST /notes/{note_id}/versions/{version_id}/restore`, `POST /threads`, `PATCH /threads/{thread_id}`, `POST /threads/{thread_id}/archive`, `/unarchive`, `/trash`, `/restore` and `/move`, `GET` and `POST /folders`, `PATCH /folders/{folder_id}`, `POST /folders/{folder_id}/move`, `/trash` and `/restore`, `GET /threads/{thread_id}/reminders`, and `GET`, `PUT` and `DELETE` on `/threads/{thread_id}/reminder` and `/notes/{note_id}/reminder`.
- `ChangeReceipt`, answered by those writes and by `GET /operations/{operation_id}`.
- `tp_` tokens of custom connections on `/mcp`, on Add to Inbox, Add only, Read only and Read and add; Edit and organize there answers `403` `oauth_required`.
- `GET /connection`: `level`, `can`, `cannot`, `manage_url` and `shared_places`. Its `name` is the connection’s one name, unique among the owner’s connections; the owner changes it with **Rename…**.
- `GET /notes/{note_id}`: `context_receipt`, `editable` and `changed_via`.
- `shared` on threads and folders.
- `GET /search`: `state` and `folder_id`.
- Codes: `token_expired` (`401`), `edit_not_allowed` and `organize_not_allowed` (`403`), `request_note_locked`, `shared_place_write` and `confirmation_required` (`409`). Level refusals carry `details.needs` and `details.manage_url`.
- `details.reason` of a `429`: `changes_hour`, `changes_day` and `trash_hour`.

#### Changed

- Every write takes the `Operation-Id` header, also `POST /threads/{thread_id}/notes`, `POST /inbox/notes`, the request writes and the subscription writes.
- The levels are shown as Edit and organize (`full`), Read and add (`read_add`), Read only (`read`), Add only (`append`) and Add to Inbox (`inbox`). Connections on `full` became `read_add`.
- A token lives 30, 90 or 365 days, as the owner chooses, and at most 90 days on Edit and organize. A token unused for 90 days stops working. Both ends answer `401` `token_expired`, and **Renew** brings back the same token.
- A connection that reads writes into a thread or folder shared with other people only where the owner allowed it.

#### Removed

- `operation_id` in request bodies. Send the `Operation-Id` header instead.

### Events

#### Added

- `note.purged`, `thread.renamed`, `thread.updated`, `thread.unarchived`, `thread.moved`, `thread.purged`, `folder.created`, `folder.renamed`, `folder.moved`, `folder.trashed`, `folder.restored`, `folder.purged`, `import.completed`, `reminder.set`, `reminder.changed` and `reminder.removed`.
- `changes` on `note.updated`: `content`, `checklist`, `pinned`, `done`.
- `pinned` and `done` on the event’s `note`.
- `connection_id` on the `request` of request events: your connection, whatever it is called. `handle` stays the name the note was sent to, also after a rename.

#### Changed

- `note.updated` is also sent for a checklist tick, a pin and Done.
- **Note updates** in ThreadPage offers the groups Notes, Threads, Folders and Reminders; existing subscriptions hear every type of their groups.

### MCP server

#### Added

- `get_access` answers `level`, `can`, `cannot`, `manage_url` and `shared_places`.
- Confirmation for folder moves and Trash when the folder holds threads: elicitation, or `confirmation_required` with `confirm`. A declined question answers `declined`.

#### Changed

- `tools/list` follows the grant’s scopes. Read and add and Edit and organize list the same tools; a call the level does not allow is refused with `needs` and `manage_url`.
- An assistant’s default level is Read and add. Assistant connections on `full` became `read_add`.

#### Removed

- The tool that prepared a result for the owner’s review.
- `reorder_thread`. Threads have no manual order.

### Endpoint URLs

#### Changed

- Endpoint URLs work on Read and add too.
- An endpoint URL whose connection’s token ended answers `409` `token_expired` with outcome `blocked`.
