# Client ## Focus `client.focus(FocusParamsbody?, RequestOptionsoptions?): FocusResponse` **post** `/v1/focus` Focus Beeper Desktop and optionally navigate to a specific chat, message, or pre-fill draft text and attachment. ### Parameters - `body: FocusParams` - `chatID?: string` Optional Beeper chat ID (or local chat ID) to focus after opening the app. If omitted, only opens/focuses the app. - `draftAttachmentPath?: string` Optional draft attachment path to populate in the message input field. - `draftText?: string` Optional draft text to populate in the message input field. - `messageID?: string` Optional message ID. Jumps to that message in the chat when opening. ### Returns - `FocusResponse` Response indicating successful app focus action. - `success: boolean` Whether the app was successfully opened/focused. ### Example ```typescript import BeeperDesktop from '@beeper/desktop-api'; const client = new BeeperDesktop(); const response = await client.focus(); console.log(response.success); ``` ## Search `client.search(SearchParamsquery, RequestOptionsoptions?): SearchResponse` **get** `/v1/search` Returns matching chats, participant name matches in groups, and the first page of messages in one call. Paginate messages via search-messages. Paginate chats via search-chats. ### Parameters - `query: SearchParams` - `query: string` User-typed search text. Literal word matching (non-semantic). ### Returns - `SearchResponse` - `results: Results` - `chats: Array` Top chat results. - `id: string` Unique identifier of the chat across Beeper. - `accountID: string` Account ID this chat belongs to. - `participants: Participants` Chat participants information. - `hasMore: boolean` True if there are more participants than included in items. - `items: Array` Participants returned for this chat (limited by the request; may be a subset). - `id: string` Stable Beeper user ID. Use as the primary key when referencing a person. - `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. - `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. - `isSelf?: boolean` True if this user represents the authenticated account's own identity. - `phoneNumber?: string` User's phone number in E.164 format (e.g., '+14155552671'). Omit if unknown. - `username?: string` Human-readable handle if available (e.g., '@alice'). May be network-specific and not globally unique. - `total: number` Total number of participants in the chat. - `title: string` Display title of the chat as computed by the client/server. - `type: "single" | "group"` Chat type: 'single' for direct messages, 'group' for group chats. - `"single"` - `"group"` - `unreadCount: number` Number of unread messages. - `isArchived?: boolean` True if chat is archived. - `isMuted?: boolean` True if chat notifications are muted. - `isPinned?: boolean` True if chat is pinned. - `lastActivity?: string` Timestamp of last activity. - `lastReadMessageSortKey?: string` Last read message sortKey. - `localChatID?: string | null` Local chat ID specific to this Beeper Desktop installation. - `in_groups: Array` Top group results by participant matches. - `id: string` Unique identifier of the chat across Beeper. - `accountID: string` Account ID this chat belongs to. - `participants: Participants` Chat participants information. - `hasMore: boolean` True if there are more participants than included in items. - `items: Array` Participants returned for this chat (limited by the request; may be a subset). - `id: string` Stable Beeper user ID. Use as the primary key when referencing a person. - `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. - `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. - `isSelf?: boolean` True if this user represents the authenticated account's own identity. - `phoneNumber?: string` User's phone number in E.164 format (e.g., '+14155552671'). Omit if unknown. - `username?: string` Human-readable handle if available (e.g., '@alice'). May be network-specific and not globally unique. - `total: number` Total number of participants in the chat. - `title: string` Display title of the chat as computed by the client/server. - `type: "single" | "group"` Chat type: 'single' for direct messages, 'group' for group chats. - `"single"` - `"group"` - `unreadCount: number` Number of unread messages. - `isArchived?: boolean` True if chat is archived. - `isMuted?: boolean` True if chat notifications are muted. - `isPinned?: boolean` True if chat is pinned. - `lastActivity?: string` Timestamp of last activity. - `lastReadMessageSortKey?: string` Last read message sortKey. - `localChatID?: string | null` Local chat ID specific to this Beeper Desktop installation. - `messages: Messages` - `chats: Record` Map of chatID -> chat details for chats referenced in items. - `id: string` Unique identifier of the chat across Beeper. - `accountID: string` Account ID this chat belongs to. - `participants: Participants` Chat participants information. - `hasMore: boolean` True if there are more participants than included in items. - `items: Array` Participants returned for this chat (limited by the request; may be a subset). - `id: string` Stable Beeper user ID. Use as the primary key when referencing a person. - `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. - `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. - `isSelf?: boolean` True if this user represents the authenticated account's own identity. - `phoneNumber?: string` User's phone number in E.164 format (e.g., '+14155552671'). Omit if unknown. - `username?: string` Human-readable handle if available (e.g., '@alice'). May be network-specific and not globally unique. - `total: number` Total number of participants in the chat. - `title: string` Display title of the chat as computed by the client/server. - `type: "single" | "group"` Chat type: 'single' for direct messages, 'group' for group chats. - `"single"` - `"group"` - `unreadCount: number` Number of unread messages. - `isArchived?: boolean` True if chat is archived. - `isMuted?: boolean` True if chat notifications are muted. - `isPinned?: boolean` True if chat is pinned. - `lastActivity?: string` Timestamp of last activity. - `lastReadMessageSortKey?: string` Last read message sortKey. - `localChatID?: string | null` Local chat ID specific to this Beeper Desktop installation. - `hasMore: boolean` True if additional results can be fetched using the provided cursors. - `items: Array` Messages matching the query and filters. - `id: string` Message ID. - `accountID: string` Beeper account ID the message belongs to. - `chatID: string` Unique identifier of the chat. - `senderID: string` Sender user ID. - `sortKey: string` A unique, sortable key used to sort messages. - `timestamp: string` Message timestamp. - `attachments?: Array` Attachments included with this message, if any. - `type: "unknown" | "img" | "video" | "audio"` Attachment type. - `"unknown"` - `"img"` - `"video"` - `"audio"` - `id?: string` Attachment identifier (typically an mxc:// URL). Use with /v1/assets/download to get a local file path. - `duration?: number` Duration in seconds (audio/video). - `fileName?: string` Original filename if available. - `fileSize?: number` File size in bytes if known. - `isGif?: boolean` True if the attachment is a GIF. - `isSticker?: boolean` True if the attachment is a sticker. - `isVoiceNote?: boolean` True if the attachment is a voice note. - `mimeType?: string` MIME type if known (e.g., 'image/png'). - `posterImg?: string` Preview image URL for video attachments (poster frame). May be temporary or local-only to this device; download promptly if durable access is needed. - `size?: Size` Pixel dimensions of the attachment: width/height in px. - `height?: number` - `width?: number` - `srcURL?: string` Public URL or local file path to fetch the asset. May be temporary or local-only to this device; download promptly if durable access is needed. - `isSender?: boolean` True if the authenticated user sent the message. - `isUnread?: boolean` True if the message is unread for the authenticated user. May be omitted. - `linkedMessageID?: string` ID of the message this is a reply to, if any. - `reactions?: Array` Reactions to the message, if any. - `id: string` Reaction ID, typically ${participantID}${reactionKey} if multiple reactions allowed, or just participantID otherwise. - `participantID: string` User ID of the participant who reacted. - `reactionKey: string` The reaction key: an emoji (😄), a network-specific key, or a shortcode like "smiling-face". - `emoji?: boolean` True if the reactionKey is an emoji. - `imgURL?: string` URL to the reaction's image. May be temporary or local-only to this device; download promptly if durable access is needed. - `senderName?: string` Resolved sender display name (impersonator/full name/username/participant name). - `text?: string` Plain-text body if present. May include a JSON fallback with text entities for rich messages. - `type?: "TEXT" | "NOTICE" | "IMAGE" | 7 more` Message content type. Useful for distinguishing reactions, media messages, and state events from regular text messages. - `"TEXT"` - `"NOTICE"` - `"IMAGE"` - `"VIDEO"` - `"VOICE"` - `"AUDIO"` - `"FILE"` - `"STICKER"` - `"LOCATION"` - `"REACTION"` - `newestCursor: string | null` Cursor for fetching newer results (use with direction='after'). Opaque string; do not inspect. - `oldestCursor: string | null` Cursor for fetching older results (use with direction='before'). Opaque string; do not inspect. ### Example ```typescript import BeeperDesktop from '@beeper/desktop-api'; const client = new BeeperDesktop(); const response = await client.search({ query: 'x' }); console.log(response.results); ```