Skip to content
Download Beeper

Shared

ModelsExpand Collapse
APIError object { code, message, details }
code: string
message: string
details: optional map[unknown]
AppStateSnapshot object { e2ee, state, matrix, verification }
e2ee: object { crossSigning, firstSyncDone, hasBackedUpRecoveryKey, 6 more }

Encrypted messaging setup status.

crossSigning: boolean

Whether this account can verify trusted devices.

firstSyncDone: boolean

Whether the first encrypted message sync is complete.

hasBackedUpRecoveryKey: boolean

Whether the user confirmed that they saved their recovery key.

initialized: boolean

Whether encrypted messaging setup has started.

keyBackup: boolean

Whether encrypted message backup is available.

secrets: object { masterKey, megolmBackupKey, recoveryKey, 2 more }

Encrypted messaging keys available on this device.

masterKey: boolean

Whether the account identity key is available.

megolmBackupKey: boolean

Whether the encrypted message backup key is available.

recoveryKey: boolean

Whether a recovery key is available.

selfSigningKey: boolean

Whether the device trust key is available.

userSigningKey: boolean

Whether the user trust key is available.

secretStorage: boolean

Whether secure key storage is available.

verified: boolean

Whether this device is trusted for encrypted messages.

recoveryKeyGeneratedAt: optional number

Unix timestamp for when the recovery key was created.

state: "needs-login" or "initializing" or "needs-cross-signing-setup" or 4 more

Current sign-in and encrypted messaging setup state for Beeper Desktop or Beeper Server.

One of the following:
"needs-login"
"initializing"
"needs-cross-signing-setup"
"needs-verification"
"needs-secrets"
"needs-first-sync"
"ready"
matrix: optional object { deviceID, homeserver, userID }

Signed-in account details. Omitted until sign-in is complete.

deviceID: string

Current device ID.

homeserver: string

Beeper homeserver URL for this account.

userID: string

Signed-in Beeper user ID.

verification: optional object { id, availableActions, direction, 8 more }

Trusted device verification progress.

id: string

Verification ID to pass in verification action paths.

availableActions: array of "accept" or "cancel" or "qr.confirmScanned" or 2 more

Verification actions that are valid for the current state.

One of the following:
"accept"
"cancel"
"qr.confirmScanned"
"sas.start"
"sas.confirm"
direction: "incoming" or "outgoing"

Whether this device started or received the verification.

One of the following:
"incoming"
"outgoing"
methods: array of "qr" or "sas"

Verification methods supported for this transaction.

One of the following:
"qr"
"sas"
purpose: "login" or "device"

Why this verification exists.

One of the following:
"login"
"device"
state: "requested" or "ready" or "sas_ready" or 4 more

Current trusted-device verification state.

One of the following:
"requested"
"ready"
"sas_ready"
"qr_scanned"
"done"
"cancelled"
"error"
error: optional object { code, reason }

Verification error details, if verification stopped.

code: string

Verification error code.

reason: string

User-facing verification error message.

otherDevice: optional object { id, name }

Other device participating in verification.

id: string

Other device ID.

name: optional string

Other device display name, if known.

otherUserID: optional string

Other Beeper user participating in verification.

qr: optional object { data }

QR verification data.

data: string

QR code payload to display for verification.

sas: optional object { emojis, decimals }

Emoji or number comparison data for verification.

emojis: string

Emoji sequence to compare on both devices.

decimals: optional string

Number sequence to compare on both devices.

Attachment object { type, id, duration, 10 more }
type: "unknown" or "img" or "video" or "audio"

Attachment type.

One of the following:
"unknown"
"img"
"video"
"audio"
id: optional string

Attachment identifier, typically an mxc:// URL. Use the download file endpoint to get a local file path.

duration: optional number

Duration in seconds (audio/video).

fileName: optional string

Original filename if available.

fileSize: optional number

File size in bytes if known.

isGif: optional boolean

True if the attachment is a GIF.

isSticker: optional boolean

True if the attachment is a sticker.

isVoiceNote: optional boolean

True if the attachment is a voice note.

mimeType: optional string

MIME type if known (e.g., ‘image/png’).

posterImg: optional string

Preview image URL for video attachments (poster frame). May be temporary or available only on this device; download promptly if durable access is needed.

size: optional object { height, width }

Pixel dimensions of the attachment: width/height in px.

height: optional number
width: optional number
srcURL: optional string

Public URL or local file path to fetch the file. May be temporary or available only on this device; download promptly if durable access is needed.

