Skip to content
Download Beeper

Bridges

Manage available bridges, connect or reconnect chat accounts

List available bridges
client.bridges.list(RequestOptionsoptions?): BridgeListResponse { items }
GET/v1/bridges
Get bridge
client.bridges.retrieve(stringbridgeID, RequestOptionsoptions?): BridgeRetrieveResponse { id, accounts, activeAccountCount, 7 more }
GET/v1/bridges/{bridgeID}
Get bridge capabilities
client.bridges.retrieveCapabilities(stringbridgeID, RequestOptionsoptions?): ProvisioningCapabilities { group_creation, resolve_identifier, image_pack_import }
GET/v1/bridges/{bridgeID}/capabilities
ModelsExpand Collapse
Bridge { id, accounts, activeAccountCount, 7 more }

Available bridge that can connect or reconnect chat accounts.

id: string

Bridge ID. Use with bridge endpoints.

accounts: Array<Account { accountID, bridge, status, 5 more } >

Connected accounts for this bridge. Uses the same Account schema as GET /v1/accounts.

accountID: string

Chat account added to Beeper. Use this to route account-scoped actions. Examples include matrix for Beeper/Matrix, discordgo for a cloud bridge, slackgo.TEAM-USER for workspace-scoped cloud bridges, and local-whatsapp_ba_… for local bridges.

bridge: AccountBridge { id, provider, type }

Bridge metadata for the account. Available in Beeper Desktop v4.2.785+.

id: string

Bridge identifier. Beeper Cloud accounts often use the network type (for example matrix or discordgo); on-device accounts use a local bridge ID (for example local-whatsapp). Available in Beeper Desktop v4.2.785+.

provider: "cloud" | "self-hosted" | "local" | "platform-sdk"

Where this account runs: on this device or in Beeper Cloud. Available in Beeper Desktop v4.2.785+.

One of the following:
"cloud"
"self-hosted"
"local"
"platform-sdk"
type: string

Bridge type, such as matrix, discordgo, slackgo, whatsapp, telegram, or twitter. Available in Beeper Desktop v4.2.785+.

status: "connected" | "connecting" | "backfilling" | 5 more

Current connection status for this account.

