Skip to content
Download Beeper

Chats

Manage chats

Retrieve chat details
client.chats.retrieve(stringchatID, ChatRetrieveParams { maxParticipantCount } query?, RequestOptionsoptions?): Chat { id, accountID, network, 21 more }
GET/v1/chats/{chatID}
Create a chat
client.chats.create(ChatCreateParams { accountID, participantIDs, type, 2 more } body, RequestOptionsoptions?): ChatCreateResponse { chatID, status }
POST/v1/chats
Start a direct chat
client.chats.start(ChatStartParams { accountID, user, allowInvite, messageText } body, RequestOptionsoptions?): ChatStartResponse { chatID, status }
POST/v1/chats/start
List chats
client.chats.list(ChatListParams { accountIDs, cursor, direction } query?, RequestOptionsoptions?): CursorNoLimit<ChatListResponse { preview } >
GET/v1/chats
Search chats
client.chats.search(ChatSearchParams { accountIDs, cursor, direction, 9 more } query?, RequestOptionsoptions?): CursorSearch<Chat { id, accountID, network, 21 more } >
GET/v1/chats/search
Archive or unarchive a chat
client.chats.archive(stringchatID, ChatArchiveParams { archived } body?, RequestOptionsoptions?): void
POST/v1/chats/{chatID}/archive
Update chat
client.chats.update(stringchatID, ChatUpdateParams { description, draft, imgURL, 6 more } body?, RequestOptionsoptions?): Chat { id, accountID, network, 21 more }
PATCH/v1/chats/{chatID}
Mark a chat as read
client.chats.markRead(stringchatID, ChatMarkReadParams { messageID } body?, RequestOptionsoptions?): Chat { id, accountID, network, 21 more }
POST/v1/chats/{chatID}/read
Mark a chat as unread
client.chats.markUnread(stringchatID, ChatMarkUnreadParams { messageID } body?, RequestOptionsoptions?): Chat { id, accountID, network, 21 more }
POST/v1/chats/{chatID}/unread
Notify anyway
client.chats.notifyAnyway(stringchatID, ChatNotifyAnywayParamsbody?, RequestOptionsoptions?): Chat { id, accountID, network, 21 more }
POST/v1/chats/{chatID}/notify-anyway
ModelsExpand Collapse
Chat { id, accountID, network, 21 more }
id: string

Unique identifier of the chat across Beeper.

accountID: string

Account ID this chat belongs to.

network: string

Display-only human-readable account/network name.

participants: Participants { hasMore, items, total }

Chat participants information.

hasMore: boolean

True if there are more participants than included in items.

items: Array<Item>

Participants returned for this chat (limited by the request; may be a subset).

isAdmin?: boolean

True if this participant has admin privileges in the chat.

isNetworkBot?: boolean

True if this participant represents an automated network account.

isPending?: boolean

True if this participant has been invited but has not joined yet.

total: number

Total number of participants in the chat.

title: string

Display title of the chat as computed by the client/server.

type: "single" | "group"

Chat type: ‘single’ for direct messages, ‘group’ for group chats.

One of the following:
"single"
"group"
unreadCount: number

Number of unread messages.

capabilities?: Capabilities { allowedReactions, archive, attachments, 24 more }

Chat capabilities reported by the platform.

allowedReactions?: Array<string>

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

archive?: boolean

True if archive/unarchive is supported.

attachments?: Record<string, Attachments>

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: 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
maxCaptionLength?: number

Maximum caption length when captions are supported.

maxDuration?: number

Maximum audio or video duration in seconds.

maxHeight?: number

Maximum image or video height in pixels.

maxSize?: number

Maximum file size in bytes.

maxWidth?: number

Maximum image or video width in pixels.

viewOnce?: boolean

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

customEmojiReactions?: 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
deleteChat?: boolean

True if deleting chats for the authenticated user is supported.

deleteChatForEveryone?: boolean

