Search messages
Search messages across chats using Beeper's message index
Query parameters
Literal word search (non-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.
Literal word search (non-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'.
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.
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 chat IDs.
Limit search to specific chat IDs.
[ "!NCdzlIaMjZUmvmvyHU:beeper.com", "1231073" ]
Limit search to specific account IDs.
Limit search to specific account IDs.
[ "local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc", "local-instagram_ba_eRfQMmnSNy_p7Ih7HL7RduRpKFU" ]
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.
Filter by sender: 'me' (messages sent by the authenticated user), 'others' (messages sent by others), or a specific user ID string (user.id).
Filter by sender: 'me' (messages sent by the authenticated user), 'others' (messages sent by others), or a specific user ID string (user.id).
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 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').
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.
Maximum number of messages to return.
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.
Response
Request executed successfully
Example response
{
"items": [
{
"id": "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": "aaaa1",
"text": "Hey, can we reschedule our meeting to 3pm?",
"isSender": false,
"isUnread": false
},
{
"id": "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": "aaaa2",
"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",
"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",
"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
}