---
title: "Search chats"
method: GET
path: "/v1/chats/search"
tags: ["Chats"]
---

# Search chats

`GET /v1/chats/search`

Search chats by title/network or participants using Beeper Desktop's renderer algorithm.

## Query parameters

- `cursor` string — Opaque pagination cursor; do not inspect. Use together with 'direction'.
- `direction` 'after' | 'before' — Pagination direction used with 'cursor': 'before' fetches older results, 'after' fetches newer results. Defaults to 'before' when only 'cursor' is provided.
- `inbox` 'primary' | 'low-priority' | 'archive' — Filter by inbox type: "primary" (non-archived, non-low-priority), "low-priority", or "archive". If not specified, shows all chats.
- `unreadOnly` boolean, nullable — Set to true to only retrieve chats that have unread messages
- `limit` integer — Set the maximum number of chats to retrieve. Valid range: 1-200, default is 50
- `type` 'single' | 'group' | 'any' — Specify the type of chats to retrieve: use "single" for direct messages, "group" for group chats, or "any" to get all types
- `query` string — Literal token search (non-semantic). Use single words users type (e.g., "dinner"). When multiple words provided, ALL must match. Case-insensitive.
- `scope` 'titles' | 'participants' — Search scope: 'titles' matches title + network; 'participants' matches participant names.
- `lastActivityBefore` string, date-time — Provide an ISO datetime string to only retrieve chats with last activity before this time
- `lastActivityAfter` string, date-time — Provide an ISO datetime string to only retrieve chats with last activity after this time
- `accountIDs` string[] — Provide an array of account IDs to filter chats from specific messaging accounts only
- `includeMuted` boolean, nullable — Include chats marked as Muted by the user, which are usually less important. Default: true. Set to false if the user wants a more refined search.

## Response `200`

Request executed successfully

- SearchChatsOutput
  - `items` Chat[], required — Chats matching the filters.
    - `id` string, required — Unique identifier of the chat across Beeper.
    - `localChatID` string, nullable — Local chat ID specific to this Beeper Desktop installation.
    - `accountID` string, required — Account ID this chat belongs to.
    - `title` string, required — Display title of the chat as computed by the client/server.
    - `type` 'single' | 'group', required — Chat type: 'single' for direct messages, 'group' for group chats.
    - `participants` object, required — Chat participants information.
      - `items` object[], required — Participants returned for this chat (limited by the request; may be a subset).
        - `id` string, required — Stable Beeper user ID. Use as the primary key when referencing a person.
        - `username` string — Human-readable handle if available (e.g., '@alice'). May be network-specific and not globally unique.
        - `phoneNumber` string — User's phone number in E.164 format (e.g., '+14155552671'). Omit if unknown.
        - `email` string — Email address if known. Not guaranteed verified.
        - `fullName` string — Display name as shown in clients (e.g., 'Alice Example'). May include emojis.
        - `imgURL` string — Avatar image URL if available. May be temporary or local-only to this device; download promptly if durable access is needed.
        - `cannotMessage` boolean — True if Beeper cannot initiate messages to this user (e.g., blocked, network restriction, or no DM path). The user may still message you.
        - `isSelf` boolean — True if this user represents the authenticated account's own identity.
      - `hasMore` boolean, required — True if there are more participants than included in items.
      - `total` integer, required — Total number of participants in the chat.
    - `lastActivity` string, date-time — Timestamp of last activity.
    - `unreadCount` integer, required — Number of unread messages.
    - `lastReadMessageSortKey` string — Last read message sortKey.
    - `isArchived` boolean — True if chat is archived.
    - `isMuted` boolean — True if chat notifications are muted.
    - `isPinned` boolean — True if chat is pinned.
  - `hasMore` boolean, required — True if additional results can be fetched using the provided cursors.
  - `oldestCursor` string, nullable, required — Cursor for fetching older results (use with direction='before'). Opaque string; do not inspect.
  - `newestCursor` string, nullable, required — Cursor for fetching newer results (use with direction='after'). Opaque string; do not inspect.

## Other responses

- `400` — Invalid request parameters
- `401` — Access token is missing or invalid
- `403` — Access token does not have the required scope
- `404` — Resource not found
- `422` — Unprocessable entity - validation error
- `429` — Too many requests - rate limit exceeded
- `500` — Internal server error

---

[API](https://skmtc.net/beeper/apis/beeper-desktop-api.md) · [All operations](https://skmtc.net/beeper/apis/beeper-desktop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/beeper/beeper-desktop-api/revisions/5a8ac7b545c4/schema)