transcription: optional object { engine, transcription, language }

Attachment transcription if available.

engine: string

Transcription engine.

transcription: string

Transcribed text.

language: optional string

Detected or selected language.

AttachmentCapabilities object { mimeTypes, caption, maxCaptionLength, 5 more }

Capabilities for one attachment message type.

mimeTypes: map[-2 or -1 or 0 or 2 more]

Supported MIME types or MIME patterns for this file message type. Missing MIME types should be treated as rejected.

One of the following:
-2
-1
0
1
2
caption: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
maxCaptionLength: optional number

Maximum caption length when captions are supported.

maxDuration: optional number

Maximum audio or video duration in seconds.

maxHeight: optional number

Maximum image or video height in pixels.

maxSize: optional number

Maximum file size in bytes.

maxWidth: optional number

Maximum image or video width in pixels.

viewOnce: optional boolean

True if this file type can be sent as view-once media.

ChatCapabilities object { allowedReactions, archive, attachments, 24 more }

Chat capabilities reported by the platform.

allowedReactions: optional array of string

Allowed Unicode reactions. Omitted means all emoji reactions are allowed.

archive: optional boolean

True if archive/unarchive is supported.

attachments: optional map[AttachmentCapabilities { mimeTypes, caption, maxCaptionLength, 5 more } ]

Supported attachment message types and their per-type constraints, keyed by Matrix msgtype or pseudo-msgtype (for example m.image, m.video, org.matrix.msc3245.voice). Missing message types should be treated as rejected.

mimeTypes: map[-2 or -1 or 0 or 2 more]

Supported MIME types or MIME patterns for this file message type. Missing MIME types should be treated as rejected.

One of the following:
-2
-1
0
1
2
caption: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
maxCaptionLength: optional number

Maximum caption length when captions are supported.

maxDuration: optional number

Maximum audio or video duration in seconds.

maxHeight: optional number

Maximum image or video height in pixels.

maxSize: optional number

Maximum file size in bytes.

maxWidth: optional number

Maximum image or video width in pixels.

viewOnce: optional boolean

True if this file type can be sent as view-once media.

customEmojiReactions: optional boolean

True if custom emoji reactions are supported.

delete: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
deleteChat: optional boolean

True if deleting chats for the authenticated user is supported.

deleteChatForEveryone: optional boolean

True if deleting chats for everyone is supported.

deleteForMe: optional boolean

True if deleting messages only for the authenticated user is supported.

deleteMaxAge: optional number

Maximum message age for delete-for-everyone, in seconds.

disappearingTimer: optional object { omitEmptyTimer, timers, types }

Disappearing-message timer capabilities.

omitEmptyTimer: optional boolean

True if empty timer objects should be omitted from message content.

timers: optional array of number

Allowed disappearing timer values in milliseconds. Omitted means any timer is allowed.

types: optional array of "afterRead" or "afterSend"

Supported disappearing timer types.

One of the following:
"afterRead"
"afterSend"
edit: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
editMaxAge: optional number

Maximum message age for edits, in seconds.

editMaxCount: optional number

Maximum number of edits allowed for one message.

formatting: optional map[-2 or -1 or 0 or 2 more]

Supported rich-text formatting features keyed by feature name (for example bold, inline_code, code_block.syntax_highlighting). Omitted means no formatting support is advertised.

One of the following:
-2
-1
0
1
2
locationMessage: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
markAsUnread: optional boolean

True if marking chats unread is supported.

maxTextLength: optional number

Maximum length of normal text messages.

messageRequest: optional object { acceptWithButton, acceptWithMessage }

Message request capabilities.

acceptWithButton: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
acceptWithMessage: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
participantActions: optional object { ban, invite, kick, 2 more }

Participant management capabilities.

ban: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
invite: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
kick: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
leave: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
revokeInvite: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
poll: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
reaction: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
reactionCount: optional number

Maximum number of reactions allowed on a single message.

readReceipts: optional boolean

True if read receipts are supported.

reply: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
state: optional ChatStateCapabilities { avatar, description, disappearingTimer, title }

Chat state update capabilities.

avatar: optional object { level }

Chat avatar state capability.

level: -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
description: optional object { level }

Chat description/topic state capability.

level: -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
disappearingTimer: optional object { level }

Disappearing-message timer state capability.

level: -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
title: optional object { level }

Chat title state capability.

level: -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
thread: optional -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
typingNotifications: optional boolean

True if typing notifications are supported.

