---
title: Desktop API Changelog - Beeper Developer Docs
---

Find a version  Find a version

## [v4.2.808 (2026-05-06)](/desktop-api/changelog/version/v4-2-808-2026-05-06/index.md) Latest

Part of [Beeper Desktop 4.2.808](https://www.beeper.com/changelog/desktop/4.2.808).

### Added

- **New chat actions** - You can now update more chat state directly through the API.

  API changes:

  - Added [`PATCH /v1/chats/{chatID}`](/desktop-api-reference/resources/chats/methods/update/index.md) to update chat state, including drafts, title, description, avatar path, archive state, pin state, mute state, low-priority state, and disappearing-message timer.
  - Added [`POST /v1/chats/{chatID}/read`](/desktop-api-reference/resources/chats/methods/mark_read/index.md) to mark a chat as read.
  - Added [`POST /v1/chats/{chatID}/unread`](/desktop-api-reference/resources/chats/methods/mark_unread/index.md) to mark a chat as unread.
  - Added [`POST /v1/chats/{chatID}/notify-anyway`](/desktop-api-reference/resources/chats/methods/notify_anyway/index.md) to bypass mute/snooze state when supported.

- **Start direct chats** - Starting a direct chat now has a dedicated endpoint.

  API changes:

  - Added [`POST /v1/chats/start`](/desktop-api-reference/resources/chats/methods/start/index.md).
  - Direct-message start behavior moved out of [`POST /v1/chats`](/desktop-api-reference/resources/chats/methods/create/index.md).
  - `POST /v1/chats/start` accepts `accountID`, `user`, optional `messageText`, and optional `allowInvite`.

- **Message management** - Individual messages can now be fetched and deleted.

  API changes:

  - Added [`GET /v1/chats/{chatID}/messages/{messageID}`](/desktop-api-reference/resources/messages/methods/retrieve/index.md).
  - Added [`DELETE /v1/chats/{chatID}/messages/{messageID}`](/desktop-api-reference/resources/messages/methods/delete/index.md).
  - [`PUT /v1/chats/{chatID}/messages/{messageID}`](/desktop-api-reference/resources/messages/methods/update/index.md) responses now return the updated `Message` object.

- **Richer chat metadata** - Chat responses now include more state and display information.

  API changes:

  - Added fields to the [`Chat`](/desktop-api-reference/resources/chats/index.md) response, including `network`, `description`, `imgURL`, `draft`, `reminder`, `snooze`, `isReadOnly`, `isMarkedUnread`, `isLowPriority`, `messageExpirySeconds`, `unreadMentionsCount`, and `capabilities`.
  - `network` is now always included in chat responses from [`GET /v1/chats/{chatID}`](/desktop-api-reference/resources/chats/methods/retrieve/index.md), [`GET /v1/chats`](/desktop-api-reference/resources/chats/methods/list/index.md), and [`GET /v1/chats/search`](/desktop-api-reference/resources/chats/methods/search/index.md).

- **Richer message metadata** - Message responses now include more delivery, edit, deletion, mention, link, and read-status information.

  API changes:

  - Added fields to the [`Message`](/desktop-api-reference/resources/messages/index.md) response, including `type`, `editedTimestamp`, `sendStatus`, `isHidden`, `isDeleted`, `mentions`, `links`, and `seen`.
  - Added attachment transcription metadata.

- **Better message pagination** - Message listing now returns explicit cursors for paging in both directions.

  API changes:

  - [`ListMessagesOutput`](/desktop-api-reference/resources/messages/methods/list/index.md) now includes required `oldestCursor` and `newestCursor`.
  - Cursor values are opaque and should not be parsed.

- **Account bridge metadata** - Account responses now include bridge information, making it easier to understand which bridge or network backs each account.

  API changes:

  - Added `Account.bridge` to [`GET /v1/accounts`](/desktop-api-reference/resources/accounts/methods/list/index.md) responses.
  - Added optional `Account.network`.
  - No request changes are required; clients do not send `bridge`.

### Breaking changes

- **Reaction removal URL changed** - The reaction key is now part of the path instead of a query parameter.

  API changes:

  - Old: `DELETE /v1/chats/{chatID}/messages/{messageID}/reactions?reactionKey=...`
  - New: `DELETE /v1/chats/{chatID}/messages/{messageID}/reactions/{reactionKey}`

- **Chat creation no longer starts DMs** - [`POST /v1/chats`](/desktop-api-reference/resources/chats/methods/create/index.md) is now for creating chats. Starting a direct chat moved to [`POST /v1/chats/start`](/desktop-api-reference/resources/chats/methods/start/index.md). See the [Start direct chats](#start-direct-chats) section above for the new request shape.

  API changes:

  - Removed `mode` from `CreateChatInput`.
  - Removed `user` from `CreateChatInput`.
  - Removed `allowInvite` from `CreateChatInput`.
  - `CreateChatInput` now requires `type` and `participantIDs`.

- **Response shapes are richer** - Some endpoints now return full resource objects instead of small ID/success envelopes.

  API changes:

  - `CreateChatOutput` is now based on `Chat`.
  - `EditMessageOutput` is now based on `Message`.
  - Clients should prefer `id` over legacy `chatID` or `messageID` compatibility fields.

## [v4.2.557 (2026-02-13)](/desktop-api/changelog/version/v4-2-557-2026-02-13/index.md)

### Added

- **Desktop API discovery** - New [`GET /v1/info`](/desktop-api-reference/resources/info/methods/retrieve/index.md) endpoint provides app metadata, runtime info, and endpoint discovery for the running Desktop API server.

- **WebSocket events** - New live events endpoint at [`GET /v1/ws`](/desktop-api/websocket-experimental/index.md) with per-chat subscriptions via `subscriptions.set`.

- **Message reactions** - New message reaction endpoints:

  - [`POST /v1/chats/{chatID}/messages/{messageID}/reactions`](/desktop-api-reference/resources/chats/subresources/messages/subresources/reactions/methods/add/index.md)
  - [`DELETE /v1/chats/{chatID}/messages/{messageID}/reactions`](/desktop-api-reference/resources/chats/subresources/messages/subresources/reactions/methods/delete/index.md)

- **Token introspection** - New [`POST /oauth/introspect`](/desktop-api/auth#desktop-api-discovery-and-introspection/index.md) endpoint uses `application/x-www-form-urlencoded` and returns active/inactive token metadata.

- **Contacts list** - New [`GET /v1/accounts/{accountID}/contacts/list`](/desktop-api-reference/resources/accounts/subresources/contacts/methods/list/index.md) endpoint for cursor-based merged contact listing.

### Changed

- **Chat creation behavior** - [`POST /v1/chats`](/desktop-api-reference/resources/chats/methods/create/index.md) now supports `mode=start` to create or resolve direct chats from merged contact data and returns `status=existing|created` in that mode.
- **Account schema** - `network` is no longer returned from `Account`; use `accountID` plus `user` and contact/query behavior instead.

## [v4.2.509 (2026-01-27)](/desktop-api/changelog/version/v4-2-509-2026-01-27/index.md)

### Added

- **Assets** - New streaming endpoint: `GET /v1/assets/serve`

  - Accepts `mxc://`, `localmxc://`, and `file://` URLs.
  - Supports range requests for large media playback/seek.

## [v4.2.499 (2026-01-23)](/desktop-api/changelog/version/v4-2-499-2026-01-23/index.md)

### Added

- **Message editing** - New endpoint: `PUT /v1/chats/{chatID}/messages/{messageID}`.

- **Asset uploads** - New endpoints:

  - `POST /v1/assets/upload` (multipart/form-data)
  - `POST /v1/assets/upload/base64` (JSON base64 body)

- **Send message attachments** - `POST /v1/chats/{chatID}/messages` now supports attachment payloads via `uploadID`.

### Changed

- **Message schema** - Added `type` and `linkedMessageID` fields in message responses.

## [v4.1.294 (2025-10-16)](/desktop-api/changelog/version/v4-1-294-2025-10-16/index.md)

### REST API

- **Breaking** - gRPC-style `/v0` endpoints are deprecated in favor of RESTful `/v1` endpoints
- **New** - List endpoints for chats (`/v1/chats`) and messages (`/v1/chats/:chatID/messages`)
- **Fixed** - Searching for chats no longer returns cached responses

Endpoint changes

Reference for old routes are published [here](/desktop-api/v0/index.md).

| Endpoint                                                                                                                                                                                                                   | Request/Response                                                                                                                    |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| [`GET /v0/get-chat`](/desktop-api/v0/operations/get_chat/index.md) → [`GET /v1/chats/{chatID}`](/desktop-api-reference/resources/chats/methods/retrieve/index.md)                                                          | **Request** `chatID` is now a path parameter; default `maxParticipantCount` `-1` (was `20`). **Response** Unchanged.                |
| [`POST /v0/create-chat`](/desktop-api/v0/operations/create_chat/index.md) → [`POST /v1/chats`](/desktop-api-reference/resources/chats/methods/create/index.md)                                                             | **Request** Unchanged. **Response** Returns `{ "chatID": string }`; HTTP status replaces the `success` flag.                        |
| [`POST /v0/send-message`](/desktop-api/v0/operations/send_message/index.md) → [`POST /v1/chats/{chatID}/messages`](/desktop-api-reference/resources/messages/methods/send/index.md)                                        | **Request** `chatID` moved to path; body now only `text` plus optional `replyToMessageID`. **Response** `success` flag removed.     |
| [`POST /v0/archive-chat`](/desktop-api/v0/operations/archive_chat/index.md) → [`POST /v1/chats/{chatID}/archive`](/desktop-api-reference/resources/chats/methods/archive/index.md)                                         | **Request** `chatID` moved to path; body still optional `archived` boolean. **Response** Success now `204 No Content` (empty body). |
| [`POST /v0/set-chat-reminder`](/desktop-api/v0/operations/set_chat_reminder/index.md) → [`POST /v1/chats/{chatID}/reminders`](/desktop-api-reference/resources/chats/subresources/reminders/methods/create/index.md)       | **Request** `chatID` moved to path; body still wraps `reminder`. **Response** Success now `204 No Content` (empty body).            |
| [`POST /v0/clear-chat-reminder`](/desktop-api/v0/operations/clear_chat_reminder/index.md) → [`DELETE /v1/chats/{chatID}/reminders`](/desktop-api-reference/resources/chats/subresources/reminders/methods/delete/index.md) | **Request** Method is `DELETE`; `chatID` path param; no body. **Response** Success now `204 No Content`.                            |
| [`GET /v0/search-messages`](/desktop-api/v0/operations/search_messages/index.md) → [`GET /v1/messages/search`](/desktop-api-reference/resources/messages/methods/search/index.md)                                          | **Request** Max `limit` now `20`. **Response** Unchanged; each page capped at 20 results.                                           |
| [`GET /v0/search-users`](/desktop-api/v0/operations/search_users/index.md) → [`GET /v1/accounts/{accountID}/contacts`](/desktop-api-reference/resources/contacts/methods/search/index.md)                                  | **Request** `accountID` moved into the path; `query` unchanged. **Response** Unchanged.                                             |
| [`GET /v0/get-accounts`](/desktop-api/v0/operations/get_accounts/index.md) → [`GET /v1/accounts`](/desktop-api-reference/resources/accounts/methods/list/index.md)                                                         | **Request/Response** Unchanged.                                                                                                     |
| [`POST /v0/download-asset`](/desktop-api/v0/operations/download_asset/index.md) → [`POST /v1/assets/download`](/desktop-api-reference/resources/app/methods/downloadAsset/index.md)                                        | **Request/Response** Unchanged.                                                                                                     |
| [`POST /v0/open-app`](/desktop-api/v0/operations/open_app/index.md) → [`POST /v1/focus`](/desktop-api-reference/resources/app/methods/open/index.md)                                                                       | **Request/Response** Unchanged.                                                                                                     |
| [`GET /v0/search`](/desktop-api/v0/operations/search/index.md) → [`GET /v1/search`](/desktop-api-reference/resources/app/methods/search/index.md)                                                                          | **Request/Response** Unchanged.                                                                                                     |
| [`GET /v0/search-chats`](/desktop-api/v0/operations/search_chats/index.md) → [`GET /v1/chats/search`](/desktop-api-reference/resources/chats/methods/search/index.md)                                                      | **Request/Response** Unchanged.                                                                                                     |

### MCP Server

We have an all new MCP server, and it’s [open source](https://github.com/beeper/desktop-api-js/tree/main/packages/mcp-server)!

- **Breaking** - MCP server no longer supports Server-Side Events (SSE). If your preferred client does not support Streamable HTTP or stdio, [get in touch](mailto:help@beeper.com) for workarounds.

Everything should work as before. If you encounter any issues, please [email us at ](mailto:help@beeper.com)<help@beeper.com>!

### TypeScript SDK

- **Breaking** - Some methods were reorganized
- **Breaking** - `client.token.*` removed
- **New** - `client.chats.list()` and `client.messages.list(chatID)`

Method changes

| Old Usage                                             | New Usage                                               | Notes                                                |
| ----------------------------------------------------- | ------------------------------------------------------- | ---------------------------------------------------- |
| `client.app.downloadAsset({ url })`                   | `client.assets.download({ url })`                       | Resource renamed                                     |
| `client.app.open({ chatID, ... })`                    | `client.focus({ chatID, ... })`                         | Moved to top-level                                   |
| `client.app.search({ query })`                        | `client.search({ query })`                              | Moved to top-level                                   |
| `client.chats.retrieve({ chatID })`                   | `client.chats.retrieve(chatID)`                         | `chatID` now path parameter                          |
| `client.chats.archive({ chatID, archived })`          | `client.chats.archive(chatID, { archived })`            | `chatID` now path parameter                          |
| `client.chats.reminders.create({ chatID, reminder })` | `client.chats.reminders.create(chatID, { reminder })`   | `chatID` now path parameter                          |
| `client.chats.reminders.delete({ chatID })`           | `client.chats.reminders.delete(chatID)`                 | `chatID` now path parameter                          |
| `client.contacts.search({ accountID, query })`        | `client.accounts.contacts.search(accountID, { query })` | Moved to subresource; `accountID` now path parameter |
| `client.messages.send({ chatID, text, ... })`         | `client.messages.send(chatID, { text, ... })`           | `chatID` now path parameter                          |
| `client.token.*`                                      | N/A                                                     | Removed                                              |

## [v4.1.244 (2025-09-30)](/desktop-api/changelog/version/v4-1-244-2025-09-30/index.md)

### Fixed

- API responses no longer truncate the message text to 500 characters, increased the limit in the MCP responses to 1000

## [v4.1.239 (2025-09-26)](/desktop-api/changelog/version/v4-1-239-2025-09-26/index.md)

### Added

- **Remote Access** is now available, allowing advanced users to expose Beeper Desktop API to the internet. Read more [here](/desktop-api/advanced/remote-access/index.md).
- Authenticated responses from the Desktop API now returns the Desktop app version the user is on in the response headers (`X-Beeper-Desktop-Version`). You can use the [token info endpoint](/desktop-api-reference/resources/token/methods/info/index.md) as a no-op request to check the version.

## [v4.1.210 (2025-09-17)](/desktop-api/changelog/version/v4-1-210-2025-09-17/index.md)

### Added

- [`POST /v0/create-chat`](/desktop-api/v0/operations/create_chat/index.md): create single or group chats using participant IDs, optional title, and initial message text (`CreateChatOutput`).
- [`POST /v0/download-asset`](/desktop-api/v0/operations/download_asset/index.md): fetch Matrix `mxc://` assets and return a local `srcURL` (`DownloadAssetOutput`). Assets (avatars, message attachments) return a local file path if they are already downloaded. This method can be used to download assets that are not yet downloaded.
- [`GET /v0/search`](/desktop-api/v0/operations/search/index.md): unified search returning top chats, participant matches, and first page of messages (`UnifiedSearchOutput`).
- [`GET /v0/search-users`](/desktop-api/v0/operations/search_users/index.md): look up contacts on a specific account before creating chats (`SearchUsersOutput`).

### Changed

- [`POST /v0/open-app`](/desktop-api/v0/operations/open_app/index.md) (`OpenAppInput`): new `draftAttachmentPath`; message jump now uses `messageID`.
- [`GET /v0/search-chats`](/desktop-api/v0/operations/search_chats/index.md) (`SearchChatsInput`): consolidated literal `query`, new `scope` toggle (titles vs participants), removed `participantQuery`, dropped `channel` from `type`, boolean filters now nullable.
- [`GET /v0/search-messages`](/desktop-api/v0/operations/search_messages/index.md) (`SearchMessagesInput`/`SearchMessagesOutput`): replaced `onlyWith*` flags with `mediaTypes` array (`any/video/image/link/file`); default page size documented as 20 with enforced cap; updated cursor examples; mute/low-priority filters nullable.
- [`POST /v0/send-message`](/desktop-api/v0/operations/send_message/index.md) (`SendMessageOutput`): response returns `chatID` and `pendingMessageID` instead of a final `messageID`.

### Removed

- `POST /v0/download-attachment` and `GetAttachmentOutput` superseded by the new download asset flow.

## [v4.1.169 (2025-09-02)](/desktop-api/changelog/version/v4-1-169-2025-09-02/index.md)

Starting from this version, Beeper Desktop API & MCP is now available to everyone on the stable version of the app.

### Fixed

- MCP: [`search_chats`](/desktop-api/v0/operations/search_chats/index.md) and [`get_chat`](/desktop-api/v0/operations/get_chat/index.md) now returns more information about a chat with explicit `chatID` and instructions for the LLM on how to use it

## [v4.1.155 (2025-08-31)](/desktop-api/changelog/version/v4-1-155-2025-08-31/index.md)

### Added

- Introduced more token-efficient `localChatID` fields for all chats.
- Improved attachment support.
- Released official SDK for TypeScript! <https://github.com/beeper/desktop-api-js>

---
