Where <type> is according to DBus specification:
-* <a> : Array of ... (comma-separated list)
+* <a> : Array of ... (comma-separated list) (array:)
* (...) : Struct (cannot be sent via `dbus-send`)
* <b> : Boolean (false|true) (boolean:)
* <i> : Signed 32-bit (int) integer (int32:)
Exceptions: None
-=== Device methods
-Requests for these methods are sent to a specific device (main or linked); the list is available
-from the listDevices() method (see below under "Other methods").
+=== Group control methods
+The following methods listen to the recipient's object path, which is constructed as follows:
+"/org/asamk/Signal/" + DBusNumber
+* DBusNumber : recipient's phone number, with underscore (_) replacing plus (+)
-removeDevice() -> <>::
+createGroup(groupName<s>, members<as>, avatar<s>) -> groupId<ay>::
+* groupName : String representing the display name of the group
+* members : String array of new members to be invited to group
+* avatar : Filename of avatar picture to be set for group (empty if none)
+* groupId : Byte array representing the internal group identifier
-Exceptions: Failure
+Exceptions: AttachmentInvalid, Failure, InvalidNumber;
-=== Other methods
+getGroup(groupId<ay>) -> objectPath<o>::
+* groupId : Byte array representing the internal group identifier
+* objectPath : DBusPath for the group
-updateGroup(groupId<ay>, newName<s>, members<as>, avatar<s>) -> groupId<ay>::
-* groupId : Byte array representing the internal group identifier
-* newName : New name of group (empty if unchanged)
-* members : String array of new members to be invited to group
-* avatar : Filename of avatar picture to be set for group (empty if none)
+getGroupMembers(groupId<ay>) -> members<as>::
+* groupId : Byte array representing the internal group identifier
+* members : String array with the phone numbers of all active members of a group
-Exceptions: AttachmentInvalid, Failure, InvalidNumber, GroupNotFound
+Exceptions: None, if the group name is not found an empty array is returned
-updateProfile(name<s>, about<s>, aboutEmoji <s>, avatar<s>, remove<b>) -> <>::
-updateProfile(givenName<s>, familyName<s>, about<s>, aboutEmoji <s>, avatar<s>, remove<b>) -> <>::
-* name : Name for your own profile (empty if unchanged)
-* givenName : Given name for your own profile (empty if unchanged)
-* familyName : Family name for your own profile (empty if unchanged)
-* about : About message for profile (empty if unchanged)
-* aboutEmoji : Emoji for profile (empty if unchanged)
-* avatar : Filename of avatar picture for profile (empty if unchanged)
-* remove : Set to true if the existing avatar picture should be removed
+joinGroup(inviteURI<s>) -> <>::
+* inviteURI : String starting with https://signal.group/#
+
+If the link requires admin approval, this adds you to the requesting members list. Otherwise, this adds you to the pending members list.
Exceptions: Failure
+listGroups() -> groups<a(oays)>::
+* groups : Array of Structs(objectPath, groupId, groupName)
+** objectPath : DBusPath
+** groupId : Byte array representing the internal group identifier
+** groupName : String representing the display name of the group
-setExpirationTimer(number<s>, expiration<i>) -> <>::
-* number : Phone number of recipient
-* expiration : int32 for the number of seconds before messages to this recipient disappear. Set to 0 to disable expiration.
+sendGroupMessage(message<s>, attachments<as>, groupId<ay>) -> timestamp<x>::
+* message : Text to send (can be UTF8)
+* attachments : String array of filenames to send as attachments (passed as filename, so need to be readable by the user signal-cli is running under)
+* groupId : Byte array representing the internal group identifier
+* timestamp : Long, can be used to identify the corresponding Signal reply
-Exceptions: Failure, InvalidNumber
+Exceptions: GroupNotFound, Failure, AttachmentInvalid, InvalidGroupId
-setContactBlocked(number<s>, block<b>) -> <>::
-* number : Phone number affected by method
-* block : false=remove block, true=blocked
+sendGroupMessageReaction(emoji<s>, remove<b>, targetAuthor<s>, targetSentTimestamp<x>, groupId<ay>) -> timestamp<x>::
+* emoji : Unicode grapheme cluster of the emoji
+* remove : Boolean, whether a previously sent reaction (emoji) should be removed
+* targetAuthor : String with the phone number of the author of the message to which to react
+* targetSentTimestamp : Long representing timestamp of the message to which to react
+* groupId : Byte array representing the internal group identifier
+* timestamp : Long, can be used to identify the corresponding signal reply
-Messages from blocked numbers will no longer be forwarded via DBus.
+Exceptions: Failure, InvalidNumber, GroupNotFound, InvalidGroupId
-Exceptions: InvalidNumber
+sendGroupRemoteDeleteMessage(targetSentTimestamp<x>, groupId<ay>) -> timestamp<x>::
+* targetSentTimestamp : Long representing timestamp of the message to delete
+* groupId : Byte array with base64 encoded group identifier
+* timestamp : Long, can be used to identify the corresponding signal reply
-setGroupBlocked(groupId<ay>, block<b>) -> <>::
-* groupId : Byte array representing the internal group identifier
-* block : false=remove block , true=blocked
+Exceptions: Failure, GroupNotFound, InvalidGroupId
-Messages from blocked groups will no longer be forwarded via DBus.
+=== Group methods
+The following methods listen to the group's object path, which can be obtained from the listGroups() method and is constructed as follows:
+"/org/asamk/Signal/" + DBusNumber + "/Groups/" + DBusGroupId
+* DBusNumber : recipient's phone number, with underscore (_) replacing plus (+)
+* DBusGroupId : groupId in base64 format, with underscore (_) replacing plus (+), equals (=), or slash (/)
+
+Groups have the following (case-sensitive) properties:
+* Id<ay> (read-only) : Byte array representing the internal group identifier
+* Name<s> : Display name of the group
+* Description<s> : Description of the group
+* Avatar<s> (write-only) : Filename of the avatar
+* IsBlocked<b> : true=member will not receive group messages; false=not blocked
+* IsMember<b> (read-only) : always true (object path exists only for group members)
+* IsAdmin<b> (read-only) : true=member has admin privileges; false=not admin
+* MessageExpirationTimer<i> : int32 representing message expiration time for group
+* Members<as> (read-only) : String array of group members' phone numbers
+* PendingMembers<as> (read-only) : String array of pending members' phone numbers
+* RequestingMembers<as> (read-only) : String array of requesting members' phone numbers
+* Admins<as> (read-only) : String array of admins' phone numbers
+* PermissionAddMember<s> : String representing who has permission to add members
+** ONLY_ADMINS, EVERY_MEMBER
+* PermissionEditDetails<s> : String representing who may edit group details
+** ONLY_ADMINS, EVERY_MEMBER
+* PermissionSendMessage<s> : String representing who post messages to group
+** ONLY_ADMINS, EVERY_MEMBER (note that ONLY_ADMINS is equivalent to IsAnnouncementGroup)
+* GroupInviteLink<s> (read-only) : String of the invitation link (starts with https://signal.group/#)
+
+To get a property, use (replacing `--session` with `--system` if needed):
+`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.Get string:org.asamk.Signal.Group string:$PROPERTY_NAME`
+
+To set a property, use:
+`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.Set string:org.asamk.Signal.Group string:$PROPERTY_NAME variant:$PROPERTY_TYPE:$PROPERTY_VALUE`
+
+To get all properties, use:
+`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.GetAll string:org.asamk.Signal.Group`
+
+addAdmins(recipients<as>) -> <>::
+* recipients : String array of phone numbers
-Exceptions: GroupNotFound, InvalidGroupId
+Grant admit privileges to recipients.
-joinGroup(inviteURI<s>) -> <>::
-* inviteURI : String starting with https://signal.group which is generated when you share a group link via Signal App
+Exceptions: Failure
+
+addMembers(recipients<as>) -> <>::
+* recipients : String array of phone numbers
+
+Add recipients to group if they are pending members; otherwise add recipients to list of requesting members.
Exceptions: Failure
-quitGroup(groupId<ay>) -> <>::
-* groupId : Byte array representing the internal group identifier
+disableLink() -> <>::
-Note that quitting a group will not remove the group from the getGroupIds command, but set it inactive which can be tested with isMember()
+Disables the group's invitation link.
-Exceptions: GroupNotFound, Failure, InvalidGroupId
+Exceptions: Failure
-isMember(groupId<ay>) -> isMember<b>::
-* groupId : Byte array representing the internal group identifier
-* isMember : true=you are a group member; false=you are not a group member
+enableLink(requiresApproval<b>) -> <>::
+* requiresApproval : true=add numbers using the link to the requesting members list
-Note that this method does not raise an Exception for a non-existing/unknown group but will simply return 0 (false)
+Enables the group's invitation link.
-sendEndSessionMessage(recipients<as>) -> <>::
-* recipients : Array of phone numbers
+Exceptions: Failure
-Exceptions: Failure, InvalidNumber, UntrustedIdentity
+quitGroup() -> <>::
+Exceptions: Failure, LastGroupAdmin
-sendGroupMessage(message<s>, attachments<as>, groupId<ay>) -> timestamp<x>::
-* message : Text to send (can be UTF8)
-* attachments : String array of filenames to send as attachments (passed as filename, so need to be readable by the user signal-cli is running under)
-* groupId : Byte array representing the internal group identifier
-* timestamp : Long, can be used to identify the corresponding Signal reply
+removeAdmins(recipients<as>) -> <>::
+* recipients : String array of phone numbers
-Exceptions: GroupNotFound, Failure, AttachmentInvalid, InvalidGroupId
+Remove admin privileges from recipients.
-sendContacts() -> <>::
+Exceptions: Failure
-Sends a synchronization message with the local contacts list to all linked devices. This command should only be used if this is the primary device.
+removeMembers(recipients<as>) -> <>::
+* recipients : String array of phone numbers
+
+Remove recipients from group.
Exceptions: Failure
-sendSyncRequest() -> <>::
+resetLink() -> <>::
-Sends a synchronization request to the primary device (for group, contacts, ...). Only works if sent from a secondary device.
+Resets the group's invitation link to a new random URL starting with https://signal.group/#
Exceptions: Failure
-sendNoteToSelfMessage(message<s>, attachments<as>) -> timestamp<x>::
-* message : Text to send (can be UTF8)
-* attachments : String array of filenames to send as attachments (passed as filename, so need to be readable by the user signal-cli is running under)
-* timestamp : Long, can be used to identify the corresponding Signal reply
+=== Deprecated group control methods
+The following deprecated methods listen to the recipient's object path, which is constructed as follows:
+"/org/asamk/Signal/" + DBusNumber
+* DBusNumber : recipient's phone number, with underscore (_) replacing plus (+)
-Exceptions: Failure, AttachmentInvalid
+getGroupIds() -> groupList<aay>::
+groupList : Array of Byte arrays representing the internal group identifiers
-sendMessage(message<s>, attachments<as>, recipient<s>) -> timestamp<x>::
-sendMessage(message<s>, attachments<as>, recipients<as>) -> timestamp<x>::
-* message : Text to send (can be UTF8)
-* attachments : String array of filenames to send as attachments (passed as filename, so need to be readable by the user signal-cli is running under)
-* recipient : Phone number of a single recipient
-* recipients : String array of phone numbers
-* timestamp : Long, can be used to identify the corresponding Signal reply
+All groups known are returned, regardless of their active or blocked status. To query that use isMember() and isGroupBlocked()
-Depending on the type of the recipient field this sends a message to one or multiple recipients.
+Exceptions: None
-Exceptions: AttachmentInvalid, Failure, InvalidNumber, UntrustedIdentity
+getGroupName(groupId<ay>) -> groupName<s>::
+* groupId : Byte array representing the internal group identifier
+* groupName : The display name of the group
-sendTyping(recipient<s>, stop<b>) -> <>::
-* recipient : Phone number of a single recipient
-* targetSentTimestamp : True, if typing state should be stopped
+Exceptions: None, if the group name is not found an empty string is returned
-Exceptions: Failure, GroupNotFound, UntrustedIdentity
+isGroupBlocked(groupId<ay>) -> isGroupBlocked<b>::
+* groupId : Byte array representing the internal group identifier
+* isGroupBlocked : true=group is blocked; false=group is not blocked
-sendReadReceipt(recipient<s>, targetSentTimestamps<ax>) -> <>::
-* recipient : Phone number of a single recipient
-* targetSentTimestamps : Array of Longs to identify the corresponding Signal messages
+Dbus will not forward messages from a group when you have blocked it.
-Exceptions: Failure, UntrustedIdentity
+Exceptions: InvalidGroupId, Failure
-sendGroupMessageReaction(emoji<s>, remove<b>, targetAuthor<s>, targetSentTimestamp<x>, groupId<ay>) -> timestamp<x>::
-* emoji : Unicode grapheme cluster of the emoji
-* remove : Boolean, whether a previously sent reaction (emoji) should be removed
-* targetAuthor : String with the phone number of the author of the message to which to react
-* targetSentTimestamp : Long representing timestamp of the message to which to react
-* groupId : Byte array representing the internal group identifier
-* timestamp : Long, can be used to identify the corresponding signal reply
+isMember(groupId<ay>) -> isMember<b>::
+* groupId : Byte array representing the internal group identifier
+* isMember : true=you are a group member; false=you are not a group member
-Exceptions: Failure, InvalidNumber, GroupNotFound, InvalidGroupId
+Note that this method does not raise an Exception for a non-existing/unknown group but will simply return 0 (false)
-sendMessageReaction(emoji<s>, remove<b>, targetAuthor<s>, targetSentTimestamp<x>, recipient<s>) -> timestamp<x>::
-sendMessageReaction(emoji<s>, remove<b>, targetAuthor<s>, targetSentTimestamp<x>, recipients<as>) -> timestamp<x>::
-* emoji : Unicode grapheme cluster of the emoji
-* remove : Boolean, whether a previously sent reaction (emoji) should be removed
-* targetAuthor : String with the phone number of the author of the message to which to react
-* targetSentTimestamp : Long representing timestamp of the message to which to react
-* recipient : String with the phone number of a single recipient
-* recipients : Array of strings with phone numbers, should there be more recipients
-* timestamp : Long, can be used to identify the corresponding Signal reply
+quitGroup(groupId<ay>) -> <>::
+* groupId : Byte array representing the internal group identifier
-Depending on the type of the recipient(s) field this sends a reaction to one or multiple recipients.
+Note that quitting a group will not remove the group from the getGroupIds command, but set it inactive which can be tested with isMember()
-Exceptions: Failure, InvalidNumber
+Exceptions: GroupNotFound, Failure, InvalidGroupId
-sendGroupRemoteDeleteMessage(targetSentTimestamp<x>, groupId<ay>) -> timestamp<x>::
-* targetSentTimestamp : Long representing timestamp of the message to delete
-* groupId : Byte array with base64 encoded group identifier
-* timestamp : Long, can be used to identify the corresponding signal reply
+setGroupBlocked(groupId<ay>, block<b>) -> <>::
+* groupId : Byte array representing the internal group identifier
+* block : false=remove block , true=blocked
-Exceptions: Failure, GroupNotFound, InvalidGroupId
+Messages from blocked groups will no longer be forwarded via DBus.
-sendRemoteDeleteMessage(targetSentTimestamp<x>, recipient<s>) -> timestamp<x>::
-sendRemoteDeleteMessage(targetSentTimestamp<x>, recipients<as>) -> timestamp<x>::
-* targetSentTimestamp : Long representing timestamp of the message to delete
-* recipient : String with the phone number of a single recipient
-* recipients : Array of strings with phone numbers, should there be more recipients
-* timestamp : Long, can be used to identify the corresponding signal reply
+Exceptions: GroupNotFound, InvalidGroupId
-Depending on the type of the recipient(s) field this deletes a message with one or multiple recipients.
+updateGroup(groupId<ay>, newName<s>, members<as>, avatar<s>) -> groupId<ay>::
+* groupId : Byte array representing the internal group identifier
+* newName : New name of group (empty if unchanged)
+* members : String array of new members to be invited to group
+* avatar : Filename of avatar picture to be set for group (empty if none)
-Exceptions: Failure, InvalidNumber
+Exceptions: AttachmentInvalid, Failure, InvalidNumber, GroupNotFound
-getContactName(number<s>) -> name<s>::
-* number : Phone number
-* name : Contact's name in local storage (from the master device for a linked account, or the one set with setContactName); if not set, contact's profile name is used
+=== Device control methods
+The following methods listen to the recipient's object path, which is constructed as follows:
+"/org/asamk/Signal/" + DBusNumber
+* DBusNumber : recipient's phone number, with underscore (_) replacing plus (+)
-Exceptions: None
+addDevice(deviceUri<s>) -> <>::
+* deviceUri : URI in the form of "sgnl://linkdevice/?uuid=..." (formerly "tsdevice:/?uuid=...") Normally displayed by a Signal desktop app, smartphone app, or another signal-cli instance using the `link` control method.
-setContactName(number<s>,name<>) -> <>::
-* number : Phone number
-* name : Name to be set in contacts (in local storage with signal-cli)
+getDevice(deviceId<x>) -> devicePath<o>::
+* deviceId : Long representing a deviceId
+* devicePath : DBusPath object for the device
-Exceptions: InvalidNumber, Failure
+Exceptions: DeviceNotFound
-getGroupIds() -> groupList<aay>::
-groupList : Array of Byte arrays representing the internal group identifiers
+listDevices() -> devices<a(oxs)>::
+* devices : Array of structs (objectPath, id, name)
+** objectPath : DBusPath representing the device's object path
+** id : Long representing the deviceId
+** name : String representing the device's name
-All groups known are returned, regardless of their active or blocked status. To query that use isMember() and isGroupBlocked()
+Exceptions: InvalidUri
-Exceptions: None
+sendContacts() -> <>::
-getGroupName(groupId<ay>) -> groupName<s>::
-* groupId : Byte array representing the internal group identifier
-* groupName : The display name of the group
+Sends a synchronization message with the local contacts list to all linked devices. This command should only be used if this is the primary device.
-Exceptions: None, if the group name is not found an empty string is returned
+Exceptions: Failure
-getGroupMembers(groupId<ay>) -> members<as>::
-* groupId : Byte array representing the internal group identifier
-* members : String array with the phone numbers of all active members of a group
+sendSyncRequest() -> <>::
-Exceptions: None, if the group name is not found an empty array is returned
+Sends a synchronization request to the primary device (for group, contacts, ...). Only works if sent from a secondary device.
-listNumbers() -> numbers<as>::
-* numbers : String array of all known numbers
+Exceptions: Failure
-This is a concatenated list of all defined contacts as well of profiles known (e.g. peer group members or sender of received messages)
+=== Device methods and properties
+The following methods listen to the device's object path, which is constructed as follows:
+"/org/asamk/Signal/" + DBusNumber + "/Devices/" + deviceId
+* DBusNumber : recipient's phone number, with underscore (_) replacing plus (+)
+* deviceId : Long representing the device identifier (obtained from listDevices() method)
+
+Devices have the following (case-sensitive) properties:
+* Id<x> (read-only) : Long representing the device identifier
+* Created<x> (read-only) : Long representing the number of milliseconds since the Unix epoch
+* LastSeen<x> (read-only) : Long representing the number of milliseconds since the Unix epoch
+* Name<s> : String representing the display name of the device
+
+To get a property, use (replacing `--session` with `--system` if needed):
+`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.Get string:org.asamk.Signal.Device string:$PROPERTY_NAME`
+
+To set a property, use:
+`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.Set string:org.asamk.Signal.Device string:$PROPERTY_NAME variant:$PROPERTY_TYPE:$PROPERTY_VALUE`
+
+To get all properties, use:
+`dbus-send --session --dest=org.asamk.Signal --print-reply $OBJECT_PATH org.freedesktop.DBus.Properties.GetAll string:org.asamk.Signal.Device`
+
+removeDevice() -> <>::
+
+Exceptions: Failure
+
+=== Other methods
+
+getContactName(number<s>) -> name<s>::
+* number : Phone number
+* name : Contact's name in local storage (from the master device for a linked account, or the one set with setContactName); if not set, contact's profile name is used
Exceptions: None
Exceptions: None
+getSelfNumber() -> number<s>::
+* number : Your phone number
+
+Exceptions: None
+
isContactBlocked(number<s>) -> blocked<b>::
* number : Phone number
* blocked : true=blocked, false=not blocked
Exceptions: InvalidPhoneNumber
-isGroupBlocked(groupId<ay>) -> isGroupBlocked<b>::
-* groupId : Byte array representing the internal group identifier
-* isGroupBlocked : true=group is blocked; false=group is not blocked
+isRegistered() -> result<b>::
+isRegistered(number<s>) -> result<b>::
+isRegistered(numbers<as>) -> results<ab>::
+* number : Phone number
+* numbers : String array of phone numbers
+* result : true=number is registered, false=number is not registered
+* results : Boolean array of results
-Dbus will not forward messages from a group when you have blocked it.
+For unknown numbers, false is returned, but no exception is raised. If no number is given, returns true (indicating that you are registered).
-Exceptions: InvalidGroupId, Failure
+Exceptions: InvalidNumber
+
+listNumbers() -> numbers<as>::
+* numbers : String array of all known numbers
+
+This is a concatenated list of all defined contacts as well of profiles known (e.g. peer group members or sender of received messages)
+
+Exceptions: None
removePin() -> <>::
Exceptions: Failure
-setPin(pin<s>) -> <>::
-* pin : PIN you set after registration (resets after 7 days of inactivity)
+sendEndSessionMessage(recipients<as>) -> <>::
+* recipients : Array of phone numbers
-Sets a registration lock PIN, to prevent others from registering your number.
+Exceptions: Failure, InvalidNumber, UntrustedIdentity
-Exceptions: Failure
+sendMessage(message<s>, attachments<as>, recipient<s>) -> timestamp<x>::
+sendMessage(message<s>, attachments<as>, recipients<as>) -> timestamp<x>::
+* message : Text to send (can be UTF8)
+* attachments : String array of filenames to send as attachments (passed as filename, so need to be readable by the user signal-cli is running under)
+* recipient : Phone number of a single recipient
+* recipients : String array of phone numbers
+* timestamp : Long, can be used to identify the corresponding Signal reply
-version() -> version<s>::
-* version : Version string of signal-cli
+Depending on the type of the recipient field this sends a message to one or multiple recipients.
-Exceptions: None
+Exceptions: AttachmentInvalid, Failure, InvalidNumber, UntrustedIdentity
-getSelfNumber() -> number<s>::
-* number : Your phone number
+sendMessageReaction(emoji<s>, remove<b>, targetAuthor<s>, targetSentTimestamp<x>, recipient<s>) -> timestamp<x>::
+sendMessageReaction(emoji<s>, remove<b>, targetAuthor<s>, targetSentTimestamp<x>, recipients<as>) -> timestamp<x>::
+* emoji : Unicode grapheme cluster of the emoji
+* remove : Boolean, whether a previously sent reaction (emoji) should be removed
+* targetAuthor : String with the phone number of the author of the message to which to react
+* targetSentTimestamp : Long representing timestamp of the message to which to react
+* recipient : String with the phone number of a single recipient
+* recipients : Array of strings with phone numbers, should there be more recipients
+* timestamp : Long, can be used to identify the corresponding Signal reply
-Exceptions: None
+Depending on the type of the recipient(s) field this sends a reaction to one or multiple recipients.
-isRegistered() -> result<b>::
-isRegistered(number<s>) -> result<b>::
-isRegistered(numbers<as>) -> results<ab>::
-* number : Phone number
-* numbers : String array of phone numbers
-* result : true=number is registered, false=number is not registered
-* results : Boolean array of results
+Exceptions: Failure, InvalidNumber
-For unknown numbers, false is returned, but no exception is raised. If no number is given, returns true (indicating that you are registered).
+sendNoteToSelfMessage(message<s>, attachments<as>) -> timestamp<x>::
+* message : Text to send (can be UTF8)
+* attachments : String array of filenames to send as attachments (passed as filename, so need to be readable by the user signal-cli is running under)
+* timestamp : Long, can be used to identify the corresponding Signal reply
+
+Exceptions: Failure, AttachmentInvalid
+
+sendReadReceipt(recipient<s>, targetSentTimestamps<ax>) -> <>::
+* recipient : Phone number of a single recipient
+* targetSentTimestamps : Array of Longs to identify the corresponding Signal messages
+
+Exceptions: Failure, UntrustedIdentity
+
+sendRemoteDeleteMessage(targetSentTimestamp<x>, recipient<s>) -> timestamp<x>::
+sendRemoteDeleteMessage(targetSentTimestamp<x>, recipients<as>) -> timestamp<x>::
+* targetSentTimestamp : Long representing timestamp of the message to delete
+* recipient : String with the phone number of a single recipient
+* recipients : Array of strings with phone numbers, should there be more recipients
+* timestamp : Long, can be used to identify the corresponding signal reply
+
+Depending on the type of the recipient(s) field this deletes a message with one or multiple recipients.
+
+Exceptions: Failure, InvalidNumber
+
+sendTyping(recipient<s>, stop<b>) -> <>::
+* recipient : Phone number of a single recipient
+* targetSentTimestamp : True, if typing state should be stopped
+
+Exceptions: Failure, GroupNotFound, UntrustedIdentity
+
+setContactBlocked(number<s>, block<b>) -> <>::
+* number : Phone number affected by method
+* block : false=remove block, true=blocked
+
+Messages from blocked numbers will no longer be forwarded via DBus.
Exceptions: InvalidNumber
-addDevice(deviceUri<s>) -> <>::
-* deviceUri : URI in the form of "sgnl://linkdevice/?uuid=..." (formerly "tsdevice:/?uuid=...") Normally displayed by a Signal desktop app, smartphone app, or another signal-cli instance using the `link` control method.
+setContactName(number<s>,name<>) -> <>::
+* number : Phone number
+* name : Name to be set in contacts (in local storage with signal-cli)
-listDevices() -> devices<a(oxs)>::
-* devices : Array of structs (objectPath, id, name)
-** objectPath : DBusPath representing the device's object path
-** id : Long representing the deviceId
-** name : String representing the device's name
+Exceptions: InvalidNumber, Failure
-Exceptions: InvalidUri
+setExpirationTimer(number<s>, expiration<i>) -> <>::
+* number : Phone number of recipient
+* expiration : int32 for the number of seconds before messages to this recipient disappear. Set to 0 to disable expiration.
-getDevice(deviceId<x>) -> devicePath<o>::
-* deviceId : Long representing a (potential) deviceId
-* devicePath : DBusPath object for the device
+Exceptions: Failure, InvalidNumber
-Exceptions: DeviceNotFound
+setPin(pin<s>) -> <>::
+* pin : PIN you set after registration (resets after 7 days of inactivity)
-uploadStickerPack(stickerPackPath<s>) -> url<s>::
-* stickerPackPath : Path to the manifest.json file or a zip file in the same directory
-* url : URL of sticker pack after successful upload
+Sets a registration lock PIN, to prevent others from registering your number.
Exceptions: Failure
Exception: IOErrorException
+updateProfile(name<s>, about<s>, aboutEmoji <s>, avatar<s>, remove<b>) -> <>::
+updateProfile(givenName<s>, familyName<s>, about<s>, aboutEmoji <s>, avatar<s>, remove<b>) -> <>::
+* name : Name for your own profile (empty if unchanged)
+* givenName : Given name for your own profile (empty if unchanged)
+* familyName : Family name for your own profile (empty if unchanged)
+* about : About message for profile (empty if unchanged)
+* aboutEmoji : Emoji for profile (empty if unchanged)
+* avatar : Filename of avatar picture for profile (empty if unchanged)
+* remove : Set to true if the existing avatar picture should be removed
+
+Exceptions: Failure
+
+uploadStickerPack(stickerPackPath<s>) -> url<s>::
+* stickerPackPath : Path to the manifest.json file or a zip file in the same directory
+* url : URL of sticker pack after successful upload
+
+Exceptions: Failure
+
+version() -> version<s>::
+* version : Version string of signal-cli
+
+Exceptions: None
+
== Signals
SyncMessageReceived (timestamp<x>, sender<s>, destination<s>, groupId<ay>, message<s>, attachments<as>)::
* timestamp : Integer value that can be used to associate this e.g. with a sendMessage()