home | help
SIGNAL-CLI(1)							   SIGNAL-CLI(1)

NAME
     signal-cli - A commandline interface for the Signal messenger

SYNOPSIS
     signal-cli  [--config  CONFIG] [-h | -v | -a ACCOUNT | --dbus | --dbus-sys-
     tem] command [command-options]

DESCRIPTION
     signal-cli is a commandline interface for libsignal-service-java.	It  sup-
     ports registering, verifying, sending and receiving messages. For register-
     ing  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 and a JSON-RPC inter-
     face, that can be used to send messages from other programs.

     Originally the Signal protocol only allowed sending messages to other phone
     numbers.  Now with the introduction of phone number privacy, the phone num-
     ber of a recipient is not always known.  Only  the  recipient's  ServiceId,
     ACI/PNI (a special UUID) is known.

     In all places where a RECIPIENT argument is expected in signal-cli's inter-
     face, one of the following can be used:

     *	 The phone number

     *	 The ACI, just a UUID

     *	 The PNI, just a UUID, with "PNI:" prefix

     *	 The username, with "u:" prefix, e.g. "u:test.000"

     For  some functionality the Signal protocol requires that all messages have
     been received from the server. The receive command should be regularly exe-
     cuted. In daemon mode messages are by default continuously received.

OPTIONS
     -h, --help
	 Show help message and quit.

     --version
	 Print the version and quit.

     -v, --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 de-
	 tailed logs will only be written to the log file.

     --scrub-log
	 Scrub possibly sensitive information from the log, like  phone  numbers
	 and UUIDs. Doesn't work reliably on dbus logs with very verbose logging
	 (-vvv)

     --config CONFIG
	 Set  the  path,  where  to  store  the  config. Make sure you have full
	 read/write access to the given directory. (Default: $XDG_DATA_HOME/sig-
	 nal-cli ($HOME/.local/share/signal-cli))

     -a ACCOUNT, --account ACCOUNT
	 Specify your phone number, that will be your identifier. The phone num-
	 ber must include the country calling code, i.e. the number  must  start
	 with a "+" sign.

     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  ex-
     actly 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.

     --dbus-system
	 Make request via system dbus.

     --bus-name
	 Connect to another D-Bus bus name than the default.

     -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"

     --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

	 *   always: Trust any new identity key without verification

	 *   never: Don't trust any unknown identity key, every key must be ver-
	     ified manually

     --disable-send-log
	 Disable  message  send  log  (for  resending  messages  that  recipient
	 couldn't decrypt).

COMMANDS
   register
     Register a phone number with SMS or voice verification. Use the verify com-
     mand to complete the verification.

     If the account is just deactivated, the register command will just  reacti-
     vate  account, without requiring an SMS verification. By default the unreg-
     ister command just deactivates the account, in which case it can be reacti-
     vated 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. Voice verification
	 only works if an SMS verification has been attempted before.

     --captcha CAPTCHA
	 The captcha token, required if registration failed with a  captcha  re-
	 quired error. To get the token, go to https://signalcaptchas.org/regis-
	 tration/generate.html For the staging environment, use: https://signal-
	 captchas.org/staging/registration/generate.html   After   solving   the
	 captcha, right-click on the "Open Signal" link and copy the link.

     --reregister
	 Register even if account is already registered.

   verify
     Verify the number using the code received via SMS or voice.

     VERIFICATIONCODE
	 The verification code.

     -p PIN, --pin PIN
	 The registration lock PIN, that was set by the user. Only required if a
	 PIN was set.

   unregister
     Disable push support for this device, i.e. this device  won't  receive  any
     more  messages.  If this is the primary device, other users can't send mes-
     sages to this number anymore. Use "updateAccount" to undo this. To remove a
     linked device, use "removeDevice" from the primary device.

     --delete-account
	 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!

   deleteLocalAccountData
     Delete  all local data for this account. Data should only be deleted if the
     account is unregistered.

	 Caution

	 This cannot be undone.

     --ignore-registered
	 Delete the account data even though the account is still registered  on
	 the Signal servers.

   updateAccount
     Update  the  account attributes on the signal server. Can fix problems with
     receiving messages.

     -n NAME, --device-name NAME
	 Set a new device name for the primary or linked device

     -u NAME --username NAME
	 Specify a username that can then be used to contact this account.  This
	 can  either  be  just the nickname (e.g. test) or the complete username
	 with discriminator (e.g. test.000). Returns the new username with  dis-
	 criminator and the username link.

     --delete-username
	 Delete the username associated with this account.

     --unrestricted-unidentified-sender {true,false}
	 Enable  if  anyone  should be able to send you unidentified sender mes-
	 sages.

     --discoverable-by-number {true,false}
	 Enable/disable if the account should be discoverable by phone number

     --number-sharing {true,false}
	 Indicates if Signal should share its phone number when sending  a  mes-
	 sage.

   startChangeNumber
     Change an account to a new phone number with SMS or voice verification. Use
     the finishChangeNumber command to complete the verification.

     RECIPIENT
	 The new phone number.

     -v, --voice
	 The verification should be done over voice, not SMS. Voice verification
	 only works if an SMS verification has been attempted before.

     --captcha
	 The  captcha  token, required if registration failed with a captcha re-
	 quired error. To get the token, go to https://signalcaptchas.org/regis-
	 tration/generate.html For the staging environment, use: https://signal-
	 captchas.org/staging/registration/generate.html   After   solving   the
	 captcha, right-click on the "Open Signal" link and copy the link.

   finishChangeNumber
     Verify the number using the code received via SMS or voice.

     RECIPIENT
	 The new phone number.

     -v, --verification-code
	 The verification code.

     -p PIN, --pin PIN
	 The registration lock PIN, that was set by the user. Only required if a
	 PIN was set.

   updateConfiguration
     Update  signal  configs  and sync them to linked devices. This command only
     works on the primary devices.

     --read-receipts {true,false}
	 Indicates if Signal should send read receipts.

     --unidentified-delivery-indicators {true,false}
	 Indicates if Signal should show unidentified delivery indicators.

     --typing-indicators {true,false}
	 Indicates if Signal should send/show typing indicators.

     --link-previews {true,false}
	 Indicates if Signal should generate link previews.

   setPin
     Set a registration lock pin, to prevent others from  registering  your  ac-
     count's phone number.

     REGISTRATION_LOCK_PIN
	 The  registration lock PIN, that will be required for new registrations
	 (resets after 7 days of inactivity)

   removePin
     Remove the registration lock pin.

   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  sig-
     nal-cli  instance, you can just use this URI. If you want to link to an An-
     droid/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. By default "cli"
	 will be used.

   addDevice
     Link  another device to this device. Only works, if this is the primary de-
     vice.

     --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=...&pub_key=..."
	 (formerly  "tsdevice:/?uuid=...")  Make sure to enclose it in quotation
	 marks for shells.

   listAccounts
     Show a list of registered accounts.

   listDevices
     Show a list of linked devices.

   removeDevice
     Remove a linked device. Only works, if this is the primary device.

     -d DEVICE_ID, --device-id DEVICE_ID
	 Specify the device you want to remove. Use listDevices to see the devi-
	 ceIds.

   getUserStatus
     Uses a list of phone numbers or usernames	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.

     [RECIPIENT [RECIPIENT ...]]
	 One or more numbers to check.

     [--username [USERNAME ...]]
	 One or more usernames or username links to check.

   sendAdminDelete
     Send admin delete message for a previously received or sent message.  Admin
     delete  is  used by group admins to remove messages from all group members.
     Only works with group recipients.

     -g GROUP, --group-id GROUP
	 Specify the recipient group ID in base64 encoding (required).

     --notify-self
	 If self is part of recipients/groups send a normal message, not a  sync
	 message.

     -a RECIPIENT, --target-author RECIPIENT
	 Specify the number of the author of the message to admin delete.

     -t TIMESTAMP, --target-timestamp TIMESTAMP
	 Specify the timestamp of the message to admin delete.

     --story
	 Admin delete a story instead of a normal message.

   send
     Send a message to another user or group.

     RECIPIENT
	 Specify the recipients.

     --note-to-self
	 Send the message to self.

     --notify-self
	 If  self is part of recipients/groups send a normal message, not a sync
	 message.

     -g GROUP, --group-id GROUP
	 Specify the recipient group ID in base64 encoding.

     -u USERNAME, --username USERNAME
	 Specify the recipient username or username link.

     -m MESSAGE, --message MESSAGE
	 Specify the message.

     --message-from-stdin
	 Read the message from standard input.

     -a [ATTACHMENT  [ATTACHMENT  ...]],  --attachment	[ATTACHMENT  [ATTACHMENT
     ...]]
	 Add  one  or  more  files as attachment. Can be either a file path or a
	 data URI. Data URI encoded attachments must follow the RFC 2397.  Addi-
	 tionally  a  file  name  can  be  added:  e.g.:  data:<MIME-TYPE>;file-
	 name=<FILENAME>;base64,<BASE64 ENCODED DATA>

     --view-once
	 Send the message as a view once message. A conformant client will  only
	 allow	the  receiver  to  view the message once. View Once is only sup-
	 ported for messages that include an image attachment.

     --sticker STICKER
	 Send a sticker of  a  locally	known  sticker	pack  (syntax:	sticker-
	 PackId: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 speci-
	 fied by the start and length values. The  units  of  start  and  length
	 should be UTF-16 code units, NOT Unicode code points. For more informa-
	 tion,	 see  https://github.com/AsamK/signal-cli/wiki/FAQ#string-index-
	 ing-units e.g.: -m "Hi X!" --mention "3:1:+123456789"

     --text-style
	 Style parts of the  message  text  (syntax:  start:length:STYLE).  Like
	 --mention,  the  units  are  UTF-16  code units. Where STYLE is one of:
	 BOLD, ITALIC, SPOILER, STRIKETHROUGH, MONOSPACE

     e.g.: -m "Something BIG!" --text-style "10:3:BOLD"  or  for  a  mixed  text
     style -m "Something BIG!" --text-style "0:9:ITALIC" "10:3:BOLD"

     --quote-timestamp
	 Specify the timestamp of a previous message with the recipient or group
	 to add a quote to the new message.

     --quote-author
	 Specify the author of the original message.

     --quote-message
	 Specify the message of the original message.

     --quote-mention
	 Specify  the  mentions  of  the original message (same format as --men-
	 tion).

     --quote-text-style
	 Style parts of the original message text (same format as --text-style).

     --quote-attachment
	 Specify the attachments  of  the  original  message  (syntax:	content-
	 Type[:filename[:previewFile]]),      e.g.	audio/aac     or     im-
	 age/png:test.png:/tmp/preview.jpg.

     --preview-url
	 Specify the url for the link preview. The same url must also appear  in
	 the message body, otherwise the preview won't be displayed by the apps.

     --preview-title
	 Specify the title for the link preview (mandatory).

     --preview-description
	 Specify the description for the link preview (optional).

     --preview-image
	 Specify the image file for the link preview (optional).

     --story-timestamp
	 Specify the timestamp of a story to reply to.

     --story-author
	 Specify the author of the story.

     -e, --end-session
	 Clear session state and send end session message.

     --edit-timestamp
	 Specify the timestamp of a previous message with the recipient or group
	 to send an edited message.

     --no-urgent
	 Send  the  message  without the urgent flag, so no push notification is
	 triggered for the recipient. The message will	still  be  delivered  in
	 real-time if the recipient's app is active.

   sendPollCreate
     Send a poll create message to another user or group.

     RECIPIENT
	 Specify the recipients.

     --note-to-self
	 Send the message to self.

     --notify-self
	 If  self is part of recipients/groups send a normal message, not a sync
	 message.

     -g GROUP, --group-id GROUP
	 Specify the recipient group ID in base64 encoding.

     -u USERNAME, --username USERNAME
	 Specify the recipient username or username link.

     -q QUESTION, --question QUESTION
	 Specify the poll question.

     --no-multi
	 Allow only one option to be selected by each recipient. By default, re-
	 cipients can select multiple options.

     -o OPTION [OPTION ...], --option OPTION [OPTION ...]*
	 The options for the poll. Between 2 and 10 options must be specified.

   sendPollVote
     Send a poll vote message to another user or group, to vote on a  previously
     created vote.

     RECIPIENT
	 Specify the recipients.

     --note-to-self
	 Send the message to self.

     --notify-self
	 If  self is part of recipients/groups send a normal message, not a sync
	 message.

     -g GROUP, --group-id GROUP
	 Specify the recipient group ID in base64 encoding.

     -u USERNAME, --username USERNAME
	 Specify the recipient username or username link.

     --poll-author POLL_AUTHOR
	 Specify the number or uuid of the author of the poll message.

     --poll-timestamp POLL_TIMESTAMP
	 Specify the timestamp of the original poll create message.

     -o [OPTION [OPTION ...]], --option [OPTION [OPTION ...]]
	 The option indexes of the poll to vote for. For none multi polls,  only
	 one option may be specified.

     *--vote-count: VOTE_COUNT
	 Specify  the  number  of  this vote (increase by one for every time you
	 vote).

   sendPollTerminate
     Send a poll terminate message to another user or group, to close on a  pre-
     viously created vote.

     RECIPIENT
	 Specify the recipients.

     --note-to-self
	 Send the message to self.

     --notify-self
	 If  self is part of recipients/groups send a normal message, not a sync
	 message.

     -g GROUP, --group-id GROUP
	 Specify the recipient group ID in base64 encoding.

     -u USERNAME, --username USERNAME
	 Specify the recipient username or username link.

     --poll-timestamp POLL_TIMESTAMP
	 Specify the timestamp of the original poll create message.

   sendMessageRequestResponse
     Send response to a message request to linked devices.

     RECIPIENT
	 Specify the recipients.

     -g GROUP, --group-id GROUP
	 Specify the recipient group ID in base64 encoding.

     -u USERNAME, --username USERNAME
	 Specify the recipient username or username link.

     --type TYPE
	 Type of message request response (accept, delete)

   sendPaymentNotification
     Send a payment notification.

     RECIPIENT
	 Specify the recipient.

     --receipt RECEIPT
	 The base64 encoded receipt blob.

     --note NOTE
	 Specify a note for the payment notification.

   sendPinMessage
     Send pin message for a previously received or sent message.

     RECIPIENT
	 Specify the recipients.

     -g GROUP, --group-id GROUP
	 Specify the recipient group ID in base64 encoding.

     -u USERNAME, --username USERNAME
	 Specify the recipient username or username link.

     --note-to-self
	 Send the pin message to self.

     --notify-self
	 If self is part of recipients/groups send a normal message, not a  sync
	 message.

     -d DURATION, --pin-duration DURATION
	 Specify the pin duration in seconds. Use -1 for forever (default: -1).

     -a RECIPIENT, --target-author RECIPIENT
	 Specify the number of the author of the message to pin.

     -t TIMESTAMP, --target-timestamp TIMESTAMP
	 Specify the timestamp of the message to pin.

   sendUnpinMessage
     Send unpin message for a previously received or sent message.

     RECIPIENT
	 Specify the recipients.

     -g GROUP, --group-id GROUP
	 Specify the recipient group ID in base64 encoding.

     -u USERNAME, --username USERNAME
	 Specify the recipient username or username link.

     --note-to-self
	 Send the unpin message to self.

     --notify-self
	 If  self is part of recipients/groups send a normal message, not a sync
	 message.

     -a RECIPIENT, --target-author RECIPIENT
	 Specify the number of the author of the message to unpin.

     -t TIMESTAMP, --target-timestamp TIMESTAMP
	 Specify the timestamp of the message to unpin.

   sendReaction
     Send reaction to a previously received or sent message.

     RECIPIENT
	 Specify the recipients.

     -g GROUP, --group-id GROUP
	 Specify the recipient group ID in base64 encoding.

     -u USERNAME, --username USERNAME
	 Specify the recipient username or username link.

     --note-to-self
	 Send the reaction to self.

     --notify-self
	 If self is part of recipients/groups send a normal message, not a  sync
	 message.

     -e EMOJI, --emoji EMOJI
	 Specify the emoji, should be a single unicode grapheme cluster.

     -a RECIPIENT, --target-author RECIPIENT
	 Specify the author of the message to which to react.

     -t TIMESTAMP, --target-timestamp TIMESTAMP
	 Specify the timestamp of the message to which to react.

     -r, --remove
	 Remove a reaction.

     --story
	 React to a story instead of a normal message

   sendReceipt
     Send a read or viewed receipt to a previously received message.

     RECIPIENT
	 Specify the sender.

     -u USERNAME, --username USERNAME
	 Specify the recipient username or username link.

     -t TIMESTAMP, --target-timestamp TIMESTAMP
	 Specify the timestamp of the message to which to react.

     --type TYPE
	 Specify the receipt type, either read (the default) or viewed.

   sendTyping
     Send  typing message to trigger a typing indicator for the recipient. Indi-
     cator will be shown for 15seconds unless a  typing  STOP  message	is  sent
     first.

     RECIPIENT
	 Specify the recipients.

     -g GROUP, --group-id GROUP
	 Specify the recipient group ID in base64 encoding.

     -s, --stop
	 Send a typing STOP message.

   remoteDelete
     Remotely delete a previously sent message.

     RECIPIENT
	 Specify the recipients.

     -g GROUP, --group-id GROUP
	 Specify the recipient group ID in base64 encoding.

     -u USERNAME, --username USERNAME
	 Specify the recipient username or username link.

     -t TIMESTAMP, --target-timestamp TIMESTAMP
	 Specify the timestamp of the message to delete.

   receive
     Query  the  server  for  new messages. 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.

     --max-messages MAX_MESSAGES
	 Maximum number of messages to receive, before returning.

     --ignore-attachments
	 Don't download attachments of received messages.

     --ignore-stories
	 Don't receive story messages from the server.

     --ignore-avatars
	 Don't download avatars of received messages.

     --ignore-stickers
	 Don't download sticker packs of received messages.

     --send-read-receipts
	 Send  read  receipts for all incoming data messages (in addition to the
	 default delivery receipts)

   joinGroup
     Join a group via an invitation link.

     --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.

     -g GROUP, --group-id GROUP
	 Specify  the recipient group ID in base64 encoding. If not specified, a
	 new group with a new random ID is generated.

     -n NAME, --name NAME
	 Specify the new group name.

     -d DESCRIPTION, --description DESCRIPTION
	 Specify the new group description.

     -a AVATAR, --avatar AVATAR
	 Specify a new group avatar image file.

     -m [MEMBER [MEMBER ...]], --member [MEMBER [MEMBER ...]]
	 Specify one or more members to add to the group.

     -r [MEMBER [MEMBER ...]], --remove-member [MEMBER [MEMBER ...]]
	 Specify one or more members to remove from the group

     --admin [MEMBER [MEMBER ...]]
	 Specify one or more members to make a group admin

     --remove-admin [MEMBER [MEMBER ...]]
	 Specify one or more members to remove group admin privileges

     --ban [MEMBER [MEMBER ...]]
	 Specify one or more members to ban from joining the group. Banned  mem-
	 bers cannot join or request to join via a group link.

     --unban [MEMBER [MEMBER ...]]
	 Specify one or more members to remove from the ban list

     --reset-link
	 Reset group link and create new link password

     --link LINK_STATE
	 Set group link state: enabled, enabled-with-approval, disabled

     --set-permission-add-member PERMISSION
	 Set permission to add new group members: every-member, only-admins

     --set-permission-edit-details PERMISSION
	 Set permission to edit group details: every-member, only-admins

     --set-permission-send-messages PERMISSION
	 Set  permission  to  send  messages in group: every-member, only-admins
	 Groups where only admins can send messages are also called announcement
	 groups

     -e EXPIRATION_SECONDS, --expiration EXPIRATION_SECONDS
	 Set expiration time of messages (seconds). To	disable  expiration  set
	 expiration time to 0.

     --member-label-emoji EMOJI
	 Specify the emoji for the member label.

     --member-label STRING
	 Specify the string for the member label.

   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-id GROUP
	 Specify the recipient group ID in base64 encoding.

     --delete
	 Delete local group data completely after quitting group.

   listGroups
     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 and the group invite link.

     -g, --group-id
	 Filter the group list by one or more group IDs.

   listContacts
     Show a list of known contacts with names and profiles. When a specific  re-
     cipient is given, its profile will be refreshed.

     RECIPIENT
	 Specify the recipients.

     -a, --all-recipients
	 Include all known recipients, not only contacts.

     --blocked
	 Specify if only blocked or unblocked contacts should be shown (default:
	 all contacts)

     --name
	 Find contacts with the given contact or profile name.

     --detailed
	 List  the  contacts with more details. If output=json, then this is al-
	 ways set.

     --internal
	 Include internal information that's normally not user visible.

   listIdentities
     List all known identity keys and their trust status, fingerprint and safety
     number.

     -n RECIPIENT, --number RECIPIENT
	 Only show identity keys for the given recipient.

   trust
     Set the trust level of a given recipient. The first time a key for a recip-
     ient is seen, it is trusted by default (TOFU). If the key changes, the  new
     key must be trusted manually.

     RECIPIENT
	 Specify the recipient, for which to set the trust.

     -a, --trust-all-known-keys
	 Trust all known keys of this user, only use this for testing.

     -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.

   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.

     --given-name NAME, --name NAME
	 New (given) name.

     --family-name FAMILY_NAME
	 New family name.

     --about ABOUT_TEXT
	 New profile status text.

     --about-emoji EMOJI
	 New profile status emoji.

     --avatar AVATAR_FILE
	 Path to the new avatar image file.

     --remove-avatar
	 Remove the avatar

     --mobile-coin-address, --mobilecoin-address
	 New MobileCoin address (Base64 encoded public address)

   updateContact
     Update  the info associated to a recipient on our contact list. This change
     is only local but can be synchronized to other devices  by  using	sendCon-
     tacts (see below). If the contact doesn't exist yet, it will be added.

     RECIPIENT
	 Specify  the  recipient. Use "u:" prefix to specify a username or user-
	 name link.

     --given-name GIVEN_NAME, --name NAME
	 New system given name.

     --family-name FAMILY_NAME
	 New system family name.

     --nick-given-name NICK_GIVEN_NAME
	 New nick given name.

     --nick-family-name NICK_FAMILY_NAME
	 New nick family name.

     --note NOTE
	 New note.

     -e, --expiration EXPIRATION_SECONDS
	 Set expiration time of messages (seconds). To	disable  expiration  set
	 expiration time to 0.

   updateDevice
     Update a linked device. Only works, if this is the primary device.

     -d DEVICE_ID, --device-id DEVICE_ID
	 Specify the device you want to update. Use listDevices to see the devi-
	 ceIds.

     -n NAME, --device-name NAME
	 Specify a name to describe the given device.

   removeContact
     Remove the info of a given contact

     RECIPIENT
	 Specify the recipient.

     --hide
	 Hide the contact in the contact list, but keep the data.

     --forget
	 Delete  all  data associated with this contact, including identity keys
	 and sessions.

   block
     Block the given contacts or groups (no messages  will  be	received).  This
     change  is  only  local  but  can be synchronized to other devices by using
     sendContacts (see below).

     [RECIPIENT [RECIPIENT ...]]
	 Specify the contacts that should be blocked.

     -g [GROUP [GROUP ...]], --group-id [GROUP [GROUP ...]]
	 Specify the group IDs that should be blocked in base64 encoding.

   unblock
     Unblock the given contacts or groups (messages  will  be  received  again).
     This change is only local but can be synchronized to other devices by using
     sendContacts (see below).

     [RECIPIENT [RECIPIENT ...]]
	 Specify the contacts that should be unblocked.

     -g [GROUP [GROUP ...]], --group-id [GROUP [GROUP ...]]
	 Specify the group IDs that should be unblocked in base64 encoding.

   sendContacts
     Send  a  synchronization message with the local contacts list to all linked
     devices. This command should only be used if this is the primary device.

   sendSyncRequest
     Send a synchronization request message to the primary  device  (for  group,
     contacts,	...).  The primary device will respond with synchronization mes-
     sages 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-Stick-
     ers#sticker_reqs )

     *	 Static stickers in PNG or WebP format

     *	 Animated stickers in APNG format,

     *	 Maximum file size for a sticker file is 300KiB

     *	 Image resolution of 512 x 512 px

     The required manifest.json has the following format:

	 {
	   "title": "<STICKER_PACK_TITLE>",
	   "author": "<STICKER_PACK_AUTHOR>",
	   "cover": { // Optional cover, by default the first sticker is used as cover
	     "file": "<name of image file, mandatory>",
	     "contentType": "<optional>",
	     "emoji": "<optional>"
	   },
	   "stickers": [
	     {
	       "file": "<name of image file, mandatory>",
	       "contentType": "<optional>",
	       "emoji": "<optional>"
	     }
	     ...
	   ]
	 }

     PATH
	 The path of the manifest.json or a zip file containing the sticker pack
	 you wish to upload.

   listStickerPacks
     Show a list of known sticker packs.

   addStickerPack
     Install a sticker pack for this account.

     --uri [URI]
	 Specify the uri of the sticker pack. e.g.  https://signal.art/addstick-
	 ers/#pack_id=XXX&pack_key=XXX

   getAttachment
     Gets the raw data for a specified attachment. This is done using the ID  of
     the  attachment  the recipient or group ID. The attachment data is returned
     as a Base64 String.

     --id [ID]
	 The ID of the attachment as given in the attachment list  of  the  mes-
	 sage.

     --recipient [RECIPIENT]
	 Specify  the recipient which sent the attachment. Referred to generally
	 as recipient.

     -g [GROUP], --group-id [GROUP]
	 Alternatively, specify the group IDs for which to get the attachment.

   getAvatar
     Gets the raw data for a  specified  contact,  contact's  profile  or  group
     avatar. The attachment data is returned as a Base64 String.

     --contact [RECIPIENT]
	 Specify the recipient.

     --profile [RECIPIENT]
	 Specify the recipient.

     -g [GROUP], --group-id [GROUP]
	 Alternatively, specify the group ID for which to get the avatar.

   getSticker
     Gets  the raw data for a specified sticker. The attachment data is returned
     as a Base64 String.

     --pack-id [PACK_ID]
	 Specify the id of a sticker pack (hex encoded).

     --sticker-id [STICKER_ID]
	 Specify the index of a sticker in the sticker pack.

   daemon
     signal-cli can run in daemon mode and provides JSON-RPC or an  experimental
     dbus  interface.  If  no  -a  account  is given, all local accounts will be
     loaded. Multiple interfaces can be used  at  the  same  time,  e.g.  daemon
     --socket --dbus

     --socket [SOCKET]
	 Export  a  JSON-RPC  interface  on  a	UNIX  socket  (default $XDG_RUN-
	 TIME_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.

     --http [HOST:PORT]
	 Expose a JSON-RPC interface as http endpoint (default	localhost:8080).
	 The JSON-RPC endpoint is /api/v1/rpc.

	 See signal-cli-jsonrpc(5) for info on the JSON-RPC interface.

     --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.

     --bus-name
	 Claim another D-Bus bus name than the default.

     --ignore-attachments
	 Don't download attachments of received messages.

     --ignore-stories
	 Don't receive story messages from the server.

     --ignore-avatars
	 Don't download avatars of received messages.

     --ignore-stickers
	 Don't download sticker packs of received messages.

     --send-read-receipts
	 Send  read  receipts for all incoming data messages (in addition to the
	 default delivery receipts)

     --no-receive-stdout
	 Don't print received messages to stdout.

     --receive-mode
	 Specify when to start receiving messages (on-start, on-connection, man-
	 ual)

   jsonRpc
     Run in signal-cli in JSON-RPC mode. Reads JSON-RPC requests  on  stdin  and
     responds  on stdout. See signal-cli-jsonrpc(5) for info on the JSON-RPC in-
     terface.

     --ignore-attachments
	 Don't download attachments of received messages.

     --ignore-stories
	 Don't receive story messages from the server.

     --ignore-avatars
	 Don't download avatars of received messages.

     --ignore-stickers
	 Don't download sticker packs of received messages.

     --send-read-receipts
	 Send read receipts for all incoming data messages (in addition  to  the
	 default delivery receipts)

     --receive-mode
	 Specify when to start receiving messages (on-start, manual)

   submitRateLimitChallenge
     When  running into rate limits, sometimes the limit can be lifted, by solv-
     ing  a  CAPTCHA.  To  get	the  captcha  token,   go   to	 https://signal-
     captchas.org/challenge/generate.html  For	the  staging  environment,  use:
     https://signalcaptchas.org/staging/registration/generate.html

     --challenge CHALLENGE_TOKEN
	 The challenge token from the failed send attempt.

     --captcha CAPTCHA
	 The captcha result, starting with signalcaptcha://

   version
     Show version information.

EXAMPLES
     Register a number (with SMS verification)
	 signal-cli -a ACCOUNT register

     Verify the number using the code received via SMS or voice
	 signal-cli -a ACCOUNT verify CODE

     Send a message to one or more recipients
	 signal-cli -a ACCOUNT send -m "This is a message" [RECIPIENT [RECIPIENT
	 ...]] [-a [ATTACHMENT [ATTACHMENT ...]]]

     Send a message to a username (or username link)
	 signal-cli -a ACCOUNT send u:someusername.000 -m "This is a message"

     Pipe the message content from another process
	 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
	 ...]]

     Add member to a group
	 signal-cli -a ACCOUNT updateGroup -g GROUP_ID -m "NEW_MEMBER"

     Accept a group invitation
	 signal-cli -a ACCOUNT updateGroup -g GROUP_ID

     Leave a group
	 signal-cli -a ACCOUNT quitGroup -g GROUP_ID

     Send a message to a group
	 signal-cli -a ACCOUNT send -m "This is a message" -g GROUP_ID

     Trust new key, after having verified it
	 signal-cli -a ACCOUNT trust -v SAFETY_NUMBER RECIPIENT

     Trust new key, without having verified it. Only use this if you don't  care
     about security
	 signal-cli -a ACCOUNT trust -a RECIPIENT

EXIT CODES
     *	 1: Error is probably caused and fixable by the user

     *	 2: Some unexpected error

     *	 3: Server or IO error

     *	 4: Sending failed due to untrusted key

     *	 5: Server rate limiting error

FILES
     The password and cryptographic keys are created when registering and stored
     in  the  current  users  home  directory, the directory can be changed with
     --config:

     $XDG_DATA_HOME/signal-cli/ ($HOME/.local/share/signal-cli/)

AUTHORS
     Maintained by AsamK <asamk@gmx.de>, who is assisted by  other  open  source
     contributors.  For  more  information  about  signal-cli  development,  see
     https://github.com/AsamK/signal-cli.

				   08/27/2026			   SIGNAL-CLI(1)

home | help