ChatDraft object { text, attachments }

Current draft object for this chat, or null when no draft is set.

text: string

Rich-text draft body as returned by Beeper.

attachments: optional map[DraftAttachment { id, type, audioDurationSeconds, 6 more } ]

Draft attachments keyed by attachment ID.

id: string

Draft attachment identifier.

type: "file" or "gif" or "recorded_audio"

Draft attachment type. GIF and recorded audio are mutually exclusive types.

One of the following:
"file"
"gif"
"recorded_audio"
audioDurationSeconds: optional number

Audio duration in seconds if known.

fileName: optional string

Original filename if available.

filePath: optional string

Local filesystem path for the draft attachment.

fileSize: optional number

File size in bytes if known.

mimeType: optional string

MIME type if known.

size: optional object { height, width }

Pixel dimensions of the attachment.

height: optional number
width: optional number
stickerID: optional string

Sticker identifier if the draft attachment is a sticker.

ChatStateCapabilities object { avatar, description, disappearingTimer, title }

Chat state update capabilities.

avatar: optional object { level }

Chat avatar state capability.

level: -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
description: optional object { level }

Chat description/topic state capability.

level: -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
disappearingTimer: optional object { level }

Disappearing-message timer state capability.

level: -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
title: optional object { level }

Chat title state capability.

level: -2 or -1 or 0 or 2 more

-2: rejected, -1: dropped, 0: unsupported, 1: partially supported, 2: fully supported.

One of the following:
-2
-1
0
1
2
DraftAttachment object { id, type, audioDurationSeconds, 6 more }
id: string

Draft attachment identifier.

type: "file" or "gif" or "recorded_audio"

Draft attachment type. GIF and recorded audio are mutually exclusive types.

One of the following:
"file"
"gif"
"recorded_audio"
audioDurationSeconds: optional number

Audio duration in seconds if known.

fileName: optional string

Original filename if available.

filePath: optional string

Local filesystem path for the draft attachment.

fileSize: optional number

File size in bytes if known.

mimeType: optional string

MIME type if known.

size: optional object { height, width }

Pixel dimensions of the attachment.

height: optional number
width: optional number
stickerID: optional string

Sticker identifier if the draft attachment is a sticker.

Error object { code, message, details }
code: string

Machine-readable error code

message: string

Error message

details: optional object { issues } or map[unknown] or unknown

Additional error details for debugging

One of the following:
ValidationDetails object { issues }

Validation error details

issues: array of object { code, message, path }

List of validation issues

code: string

Validation issue code

message: string

Human-readable description of the validation issue

path: array of string or number

Path pointing to the invalid field within the payload

One of the following:
Field = string
Index = number
Context = map[unknown]

Additional error context

Arbitrary = unknown

Arbitrary details payload supplied by the server

Message object { id, accountID, chatID, 18 more }
id: string

Message ID.

accountID: string

Beeper account ID the message belongs to.

chatID: string

Chat ID. Input routes also accept the local chat ID from this installation when available.

senderID: string

Fully qualified sender user ID. Network-backed IDs usually include the network prefix and homeserver.

sortKey: string

A unique, sortable key used to sort messages.

timestamp: string

Message timestamp.

formatdate-time
attachments: optional array of Attachment { type, id, duration, 10 more }

Attachments included with this message, if any.

type: "unknown" or "img" or "video" or "audio"

Attachment type.

One of the following:
"unknown"
"img"
"video"
"audio"
id: optional string

Attachment identifier, typically an mxc:// URL. Use the download file endpoint to get a local file path.

duration: optional number

Duration in seconds (audio/video).

fileName: optional string

Original filename if available.

fileSize: optional number

File size in bytes if known.

isGif: optional boolean

True if the attachment is a GIF.

isSticker: optional boolean

True if the attachment is a sticker.

isVoiceNote: optional boolean

True if the attachment is a voice note.

mimeType: optional string

MIME type if known (e.g., ‘image/png’).

posterImg: optional string

Preview image URL for video attachments (poster frame). May be temporary or available only on this device; download promptly if durable access is needed.

size: optional object { height, width }

Pixel dimensions of the attachment: width/height in px.

height: optional number
width: optional number
srcURL: optional string

Public URL or local file path to fetch the file. May be temporary or available only on this device; download promptly if durable access is needed.

transcription: optional object { engine, transcription, language }

Attachment transcription if available.

engine: string

Transcription engine.

transcription: string

Transcribed text.

language: optional string

Detected or selected language.

