Beeper Messages API
Messages inside a Chat: list, search, send, retrieve, edit, delete, and react.
Messages inside a Chat: list, search, send, retrieve, edit, delete, and react.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/beeper-messages-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Beeper Desktop Accounts Messages API
version: 5.0.0
description: 'Beeper Desktop''s local HTTP and WebSocket API. One auth flow and one chat shape work across WhatsApp, iMessage, Telegram, Slack, Matrix, Discord, Twitter/X, Signal, and more.
Beeper is built on the Matrix standard. Identifiers and rich text use Matrix conventions: `mxc://` and `localmxc://` URLs reference media on the Matrix homeserver and on this device''s local bridge respectively; message text is Matrix HTML on the wire; `@room` is a group-mention sentinel.
## Quickstart
1. Discover the server with `GET /v1/info`. The Desktop API is local-only unless the user has enabled remote access.
2. Authenticate with an access token from Beeper Desktop, or run OAuth2 Authorization Code with PKCE under the OAuth tag.
3. Call `GET /v1/accounts` to see connected Chat Accounts, then `GET /v1/chats` for the unified inbox.
## WebSocket
Connect to `/v1/ws` with the same Bearer token in the upgrade request. Browser `new WebSocket()` clients are not supported yet because browsers cannot set the Authorization header. After the server sends `ready`, send `{"type":"subscriptions.set","chatIDs":["*"]}` to receive every chat update, or pass specific chat IDs. The server replies with `subscriptions.updated`, then streams `chat.upserted`, `chat.deleted`, `message.upserted`, and `message.deleted`.
Delivery is at-most-once. There is no replay on reconnect, and `seq` is per connection. Refetch via HTTP after a disconnect to reconcile drift. Initial subscription state is empty; `subscriptions.set` replaces previous state; `["*"]` cannot be combined with specific chat IDs.
## Conventions
- IDs and cursors are opaque strings.
- Timestamps are ISO 8601 with timezone, except OAuth fields that use Unix seconds per RFC.
- Pagination is `cursor` plus `direction=before|after`.
- Sends return a `pendingMessageID`; resolve it with `GET /v1/chats/{chatID}/messages/{messageID}` or wait for `message.upserted` over the WebSocket.
- Optional fields may be omitted when unknown. Nullable write fields use `null` as an explicit clear operation.
- Every response carries `X-Beeper-Desktop-Version` so clients can tell which app version produced it.'
termsOfService: https://www.beeper.com/terms
contact:
name: Beeper
email: help@beeper.com
url: https://www.beeper.com
license:
name: Proprietary
url: https://www.beeper.com/terms
servers:
- url: http://localhost:23373
description: Beeper Desktop API server
security:
- bearerAuth: []
tags:
- name: Messages
description: 'Messages inside a Chat: list, search, send, retrieve, edit, delete, and react.'
paths:
/v1/messages/search:
get:
summary: Search messages
description: Search messages across chats.
tags:
- Messages
operationId: searchMessages
security:
- bearerAuth: []
parameters:
- schema:
type: string
minLength: 0
description: '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.'
example: dinner
required: false
description: '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.'
name: query
in: query
- schema:
type: string
description: Opaque pagination cursor; do not inspect. Use together with 'direction'.
example: 1725489123456|c29tZUltc2dQYWdl
x-stainless-pagination-property:
purpose: next_cursor_param
required: false
description: Opaque pagination cursor; do not inspect. Use together with 'direction'.
name: cursor
in: query
- schema:
type: string
enum:
- after
- before
description: 'Pagination direction used with ''cursor'': ''before'' fetches older results, ''after'' fetches newer results. Defaults to ''before'' when only ''cursor'' is provided.'
example: before
required: false
description: 'Pagination direction used with ''cursor'': ''before'' fetches older results, ''after'' fetches newer results. Defaults to ''before'' when only ''cursor'' is provided.'
name: direction
in: query
- schema:
type: array
items:
type: string
description: Limit search to specific chat IDs.
example:
- '!NCdzlIaMjZUmvmvyHU:beeper.com'
- '1231073'
required: false
description: Limit search to specific chat IDs.
name: chatIDs
in: query
- schema:
type: array
items:
type: string
description: Account ID this resource belongs to.
description: Limit search to specific account IDs.
example:
- matrix
- discordgo
- local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc
required: false
description: Limit search to specific account IDs.
name: accountIDs
in: query
- schema:
type: string
enum:
- group
- single
description: 'Filter by chat type: ''group'' for group chats, ''single'' for 1:1 chats.'
required: false
description: 'Filter by chat type: ''group'' for group chats, ''single'' for 1:1 chats.'
name: chatType
in: query
- schema:
type: array
items:
type: string
enum:
- any
- video
- image
- link
- file
description: Filter messages by media types. Use ['any'] for any media type, or specify exact types like ['video', 'image']. Omit for no media filtering.
required: false
description: Filter messages by media types. Use ['any'] for any media type, or specify exact types like ['video', 'image']. Omit for no media filtering.
name: mediaTypes
in: query
- schema:
type: string
description: 'Filter by sender: ''me'' (messages sent by the authenticated user), ''others'' (messages sent by others), or a specific user ID string (user.id).'
required: false
description: 'Filter by sender: ''me'' (messages sent by the authenticated user), ''others'' (messages sent by others), or a specific user ID string (user.id).'
name: sender
in: query
- schema:
type: string
format: date-time
description: 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'
required: false
description: 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').
name: dateAfter
in: query
- schema:
type: string
format: date-time
description: 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'
required: false
description: 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').
name: dateBefore
in: query
- schema:
type: integer
minimum: 0
exclusiveMinimum: true
maximum: 20
default: 20
description: Maximum number of messages to return.
example: 20
required: false
description: Maximum number of messages to return.
name: limit
in: query
- schema:
type: boolean
nullable: true
default: true
description: 'Exclude messages marked Low Priority by the user. Default: true. Set to false to include all.'
required: false
description: 'Exclude messages marked Low Priority by the user. Default: true. Set to false to include all.'
name: excludeLowPriority
in: query
- schema:
type: boolean
nullable: true
default: true
description: '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.'
required: false
description: '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.'
name: includeMuted
in: query
responses:
'200':
description: Request executed successfully
headers:
X-Beeper-Desktop-Version:
$ref: '#/components/headers/X-Beeper-Desktop-Version'
content:
application/json:
schema:
$ref: '#/components/schemas/SearchMessagesOutput'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/v1/chats/{chatID}/messages:
get:
summary: List messages
description: List all messages in a chat with cursor-based pagination. Sorted by timestamp.
tags:
- Messages
operationId: listMessages
security:
- bearerAuth: []
parameters:
- schema:
type: string
description: Chat ID. Input routes also accept the local chat ID from this Beeper Desktop installation when available.
example: '!NCdzlIaMjZUmvmvyHU:beeper.com'
required: true
description: Chat ID or local chat ID.
name: chatID
in: path
- schema:
type: string
description: Opaque pagination cursor; do not inspect. Use together with 'direction'.
example: 1725489123456|c29tZUltc2dQYWdl
x-stainless-pagination-property:
purpose: next_cursor_param
required: false
description: Opaque pagination cursor; do not inspect. Use together with 'direction'.
name: cursor
in: query
- schema:
type: string
enum:
- after
- before
description: 'Pagination direction used with ''cursor'': ''before'' fetches older results, ''after'' fetches newer results. Defaults to ''before'' when only ''cursor'' is provided.'
example: before
required: false
description: 'Pagination direction used with ''cursor'': ''before'' fetches older results, ''after'' fetches newer results. Defaults to ''before'' when only ''cursor'' is provided.'
name: direction
in: query
responses:
'200':
description: Request executed successfully
headers:
X-Beeper-Desktop-Version:
$ref: '#/components/headers/X-Beeper-Desktop-Version'
content:
application/json:
schema:
$ref: '#/components/schemas/ListMessagesOutput'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
post:
summary: Send a message
description: Send a text message to a specific chat. Supports replying to existing messages. Returns a pending message ID.
tags:
- Messages
operationId: sendMessage
security:
- bearerAuth: []
parameters:
- schema:
type: string
description: Chat ID. Input routes also accept the local chat ID from this Beeper Desktop installation when available.
example: '!NCdzlIaMjZUmvmvyHU:beeper.com'
required: true
description: Chat ID or local chat ID.
name: chatID
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
text:
allOf:
- $ref: '#/components/schemas/MessageTextInput'
- description: Text input. Markdown is converted to Matrix HTML. To provide Matrix HTML verbatim, pass a JSON-stringified HTML string.
replyToMessageID:
type: string
description: Provide a message ID to send this as a reply to an existing message
attachment:
allOf:
- $ref: '#/components/schemas/MessageAttachmentInput'
- description: Single attachment to send with the message
responses:
'200':
description: Request executed successfully
headers:
X-Beeper-Desktop-Version:
$ref: '#/components/headers/X-Beeper-Desktop-Version'
content:
application/json:
schema:
$ref: '#/components/schemas/SendMessageOutput'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/v1/chats/{chatID}/messages/{messageID}:
get:
summary: Retrieve a message
description: Retrieve a message by final message ID, pendingMessageID, or Matrix event ID. Chat ID may be a Beeper chat ID or local chat ID.
tags:
- Messages
operationId: getMessage
security:
- bearerAuth: []
parameters:
- schema:
type: string
description: Chat ID. Input routes also accept the local chat ID from this Beeper Desktop installation when available.
example: '!NCdzlIaMjZUmvmvyHU:beeper.com'
required: true
description: Chat ID or local chat ID.
name: chatID
in: path
- schema:
type: string
description: Message ID.
example: '1343993'
required: true
description: Message ID.
name: messageID
in: path
responses:
'200':
description: Request executed successfully
headers:
X-Beeper-Desktop-Version:
$ref: '#/components/headers/X-Beeper-Desktop-Version'
content:
application/json:
schema:
$ref: '#/components/schemas/Message'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
put:
summary: Edit a message
description: Edit the text content of an existing message. Messages with attachments cannot be edited.
tags:
- Messages
operationId: editMessage
security:
- bearerAuth: []
parameters:
- schema:
type: string
description: Chat ID. Input routes also accept the local chat ID from this Beeper Desktop installation when available.
example: '!NCdzlIaMjZUmvmvyHU:beeper.com'
required: true
description: Chat ID or local chat ID.
name: chatID
in: path
- schema:
type: string
description: Message ID.
example: '1343993'
required: true
description: Message ID.
name: messageID
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
text:
type: string
minLength: 1
description: New text content for the message
required:
- text
responses:
'200':
description: Request executed successfully
headers:
X-Beeper-Desktop-Version:
$ref: '#/components/headers/X-Beeper-Desktop-Version'
content:
application/json:
schema:
$ref: '#/components/schemas/EditMessageOutput'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
delete:
summary: Delete a message
description: Delete a message by final message ID. Pending message IDs are not accepted because messages cannot be deleted while sending.
tags:
- Messages
operationId: deleteMessage
security:
- bearerAuth: []
parameters:
- schema:
type: string
description: Chat ID. Input routes also accept the local chat ID from this Beeper Desktop installation when available.
example: '!NCdzlIaMjZUmvmvyHU:beeper.com'
required: true
description: Chat ID or local chat ID.
name: chatID
in: path
- schema:
type: string
description: Message ID.
example: '1343993'
required: true
description: Message ID.
name: messageID
in: path
- schema:
type: boolean
nullable: true
default: true
description: True to request deletion for everyone when the network supports it; false to delete only for the authenticated user when supported.
required: false
description: True to request deletion for everyone when the network supports it; false to delete only for the authenticated user when supported.
name: forEveryone
in: query
responses:
'204':
description: Request executed successfully
headers:
X-Beeper-Desktop-Version:
$ref: '#/components/headers/X-Beeper-Desktop-Version'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/v1/chats/{chatID}/messages/{messageID}/reactions:
post:
summary: Add a reaction
description: Add a reaction to an existing message.
tags:
- Messages
operationId: addReaction
security:
- bearerAuth: []
parameters:
- schema:
type: string
description: Chat ID. Input routes also accept the local chat ID from this Beeper Desktop installation when available.
example: '!NCdzlIaMjZUmvmvyHU:beeper.com'
required: true
description: Chat ID or local chat ID.
name: chatID
in: path
- schema:
type: string
description: Message ID.
example: '1343993'
required: true
description: Message ID.
name: messageID
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
reactionKey:
type: string
minLength: 1
description: Reaction key to add (emoji, shortcode, or custom emoji key)
transactionID:
type: string
description: Optional transaction ID for deduplication and send tracking
required:
- reactionKey
responses:
'200':
description: Request executed successfully
headers:
X-Beeper-Desktop-Version:
$ref: '#/components/headers/X-Beeper-Desktop-Version'
content:
application/json:
schema:
$ref: '#/components/schemas/AddReactionOutput'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/v1/chats/{chatID}/messages/{messageID}/reactions/{reactionKey}:
delete:
summary: Remove a reaction
description: Remove the reaction added by the authenticated user from an existing message.
tags:
- Messages
operationId: removeReaction
security:
- bearerAuth: []
parameters:
- schema:
type: string
description: Chat ID. Input routes also accept the local chat ID from this Beeper Desktop installation when available.
example: '!NCdzlIaMjZUmvmvyHU:beeper.com'
required: true
description: Chat ID or local chat ID.
name: chatID
in: path
- schema:
type: string
description: Message ID.
example: '1343993'
required: true
description: Message ID.
name: messageID
in: path
- schema:
type: string
minLength: 1
description: Reaction key to remove (emoji, shortcode, or custom emoji key)
required: true
description: Reaction key to remove (emoji, shortcode, or custom emoji key)
name: reactionKey
in: path
responses:
'200':
description: Request executed successfully
headers:
X-Beeper-Desktop-Version:
$ref: '#/components/headers/X-Beeper-Desktop-Version'
content:
application/json:
schema:
$ref: '#/components/schemas/RemoveReactionOutput'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
components:
schemas:
MessageSeen:
anyOf:
- type: boolean
x-stainless-variantName: boolean
- type: string
format: date-time
description: ISO 8601 timestamp.
example: '2025-08-31T23:30:12.520Z'
x-stainless-variantName: timestamp
- $ref: '#/components/schemas/MessageSeenByParticipant'
description: Read receipt state for this message, when available.
MessageAttachmentType:
type: string
enum:
- image
- video
- audio
- file
- gif
- voice-note
- sticker
description: Attachment type hint (image, video, audio, file, gif, voice-note, sticker). If omitted, auto-detected from mimeType
MessageTextInput:
type: string
description: Draft text. Plain text and Markdown are converted to Matrix HTML with the same rules used by send and edit.
Participant:
allOf:
- $ref: '#/components/schemas/User'
- type: object
properties:
isAdmin:
type: boolean
description: True if this participant has admin privileges in the chat.
isPending:
type: boolean
description: True if this participant has been invited but has not joined yet.
isNetworkBot:
type: boolean
description: True if this participant represents a network or bridge bot.
description: A chat participant. Extends User with chat membership metadata.
SearchMessagesOutput:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Message'
description: Messages matching the query and filters.
x-stainless-pagination-property:
purpose: items
hasMore:
type: boolean
description: True if additional results can be fetched using the provided cursors.
x-stainless-pagination-property:
purpose: has_next_page
oldestCursor:
type: string
nullable: true
description: Cursor for fetching older results (use with direction='before'). Opaque string; do not inspect.
example: 1725489123456|c29tZUltc2dQYWdl
x-stainless-pagination-property:
purpose: next_cursor_field
newestCursor:
type: string
nullable: true
description: Cursor for fetching newer results (use with direction='after'). Opaque string; do not inspect.
example: 1725489123456|c29tZUltc2dQYWdl
chats:
type: object
additionalProperties:
$ref: '#/components/schemas/Chat'
description: Map of chatID -> chat details for chats referenced in items.
required:
- items
- hasMore
- oldestCursor
- newestCursor
- chats
example:
items:
- id: '241392'
chatID: '!discord_109876543210987654:beeper.com'
accountID: discordgo
senderID: '@discord_221590782384013314:beeper.com'
senderName: Kishan Bagaria
timestamp: '2025-08-28T11:04:29.621Z'
sortKey: '455171049984'
text: The OAuth fix is deployed. Can you verify the desktop flow?
isSender: false
isUnread: false
- id: '241393'
chatID: '!whatsapp_15550101002:ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc.local-whatsapp.localhost'
accountID: local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc
senderID: '@15550101002:local-whatsapp.localhost'
senderName: Adam Van Ymeren
timestamp: '2025-08-28T14:22:15.432Z'
sortKey: '455171050240'
text: Dinner at 7 still works for me.
isSender: false
isUnread: true
chats:
'!discord_109876543210987654:beeper.com':
id: '!discord_109876543210987654:beeper.com'
localChatID: '1229720'
accountID: discordgo
network: Discord
title: Desktop API
type: group
participants:
items:
- id: '@discord_221590782384013314:beeper.com'
username: kishan
fullName: Kishan Bagaria
cannotMessage: false
isSelf: false
- id: '@discord_337451892017545216:beeper.com'
username: batuhanicoz
fullName: Batuhan İçöz
cannotMessage: false
isSelf: true
hasMore: true
total: 6
lastActivity: '2025-08-31T17:38:20.393Z'
unreadCount: 0
isArchived: false
isMuted: false
isPinned: true
'!whatsapp_15550101002:ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc.local-whatsapp.localhost':
id: '!whatsapp_15550101002:ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc.local-whatsapp.localhost'
localChatID: '1229721'
accountID: local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc
network: WhatsApp
title: Adam Van Ymeren
type: single
participants:
items:
- id: '@15550101002:local-whatsapp.localhost'
phoneNumber: '+15550101002'
fullName: Adam Van Ymeren
cannotMessage: false
isSelf: false
- id: '@ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc:local-whatsapp.localhost'
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
ChatDraft:
type: object
nullable: true
properties:
text:
type: string
description: Matrix HTML draft body.
attachments:
type: object
additionalProperties:
$ref: '#/components/schemas/DraftAttachment'
description: Draft attachments keyed by attachment ID.
required:
- text
description: Current draft object for this chat, or null when no draft is set.
EditMessageOutput:
allOf:
- $ref: '#/components/schemas/Message'
- type: object
properties:
success:
type: boolean
enum:
- true
description: DEPRECATED - compatibility field. Successful responses are already represented by the 200 status code.
deprecated: true
messageID:
type: string
description: DEPRECATED - use id instead. Compatibility alias for older clients.
example: '1343993'
deprecated: true
required:
- success
- messageID
example:
id: '1343993'
messageID: '1343993'
success: true
sortKey: aaaa1
chatID: '!whatsapp_15550101002:ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc.local-whatsapp.localhost'
accountID: local-whatsapp_ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc
senderID: '@ba_EvYDBBsZbRQAy3UOSWqG0LuTVkc:local-whatsapp.localhost'
senderName: Adam Van Ymeren
timestamp: '2025-08-28T11:04:29.621Z'
text: Updated message text
isSender: true
isUnread: false
User:
type: object
properties:
id:
type: string
description: Stable Beeper user ID. Use as the primary key when referencing a person.
username:
type: string
description: Human-readable handle if available (e.g., '@alice'). May be network-specific and not globally unique.
phoneNumber:
type: string
description: User's phone number in E.164 format (e.g., '+14155552671'). Omit if unknown.
email:
type: string
description: Email address if known. Not guaranteed verified.
fullName:
type: string
description: Display name as shown in clients (e.g., 'Alice Example'). May include emoj
# --- truncated at 32 KB (65 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/beeper/refs/heads/main/openapi/beeper-messages-api-openapi.yml