/////
vim:set ts=4 sw=4 tw=82 noet:
/////
+
:quotes.~:
= signal-cli (1)
== Name
-signal-cli - A commandline and dbus interface for the Signal messenger
+signal-cli - A commandline interface for the Signal messenger
== Synopsis
It supports registering, verifying, sending and receiving messages.
For registering you need a phone number where you can receive SMS or incoming calls.
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 this use-case, it has a dbus and a JSON-RPC interface, that can be used to send messages from other programs.
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.
+The `receive` command should be regularly executed.
+In daemon mode messages are continuously received.
== Options
*--verbose*::
Raise log level and include lib signal logs.
+*--log-file* LOG_FILE::
+Write log output to the given file.
+If `--verbose` is also given, the detailed logs will only be written to the log file.
+
*--config* CONFIG::
Set the path, where to store the config.
Make sure you have full read/write access to the given directory.
This flag must not be given for the `link` command.
It is optional for the `daemon` command.
-For all other commands it is only optional if there is exactly one local user in the
-config directory.
+For all other commands it is only optional if there is exactly one local user in the config directory.
+
+*--service-environment* ENVIRONMENT::
+Choose the server environment to use:
+
+- `live` (default)
+- `staging`
*--dbus*::
Make request via user dbus.
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"
+Specify if you want commands to output in either "plain-text" mode or in "json".
+Defaults to "plain-text"
*--trust-new-identities* TRUST-MODE::
Choose when to trust new identities:
-- `on-first-use` (default): Trust the first seen identity key from new users,
- changed keys must be verified manually
+- `on-first-use` (default): Trust the first seen identity key from new users, changed keys must be verified manually
- `always`: Trust any new identity key without verification
- `never`: Don't trust any unknown identity key, every key must be verified manually
Register a phone number with SMS or voice verification.
Use the verify command to complete the verification.
+If the account is just deactivated, the register command will just reactivate account, without requiring an SMS verification.
+By default the unregister command just deactivates the account, in which case it can be reactivated without sms verification if the local data is still available.
+If the account was deleted (with --delete-account) it cannot be reactivated.
+
*-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.
+For the staging environment, use: https://signalcaptchas.org/staging/registration/generate.html
+Check the developer tools for a redirect starting with signalcaptcha:// Everything after signalcaptcha:// is the captcha token.
=== verify
To remove a linked device, use "removeDevice" from the master device.
*--delete-account*::
-Delete account completely from server. Cannot be undone without loss. You will
-have to be readded to each group.
+Delete account completely from server.
+Cannot be undone without loss.
+You will have to be readded to each group.
CAUTION: Only delete your account if you won't use this number again!
=== link
Link to an existing device, instead of registering a new number.
-This shows a "sgnl://linkdevice?uuid=..." URI. If you want to connect to another signal-cli instance, you can just use this URI.
+This shows a "sgnl://linkdevice?uuid=..." 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::
*--uri* URI::
Specify the uri contained in the QR code shown by the new device.
-You will need the full URI such as "sgnl://linkdevice?uuid=..." (formerly "tsdevice:/?uuid=...")
-Make sure to enclose it in quotation marks for shells.
+You will need the full URI such as "sgnl://linkdevice?uuid=..." (formerly "tsdevice:/?uuid=...") Make sure to enclose it in quotation marks for shells.
=== listDevices
RECIPIENT::
Specify the recipients’ phone number.
+*--note-to-self*::
+Send the message to self without notification.
+
*-g* GROUP, *--group-id* GROUP::
Specify the recipient group ID in base64 encoding.
*-m* MESSAGE, *--message* MESSAGE::
-Specify the message, if missing, standard input is used.
+Specify the message.
+Currently, signal-cli reads the message from stdin if `-m` is missing, but this will change in a future version and the explicit flag `--message-from-stdin` should be used instead.
+
+*--message-from-stdin*::
+Read the message from standard input.
*-a* [ATTACHMENT [ATTACHMENT ...]], *--attachment* [ATTACHMENT [ATTACHMENT ...]]::
Add one or more files as attachment.
-*--note-to-self*::
-Send the message to self without notification.
-
-*-e*, *--end-session*::
-Clear session state and send end session message.
+*--sticker* STICKER::
+Send a sticker of a locally known sticker pack (syntax: stickerPackId:stickerId).
+Shouldn't be used together with `-m` as the official clients don't support this.
+e.g.: `--sticker 00abac3bc18d7f599bff2325dc306d43:2`
*--mention*::
-Mention another group member (syntax: start:length:recipientNumber)
-In the apps the mention replaces part of the message text, which is specified by the start and length values.
+Mention another group member (syntax: start:length:recipientNumber) In the apps the mention replaces part of the message text, which is specified by the start and length values.
e.g.: `-m "Hi X!" --mention "3:1:+123456789"`
*--quote-timestamp*::
-Specify the timestamp of a previous message with the recipient or group to add a
-quote to the new message.
+Specify the timestamp of a previous message with the recipient or group to add a quote to the new message.
*--quote-author*::
Specify the number of the author of the original message.
*--quote-mention*::
Specify the mentions of the original message (same format as `--mention`).
+*-e*, *--end-session*::
+Clear session state and send end session message.
+
=== sendReaction
Send reaction to a previously received or sent message.
*-v* VERIFIED_SAFETY_NUMBER, *--verified-safety-number* VERIFIED_SAFETY_NUMBER::
Specify the safety number of the key, only use this option if you have verified the safety number.
-Can be either the plain text numbers shown in the app or the bytes from the QR-code,
-encoded as base64.
+Can be either the plain text numbers shown in the app or the bytes from the QR-code, encoded as base64.
=== updateProfile
Update the profile information shown to message recipients.
The profile is stored encrypted on the Signal servers.
-The decryption key is sent with every outgoing messages to contacts and included
-in every group.
+The decryption key is sent with every outgoing messages to contacts and included in every group.
*--given-name* NAME, *--name* NAME::
New (given) name.
To disable expiration set expiration time to 0.
=== removeContact
+
Remove the info of a given contact
NUMBER::
=== sendSyncRequest
Send a synchronization request message to the master device (for group, contacts, ...).
-The master device will respond with synchronization messages with full contact and
-group lists.
+The master device will respond with synchronization messages with full contact and group lists.
=== uploadStickerPack
Upload a new sticker pack, consisting of a manifest file and the sticker images.
Images must conform to the following specification: (see https://support.signal.org/hc/en-us/articles/360031836512-Stickers#sticker_reqs )
+
- Static stickers in PNG or WebP format
- Animated stickers in APNG format,
- Maximum file size for a sticker file is 300KiB
=== daemon
-signal-cli can run in daemon mode and provides an experimental dbus interface.
-If no `-a` account is given, all local accounts will be exported as separate dbus
-objects under the same bus name.
+signal-cli can run in daemon mode and provides an experimental dbus or JSON-RPC interface.
+If no `-a` account is given, all local accounts will be exported as separate dbus objects under the same bus name.
+
+*--dbus*::
+Export DBus interface on user bus.
+See signal-cli-dbus (5) for info on the dbus interface.
+
+*--dbus-system*::
+Export DBus interface on system bus.
+See signal-cli-dbus (5) for info on the dbus interface.
+
+*--socket [SOCKET]*::
+Export a JSON-RPC interface on a UNIX socket (default $XDG_RUNTIME_DIR/signal-cli/socket).
+See signal-cli-jsonrpc (5) for info on the JSON-RPC interface.
+
+*--tcp [HOST:PORT]*::
+Export a JSON-RPC interface on a TCP socket (default localhost:7583).
+See signal-cli-jsonrpc (5) for info on the JSON-RPC interface.
-*--system*::
-Use DBus system bus instead of user bus.
*--ignore-attachments*::
Don’t download attachments of received messages.
+*--no-receive-stdout*::
+Don’t print received messages to stdout.
+
+*--receive-mode*::
+Specify when to start receiving messages (on-start, on-connection, manual)
+
== Examples
Register a number (with SMS verification)::
signal-cli -a ACCOUNT send -m "This is a message" [RECIPIENT [RECIPIENT ...]] [-a [ATTACHMENT [ATTACHMENT ...]]]
Pipe the message content from another process::
-uname -a | signal-cli -a ACCOUNT send [RECIPIENT [RECIPIENT ...]]
+uname -a | signal-cli -a ACCOUNT send --message-from-stdin [RECIPIENT [RECIPIENT ...]]
Create a group::
signal-cli -a ACCOUNT updateGroup -n "Group name" -m [MEMBER [MEMBER ...]]
signal-cli -a ACCOUNT trust -a NUMBER
== Exit codes
+
* *1*: Error is probably caused and fixable by the user
* *2*: Some unexpected error
* *3*: Server or IO error