editedTimestamp: optional string

Timestamp when the message was edited, if known.

formatdate-time
isDeleted: optional boolean

True if the message has been deleted.

isHidden: optional boolean

True if the message is hidden from normal display.

isSender: optional boolean

True if the authenticated user sent the message.

isUnread: optional boolean

True if the message is unread for the authenticated user. May be omitted.

linkedMessageID: optional string

ID of the message this is a reply to, if any.

mentions: optional array of string

Mentioned user IDs, @room, or null for legacy messages that require text scanning.

reactions: optional array of Reaction { id, participantID, reactionKey, 2 more }

Reactions to the message, if any.

id: string

Reaction ID. When a participant can react more than once, the ID is the participant ID concatenated with the reaction key; otherwise it equals the participant ID.

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: optional boolean

True if the reactionKey is an emoji.

imgURL: optional string

URL to the reaction’s image. May be temporary or available only on this device; download promptly if durable access is needed.

seen: optional boolean or string or map[boolean or string]

Read receipt state for this message, when available.

One of the following:
Boolean = boolean
Timestamp = string

ISO 8601 timestamp.

ByParticipant = map[boolean or string]

Group read receipt state keyed by participant ID.

One of the following:
Boolean = boolean
Timestamp = string

ISO 8601 timestamp.

senderName: optional string

Resolved sender display name.

sendStatus: optional SendStatus { status, timestamp, deliveredToUsers, 3 more }

Message send status for this message, when reported by the bridge.

status: "SUCCESS" or "PENDING" or "FAIL_RETRIABLE" or "FAIL_PERMANENT"

Current status of the message send attempt.

One of the following:
"SUCCESS"
"PENDING"
"FAIL_RETRIABLE"
"FAIL_PERMANENT"
timestamp: string

Timestamp for the send status event.

formatdate-time
deliveredToUsers: optional array of string

User IDs the message was delivered to, when reported by the network.

internalError: optional string

Diagnostic error detail from the messaging network adapter. Do not show directly to users.

message: optional string

Human-readable send status or failure message.

reason: optional string

Machine-readable failure reason. Present when the send status is a failure.

text: optional string

Rich-text message body if present.

type: optional "TEXT" or "NOTICE" or "IMAGE" or 7 more

Message content type. Useful for distinguishing reactions, media messages, and state events from regular text messages.

One of the following:
"TEXT"
"NOTICE"
"IMAGE"
"VIDEO"
"VOICE"
"AUDIO"
"FILE"
"STICKER"
"LOCATION"
"REACTION"
Reaction object { id, participantID, reactionKey, 2 more }
id: string

Reaction ID. When a participant can react more than once, the ID is the participant ID concatenated with the reaction key; otherwise it equals the participant ID.

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: optional boolean

True if the reactionKey is an emoji.

imgURL: optional string

URL to the reaction’s image. May be temporary or available only on this device; download promptly if durable access is needed.

SendStatus object { status, timestamp, deliveredToUsers, 3 more }

Message send status for this message, when reported by the bridge.

status: "SUCCESS" or "PENDING" or "FAIL_RETRIABLE" or "FAIL_PERMANENT"

Current status of the message send attempt.

One of the following:
"SUCCESS"
"PENDING"
"FAIL_RETRIABLE"
"FAIL_PERMANENT"
timestamp: string

Timestamp for the send status event.

formatdate-time
deliveredToUsers: optional array of string

User IDs the message was delivered to, when reported by the network.

internalError: optional string

Diagnostic error detail from the messaging network adapter. Do not show directly to users.

message: optional string

Human-readable send status or failure message.

reason: optional string

Machine-readable failure reason. Present when the send status is a failure.

User object { id, cannotMessage, email, 5 more }

User the account belongs to.

id: string

Stable Beeper user ID. Use as the primary key when referencing a person.

cannotMessage: optional 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: optional string

Email address if known. Not guaranteed verified.

fullName: optional string

Display name as shown in clients (e.g., ‘Alice Example’). May include emojis.

imgURL: optional string

Avatar image URL if available. This may be a remote URL, media URL, data URL, or local file URL depending on the source. May be temporary or available only on this device; download promptly if durable access is needed.

isSelf: optional boolean

True if this user represents the authenticated account’s own identity.

phoneNumber: optional string

User’s phone number in E.164 format (e.g., ‘+14155552671’). Omit if unknown.

username: optional string

Human-readable handle if available (e.g., ‘@alice’). May be network-specific and not globally unique.