One of the following:
"connected"
"connecting"
"backfilling"
"connection_required"
"reconnect_required"
"attention_required"
"disconnected"
"disabled"
user: User { 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?: 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. 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?: 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.

capabilities?: Capabilities { allowed_reactions, archive, custom_emoji_reactions, 24 more }

Runtime bridgev2 room feature capabilities for this connected account, when available.

allowed_reactions?: Array<string>

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

archive?: boolean

True if archive/unarchive is supported.

custom_emoji_reactions?: boolean

True if custom emoji reactions are supported.

delete?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
delete_chat?: boolean

True if deleting chats for the authenticated user is supported.

delete_chat_for_everyone?: boolean

True if deleting chats for everyone is supported.

delete_for_me?: boolean

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

delete_max_age?: number

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

disappearing_timer?: DisappearingTimer { omit_empty_timer, timers, types }

Disappearing-message timer capabilities.

omit_empty_timer?: boolean

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

timers?: Array<number>

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

types?: Array<"after_read" | "after_send">

Supported disappearing timer types.

One of the following:
"after_read"
"after_send"
edit?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
edit_max_age?: number

Maximum message age for edits, in seconds.

edit_max_count?: number

Maximum number of edits allowed for one message.

file?: Record<string, File>

Supported attachment message types and their per-type constraints, keyed by Matrix msgtype or bridgev2 pseudo-msgtype.

mime_types: Record<string, -2 | -1 | 0 | 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?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
max_caption_length?: number

Maximum caption length when captions are supported.

max_duration?: number

Maximum audio or video duration in seconds.

max_height?: number

Maximum image or video height in pixels.

max_size?: number

Maximum file size in bytes.

max_width?: number

Maximum image or video width in pixels.

view_once?: boolean

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

formatting?: Record<string, -2 | -1 | 0 | 2 more>

Supported rich-text formatting features keyed by bridgev2 feature name. Omitted means no formatting support is advertised.

One of the following:
-2
-1
0
1
2
location_message?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
mark_as_unread?: boolean

True if marking chats unread is supported.

max_text_length?: number

Maximum length of normal text messages.

member_actions?: MemberActions { ban, invite, kick, 2 more }

Participant management capabilities.

ban?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
invite?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
kick?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
leave?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
revoke_invite?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
message_request?: MessageRequest { accept_with_button, accept_with_message }

Message request capabilities.

accept_with_button?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
accept_with_message?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
poll?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
reaction?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
reaction_count?: number

Maximum number of reactions allowed on a single message.

read_receipts?: boolean

True if read receipts are supported.

reply?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
state?: State { com.beeper.disappearing_timer, m.room.avatar, m.room.name, m.room.topic }

Room state update capabilities keyed by Matrix state event type.

"com.beeper.disappearing_timer"?: ComBeeperDisappearingTimer { level }

Disappearing-message timer state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.avatar"?: MRoomAvatar { level }

Chat avatar state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.name"?: MRoomName { level }

Chat title state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.topic"?: MRoomTopic { level }

Chat description/topic state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
thread?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
typing_notifications?: boolean

True if typing notifications are supported.

loginID?: string

Bridge login ID for this account, when known. One bridge login can contain multiple chat accounts.

network?: string

Human-friendly network name for the account. Omitted when the network is unknown.

statusText?: string

Human-friendly account status text.

activeAccountCount: number

Number of active accounts for this network on this device.

minimum0
displayName: string

Human-friendly bridge name shown in Beeper.

provider: "cloud" | "self-hosted" | "local" | "platform-sdk"

Where accounts for this bridge run: on this device or in Beeper Cloud.

One of the following:
"cloud"
"self-hosted"
"local"
"platform-sdk"
status: "available" | "connected" | "limit_reached" | 2 more

Whether this bridge can currently be used to connect new accounts.

One of the following:
"available"
"connected"
"limit_reached"
"temporarily_unavailable"
"disabled"
supportsMultipleAccounts: boolean

Whether this bridge can have multiple active accounts for the same network.

type: string

Underlying bridge type, such as matrix, discordgo, slackgo, whatsapp, telegram, or twitter.

network?: string

Network grouping used for account counts and limits.

statusText?: string

Human-friendly status text matching Beeper account management language.

BridgeLogin { bridgeID, loginID, removeScopes, 4 more }

Signed-in identity for a bridge. One bridge login can contain multiple chat accounts.

bridgeID: string

Bridge ID.

loginID: string

Bridge login ID.

removeScopes: Array<"current-device" | "all-devices">
One of the following:
"current-device"
"all-devices"
status: "connected" | "connecting" | "needs_login" | 2 more
One of the following:
"connected"
"connecting"
"needs_login"
"logged_out"
"unknown"
accountIDs?: Array<string>

Chat accounts that belong to this bridge login, when known.

statusText?: string

Human-friendly bridge login status text.

user?: User { 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?: 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. 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?: 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.

One of the following:
One of the following:
DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
GroupTypeCapabilities { type_description, avatar, disappear, 5 more }

Group creation capabilities for one group type.

type_description: string
avatar?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
disappear?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
name?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
parent?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
participants?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
topic?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
username?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
LoginFlow { id, description, name }

Connect or reconnect flow option for a bridge.

id: string

Flow ID to pass when creating a bridge login session.

description?: string

Short explanation for when to use this flow, when provided.

name?: string

Display name for the flow, when provided.

LoginInputField { id, initialValue, label, 3 more }
id: string

Field ID to send back in the fields object.

initialValue?: string

Initial field value, when provided by the network.

label?: string

Field label to show to the user.

optional?: boolean

True if the user can leave this field empty.

placeholder?: string

Placeholder text to show when the field is empty.

type?: string

Suggested input type, such as text, password, or email.

LoginSession { bridgeID, loginSessionID, status, 6 more }
bridgeID: string

Bridge ID.

loginSessionID: string

Temporary bridge login session ID.

status: "waiting_for_input" | "waiting_for_cookies" | "waiting_for_display" | 3 more
One of the following:
"waiting_for_input"
"waiting_for_cookies"
"waiting_for_display"
"complete"
"cancelled"
"failed"
account?: Account { accountID, bridge, status, 5 more }

A chat account added to Beeper.

accountID: string

Chat account added to Beeper. Use this to route account-scoped actions. Examples include matrix for Beeper/Matrix, discordgo for a cloud bridge, slackgo.TEAM-USER for workspace-scoped cloud bridges, and local-whatsapp_ba_… for local bridges.

bridge: AccountBridge { id, provider, type }

Bridge metadata for the account. Available in Beeper Desktop v4.2.785+.

id: string

Bridge identifier. Beeper Cloud accounts often use the network type (for example matrix or discordgo); on-device accounts use a local bridge ID (for example local-whatsapp). Available in Beeper Desktop v4.2.785+.

provider: "cloud" | "self-hosted" | "local" | "platform-sdk"

Where this account runs: on this device or in Beeper Cloud. Available in Beeper Desktop v4.2.785+.

One of the following:
"cloud"
"self-hosted"
"local"
"platform-sdk"
type: string

Bridge type, such as matrix, discordgo, slackgo, whatsapp, telegram, or twitter. Available in Beeper Desktop v4.2.785+.

status: "connected" | "connecting" | "backfilling" | 5 more

Current connection status for this account.

One of the following:
"connected"
"connecting"
"backfilling"
"connection_required"
"reconnect_required"
"attention_required"
"disconnected"
"disabled"
user: User { 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?: 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. 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?: 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.

capabilities?: Capabilities { allowed_reactions, archive, custom_emoji_reactions, 24 more }

Runtime bridgev2 room feature capabilities for this connected account, when available.

allowed_reactions?: Array<string>

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

archive?: boolean

True if archive/unarchive is supported.

custom_emoji_reactions?: boolean

True if custom emoji reactions are supported.

delete?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
delete_chat?: boolean

True if deleting chats for the authenticated user is supported.

delete_chat_for_everyone?: boolean

True if deleting chats for everyone is supported.

delete_for_me?: boolean

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

delete_max_age?: number

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

disappearing_timer?: DisappearingTimer { omit_empty_timer, timers, types }

Disappearing-message timer capabilities.

omit_empty_timer?: boolean

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

timers?: Array<number>

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

types?: Array<"after_read" | "after_send">

Supported disappearing timer types.

One of the following:
"after_read"
"after_send"
edit?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
edit_max_age?: number

Maximum message age for edits, in seconds.

edit_max_count?: number

Maximum number of edits allowed for one message.

file?: Record<string, File>

Supported attachment message types and their per-type constraints, keyed by Matrix msgtype or bridgev2 pseudo-msgtype.

mime_types: Record<string, -2 | -1 | 0 | 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?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
max_caption_length?: number

Maximum caption length when captions are supported.

max_duration?: number

Maximum audio or video duration in seconds.

max_height?: number

Maximum image or video height in pixels.

max_size?: number

Maximum file size in bytes.

max_width?: number

Maximum image or video width in pixels.

view_once?: boolean

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

formatting?: Record<string, -2 | -1 | 0 | 2 more>

Supported rich-text formatting features keyed by bridgev2 feature name. Omitted means no formatting support is advertised.

One of the following:
-2
-1
0
1
2
location_message?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
mark_as_unread?: boolean

True if marking chats unread is supported.

max_text_length?: number

Maximum length of normal text messages.

member_actions?: MemberActions { ban, invite, kick, 2 more }

Participant management capabilities.

ban?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
invite?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
kick?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
leave?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
revoke_invite?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
message_request?: MessageRequest { accept_with_button, accept_with_message }

Message request capabilities.

accept_with_button?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
accept_with_message?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
poll?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
reaction?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
reaction_count?: number

Maximum number of reactions allowed on a single message.

read_receipts?: boolean

True if read receipts are supported.

reply?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
state?: State { com.beeper.disappearing_timer, m.room.avatar, m.room.name, m.room.topic }

Room state update capabilities keyed by Matrix state event type.

"com.beeper.disappearing_timer"?: ComBeeperDisappearingTimer { level }

Disappearing-message timer state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.avatar"?: MRoomAvatar { level }

Chat avatar state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.name"?: MRoomName { level }

Chat title state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.topic"?: MRoomTopic { level }

Chat description/topic state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
thread?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
typing_notifications?: boolean

True if typing notifications are supported.

loginID?: string

Bridge login ID for this account, when known. One bridge login can contain multiple chat accounts.

network?: string

Human-friendly network name for the account. Omitted when the network is unknown.

statusText?: string

Human-friendly account status text.

accountID?: string

Chat account ID for reconnect flows, when known.

currentStep?: UserInput { fields, stepID, type, 2 more } | Cookies { fields, stepID, type, 5 more } | DisplayAndWait { display, stepID, type, instructions } | Complete { type, account, instructions, 2 more }

Step the client should show or complete next. Omitted when the session is complete, cancelled, or failed.

One of the following:
UserInput { fields, stepID, type, 2 more }
fields: Array<LoginInputField { id, initialValue, label, 3 more } >
id: string

Field ID to send back in the fields object.

initialValue?: string

Initial field value, when provided by the network.

label?: string

Field label to show to the user.

optional?: boolean

True if the user can leave this field empty.

placeholder?: string

Placeholder text to show when the field is empty.

type?: string

Suggested input type, such as text, password, or email.

stepID: string
type: "user_input"
attachments?: Array<unknown>
instructions?: string

User-facing instructions for this step.

Cookies { fields, stepID, type, 5 more }
fields: Array<CookieField { id, name, pattern, 3 more } >
One of the following:
One of the following:
stepID: string
type: "cookies"
url: string

URL to open for the user.

expectedFinalURLRegex?: string

Regular expression that identifies the final URL after sign-in.

extractJS?: string

Optional extraction script for browser-based sign-in helpers. Treat as an opaque helper value.

instructions?: string

User-facing instructions for this browser step.

userAgent?: string

Suggested user agent for the browser session.

DisplayAndWait { display, stepID, type, instructions }
display: QRCode { data, type } | Emoji { imageURL, type } | Code { data, type } | Empty { type }
One of the following:
QRCode { data, type }
data: string
type: "qr"
Emoji { imageURL, type }
imageURL: string
type: "emoji"
Code { data, type }
data: string
type: "code"
Empty { type }
type: "nothing"
stepID: string
type: "display_and_wait"
instructions?: string

User-facing instructions for this step.

Complete { type, account, instructions, 2 more }
type: "complete"
account?: Account { accountID, bridge, status, 5 more }

A chat account added to Beeper.

accountID: string

Chat account added to Beeper. Use this to route account-scoped actions. Examples include matrix for Beeper/Matrix, discordgo for a cloud bridge, slackgo.TEAM-USER for workspace-scoped cloud bridges, and local-whatsapp_ba_… for local bridges.

bridge: AccountBridge { id, provider, type }

Bridge metadata for the account. Available in Beeper Desktop v4.2.785+.

id: string

Bridge identifier. Beeper Cloud accounts often use the network type (for example matrix or discordgo); on-device accounts use a local bridge ID (for example local-whatsapp). Available in Beeper Desktop v4.2.785+.

provider: "cloud" | "self-hosted" | "local" | "platform-sdk"

Where this account runs: on this device or in Beeper Cloud. Available in Beeper Desktop v4.2.785+.

One of the following:
"cloud"
"self-hosted"
"local"
"platform-sdk"
type: string

Bridge type, such as matrix, discordgo, slackgo, whatsapp, telegram, or twitter. Available in Beeper Desktop v4.2.785+.

status: "connected" | "connecting" | "backfilling" | 5 more

Current connection status for this account.

One of the following:
"connected"
"connecting"
"backfilling"
"connection_required"
"reconnect_required"
"attention_required"
"disconnected"
"disabled"
user: User { 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?: 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. 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?: 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.

capabilities?: Capabilities { allowed_reactions, archive, custom_emoji_reactions, 24 more }

Runtime bridgev2 room feature capabilities for this connected account, when available.

allowed_reactions?: Array<string>

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

archive?: boolean

True if archive/unarchive is supported.

custom_emoji_reactions?: boolean

True if custom emoji reactions are supported.

delete?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
delete_chat?: boolean

True if deleting chats for the authenticated user is supported.

delete_chat_for_everyone?: boolean

True if deleting chats for everyone is supported.

delete_for_me?: boolean

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

delete_max_age?: number

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

disappearing_timer?: DisappearingTimer { omit_empty_timer, timers, types }

Disappearing-message timer capabilities.

omit_empty_timer?: boolean

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

timers?: Array<number>

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

types?: Array<"after_read" | "after_send">

Supported disappearing timer types.

One of the following:
"after_read"
"after_send"
edit?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
edit_max_age?: number

Maximum message age for edits, in seconds.

edit_max_count?: number

Maximum number of edits allowed for one message.

file?: Record<string, File>

Supported attachment message types and their per-type constraints, keyed by Matrix msgtype or bridgev2 pseudo-msgtype.

mime_types: Record<string, -2 | -1 | 0 | 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?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
max_caption_length?: number

Maximum caption length when captions are supported.

max_duration?: number

Maximum audio or video duration in seconds.

max_height?: number

Maximum image or video height in pixels.

max_size?: number

Maximum file size in bytes.

max_width?: number

Maximum image or video width in pixels.

view_once?: boolean

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

formatting?: Record<string, -2 | -1 | 0 | 2 more>

Supported rich-text formatting features keyed by bridgev2 feature name. Omitted means no formatting support is advertised.

One of the following:
-2
-1
0
1
2
location_message?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
mark_as_unread?: boolean

True if marking chats unread is supported.

max_text_length?: number

Maximum length of normal text messages.

member_actions?: MemberActions { ban, invite, kick, 2 more }

Participant management capabilities.

ban?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
invite?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
kick?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
leave?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
revoke_invite?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
message_request?: MessageRequest { accept_with_button, accept_with_message }

Message request capabilities.

accept_with_button?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
accept_with_message?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
poll?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
reaction?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
reaction_count?: number

Maximum number of reactions allowed on a single message.

read_receipts?: boolean

True if read receipts are supported.

reply?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
state?: State { com.beeper.disappearing_timer, m.room.avatar, m.room.name, m.room.topic }

Room state update capabilities keyed by Matrix state event type.

"com.beeper.disappearing_timer"?: ComBeeperDisappearingTimer { level }

Disappearing-message timer state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.avatar"?: MRoomAvatar { level }

Chat avatar state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.name"?: MRoomName { level }

Chat title state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.topic"?: MRoomTopic { level }

Chat description/topic state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
thread?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
typing_notifications?: boolean

True if typing notifications are supported.

loginID?: string

Bridge login ID for this account, when known. One bridge login can contain multiple chat accounts.

network?: string

Human-friendly network name for the account. Omitted when the network is unknown.

statusText?: string

Human-friendly account status text.

instructions?: string

Completion instructions, when provided.

login?: BridgeLogin { bridgeID, loginID, removeScopes, 4 more }

Signed-in identity for a bridge. One bridge login can contain multiple chat accounts.

bridgeID: string

Bridge ID.

loginID: string

Bridge login ID.

removeScopes: Array<"current-device" | "all-devices">
One of the following:
"current-device"
"all-devices"
status: "connected" | "connecting" | "needs_login" | 2 more
One of the following:
"connected"
"connecting"
"needs_login"
"logged_out"
"unknown"
accountIDs?: Array<string>

Chat accounts that belong to this bridge login, when known.

statusText?: string

Human-friendly bridge login status text.

user?: User { 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?: 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. 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?: 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.

stepID?: string
error?: APIError { code, message, details }
code: string
message: string
details?: Record<string, unknown>
login?: BridgeLogin { bridgeID, loginID, removeScopes, 4 more }

Signed-in identity for a bridge. One bridge login can contain multiple chat accounts.

bridgeID: string

Bridge ID.

loginID: string

Bridge login ID.

removeScopes: Array<"current-device" | "all-devices">
One of the following:
"current-device"
"all-devices"
status: "connected" | "connecting" | "needs_login" | 2 more
One of the following:
"connected"
"connecting"
"needs_login"
"logged_out"
"unknown"
accountIDs?: Array<string>

Chat accounts that belong to this bridge login, when known.

statusText?: string

Human-friendly bridge login status text.

user?: User { 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?: 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. 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?: 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.

loginID?: string

Bridge login ID for reconnect flows, when known.

ProvisioningCapabilities { group_creation, resolve_identifier, image_pack_import }

Advanced network capabilities for account lookup and group creation.

group_creation: Record<string, GroupTypeCapabilities { type_description, avatar, disappear, 5 more } >
type_description: string
avatar?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
disappear?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
name?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
parent?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
participants?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
topic?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
username?: GroupFieldCapability { allowed, max_length, min_length, 2 more }

Group creation field capability.

allowed: boolean
max_length?: number
min_length?: number
required?: boolean
settings?: DisappearingTimerCapability { types, omit_empty_timer, timers }

Disappearing-message timer capability.

types: Array<"" | "after_read" | "after_send">
One of the following:
""
"after_read"
"after_send"
omit_empty_timer?: true
timers?: Array<number>
resolve_identifier: ResolveIdentifierCapabilities { any_phone, contact_list, create_dm, 4 more }

Identifier lookup capabilities for this bridge.

any_phone: boolean
contact_list: boolean
create_dm: boolean
lookup_email: boolean
lookup_phone: boolean
lookup_username: boolean
image_pack_import?: boolean
ResolveIdentifierCapabilities { any_phone, contact_list, create_dm, 4 more }

Identifier lookup capabilities for this bridge.

any_phone: boolean
contact_list: boolean
create_dm: boolean
lookup_email: boolean
lookup_phone: boolean
lookup_username: boolean
BridgeListResponse { items }

Available bridges and their connected accounts.

items: Array<Bridge { id, accounts, activeAccountCount, 7 more } >
id: string

Bridge ID. Use with bridge endpoints.

accounts: Array<Account { accountID, bridge, status, 5 more } >

Connected accounts for this bridge. Uses the same Account schema as GET /v1/accounts.

accountID: string

Chat account added to Beeper. Use this to route account-scoped actions. Examples include matrix for Beeper/Matrix, discordgo for a cloud bridge, slackgo.TEAM-USER for workspace-scoped cloud bridges, and local-whatsapp_ba_… for local bridges.

bridge: AccountBridge { id, provider, type }

Bridge metadata for the account. Available in Beeper Desktop v4.2.785+.

id: string

Bridge identifier. Beeper Cloud accounts often use the network type (for example matrix or discordgo); on-device accounts use a local bridge ID (for example local-whatsapp). Available in Beeper Desktop v4.2.785+.

provider: "cloud" | "self-hosted" | "local" | "platform-sdk"

Where this account runs: on this device or in Beeper Cloud. Available in Beeper Desktop v4.2.785+.

One of the following:
"cloud"
"self-hosted"
"local"
"platform-sdk"
type: string

Bridge type, such as matrix, discordgo, slackgo, whatsapp, telegram, or twitter. Available in Beeper Desktop v4.2.785+.

status: "connected" | "connecting" | "backfilling" | 5 more

Current connection status for this account.

One of the following:
"connected"
"connecting"
"backfilling"
"connection_required"
"reconnect_required"
"attention_required"
"disconnected"
"disabled"
user: User { 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?: 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. 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?: 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.

capabilities?: Capabilities { allowed_reactions, archive, custom_emoji_reactions, 24 more }

Runtime bridgev2 room feature capabilities for this connected account, when available.

allowed_reactions?: Array<string>

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

archive?: boolean

True if archive/unarchive is supported.

custom_emoji_reactions?: boolean

True if custom emoji reactions are supported.

delete?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
delete_chat?: boolean

True if deleting chats for the authenticated user is supported.

delete_chat_for_everyone?: boolean

True if deleting chats for everyone is supported.

delete_for_me?: boolean

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

delete_max_age?: number

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

disappearing_timer?: DisappearingTimer { omit_empty_timer, timers, types }

Disappearing-message timer capabilities.

omit_empty_timer?: boolean

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

timers?: Array<number>

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

types?: Array<"after_read" | "after_send">

Supported disappearing timer types.

One of the following:
"after_read"
"after_send"
edit?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
edit_max_age?: number

Maximum message age for edits, in seconds.

edit_max_count?: number

Maximum number of edits allowed for one message.

file?: Record<string, File>

Supported attachment message types and their per-type constraints, keyed by Matrix msgtype or bridgev2 pseudo-msgtype.

mime_types: Record<string, -2 | -1 | 0 | 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?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
max_caption_length?: number

Maximum caption length when captions are supported.

max_duration?: number

Maximum audio or video duration in seconds.

max_height?: number

Maximum image or video height in pixels.

max_size?: number

Maximum file size in bytes.

max_width?: number

Maximum image or video width in pixels.

view_once?: boolean

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

formatting?: Record<string, -2 | -1 | 0 | 2 more>

Supported rich-text formatting features keyed by bridgev2 feature name. Omitted means no formatting support is advertised.

One of the following:
-2
-1
0
1
2
location_message?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
mark_as_unread?: boolean

True if marking chats unread is supported.

max_text_length?: number

Maximum length of normal text messages.

member_actions?: MemberActions { ban, invite, kick, 2 more }

Participant management capabilities.

ban?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
invite?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
kick?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
leave?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
revoke_invite?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
message_request?: MessageRequest { accept_with_button, accept_with_message }

Message request capabilities.

accept_with_button?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
accept_with_message?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
poll?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
reaction?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
reaction_count?: number

Maximum number of reactions allowed on a single message.

read_receipts?: boolean

True if read receipts are supported.

reply?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
state?: State { com.beeper.disappearing_timer, m.room.avatar, m.room.name, m.room.topic }

Room state update capabilities keyed by Matrix state event type.

"com.beeper.disappearing_timer"?: ComBeeperDisappearingTimer { level }

Disappearing-message timer state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.avatar"?: MRoomAvatar { level }

Chat avatar state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.name"?: MRoomName { level }

Chat title state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.topic"?: MRoomTopic { level }

Chat description/topic state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
thread?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
typing_notifications?: boolean

True if typing notifications are supported.

loginID?: string

Bridge login ID for this account, when known. One bridge login can contain multiple chat accounts.

network?: string

Human-friendly network name for the account. Omitted when the network is unknown.

statusText?: string

Human-friendly account status text.

activeAccountCount: number

Number of active accounts for this network on this device.

minimum0
displayName: string

Human-friendly bridge name shown in Beeper.

provider: "cloud" | "self-hosted" | "local" | "platform-sdk"

Where accounts for this bridge run: on this device or in Beeper Cloud.

One of the following:
"cloud"
"self-hosted"
"local"
"platform-sdk"
status: "available" | "connected" | "limit_reached" | 2 more

Whether this bridge can currently be used to connect new accounts.

One of the following:
"available"
"connected"
"limit_reached"
"temporarily_unavailable"
"disabled"
supportsMultipleAccounts: boolean

Whether this bridge can have multiple active accounts for the same network.

type: string

Underlying bridge type, such as matrix, discordgo, slackgo, whatsapp, telegram, or twitter.

network?: string

Network grouping used for account counts and limits.

statusText?: string

Human-friendly status text matching Beeper account management language.

BridgeRetrieveResponse { id, accounts, activeAccountCount, 7 more }

Available bridge that can connect or reconnect chat accounts.

id: string

Bridge ID. Use with bridge endpoints.

accounts: Array<Account { accountID, bridge, status, 5 more } >

Connected accounts for this bridge. Uses the same Account schema as GET /v1/accounts.

accountID: string

Chat account added to Beeper. Use this to route account-scoped actions. Examples include matrix for Beeper/Matrix, discordgo for a cloud bridge, slackgo.TEAM-USER for workspace-scoped cloud bridges, and local-whatsapp_ba_… for local bridges.

bridge: AccountBridge { id, provider, type }

Bridge metadata for the account. Available in Beeper Desktop v4.2.785+.

id: string

Bridge identifier. Beeper Cloud accounts often use the network type (for example matrix or discordgo); on-device accounts use a local bridge ID (for example local-whatsapp). Available in Beeper Desktop v4.2.785+.

provider: "cloud" | "self-hosted" | "local" | "platform-sdk"

Where this account runs: on this device or in Beeper Cloud. Available in Beeper Desktop v4.2.785+.

One of the following:
"cloud"
"self-hosted"
"local"
"platform-sdk"
type: string

Bridge type, such as matrix, discordgo, slackgo, whatsapp, telegram, or twitter. Available in Beeper Desktop v4.2.785+.

status: "connected" | "connecting" | "backfilling" | 5 more

Current connection status for this account.

One of the following:
"connected"
"connecting"
"backfilling"
"connection_required"
"reconnect_required"
"attention_required"
"disconnected"
"disabled"
user: User { 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?: 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. 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?: 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.

capabilities?: Capabilities { allowed_reactions, archive, custom_emoji_reactions, 24 more }

Runtime bridgev2 room feature capabilities for this connected account, when available.

allowed_reactions?: Array<string>

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

archive?: boolean

True if archive/unarchive is supported.

custom_emoji_reactions?: boolean

True if custom emoji reactions are supported.

delete?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
delete_chat?: boolean

True if deleting chats for the authenticated user is supported.

delete_chat_for_everyone?: boolean

True if deleting chats for everyone is supported.

delete_for_me?: boolean

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

delete_max_age?: number

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

disappearing_timer?: DisappearingTimer { omit_empty_timer, timers, types }

Disappearing-message timer capabilities.

omit_empty_timer?: boolean

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

timers?: Array<number>

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

types?: Array<"after_read" | "after_send">

Supported disappearing timer types.

One of the following:
"after_read"
"after_send"
edit?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
edit_max_age?: number

Maximum message age for edits, in seconds.

edit_max_count?: number

Maximum number of edits allowed for one message.

file?: Record<string, File>

Supported attachment message types and their per-type constraints, keyed by Matrix msgtype or bridgev2 pseudo-msgtype.

mime_types: Record<string, -2 | -1 | 0 | 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?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
max_caption_length?: number

Maximum caption length when captions are supported.

max_duration?: number

Maximum audio or video duration in seconds.

max_height?: number

Maximum image or video height in pixels.

max_size?: number

Maximum file size in bytes.

max_width?: number

Maximum image or video width in pixels.

view_once?: boolean

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

formatting?: Record<string, -2 | -1 | 0 | 2 more>

Supported rich-text formatting features keyed by bridgev2 feature name. Omitted means no formatting support is advertised.

One of the following:
-2
-1
0
1
2
location_message?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
mark_as_unread?: boolean

True if marking chats unread is supported.

max_text_length?: number

Maximum length of normal text messages.

member_actions?: MemberActions { ban, invite, kick, 2 more }

Participant management capabilities.

ban?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
invite?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
kick?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
leave?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
revoke_invite?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
message_request?: MessageRequest { accept_with_button, accept_with_message }

Message request capabilities.

accept_with_button?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
accept_with_message?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
poll?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
reaction?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
reaction_count?: number

Maximum number of reactions allowed on a single message.

read_receipts?: boolean

True if read receipts are supported.

reply?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
state?: State { com.beeper.disappearing_timer, m.room.avatar, m.room.name, m.room.topic }

Room state update capabilities keyed by Matrix state event type.

"com.beeper.disappearing_timer"?: ComBeeperDisappearingTimer { level }

Disappearing-message timer state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.avatar"?: MRoomAvatar { level }

Chat avatar state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.name"?: MRoomName { level }

Chat title state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
"m.room.topic"?: MRoomTopic { level }

Chat description/topic state capability.

level: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
thread?: -2 | -1 | 0 | 2 more

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

One of the following:
-2
-1
0
1
2
typing_notifications?: boolean

True if typing notifications are supported.

loginID?: string

Bridge login ID for this account, when known. One bridge login can contain multiple chat accounts.

network?: string

Human-friendly network name for the account. Omitted when the network is unknown.

statusText?: string

Human-friendly account status text.

activeAccountCount: number

Number of active accounts for this network on this device.

minimum0
displayName: string

Human-friendly bridge name shown in Beeper.

provider: "cloud" | "self-hosted" | "local" | "platform-sdk"

Where accounts for this bridge run: on this device or in Beeper Cloud.

One of the following:
"cloud"
"self-hosted"
"local"
"platform-sdk"
status: "available" | "connected" | "limit_reached" | 2 more

Whether this bridge can currently be used to connect new accounts.

One of the following:
"available"
"connected"
"limit_reached"
"temporarily_unavailable"
"disabled"
supportsMultipleAccounts: boolean

Whether this bridge can have multiple active accounts for the same network.

type: string

Underlying bridge type, such as matrix, discordgo, slackgo, whatsapp, telegram, or twitter.

network?: string

Network grouping used for account counts and limits.

statusText?: string

Human-friendly status text matching Beeper account management language.

BridgesLogin Flows

Available bridges, bridge logins, login sessions for connect and reconnect flows, and advanced network capabilities.

List login flows
client.bridges.loginFlows.list(stringbridgeID, RequestOptionsoptions?): LoginFlowListResponse { items }
GET/v1/bridges/{bridgeID}/login-flows
ModelsExpand Collapse
LoginFlowListResponse { items }
items: Array<LoginFlow { id, description, name } >
id: string

Flow ID to pass when creating a bridge login session.

description?: string

Short explanation for when to use this flow, when provided.

name?: string

Display name for the flow, when provided.

BridgesLogins

Available bridges, bridge logins, login sessions for connect and reconnect flows, and advanced network capabilities.

List bridge logins
client.bridges.logins.list(stringbridgeID, RequestOptionsoptions?): LoginListResponse { items }
GET/v1/bridges/{bridgeID}/logins
Get bridge login
client.bridges.logins.retrieve(stringloginID, LoginRetrieveParams { bridgeID } params, RequestOptionsoptions?): BridgeLogin { bridgeID, loginID, removeScopes, 4 more }
GET/v1/bridges/{bridgeID}/logins/{loginID}
Remove bridge login
client.bridges.logins.remove(stringloginID, LoginRemoveParams { bridgeID, scope } params, RequestOptionsoptions?): LoginRemoveResponse { bridgeID, loginID, scope, 2 more }
POST/v1/bridges/{bridgeID}/logins/{loginID}/remove
ModelsExpand Collapse
LoginListResponse { items }
items: Array<BridgeLogin { bridgeID, loginID, removeScopes, 4 more } >
bridgeID: string

Bridge ID.

loginID: string

Bridge login ID.

removeScopes: Array<"current-device" | "all-devices">
One of the following:
"current-device"
"all-devices"
status: "connected" | "connecting" | "needs_login" | 2 more
One of the following:
"connected"
"connecting"
"needs_login"
"logged_out"
"unknown"
accountIDs?: Array<string>

Chat accounts that belong to this bridge login, when known.

statusText?: string

Human-friendly bridge login status text.

user?: User { 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?: 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. 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?: 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.

LoginRemoveResponse { bridgeID, loginID, scope, 2 more }
bridgeID: string
loginID: string
scope: "current-device" | "all-devices"

Where this bridge login should be removed.

One of the following:
"current-device"
"all-devices"
status: "removed"
affectedAccountIDs?: Array<string>

BridgesLogin Sessions

Available bridges, bridge logins, login sessions for connect and reconnect flows, and advanced network capabilities.

Create bridge login session
client.bridges.loginSessions.create(stringbridgeID, LoginSessionCreateParams { accountID, flowID, loginID } body?, RequestOptionsoptions?): LoginSession { bridgeID, loginSessionID, status, 6 more }
POST/v1/bridges/{bridgeID}/login-sessions
Get bridge login session
client.bridges.loginSessions.retrieve(stringloginSessionID, LoginSessionRetrieveParams { bridgeID } params, RequestOptionsoptions?): LoginSession { bridgeID, loginSessionID, status, 6 more }
GET/v1/bridges/{bridgeID}/login-sessions/{loginSessionID}
Cancel bridge login session
client.bridges.loginSessions.cancel(stringloginSessionID, LoginSessionCancelParams { bridgeID } params, RequestOptionsoptions?): LoginSessionCancelResponse { bridgeID, loginSessionID, status }
DELETE/v1/bridges/{bridgeID}/login-sessions/{loginSessionID}
ModelsExpand Collapse
LoginSessionCancelResponse { bridgeID, loginSessionID, status }
bridgeID: string
loginSessionID: string
status: "cancelled"

BridgesLogin SessionsSteps

Available bridges, bridge logins, login sessions for connect and reconnect flows, and advanced network capabilities.

Submit login step
client.bridges.loginSessions.steps.submit(stringstepID, StepSubmitParams { bridgeID, loginSessionID, type, 3 more } params, RequestOptionsoptions?): LoginSession { bridgeID, loginSessionID, status, 6 more }
POST/v1/bridges/{bridgeID}/login-sessions/{loginSessionID}/steps/{stepID}