--- title: v4.1.294 (2025-10-16) - Desktop API Changelog - Beeper Developer Docs --- Find a version Find a version [ All versions ](/desktop-api/changelog/index.md)[ All versions forward](/desktop-api/changelog/version/v4-1-294-2025-10-16...latest) ## Version v4.1.294 (2025-10-16) ### 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)! ### 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 |