True if deleting chats for everyone is supported.

deleteForMe?: boolean

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

deleteMaxAge?: number

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

disappearingTimer?: DisappearingTimer { omitEmptyTimer, timers, types }

Disappearing-message timer capabilities.

omitEmptyTimer?: 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<"afterRead" | "afterSend">

Supported disappearing timer types.

One of the following:
"afterRead"
"afterSend"
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
editMaxAge?: number

Maximum message age for edits, in seconds.

editMaxCount?: number

Maximum number of edits allowed for one message.

formatting?: Record<string, -2 | -1 | 0 | 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?: -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
markAsUnread?: boolean

True if marking chats unread is supported.

maxTextLength?: number

Maximum length of normal text messages.

messageRequest?: MessageRequest { acceptWithButton, acceptWithMessage }

Message request capabilities.

acceptWithButton?: -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
acceptWithMessage?: -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
participantActions?: ParticipantActions { 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
revokeInvite?: -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
reactionCount?: number

Maximum number of reactions allowed on a single message.

readReceipts?: 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 { avatar, description, disappearingTimer, title }

Chat state update capabilities.

avatar?: Avatar { 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
description?: Description { 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
disappearingTimer?: DisappearingTimer { 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
title?: Title { 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
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
typingNotifications?: boolean

True if typing notifications are supported.

description?: string | null

Group chat description/topic when available.

draft?: Draft | null

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

text: string

Rich-text draft body as returned by Beeper.

attachments?: Record<string, Attachments>

Draft attachments keyed by attachment ID.

id: string

Draft attachment identifier.

type: "file" | "gif" | "recorded_audio"

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

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

Audio duration in seconds if known.

fileName?: string

Original filename if available.

filePath?: string

Local filesystem path for the draft attachment.

fileSize?: number

File size in bytes if known.

mimeType?: string

MIME type if known.

size?: Size { height, width }

Pixel dimensions of the attachment.

height?: number
width?: number
stickerID?: string

Sticker identifier if the draft attachment is a sticker.

imgURL?: string | null

Local filesystem path to the chat avatar image when available.

isArchived?: boolean

True if chat is archived.

isLowPriority?: boolean

True if chat is marked low priority.

isMarkedUnread?: boolean

True if the chat was explicitly marked unread by the authenticated user.

isMuted?: boolean

True if chat notifications are muted.

isPinned?: boolean

True if chat is pinned.

isReadOnly?: boolean

True if messages cannot be sent in this chat.

lastActivity?: string

Timestamp of last activity.

formatdate-time
lastReadMessageSortKey?: string

Last read message sortKey.

localChatID?: string | null

Local chat ID specific to this installation.

messageExpirySeconds?: number | null

Disappearing-message timer in seconds when available.

reminder?: Reminder | null

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

dismissOnIncomingMessage?: boolean

Cancel reminder if someone messages in the chat.

remindAt?: string

Timestamp when the reminder should trigger.

formatdate-time
snooze?: Snooze | null

Current snooze state for this chat, or null when no snooze is set.

snoozeUntil?: string

Timestamp when the snooze expires.

formatdate-time
userSnoozedAt?: string

Timestamp when the user set the snooze.

formatdate-time
unreadMentionsCount?: number

Number of unread messages that mention the authenticated user or @room.

ChatCreateResponse extends Chat { id, accountID, network, 21 more } { chatID, status }
DeprecatedchatID: string
Use id instead.

DEPRECATED - use id instead. Compatibility alias for older clients.

Deprecatedstatus?: "existing" | "created"
Inspect the returned Chat instead.

DEPRECATED - legacy start-chat status for older clients. New clients should inspect the returned Chat instead.

One of the following:
"existing"
"created"
ChatStartResponse extends Chat { id, accountID, network, 21 more } { chatID, status }
DeprecatedchatID: string
Use id instead.

DEPRECATED - use id instead. Compatibility alias for older clients.

Deprecatedstatus?: "existing" | "created"
Inspect the returned Chat instead.

DEPRECATED - legacy start-chat status for older clients. New clients should inspect the returned Chat instead.

One of the following:
"existing"
"created"
ChatListResponse extends Chat { id, accountID, network, 21 more } { preview }

Chat with optional last message preview.

preview?: Message { id, accountID, chatID, 18 more }

Last message preview for this chat, if available.

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?: Array<Attachment { type, id, duration, 10 more } >

Attachments included with this message, if any.

type: "unknown" | "img" | "video" | "audio"

Attachment type.

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

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

duration?: number

Duration in seconds (audio/video).

fileName?: string

Original filename if available.

fileSize?: number

File size in bytes if known.

isGif?: boolean

True if the attachment is a GIF.

isSticker?: boolean

True if the attachment is a sticker.

isVoiceNote?: boolean

True if the attachment is a voice note.

mimeType?: string

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

posterImg?: 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?: Size { height, width }

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

height?: number
width?: number
srcURL?: 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?: Transcription { engine, transcription, language }

Attachment transcription if available.

engine: string

Transcription engine.

transcription: string

Transcribed text.

language?: string

Detected or selected language.

editedTimestamp?: string

Timestamp when the message was edited, if known.

formatdate-time
isDeleted?: boolean

True if the message has been deleted.

isHidden?: boolean

True if the message is hidden from normal display.

isSender?: boolean

True if the authenticated user sent the message.

isUnread?: boolean

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

linkedMessageID?: string

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

mentions?: Array<string> | null

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

reactions?: Array<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?: boolean

True if the reactionKey is an emoji.

imgURL?: string

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

seen?: boolean | string | Record<string, boolean | string>

Read receipt state for this message, when available.

One of the following:
boolean
string
Record<string, boolean | string>
boolean
string
senderName?: string

Resolved sender display name.

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

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

status: "SUCCESS" | "PENDING" | "FAIL_RETRIABLE" | "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?: Array<string>

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

internalError?: string

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

message?: string

Human-readable send status or failure message.

reason?: string

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

text?: string

Rich-text message body if present.

type?: "TEXT" | "NOTICE" | "IMAGE" | 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"

ChatsReminders

Manage reminders for chats

Create a chat reminder
client.chats.reminders.create(stringchatID, ReminderCreateParams { reminder } body, RequestOptionsoptions?): void
POST/v1/chats/{chatID}/reminders
Delete a chat reminder
client.chats.reminders.delete(stringchatID, RequestOptionsoptions?): void
DELETE/v1/chats/{chatID}/reminders

ChatsMessages

Manage chat messages

ChatsMessagesReactions

Manage message reactions

Add a reaction
client.chats.messages.reactions.add(stringmessageID, ReactionAddParams { chatID, reactionKey, transactionID } params, RequestOptionsoptions?): ReactionAddResponse { chatID, messageID, reactionKey, 2 more }
POST/v1/chats/{chatID}/messages/{messageID}/reactions
Remove a reaction
client.chats.messages.reactions.delete(stringreactionKey, ReactionDeleteParams { chatID, messageID } params, RequestOptionsoptions?): ReactionDeleteResponse { chatID, messageID, reactionKey, success }
DELETE/v1/chats/{chatID}/messages/{messageID}/reactions/{reactionKey}
ModelsExpand Collapse
ReactionAddResponse { chatID, messageID, reactionKey, 2 more }
chatID: string

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

messageID: string

Message ID.

reactionKey: string

Reaction key that was added.

success: true

Always true. Indicates the reaction was queued; failures return an error response.

transactionID: string

Transaction ID used for send tracking.

ReactionDeleteResponse { chatID, messageID, reactionKey, success }
chatID: string

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

messageID: string

Message ID.

reactionKey: string

Reaction key that was removed.

success: true

Always true. Indicates the reaction removal was queued; failures return an error response.