signal-cli was primarily developed to be used on servers to notify admins of important events.
For this use-case, it has a dbus interface, that can be used to send messages from any programming language that has dbus bindings.
+For some functionality the Signal protocol requires that all messages have been received from the server.
+The `receive` command should be regularly executed. In daemon mode messages are continuously received.
+
== Options
*-h*, *--help*::
*-v*, *--version*::
Print the version and quit.
+*--verbose*::
+Raise log level and include lib signal logs.
+
*--config* CONFIG::
Set the path, where to store the config.
Make sure you have full read/write access to the given directory.
*--dbus-system*::
Make request via system dbus.
+*-o* OUTPUT-MODE, *--output* OUTPUT-MODE::
+Specify if you want commands to output in either "plain-text" mode or in "json". Defaults to "plain-text"
+
== Commands
=== register
*-v*, *--voice*::
The verification should be done over voice, not SMS.
+*--captcha*::
+The captcha token, required if registration failed with a captcha required error.
+To get the token, go to https://signalcaptchas.org/registration/generate.html
+Check the developer tools for a redirect starting with signalcaptcha://
+Everything after signalcaptcha:// is the captcha token.
+
=== verify
Verify the number using the code received via SMS or voice.
=== link
Link to an existing device, instead of registering a new number.
-This shows a "tsdevice:/…" URI. If you want to connect to another signal-cli instance, you can just use this URI. If you want to link to an Android/iOS device, create a QR code with the URI (e.g. with qrencode) and scan that in the Signal app.
+This shows a "tsdevice:/…" URI. If you want to connect to another signal-cli instance, you can just use this URI.
+If you want to link to an Android/iOS device, create a QR code with the URI (e.g. with qrencode) and scan that in the Signal app.
*-n* NAME, *--name* NAME::
Optionally specify a name to describe this new device.
*--uri* URI::
Specify the uri contained in the QR code shown by the new device.
+You will need the full uri enclosed in quotation marks, such as "tsdevice:/?uuid=....."
=== listDevices
Specify the device you want to remove.
Use listDevices to see the deviceIds.
+=== getUserStatus
+
+Uses a list of phone numbers to determine the statuses of those users.
+Shows if they are registered on the Signal Servers or not.
+In json mode this is outputted as a list of objects.
+
+[NUMBER [NUMBER ...]]::
+One or more numbers to check.
+
=== send
Send a message to another user or group.
=== receive
Query the server for new messages.
-New messages are printed on standardoutput and attachments are downloaded to the config directory.
+New messages are printed on standard output and attachments are downloaded to the config directory.
+In json mode this is outputted as one json object per line.
*-t* TIMEOUT, *--timeout* TIMEOUT::
Number of seconds to wait for new messages (negative values disable timeout).
Default is 5 seconds.
*--ignore-attachments*::
Don’t download attachments of received messages.
-*--json*::
-Output received messages in json format, one object per line.
+
+=== joinGroup
+
+Join a group via an invitation link.
+To be able to join a v2 group the account needs to have a profile (can be created
+with the `updateProfile` command)
+
+*--uri*::
+The invitation link URI (starts with `https://signal.group/#`)
=== updateGroup
Create or update a group.
+If the user is a pending member, this command will accept the group invitation.
+To be able to join or create a v2 group the account needs to have a profile (can
+be created with the `updateProfile` command)
*-g* GROUP, *--group* GROUP::
Specify the recipient group ID in base64 encoding.
=== quitGroup
Send a quit group message to all group members and remove self from member list.
+If the user is a pending member, this command will decline the group invitation.
*-g* GROUP, *--group* GROUP::
Specify the recipient group ID in base64 encoding.
=== listGroups
-Show a list of known groups.
+Show a list of known groups and related information.
+In json mode this is outputted as an list of objects and is always in detailed mode.
*-d*, *--detailed*::
-Include the list of members of each group.
+Include the list of members of each group and the group invite link.
=== listIdentities
=== updateProfile
-Update the name and/or avatar image visible by message recipients for the current users.
+Update the name and avatar image visible by message recipients for the current users.
The profile is stored encrypted on the Signal servers.
-The decryption key is sent with every outgoing messages (excluding group messages).
+The decryption key is sent with every outgoing messages to contacts.
*--name*::
New name visible by message recipients.