Console commands
Every command of the console with its scope and arguments, and what each one answers: users, chats, files, groups, networks and more.
Per: sviluppatori · Da BeeBEEP 6.0.0 · Aggiornata il
Mi dispiace, ma per mancanza di tempo, alcune di queste risorse potrebbero essere solamente in lingua Inglese.
This page is the reference of the commands a program can send to BeeBEEP's console, for whoever writes a bot or an integration. For each command it gives the scope it needs, its arguments and what it answers. How to start the console, connect and authenticate is on the console, and the events BeeBEEP sends are on the events page.
How to read this page
A command is a JSON object on one line, with the command's name in cmd and its arguments as the other keys:
{"cmd":"send_message","chatId":1001,"text":"Ciao"}
BeeBEEP answers with one line, {"ok":true,"data":{...}} or {"ok":false,"error":"..."}; the replies and their codes are on the console page.
The commands are listed from Connection and control on, by what they are for. Each one gives its scope: the lowest scope that may call it, as the scopes explain. A connection below it gets scopeTooLow, and does not see the command in help. The page lists the commands of the admin scope; the commands of the debug scope exist only in a console started for development and are not here.
An argument has a type and may be required. In the table of a command:
| Column | What it says |
|---|---|
| Type | the JSON type: string, int (a whole number, or its text such as "5"), bool, array, object, or any |
| Required | yes when the command is refused without it; an argument sent as null counts as not sent |
| Values | the values that are accepted, when they are bounded: a closed list, a range, a length, a uuid |
| Description | what the argument means; Needs the admin scope marks an argument that outranks its command |
The text of a description is the program's own, as help gives it.
Identifiers and formats
- A user is a number, its
id, whichlist_usersandget_usergive. Your ownidis1, andstatusgives it aslocalUserId. Ids are local to one installation: another installation numbers the same user differently. What names a user everywhere is itsuuid. - A group is a number, its
id, and also auuidthat is the same on every member's computer. - A chat is a number, the
chatIdof the commands: theidof the other user for a private chat, theidof a group for a group, and2for Chat with Everyone, which the descriptions callID_DEFAULT_CHAT.1, your own id, is never a chat. In a chat message,groupIdis the chat's number. - A message, a file transfer or an invitation is named by a uuid, written as text without braces, such as
21ed7cf7-b9ee-4bd2-ae4d-3703c838b635. An argument that takes a uuid accepts it with or without braces, in lower or upper case, but with its hyphens. - A time is a whole number of milliseconds since 1970-01-01 UTC,
0for none. - A key is lowercase hexadecimal text, empty while there is none.
Files and paths
send_file, send_voice_message, set_avatar and set_group_avatar take a filePath on the computer BeeBEEP runs on. Below admin it must lie inside the console's file root, and without a file root these commands need admin: see files.
What the commands answer
A command with nothing to say answers data empty, {}. The others put these keys in data:
| Command | data holds |
|---|---|
auth | scope, and capped, true when a cap lowered it |
help | commands, events and codes; or the entry of one command |
status | your own state: localUserId, localUuid, displayName, e2ePublicKey, signingPublicKey, onlineUserCount, listenPort; the settings shareProfileWith, shareGalleryWith, relayMode, autoAcceptKeyChanges, autoAcceptMaxSizeMiB, dropGroupInvitationsFromNonContacts, notificationsEnabled, notificationSound, mutedChatIds, powerSaving, bonjour, preferIPv6; and the states identityUnavailable, dataFolderUnwritable, networkStartProblem (none, or why the network did not start: noPort, passwordKeys), lowDiskSpace and firewall |
list_users | users, the user objects of the other users, never yours |
get_user | one user object, yours included |
list_groups | groups, the group objects, Chat with Everyone included; each also has muted |
get_group | one group object |
get_chat_history | messages, chat message objects, newest first, each with recipients |
get_unread_counts | unreadCounts, a list of chatId and count; a chat with nothing unread is absent |
send_message, send_file, send_voice_message, answer_group_invitation | messageUuid |
accept_file_transfer, reject_file_transfer, pause_file_transfer, resume_file_transfer, cancel_file_transfer | accepted, rejected, paused, resumed or canceled, true |
list_file_transfers | transfers, the file transfer objects that are active: Requesting, Transferring or Paused |
get_file_transfer | transfers, every record of one message in any state, more than one for a message sent to a group, an empty list when there is none |
create_group | id and uuid; with inviteUserIds also invited and refused, lists of user ids |
invite_to_group | messageUuid and invitationId |
list_group_invitations | invitations, each with invitationId, inviteeUuid, inviteeId, sentAt, expiresAt and state (pending, accepted, declined, withdrawn or expired) |
list_group_acceptances | acceptances, each with groupUuid, invitationId, inviterUuid, answeredAt and expiresAt |
set_profile, set_preferences, set_avatar, set_circles, set_network_password, set_group_identity, set_group_avatar | changed, true when something changed |
get_circles | circles, the names in their owner's spelling, and circlesLocked, true when the administrator sets them |
circles_heard | circles, each with name, count (how many installations announce it) and mine |
set_chat_muted | chatId and muted, the state afterwards |
list_blocked_users | blockedUsers, each with userUuid, displayName, firstName, lastName and blockedAt |
list_networks | networks, each with networkId, name, category (Unclassified, Public or Private), decidedBySystem, joined, firstSeen and lastSeen; and joinedNetworks, the networks the computer is on now, each with networkId and name |
revert_network_promotions | demoted, how many users were demoted |
list_links | links, each with linkId (a decimal string), class, interface, localAddress, remoteAddress, family, primary and rttMs |
list_leases | leases: for each installation, the claims BeeBEEP holds on it; facts only |
network_stats | the counters of what the network has cost since the start, or since the last reset, and parameters |
set_parameter | parameters, every scaling parameter and its value after the change |
clock_status, set_clock_time | now, systemClock, clamped, looksWrong, violatedFloor (Build, Stored or None), floorValue, buildFloor and storedFloor; times as above |
list_plugins | plugins, policy, loadNotices and skipped |
invite_to_plugin_session | sessionId, invited and refused |
list_plugin_sessions | sessions |
send_plugin_data | sequence |
import_legacy_installation | the counts of what was imported, such as usersAdded, groupsAdded, circlesImported |
A user
list_users and get_user answer with this object for each user:
{"id":1001,"uuid":"2cc610c7-3375-54c3-957f-8be4ea6f7083","displayName":"Christian","firstName":"","lastName":"","birthDate":"","email":"","phoneNumber":"","location":"","info":"","color":"#FF4040","status":"Online","notResponding":false,"outOfSight":false,"queuedMessages":0,"participatesInDefaultChat":true,"acceptsFileTransfers":true,"acceptsVoiceMessages":true,"relayMode":"Everyone","circles":[],"pluginCapabilities":[],"avatarHash":"","lastConnection":1791265201802,"lastSeenActiveDay":1,"isFavorite":false,"relationship":"Discovered","relationshipOrigin":"Undecided","relationshipNetworkId":"","contactSuspendedByKeyChange":false,"effectiveRelationship":"Discovered","e2ePublicKey":"","signingPublicKey":"","proven":false,"trustSource":"unverified","introducedBy":""}
| Field | Meaning |
|---|---|
id, uuid | the number of the user here, and the identity that is the same everywhere |
displayName ... info, color | the profile as the user shares it with you; birthDate is YYYY-MM-DD or empty |
status | Online or Offline |
notResponding | true while every connection to the user is open but silent; the user is still Online |
outOfSight | true while what the user declared lately puts you out of each other's circles |
queuedMessages | how many messages wait to be sent to the user |
participatesInDefaultChat, acceptsFileTransfers, acceptsVoiceMessages, relayMode | the preferences the user declared; relayMode is Off, ContactsOnly or Everyone |
circles | the circles you share with the user, never the others the user is in |
pluginCapabilities | the plugins the user announced, each with pluginId and pluginVersion |
avatarHash | a hash of the avatar, empty when there is none: equal hashes mean equal pictures |
lastConnection | the time of the last connection, 0 if there was never one |
lastSeenActiveDay | the day number BeeBEEP last saw the user on, which its removal of inactive users counts from |
isFavorite | marked as a favorite with set_favorite |
relationship | Discovered or Contact, as stored |
relationshipOrigin, relationshipNetworkId | how the relationship came to be: Undecided, PrivateNetwork (the network is named) or Manual |
contactSuspendedByKeyChange | true while a contact is suspended because its key changed |
effectiveRelationship | what every permission reads now, which also depends on the network the user is on |
e2ePublicKey, signingPublicKey | the keys pinned for the user, empty while there are none |
proven | true while a live direct connection of the user proves its pinned key |
trustSource, introducedBy | how the keys came to be trusted: verified in person, introduced by a group administrator (introducedBy is its uuid), or unverified |
A group
{"id":1002,"uuid":"b54db1d4-e942-4145-87b7-7aa64e586f00","name":"Lunch","color":"#C08040","memberIds":[1,1001],"adminIds":[1],"isDefault":false}
memberIds and adminIds are user ids, yours (1) included; isDefault is true for Chat with Everyone. list_groups adds muted.
A chat message
get_chat_history answers with these objects, and chatMessageAdded carries one:
{"id":42,"messageUuid":"21ed7cf7-b9ee-4bd2-ae4d-3703c838b635","groupId":1001,"senderId":1,"senderName":"Alessandra","text":"Ciao","timestamp":1791265285598,"overallState":"Delivered","isAutoResponse":false,"isTemporary":false,"chatKind":"private","reactions":[]}
| Field | Meaning |
|---|---|
id | the message's number here; use messageUuid to name it |
groupId | the chat's number, as chatId in the commands |
senderId, senderName | the user who wrote it (1 for you) and the name, empty when the sender is not known |
timestamp | the time, in milliseconds since 1970 |
overallState | Pending, Sent, Delivered, Read or Failed; a received message is Delivered once saved and Read after mark_read |
isAutoResponse | true for a message BeeBEEP wrote on its own, never one a person typed |
isTemporary | true while the disk is too full for the message to be saved yet |
chatKind | default for Chat with Everyone, group or private |
reactions | one entry for each user who reacted: reactorId, emoji, timestamp and pendingRecipientIds, how many recipients your own reaction has still to reach |
A message with a file has an attachment, with fileName, fileSize, contentHash and mimeType; a voice note's adds isVoiceMessage, durationMs and waveform, and the message gains isVoicePlayed. A group invitation has an invitation (groupUuid, groupName, memberCount, invitationId, expiresAt) and the answer to one an invitationAnswer (groupUuid, invitationId, answer).
In the reply of get_chat_history every message also has recipients, one entry for each user it went to, with recipientId, state (the same words as overallState), deliveredAt and readAt, 0 while that step has not happened. The events leave recipients out, so that the events of a message sent to many users stay small: ask get_chat_history for the states.
A file transfer
{"messageUuid":"21ed7cf7-b9ee-4bd2-ae4d-3703c838b635","peerUuid":"2cc610c7-3375-54c3-957f-8be4ea6f7083","direction":"Receive","state":"Transferring","fileName":"report.pdf","fileSize":481920,"bytesCheckpoint":204800,"contentHash":"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08","localPath":"/data/downloads/report.pdf","updatedAt":1735599999000,"offeredActiveDay":0}
direction is Send or Receive; state is Offered, Accepted, Requesting, Transferring, Paused, Completed, Rejected, Failed or Canceled. bytesCheckpoint is the last offset known to be safe on disk, and lags the live count: watch fileTransferProgress for that. localPath is the source file of a sent file and, once a received file is Completed, where it was saved. peerUuid is the uuid of the other user, not its id.
Connection and control
auth
Presents one role's password (read, user or admin): the connection gets that role's scope, capped by --console-max-scope.
Scope: none.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
password | string | yes | any | One role's password, as the console password file gives it. |
help
Lists every command, or describes one named command.
Scope: read.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
command | string | no | any | The command name to describe; omit to list every command. |
subscribe
Starts the event channel on this connection (already on by default): every event, or only the ones named.
Scope: read.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
events | array | no | at least 1 item | Only these events, by name (help lists them); omit for every event. |
unsubscribe
Stops the event channel on this connection.
Scope: read. Takes no arguments.
disconnect
Closes only the calling connection; BeeBEEP keeps running.
Scope: read. Takes no arguments.
quit
Shuts the whole BeeBEEP process down cleanly.
Scope: admin. Takes no arguments.
You and your settings
status
Returns a summary of the local user and how many remote users are currently online.
Scope: read. Takes no arguments.
set
Sets one runtime parameter, named by param, to value. Each parameter has its own values and needs its own scope, as the tables below say.
Scope: read.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
param | string | yes | notifications, notificationsEnabled, notificationSound, shareProfileWith, shareGalleryWith, dropGroupInvitationsFromNonContacts, autoAcceptKeyChanges, autoAcceptMaxSizeMiB, bonjour, preferIPv6 | The parameter name; each one needs its own scope, listed below. |
value | any | yes | depends on param, see below | "on"/"off", "everyone"/"contactsonly" (case-insensitive), or a whole number of MiB -- as the parameter needs, listed below. |
The values of value depend on param:
param | Needs the scope | value |
|---|---|---|
notifications | read | on or off (any case) |
notificationsEnabled | user | on or off (any case) |
notificationSound | user | on or off (any case) |
shareProfileWith | user | everyone or contactsonly (any case) |
shareGalleryWith | user | everyone or contactsonly (any case) |
dropGroupInvitationsFromNonContacts | user | on or off (any case) |
autoAcceptKeyChanges | admin | on or off (any case) |
autoAcceptMaxSizeMiB | admin | a whole number from 0 to 1048576 (MiB, 0 for no limit) |
bonjour | user | on or off (any case) |
preferIPv6 | user | on or off (any case) |
set_profile
Updates one or more fields of the local user's own profile.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
displayName | string | no | any | New display name; a changed one must follow the name rules (a letter or a digit first, at most 40 characters). |
firstName | string | no | any | New first name. |
lastName | string | no | any | New last name. |
birthDate | string | no | any | New birth date, YYYY-MM-DD, not in the future nor before 1900; "" clears it. |
email | string | no | any | New email address. |
phoneNumber | string | no | any | New phone number. |
location | string | no | any | New location text. |
info | string | no | any | New status/info text. |
color | string | no | any | New UI accent color, hex (e.g. "#FF5733"). |
set_preferences
Updates one or more of the local user's own declared preferences.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
participatesInDefaultChat | bool | no | any | Whether to be included in the Default group ("Chat with Everyone"). |
acceptsFileTransfers | bool | no | any | Whether to accept file transfer offers. |
acceptsVoiceMessages | bool | no | any | Whether to accept voice messages. |
relayMode | string | no | Off, ContactsOnly, Everyone | Who to forward relay envelopes for: "Off", "ContactsOnly" or "Everyone". |
set_avatar
Loads a local image file and sets it as the local user's own avatar.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
filePath | string | yes | any | Local path to an image file -- a PNG of at most 512x512 pixels unless this executable converts images (the GUI beebeep does). Needs the admin scope. |
set_chat_muted
Mutes or unmutes one chat's notifications; its unread count and its place in the list are unaffected.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
chatId | int | yes | 0 or more | The chat: a peer's user id for the private chat, a group id, or the Default chat's id. |
muted | bool | yes | any | true to mute, false to unmute. |
get_circles
The local user's circles, and whether the administrator's policy file sets them.
Scope: read. Takes no arguments.
circles_heard
The circles announced on this network lately, in sight or not: the ones to offer when a circle is added.
Scope: read. Takes no arguments.
set_circles
Replaces the local user's circles; nothing changes if one name is refused.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
circles | array | yes | any | The whole list of circle names, in order; [] for none. Each name: letters and digits of any script, spaces and - _ @ [ ] { } ( ) % & . : # * ! ' / + and currency signs, at most 32 characters. |
Users
list_users
Lists every known remote user (never the local user).
Scope: read. Takes no arguments.
get_user
Looks up one user by id.
Scope: read.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
id | int | yes | 0 or more | The user's id, as list_users gives it. |
set_favorite
Marks or unmarks a contact as a favorite -- it only orders the user list and grants no permission.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
userId | int | yes | 0 or more | The contact to favorite/unfavorite. |
favorite | bool | yes | any | true to favorite, false to unfavorite. |
set_relationship
Sets by hand what a peer is to the local user -- Discovered or Contact; a private network never overrides it.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
userId | int | yes | 0 or more | The peer. |
relationship | string | yes | Discovered, Contact (any case) | Discovered or Contact (case-insensitive). |
request_profile_details
Asks a peer for its extended profile fields and avatar, if currently online -- fire-and-forget, watch userUpdated/chatMessageAdded events.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
userId | int | yes | 0 or more | The peer to ask. |
request_user_gallery
Asks a peer for its gallery, if currently online -- fire-and-forget, watch userUpdated/chatMessageAdded events.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
userId | int | yes | 0 or more | The peer to ask. |
block_user
Blocks a contact by identity: persisted, and refuses that peer's connections (in or out) from now on, closing its current one immediately if it has one.
Scope: admin.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
userId | int | yes | 0 or more | The contact to block, as currently listed. |
unblock_user
Reverses a previous block_user -- this peer may connect again from now on.
Scope: admin.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
userUuid | string | yes | a uuid | The peer's own persistent identity, as returned by list_blocked_users. |
list_blocked_users
Lists every currently blocked peer.
Scope: read. Takes no arguments.
Chats and messages
get_chat_history
Returns a page of persisted chat history for one chat, newest first.
Scope: read.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
chatId | int | yes | 0 or more | The chat's id -- ID_DEFAULT_CHAT, a group id, or a peer's user id. |
oldestMessageId | int | no | 0 or more | For backward pagination: only messages older than this id. |
limit | int | no | 0 to 2147483647 | Maximum number of messages to return (default 50). |
send_message
Sends a chat message.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
chatId | int | yes | 0 or more | The chat's id -- ID_DEFAULT_CHAT, a group id, or a peer's user id. |
text | string | yes | at most 10000 characters | The message text; must not be empty. |
send_reaction
Sets, replaces, or removes this instance's own emoji reaction on a message. Asking for the emoji already in place removes it. Watch the chatMessageReactionChanged event on every side.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
messageUuid | string | yes | a uuid | The message's uuid, as shown by get_chat_history. |
emoji | string | no | any | The reaction string; omit or pass an empty string to remove this instance's own reaction. |
send_typing
Announces this instance is/isn't typing (or recording a voice note) in a chat -- never ID_DEFAULT_CHAT. Watch the typingStateChanged event on the peer's own side.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
chatId | int | yes | 0 or more | The chat's id -- a group id, or a peer's user id. Never ID_DEFAULT_CHAT. |
isTyping | bool | yes | any | True to announce the activity started (or is still ongoing); false for stopped. |
activity | string | no | Typing, RecordingVoice | What is going on while isTyping is true: "Typing" (the default) or "RecordingVoice". |
mark_read
Marks every unread message in a chat as Read.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
chatId | int | yes | 0 or more | The chat's id; must not be the local user's own id. |
get_unread_counts
Returns every chat's current unread-message count.
Scope: read. Takes no arguments.
list_archives
Lists the archived chats (the history of a BeeBEEP 5.x installation, imported, read only), the most recent first.
Scope: read. Takes no arguments.
get_archive
Returns one archived chat and a page of its messages as plain text, oldest first.
Scope: read.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
id | string | yes | a uuid | The archive's id, as list_archives shows it. |
offset | int | no | 0 to 2147483647 | The first message to return, counted from the oldest (default 0). |
limit | int | no | 0 to 2147483647 | Maximum number of messages to return (default 50). |
delete_archive
Deletes one archived chat from this device; importing the old installation again brings it back while its files are still there.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
id | string | yes | a uuid | The archive's id, as list_archives shows it. |
Files
send_file
Offers a local file as a chat attachment. Never ID_DEFAULT_CHAT.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
chatId | int | yes | 0 or more | The chat's id -- a group id, or a peer's user id. Never ID_DEFAULT_CHAT. |
filePath | string | yes | any | Local path to the file to send; must exist and be readable. Needs the admin scope. |
send_voice_message
Offers a local audio file as a voice note, as a recording would be. Never ID_DEFAULT_CHAT.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
chatId | int | yes | 0 or more | The chat's id -- a group id, or a peer's user id. Never ID_DEFAULT_CHAT. |
filePath | string | yes | any | Local path to the audio file; must exist and be readable. Needs the admin scope. |
durationMs | int | yes | 0 or more | The note's duration in milliseconds, as the bubble shows it. |
waveform | array | no | any | Optional array of up to 64 bar amplitudes (0-255) the bubble draws; flat bars if omitted. |
accept_file_transfer
Accepts a pending incoming file offer -- watch the fileTransferOfferReceived event for its messageUuid.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
messageUuid | string | yes | a uuid | The offer's own message id. |
reject_file_transfer
Declines a pending incoming file offer.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
messageUuid | string | yes | a uuid | The offer's own message id. |
pause_file_transfer
Pauses a currently-active file transfer, notifying the peer.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
messageUuid | string | yes | a uuid | The transfer's own message id. |
resume_file_transfer
Resumes a previously-paused (or restart-survived) file transfer.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
messageUuid | string | yes | a uuid | The transfer's own message id. |
cancel_file_transfer
Abandons a file transfer outright, deleting the partial file; its record stays, state Canceled.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
messageUuid | string | yes | a uuid | The transfer's own message id. |
list_file_transfers
Returns every currently active file transfer (Requesting/Transferring/Paused, either direction).
Scope: read. Takes no arguments.
get_file_transfer
Returns every transfer record of one message, in any state -- more than one in a group send.
Scope: read.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
messageUuid | string | yes | a uuid | The transfer's own message id. |
Groups
create_group
Creates a new custom group owned by the local user.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
name | string | yes | any | The group's display name, following the name rules (not empty, a letter or a digit first, at most 40 characters). |
color | string | no | any | Optional explicit hex color (e.g. "#C08040"); auto-assigned from the curated palette if omitted. |
inviteUserIds | array | no | any | Optional array of user ids: each is invited (a 5.x peer added), the creator stays the only member until someone accepts. |
text | string | no | any | Optional short text the invitations carry. |
list_groups
Lists every group, including the Default group.
Scope: read. Takes no arguments.
get_group
Looks up one group by id.
Scope: read.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
id | int | yes | 0 or more | The group's id, as list_groups gives it. |
set_group_identity
Renames and/or recolors a group the local user administers.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
groupId | int | yes | 0 or more | The target group's id. |
name | string | no | any | The group's new display name; optional, keeps the current one if omitted; a changed one must follow the name rules. |
color | string | no | any | The group's new display color; optional, keeps the current one if omitted. |
set_group_avatar
Sets the avatar of a group the local user administers.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
groupId | int | yes | 0 or more | The target group's id. |
filePath | string | yes | any | Local path to an image file -- a PNG of at most 512x512 pixels unless this executable converts images (the GUI beebeep does). Needs the admin scope. |
add_user_to_group
Adds a user to a group the local user administers.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
groupId | int | yes | 0 or more | The target group's id. |
userId | int | yes | 0 or more | The user to add. |
invite_to_group
Invites one of our Contacts to a group the local user administers, in their private chat.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
groupId | int | yes | 0 or more | The group's id. |
userId | int | yes | 0 or more | The Contact to invite. |
text | string | no | any | Optional short text shown with the invitation. |
list_group_invitations
Lists the invitations the local user sent for a group, with their state.
Scope: read.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
groupId | int | yes | 0 or more | The group's id. |
withdraw_group_invitation
Withdraws a pending invitation (local only: a late acceptance is answered "no longer valid").
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
groupId | int | yes | 0 or more | The group's id. |
invitationId | string | yes | a uuid | The invitation's id, as list_group_invitations or invite_to_group gives it. |
answer_group_invitation
Accepts or declines an invitation received in the private chat with its inviter (the fields of groupInvitationReceived).
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
inviterId | int | yes | 0 or more | The inviter's user id (the invitation's chatId). |
groupUuid | string | yes | a uuid | The group's uuid, as the invitation carries it. |
invitationId | string | yes | a uuid | The invitation's id. |
expiresAt | int | no | 0 or more | Optional: the invitation's expiry, epoch ms (0 for none) -- an expired one is refused. |
accept | bool | yes | any | true to accept, false to decline. |
list_group_acceptances
Lists the invitations the local user accepted whose group has not arrived yet ("joining...").
Scope: read. Takes no arguments.
remove_user_from_group
Removes a member from a group the local user administers.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
groupId | int | yes | 0 or more | The target group's id. |
userId | int | yes | 0 or more | The member to remove; must not be the local user's own id -- use leave_group for that. |
set_group_admin
Promotes or demotes a member as admin of a group the local user administers.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
groupId | int | yes | 0 or more | The target group's id. |
userId | int | yes | 0 or more | The member whose admin status changes; must already be a member. |
isAdmin | bool | yes | any | true to promote, false to demote. |
claim_group_admin
Claims admin of a group the local user is a member of but that currently has no admin at all (e.g. its sole admin left).
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
groupId | int | yes | 0 or more | The target group's id. |
leave_group
Removes the local user from a group -- never admin-gated, leaving is always a member's own call.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
groupId | int | yes | 0 or more | The target group's id. |
Plugins
list_plugins
Lists the registered plugins with their manifests (id, version, name, category, modes), the policy file's rules on plugins and what the loader refused.
Scope: read. Takes no arguments.
invite_to_plugin_session
Puts a plugin session together: an invitation in each user's private chat; the session starts on the last acceptance.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
pluginId | string | yes | any | A registered plugin's id (list_plugins). |
modeId | string | yes | any | One of its modes. |
userIds | array | yes | any | The users to invite (array of ids); the local user is the inviter. |
answer_plugin_invite
Accepts or declines an invitation to a plugin session received in the private chat with its inviter (the fields of pluginInviteReceived).
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
inviterId | int | yes | 0 or more | The inviter's user id (the invitation's chatId). |
sessionId | string | yes | a uuid | The session's uuid, as the invitation carries it. |
pluginId | string | yes | any | The plugin's id, as the invitation carries it. |
modeId | string | yes | any | The mode's id, as the invitation carries it. |
expiresAt | int | no | 0 or more | Optional: the invitation's expiry, epoch ms (0 for none) -- an expired one is refused. |
accept | bool | yes | any | true to accept, false to decline. |
replace_plugin_participant
Gives a refused or expired seat of a session being put together to another user (or the same one again).
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
sessionId | string | yes | a uuid | The session's uuid. |
userId | int | yes | 0 or more | The user whose seat is taken away. |
newUserId | int | yes | 0 or more | The user invited to it. |
start_plugin_session
Starts a session being put together with whoever accepted so far, a refused seat left out (the inviter's explicit start).
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
sessionId | string | yes | a uuid | The session's uuid. |
send_plugin_data
Sends bytes into an active plugin session as its plugin would.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
sessionId | string | yes | a uuid | The session's uuid. |
text | string | no | any | The bytes as UTF-8 text (or bytesBase64). |
bytesBase64 | string | no | any | The bytes, base64. |
deliveryClass | string | no | durable, fresh, bounded | durable (default), fresh or bounded. |
deadlineMsecs | int | no | 0 to 4294967295 | bounded only: how long the bytes are worth delivering. |
toUserId | int | no | 0 or more | Optional: one participant; every other participant when absent. |
list_plugin_sessions
Lists every plugin session this side knows: inviting, active, suspended, ended (until pruned).
Scope: read. Takes no arguments.
suspend_plugin_session
Puts a persistent active plugin session aside on this side.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
sessionId | string | yes | a uuid | The session's uuid. |
resume_plugin_session
Runs a suspended plugin session again (after a restart, every persistent session is suspended).
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
sessionId | string | yes | a uuid | The session's uuid. |
end_plugin_session
Ends a plugin session for everybody.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
sessionId | string | yes | a uuid | The session's uuid. |
Network
list_networks
Lists every network this installation has joined, with its category, and the networks it is on right now.
Scope: read. Takes no arguments.
set_network_category
Classifies a joined network as Private or Public -- refused while the operating system decides (Windows).
Scope: admin.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
networkId | string | yes | any | The network, as list_networks reports it. |
category | string | yes | Private, Public (any case) | Private or Public (case-insensitive). |
revert_network_promotions
Demotes back to Discovered every peer a network made a Contact on its own; decisions made by hand are kept.
Scope: admin.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
networkId | string | yes | any | The network, as list_networks reports it. |
set_network_password
Updates the pre-shared network password and/or whether it's applied; an actual change live-restarts the network+Bluetooth threads.
Scope: admin.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
useNetworkPassword | bool | no | any | Whether to apply the saved network password to new connections. |
password | string | no | any | New pre-shared network password. |
connect_to_address
Dials a peer at host:port, the way the manual "+" flow does -- watch userConnected, or list_links for a second link to a known peer; a host name that resolves to nothing comes back as hostNotFound, an address the administrator's list leaves out as dialRefused.
Scope: admin.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
host | string | yes | any | The peer's address, IPv4 or IPv6, e.g. "127.0.0.1" or "::1" (a link-local IPv6 address with its scope, "fe80::1%en0"), or a host name, e.g. "office-pc.example.com". |
port | int | yes | 1 to 65535 | The peer's TCP listening port (its status command reports it). |
list_links
Lists a peer's live links, TCP or Bluetooth: id, class, local interface, both addresses, and which one is primary.
Scope: read.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
userId | int | yes | 0 or more | The peer, as currently listed. |
list_leases
Lists the lease's claims per uuid: source, address, interface or link, seconds left, the last counter. Never a status.
Scope: read. Takes no arguments.
search_users
Starts whichever discovery mechanism(s) are requested, all under one shared time limit -- watch userConnected events as peers are found, and the searchCompleted event once the window closes.
Scope: user.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
byNetwork | bool | no | any | Whether to fire one LAN subnet broadcast re-announcement. Defaults to true. |
byBluetooth | bool | no | any | Whether to start advertising/scanning; stopped when the shared time limit ends. Defaults to false. |
byMulticast | bool | no | any | Whether to join the multicast group and announce; stopped when the shared time limit ends. Defaults to false. |
search_network_users
Sends a fresh presence announcement over the local LAN subnet broadcast -- watch userConnected events as peers are found.
Scope: user. Takes no arguments.
start_bluetooth_search
Starts advertising and scanning for nearby Bluetooth peers -- watch userConnected events as peers are found.
Scope: user. Takes no arguments.
stop_bluetooth_search
Stops advertising/scanning for nearby Bluetooth peers. Already-established links are unaffected.
Scope: user. Takes no arguments.
start_multicast_search
Joins the well-known multicast group and sends one announcement -- watch userConnected events as peers are found.
Scope: user. Takes no arguments.
stop_multicast_search
Leaves the multicast group. Already-established links are unaffected.
Scope: user. Takes no arguments.
network_stats
Reports what the network has cost so far: bytes and frames per message type, connections, dials, handshakes, worst tick lateness.
Scope: read.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
reset | bool | no | any | Optional bool: zero every counter after this reply, starting a new measurement window. Needs the admin scope. |
set_parameter
Sets one named runtime scaling parameter, live -- the same names --param= and beebeep.rc's [Scaling] section take; network_stats reports the values in force.
Scope: admin.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
param | string | yes | any | The parameter name, e.g. "gossipQuietMsecs" or "keepaliveProbeSilenceMsecs" -- network_stats' own parameters object lists every one. |
value | any | yes | any | The new value, a whole number as a JSON number or as text. |
Clock and maintenance
clock_status
Reports what this instance thinks the time is, what the machine's own clock says, and whether it is below a floor: the date of this build (Build) or the last date this installation wrote down (Stored).
Scope: read. Takes no arguments.
set_clock_time
Gives this instance the real time, as the banner's own dialog does -- refused below this build's own commit date. Never touches the system clock.
Scope: admin.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
timestamp | any | yes | any | The real time, as an ISO-8601 date-time (e.g. "2026-09-21T10:00:00Z") or epoch milliseconds. |
import_legacy_installation
Imports an old BeeBEEP 5.x installation's contacts, groups and missing profile fields, merging with what this installation already has, and its saved chats as archives (chatArchivesImported follows).
Scope: admin.
| Argument | Type | Required | Values | Description |
|---|---|---|---|---|
folder | string | no | any | The old executable's or data folder; omitted, the usual places on this machine are searched. Needs the admin scope. |