Search messages
GET /v0/search-messages
Search messages across chats using Beeper’s message index. Use GET /v1/messages/search
instead.
Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Literal word search (NOT semantic). Finds messages containing these EXACT words in any order. Use single words users actually type, not concepts or phrases. Example: use “dinner” not “dinner plans”, use “sick” not “health issues”. If omitted, returns results filtered only by other parameters.
Example
dinner
Literal word search (NOT semantic). Finds messages containing these EXACT words in any order. Use single words users actually type, not concepts or phrases. Example: use “dinner” not “dinner plans”, use “sick” not “health issues”. If omitted, returns results filtered only by other parameters.
Opaque pagination cursor; do not inspect. Use together with ‘direction’.
Example
1725489123456|c29tZUltc2dQYWdl
Opaque pagination cursor; do not inspect. Use together with ‘direction’.
Pagination direction used with ‘cursor’: ‘before’ fetches older results, ‘after’ fetches newer results. Defaults to ‘before’ when only ‘cursor’ is provided.
Example
before
Pagination direction used with ‘cursor’: ‘before’ fetches older results, ‘after’ fetches newer results. Defaults to ‘before’ when only ‘cursor’ is provided.
Limit search to specific Beeper chat IDs.
Example
[ "!NCdzlIaMjZUmvmvyHU:beeper.com", "1231073"]
Limit search to specific Beeper chat IDs.
Limit search to specific Beeper account IDs (bridge instances).
Example
[ "local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc", "local-instagram_ba_eRfQMmnSNy_p7Ih7HL7RduRpKFU"]
Limit search to specific Beeper account IDs (bridge instances).
Filter by chat type: ‘group’ for group chats, ‘single’ for 1:1 chats.
Filter by chat type: ‘group’ for group chats, ‘single’ for 1:1 chats.
Filter messages by media types. Use [‘any’] for any media type, or specify exact types like [‘video’, ‘image’]. Omit for no media filtering.
Filter messages by media types. Use [‘any’] for any media type, or specify exact types like [‘video’, ‘image’]. Omit for no media filtering.
Only include messages with timestamp strictly after this ISO 8601 datetime (e.g., ‘2024-07-01T00:00:00Z’ or ‘2024-07-01T00:00:00+02:00’).
Example
2025-08-01T00:00:00Z
Only include messages with timestamp strictly after this ISO 8601 datetime (e.g., ‘2024-07-01T00:00:00Z’ or ‘2024-07-01T00:00:00+02:00’).
Only include messages with timestamp strictly before this ISO 8601 datetime (e.g., ‘2024-07-31T23:59:59Z’ or ‘2024-07-31T23:59:59+02:00’).
Example
2025-08-31T23:59:59Z
Only include messages with timestamp strictly before this ISO 8601 datetime (e.g., ‘2024-07-31T23:59:59Z’ or ‘2024-07-31T23:59:59+02:00’).
Maximum number of messages to return (1–500). Defaults to 20. The current implementation caps each page at 20 items even if a higher limit is requested.
Example
20
Maximum number of messages to return (1–500). Defaults to 20. The current implementation caps each page at 20 items even if a higher limit is requested.
Exclude messages marked Low Priority by the user. Default: true. Set to false to include all.
Exclude messages marked Low Priority by the user. Default: true. Set to false to include all.
Include messages in 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.
Include messages in 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.
Responses
Section titled “ Responses ”Tool executed successfully
object
Messages matching the query and filters.
object
Stable message ID for cursor pagination.
Example
1343993
Stable message ID (same as id).
Example
1343993
Beeper chat/thread/room ID.
Example
!NCdzlIaMjZUmvmvyHU:beeper.com
Beeper account ID the message belongs to.
Sender user ID.
Example
@kishanbagaria:local-whatsapp.localhost
Resolved sender display name (impersonator/full name/username/participant name).
Message timestamp.
Example
2025-08-31T23:30:12.520Z
Plain-text body if present. May include a JSON fallback with text entities for rich messages.
True if the authenticated user sent the message.
Attachments included with this message, if any.
object
Attachment type.
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.
MIME type if known (e.g., ‘image/png’).
Original filename if available.
File size in bytes if known.
True if the attachment is a GIF.
True if the attachment is a sticker.
True if the attachment is a voice note.
Duration in seconds (audio/video).
Preview image URL for video attachments (poster frame). May be temporary or local-only to this device; download promptly if durable access is needed.
Pixel dimensions of the attachment: width/height in px.
object
True if the message is unread for the authenticated user. May be omitted.
Reactions to the message, if any.
object
Reaction ID, typically ${participantID}${reactionKey} if multiple reactions allowed, or just participantID otherwise.
The reaction key: an emoji (😄), a network-specific key, or a shortcode like “smiling-face”.
URL to the reaction’s image. May be temporary or local-only to this device; download promptly if durable access is needed.
User ID of the participant who reacted.
True if the reactionKey is an emoji.
Example
{ "id": "1343993", "messageID": "1343993", "chatID": "!signal_adamvy:local-signal.localhost", "accountID": "local-signal_ba_7N74FrU29pxij_TnqfxeUHj53FY", "senderID": "@adamvy:local-signal.localhost", "senderName": "Adam Van Ymeren", "timestamp": "2025-08-28T11:04:29.621Z", "sortKey": 821744079, "text": "Hey, can we reschedule our meeting to 3pm?", "isSender": false, "isUnread": false}
Map of chatID -> chat details for chats referenced in items.
object
object
Unique identifier of the chat (room/thread ID, same as id) across Beeper.
Example
!NCdzlIaMjZUmvmvyHU:beeper.com
Local chat ID specific to this Beeper Desktop installation.
Beeper account ID this chat belongs to.
Display-only human-readable network name (e.g., ‘WhatsApp’, ‘Messenger’). You MUST use ‘accountID’ to perform actions.
Example
WhatsApp
Display title of the chat as computed by the client/server.
Chat type: ‘single’ for direct messages, ‘group’ for group chats.
Chat participants information.
object
Participants returned for this chat (limited by the request; may be a subset).
A person on or reachable through Beeper. Values are best-effort and can vary by network.
object
Stable Beeper user ID. Use as the primary key when referencing a person.
Human-readable handle if available (e.g., ‘@alice’). May be network-specific and not globally unique.
User’s phone number in E.164 format (e.g., ‘+14155552671’). Omit if unknown.
Email address if known. Not guaranteed verified.
Display name as shown in clients (e.g., ‘Alice Example’). May include emojis.
Avatar image URL if available. May be temporary or local-only to this device; download promptly if durable access is needed.
True if Beeper cannot initiate messages to this user (e.g., blocked, network restriction, or no DM path). The user may still message you.
True if this user represents the authenticated account’s own identity.
True if there are more participants than included in items.
Total number of participants in the chat.
Timestamp of last activity. Chats with more recent activity are often more important.
Example
2025-08-31T23:30:12.520Z
Number of unread messages.
Example
3
True if chat is archived.
True if chat notifications are muted.
True if chat is pinned.
Example
{ "id": "!instagram_mattwondra:local-instagram.localhost", "localChatID": "1229391", "accountID": "local-instagram_ba_eRfQMmnSNy_p7Ih7HL7RduRpKFU", "network": "Instagram", "title": "Matt Wondra", "type": "single", "participants": { "items": [ { "id": "@mattwondra:local-instagram.localhost", "username": "mattwondra", "fullName": "Matt Wondra", "cannotMessage": false, "isSelf": false }, { "id": "@batuhan:local-instagram.localhost", "username": "batuhan", "fullName": "Batuhan İçöz", "cannotMessage": false, "isSelf": true } ], "hasMore": false, "total": 2 }, "lastActivity": "2025-08-31T19:41:41.000Z", "unreadCount": 0, "lastReadMessageSortKey": 449706228480, "isArchived": false, "isMuted": false, "isPinned": false}
True if additional results can be fetched using the provided cursors.
Cursor for fetching older results (use with direction=‘before’). Opaque string; do not inspect.
Example
1725489123456|c29tZUltc2dQYWdl
Cursor for fetching newer results (use with direction=‘after’). Opaque string; do not inspect.
Example
1725489123456|c29tZUltc2dQYWdl
Example
{ "items": [ { "id": "1343993", "messageID": "1343993", "chatID": "!signal_adamvy:local-signal.localhost", "accountID": "local-signal_ba_7N74FrU29pxij_TnqfxeUHj53FY", "senderID": "@adamvy:local-signal.localhost", "senderName": "Adam Van Ymeren", "timestamp": "2025-08-28T11:04:29.621Z", "sortKey": 821744079, "text": "Hey, can we reschedule our meeting to 3pm?", "isSender": false, "isUnread": false }, { "id": "1343994", "messageID": "1343994", "chatID": "!telegram_nick:local-telegram.localhost", "accountID": "local-telegram_ba_QFrb5lrLPhO3OT5MFBeTWv0x4BI", "senderID": "@nick:local-telegram.localhost", "senderName": "Nick Mills-Barrett", "timestamp": "2025-08-28T14:22:15.432Z", "sortKey": 821755234, "text": "The deployment is complete, everything looks good", "isSender": false, "isUnread": true } ], "chats": { "!signal_adamvy:local-signal.localhost": { "id": "!signal_adamvy:local-signal.localhost", "localChatID": "1229720", "accountID": "local-signal_ba_7N74FrU29pxij_TnqfxeUHj53FY", "network": "Signal", "title": "Adam Van Ymeren", "type": "single", "participants": { "items": [ { "id": "@adamvy:local-signal.localhost", "fullName": "Adam Van Ymeren", "cannotMessage": false, "isSelf": false }, { "id": "@batuhan:local-signal.localhost", "fullName": "Batuhan İçöz", "cannotMessage": false, "isSelf": true } ], "hasMore": false, "total": 2 }, "lastActivity": "2025-08-31T17:38:20.393Z", "unreadCount": 0, "isArchived": false, "isMuted": false, "isPinned": true }, "!telegram_nick:local-telegram.localhost": { "id": "!telegram_nick:local-telegram.localhost", "localChatID": "1229721", "accountID": "local-telegram_ba_QFrb5lrLPhO3OT5MFBeTWv0x4BI", "network": "Telegram", "title": "Nick Mills-Barrett", "type": "single", "participants": { "items": [ { "id": "@nick:local-telegram.localhost", "username": "nick", "fullName": "Nick Mills-Barrett", "cannotMessage": false, "isSelf": false }, { "id": "@batuhan:local-telegram.localhost", "username": "batuhan", "fullName": "Batuhan İçöz", "cannotMessage": false, "isSelf": true } ], "hasMore": false, "total": 2 }, "lastActivity": "2025-08-31T16:45:10.123Z", "unreadCount": 2, "isArchived": false, "isMuted": true, "isPinned": false } }, "hasMore": true, "oldestCursor": "1756379069621", "newestCursor": null}
Invalid request parameters
object
Error message
Error code
Additional error details
object
Access token is missing or invalid
object
Error message
Error code
Additional error details
object
Access token does not have the required scope
object
Error message
Error code
Additional error details
object
Resource not found
object
Error message
Error code
Additional error details
object
Unprocessable entity - validation error
object
Error message
Error code
Additional error details
object
Too many requests - rate limit exceeded
object
Error message
Error code
Additional error details
object
Internal server error
object
Error message
Error code
Additional error details