# Shared ## Domain Types ### Attachment - `Attachment` - `type: "unknown" | "img" | "video" | "audio"` Attachment type. - `"unknown"` - `"img"` - `"video"` - `"audio"` - `id?: string` Attachment identifier (typically an mxc:// URL). Use with /v1/assets/download 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 local-only to this device; download promptly if durable access is needed. - `size?: Size` Pixel dimensions of the attachment: width/height in px. - `height?: number` - `width?: number` - `srcURL?: string` Public URL or local file path to fetch the asset. May be temporary or local-only to this device; download promptly if durable access is needed. ### Error - `Error` - `code: string` Machine-readable error code - `message: string` Error message - `details?: ValidationDetails | Record | unknown` Additional error details for debugging - `ValidationDetails` Validation error details - `issues: Array` List of validation issues - `code: string` Validation issue code - `message: string` Human-readable description of the validation issue - `path: Array` Path pointing to the invalid field within the payload - `string` - `number` - `Record` - `unknown` ### Message - `Message` - `id: string` Message ID. - `accountID: string` Beeper account ID the message belongs to. - `chatID: string` Unique identifier of the chat. - `senderID: string` Sender user ID. - `sortKey: string` A unique, sortable key used to sort messages. - `timestamp: string` Message timestamp. - `attachments?: Array` Attachments included with this message, if any. - `type: "unknown" | "img" | "video" | "audio"` Attachment type. - `"unknown"` - `"img"` - `"video"` - `"audio"` - `id?: string` Attachment identifier (typically an mxc:// URL). Use with /v1/assets/download 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 local-only to this device; download promptly if durable access is needed. - `size?: Size` Pixel dimensions of the attachment: width/height in px. - `height?: number` - `width?: number` - `srcURL?: string` Public URL or local file path to fetch the asset. May be temporary or local-only to this device; download promptly if durable access is needed. - `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. - `reactions?: Array` Reactions to the message, if any. - `id: string` Reaction ID, typically ${participantID}${reactionKey} if multiple reactions allowed, or just participantID otherwise. - `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 local-only to this device; download promptly if durable access is needed. - `senderName?: string` Resolved sender display name (impersonator/full name/username/participant name). - `text?: string` Plain-text body if present. May include a JSON fallback with text entities for rich messages. - `type?: "TEXT" | "NOTICE" | "IMAGE" | 7 more` Message content type. Useful for distinguishing reactions, media messages, and state events from regular text messages. - `"TEXT"` - `"NOTICE"` - `"IMAGE"` - `"VIDEO"` - `"VOICE"` - `"AUDIO"` - `"FILE"` - `"STICKER"` - `"LOCATION"` - `"REACTION"` ### Reaction - `Reaction` - `id: string` Reaction ID, typically ${participantID}${reactionKey} if multiple reactions allowed, or just participantID otherwise. - `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 local-only to this device; download promptly if durable access is needed. ### User - `User` 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. May be temporary or local-only to 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.