The BlueBubbles Server can operate in two modes: a standard mode driven by AppleScript automation, and an enhanced mode that uses a private macOS framework to communicate directly with the Messages app at a lower level. This lower-level integration is called the Private API. It unlocks a set of features that AppleScript simply cannot reach — reactions, typing indicators, group management, and more — but it requires explicit opt-in on the server side before your SDK calls can use them.Documentation Index
Fetch the complete documentation index at: https://bluebubbles.anmho.com/llms.txt
Use this file to discover all available pages before exploring further.
What the Private API unlocks
The following features are only available when the Private API is active on the server:| Feature | SDK method(s) |
|---|---|
| Create new chats | client.chats.create() |
| Add participants to a group | client.chats.addParticipantToChat() |
| Remove participants from a group | client.chats.removeParticipantFromChat() |
| Send tapback reactions | client.messages.sendReaction() |
| Start typing indicators | client.chats.startSendTypingIndicator() |
| Stop typing indicators | client.chats.stopSendTypingIndicator() |
| Mark chat as read | client.chats.markRead() |
| Mark chat as unread | client.chats.markChatAsUnread() (requires macOS Ventura or later) |
| Rename a group chat | client.chats.updateAChat() |
| Set group chat icon | client.chats.setGroupIcon() |
| Remove group chat icon | client.chats.removeGroupIcon() |
| Leave a group chat | client.chats.leaveChat() |
| Delete a chat | client.chats.deleteChat() |
| Send with message effects | client.messages.sendText() with effectId |
| Send with a subject line | client.messages.sendText() with subject |
| Reply to a specific message | client.messages.sendText() with selectedMessageGuid |
Sending with method: "private-api"
When you call client.messages.sendText(), the server uses AppleScript by default. To explicitly route the send through the Private API — which enables richer features and better reliability — pass method: "private-api" in the request body.
method explicitly. These are:
subject— attaches a subject line to the messageeffectId— sends the message with an iMessage effect (e.g., balloons, confetti)selectedMessageGuid— sends the message as a reply to a specific prior message
Sending reactions
Reactions (tapbacks) are exclusively a Private API feature. Provide thechatGuid, the GUID of the message you’re reacting to, and one of the supported reaction strings.
reaction values:
| To add | To remove |
|---|---|
love | -love |
like | -like |
dislike | -dislike |
laugh | -laugh |
emphasize | -emphasize |
question | -question |
- to remove a previously sent tapback.
Managing group participants
Adding and removing participants from a group chat both require the Private API. Include the participant’s phone number or email address (with country code for phone numbers).Include the country code when specifying phone number addresses. For US numbers, prefix with
1 — for example, +15550005678.Typing indicators
You can show and hide the typing indicator in a conversation. The indicator automatically clears when a message is sent to that chat.Creating a new chat
Creating a new iMessage conversation requires the Private API. Pass an array of participant addresses and an optional opening message.Marking chats as read and unread
Mark as read
Calling
markRead marks the chat as read on the macOS server and notifies other BlueBubbles clients to update their unread state.Minimum server version requirements
Some Private API features require a specific minimum version of the BlueBubbles Server:| Feature | Minimum Server Version |
|---|---|
| Create chat | 0.3.0 |
| Add / remove participant | 0.3.0 |
| Rename group chat | 0.3.0 |
| Mark chat as read | 1.1.0 |
| Delete chat | 1.3.0 |
| Mark chat as unread | 1.4.0 |
partIndex on reactions | 1.4.0 |