signald-go/protocol.json

2970 lines
85 KiB
JSON
Raw Permalink Normal View History

{
"doc_version": "v1",
"version": {
"name": "signald",
2021-07-09 06:56:58 +00:00
"version": "0.13.1+git2021-07-09rabe585d6.42",
"branch": "main",
2021-07-09 06:56:58 +00:00
"commit": "abe585d68fdb00b440c1b0c517e1ece2bc095ba3"
},
"info": "This document describes objects that may be used when communicating with signald.",
"types": {
"v1": {
"JsonMessageEnvelope": {
"fields": {
"username": {
"type": "String",
"example": "\"+12024561414\""
},
"uuid": {
"type": "String",
"example": "\"0cc10e61-d64c-4dbc-b51c-334f7dd45a4a\""
},
"source": {
"type": "JsonAddress",
"version": "v1"
},
"sourceDevice": {
"type": "int"
},
"type": {
"type": "String"
},
"relay": {
"type": "String"
},
"timestamp": {
"type": "long",
2021-03-19 00:08:05 +00:00
"example": "1615576442475"
},
"timestampISO": {
"type": "String"
},
"serverTimestamp": {
"type": "long"
},
"serverDeliveredTimestamp": {
"type": "long",
2021-03-19 00:08:05 +00:00
"example": "161557644247580"
},
"hasLegacyMessage": {
"type": "boolean"
},
"hasContent": {
"type": "boolean"
},
"isUnidentifiedSender": {
"type": "boolean"
},
"dataMessage": {
"type": "JsonDataMessage",
"version": "v1"
},
"syncMessage": {
"type": "JsonSyncMessage",
"version": "v1"
},
"callMessage": {
"type": "JsonCallMessage",
"version": "v0"
},
"receipt": {
"type": "JsonReceiptMessage",
"version": "v0"
},
"typing": {
"type": "JsonTypingMessage",
"version": "v0"
}
}
},
2021-07-02 06:15:11 +00:00
"IncomingMessage": {
"fields": {
"account": {
"type": "String",
"example": "\"+12024561414\""
},
"source": {
"type": "JsonAddress",
"version": "v1"
},
"type": {
"type": "String"
},
"timestamp": {
"type": "long",
"example": "1615576442475"
},
"source_device": {
"type": "int"
},
"server_receiver_timestamp": {
"type": "long",
"example": "1615576442475"
},
"server_deliver_timestamp": {
"type": "long",
"example": "1615576442475"
},
"has_legacy_message": {
"type": "boolean"
},
"has_content": {
"type": "boolean"
},
"unidentified_sender": {
"type": "boolean"
},
"data_message": {
"type": "JsonDataMessage",
"version": "v1"
},
"sync_message": {
"type": "JsonSyncMessage",
"version": "v1"
},
"call_message": {
"type": "CallMessage",
"version": "v1"
},
"receipt_message": {
"type": "ReceiptMessage",
"version": "v1"
},
"typing_message": {
"type": "TypingMessage",
"version": "v1"
},
"server_guid": {
"type": "String"
}
}
},
"ListenerState": {
"fields": {
"connected": {
"type": "boolean"
}
},
"doc": "indicates when the incoming connection to the signal server has started or stopped"
},
"ClientMessageWrapper": {
"fields": {
"type": {
"type": "String",
"doc": "the type of object to expect in the `data` field"
},
"version": {
"type": "String",
"doc": "the version of the object in the `data` field"
},
"data": {
"type": "Object",
"doc": "the incoming object. The structure will vary from message to message, see `type` and `version` fields"
},
"error": {
"type": "Boolean",
"doc": "true if the incoming message represents an error"
}
},
"doc": "Wraps all incoming messages after a v1 subscribe request is issued"
},
"SendRequest": {
"fields": {
"username": {
"type": "String",
2021-01-30 00:45:29 +00:00
"example": "\"+12024561414\"",
"required": true
},
"recipientAddress": {
"type": "JsonAddress",
"version": "v1"
},
"recipientGroupId": {
"type": "String",
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""
},
"messageBody": {
"type": "String",
"example": "\"hello\""
},
"attachments": {
"list": true,
"type": "JsonAttachment",
"version": "v0"
},
"quote": {
"type": "JsonQuote",
"version": "v1"
},
"timestamp": {
"type": "Long"
},
"mentions": {
"list": true,
"type": "JsonMention",
"version": "v1"
}
}
},
"SendResponse": {
"fields": {
"results": {
"list": true,
"type": "JsonSendMessageResult",
"version": "v1"
},
"timestamp": {
"type": "long",
2021-03-19 00:08:05 +00:00
"example": "1615576442475"
}
}
},
"ReactRequest": {
"fields": {
"username": {
"type": "String",
2021-01-30 00:45:29 +00:00
"example": "\"+12024561414\"",
"required": true
},
"recipientAddress": {
"type": "JsonAddress",
"version": "v1"
},
"recipientGroupId": {
"type": "String",
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""
},
"reaction": {
"type": "JsonReaction",
2021-01-30 00:45:29 +00:00
"version": "v1",
"required": true
},
"timestamp": {
"type": "long"
}
},
"doc": "react to a previous message"
},
"VersionRequest": {
"fields": {}
},
"JsonVersionMessage": {
"fields": {
"name": {
"type": "String",
"example": "\"signald\""
},
"version": {
"type": "String",
2021-07-09 06:56:58 +00:00
"example": "\"0.13.1+git2021-07-09rabe585d6.42\""
},
"branch": {
"type": "String",
"example": "\"main\""
},
"commit": {
"type": "String",
2021-07-09 06:56:58 +00:00
"example": "\"abe585d68fdb00b440c1b0c517e1ece2bc095ba3\""
}
}
},
"AcceptInvitationRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to interact with",
2021-01-30 00:45:29 +00:00
"example": "\"+12024561414\"",
"required": true
},
"groupID": {
"type": "String",
2021-01-30 00:45:29 +00:00
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"",
"required": true
}
},
"doc": "Accept a v2 group invitation. Note that you must have a profile name set to join groups."
},
"JsonGroupV2Info": {
"fields": {
"id": {
"type": "String",
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""
},
"revision": {
"type": "int",
"example": "5"
},
"title": {
"type": "String",
"example": "\"Parkdale Run Club\""
},
2021-06-08 02:32:14 +00:00
"description": {
"type": "String"
},
2021-02-08 03:59:35 +00:00
"avatar": {
"type": "String",
"doc": "path to the group's avatar on local disk, if available",
"example": "\"/var/lib/signald/avatars/group-EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""
},
"timer": {
"type": "int",
"example": "604800"
},
"members": {
"list": true,
"type": "JsonAddress",
"version": "v1"
},
"pendingMembers": {
"list": true,
"type": "JsonAddress",
"version": "v1"
},
"requestingMembers": {
"list": true,
"type": "JsonAddress",
"version": "v1"
},
"inviteLink": {
2021-02-08 03:59:35 +00:00
"type": "String",
"doc": "the signal.group link, if applicable"
},
"accessControl": {
"type": "GroupAccessControl",
"version": "v1",
"doc": "current access control settings for this group"
},
"memberDetail": {
"list": true,
"type": "GroupMember",
"version": "v1",
"doc": "detailed member list"
},
"pendingMemberDetail": {
"list": true,
"type": "GroupMember",
"version": "v1",
"doc": "detailed pending member list"
}
2021-07-02 06:15:11 +00:00
},
"doc": "Information about a Signal group"
},
"ApproveMembershipRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to interact with",
2021-01-30 00:45:29 +00:00
"example": "\"+12024561414\"",
"required": true
},
"groupID": {
"type": "String",
2021-01-30 00:45:29 +00:00
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"",
"required": true
},
"members": {
"list": true,
"type": "JsonAddress",
"version": "v1",
2021-01-30 00:45:29 +00:00
"doc": "list of requesting members to approve",
"required": true
}
},
"doc": "approve a request to join a group"
},
"GetGroupRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to interact with",
2021-01-30 00:45:29 +00:00
"example": "\"+12024561414\"",
"required": true
},
"groupID": {
"type": "String",
2021-01-30 00:45:29 +00:00
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"",
"required": true
},
"revision": {
"type": "int",
"doc": "the latest known revision, default value (-1) forces fetch from server"
}
},
2021-07-02 06:15:11 +00:00
"doc": "Query the server for the latest state of a known group. If no account in signald is a member of the group (anymore), an error with error_type: 'UnknownGroupException' is returned."
},
"GetLinkedDevicesRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to interact with",
2021-01-30 00:45:29 +00:00
"example": "\"+12024561414\"",
"required": true
}
},
"doc": "list all linked devices on a Signal account"
},
"LinkedDevices": {
"fields": {
"devices": {
"list": true,
"type": "DeviceInfo",
2021-06-08 02:32:14 +00:00
"version": "v1"
}
}
},
"JoinGroupRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to interact with",
2021-01-30 00:45:29 +00:00
"example": "\"+12024561414\"",
"required": true
},
"uri": {
"type": "String",
"doc": "The signal.group URL",
2021-01-30 00:45:29 +00:00
"example": "\"https://signal.group/#CjQKINH_GZhXhfifTcnBkaKTNRxW-hHKnGSq-cJNyPVqHRp8EhDUB7zjKNEl0NaULhsqJCX3\"",
"required": true
}
},
"doc": "Join a group using the a signal.group URL. Note that you must have a profile name set to join groups."
},
"JsonGroupJoinInfo": {
"fields": {
"groupID": {
"type": "String",
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""
},
"title": {
"type": "String",
"example": "\"Parkdale Run Club\""
},
"memberCount": {
"type": "int",
"example": "3"
},
"addFromInviteLink": {
"type": "int"
},
"revision": {
"type": "int",
"example": "5"
},
"pendingAdminApproval": {
"type": "boolean"
}
}
},
"RemoveLinkedDeviceRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to interact with",
2021-01-30 00:45:29 +00:00
"example": "\"+12024561414\"",
"required": true
},
"deviceId": {
"type": "long",
"doc": "the ID of the device to unlink",
2021-01-30 00:45:29 +00:00
"example": "3",
"required": true
}
},
"doc": "Remove a linked device from the Signal account. Only allowed when the local device id is 1"
},
"UpdateGroupRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The identifier of the account to interact with",
2021-01-30 00:45:29 +00:00
"example": "\"+12024561414\"",
"required": true
},
"groupID": {
"type": "String",
2021-02-08 03:59:35 +00:00
"doc": "the ID of the group to update",
2021-01-30 00:45:29 +00:00
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"",
"required": true
},
"title": {
"type": "String",
"example": "\"Parkdale Run Club\""
},
"avatar": {
"type": "String",
"example": "\"/tmp/image.jpg\""
},
2021-02-08 03:59:35 +00:00
"updateTimer": {
"type": "int",
"doc": "update the group timer."
},
"addMembers": {
"list": true,
"type": "JsonAddress",
"version": "v1"
},
"removeMembers": {
"list": true,
"type": "JsonAddress",
"version": "v1"
2021-02-08 03:59:35 +00:00
},
"updateRole": {
"type": "GroupMember",
"version": "v1"
},
"updateAccessControl": {
"type": "GroupAccessControl",
"version": "v1",
"doc": "note that only one of the access controls may be updated per request"
},
"resetLink": {
"type": "boolean",
"doc": "regenerate the group link password, invalidating the old one"
}
},
2021-02-08 03:59:35 +00:00
"doc": "modify a group. Note that only one modification action may be preformed at once"
},
"GroupInfo": {
"fields": {
"v1": {
"type": "JsonGroupInfo",
"version": "v1"
},
"v2": {
"type": "JsonGroupV2Info",
"version": "v1"
}
},
"doc": "A generic type that is used when the group version is not known"
},
"SetProfile": {
"fields": {
"account": {
"type": "String",
"doc": "The phone number of the account to use",
2021-01-30 00:45:29 +00:00
"example": "\"+12024561414\"",
"required": true
},
"name": {
"type": "String",
"doc": "New profile name. Set to empty string for no profile name",
2021-01-30 00:45:29 +00:00
"example": "\"signald user\"",
"required": true
},
"avatarFile": {
"type": "String",
"doc": "Path to new profile avatar file, if the avatar should be updated",
"example": "\"/tmp/image.jpg\""
2021-03-19 00:08:05 +00:00
},
"about": {
"type": "String"
},
"emoji": {
"type": "String"
}
}
},
"ResolveAddressRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The signal account to use",
2021-01-30 00:45:29 +00:00
"example": "\"+12024561414\"",
"required": true
},
"partial": {
"type": "JsonAddress",
"version": "v1",
2021-01-30 00:45:29 +00:00
"doc": "The partial address, missing fields",
"required": true
}
},
"doc": "Resolve a partial JsonAddress with only a number or UUID to one with both. Anywhere that signald accepts a JsonAddress will except a partial, this is a convenience function for client authors, mostly because signald doesn't resolve all the partials it returns"
},
"JsonAddress": {
"fields": {
"number": {
"type": "String",
"doc": "An e164 phone number, starting with +. Currently the only available user-facing Signal identifier.",
"example": "\"+13215551234\""
},
"uuid": {
"type": "UUID",
"doc": "A UUID, the unique identifier for a particular Signal account."
},
"relay": {
"type": "String"
}
}
},
"MarkReadRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to interact with",
2021-01-30 00:45:29 +00:00
"example": "\"+12024561414\"",
"required": true
},
"to": {
"type": "JsonAddress",
"version": "v1",
2021-01-30 00:45:29 +00:00
"doc": "The address that sent the message being marked as read",
"required": true
},
"timestamps": {
"list": true,
"type": "Long",
"doc": "List of messages to mark as read",
2021-03-19 00:08:05 +00:00
"example": "1615576442475",
2021-01-30 00:45:29 +00:00
"required": true
2021-06-08 02:32:14 +00:00
},
"when": {
"type": "Long"
}
}
},
2021-01-30 00:45:29 +00:00
"GetProfileRequest": {
"fields": {
"account": {
"type": "String",
"doc": "the signald account to use",
"required": true
},
"async": {
"type": "boolean",
2021-07-02 06:15:11 +00:00
"doc": "if true, return results from local store immediately, refreshing from server in the background if needed. if false (default), block until profile can be retrieved from server"
},
2021-01-30 00:45:29 +00:00
"address": {
"type": "JsonAddress",
"version": "v1",
"doc": "the address to look up",
"required": true
}
},
"doc": "Get all information available about a user"
},
"Profile": {
"fields": {
"name": {
"type": "String",
"doc": "The user's name from local contact names if available, or if not in contact list their Signal profile name"
},
"avatar": {
2021-02-08 03:59:35 +00:00
"type": "String",
"doc": "path to avatar on local disk"
2021-01-30 00:45:29 +00:00
},
"address": {
"type": "JsonAddress",
"version": "v1"
},
"capabilities": {
"type": "Capabilities",
"version": "v1"
},
"color": {
2021-02-08 03:59:35 +00:00
"type": "String",
"doc": "color of the chat with this user"
2021-01-30 00:45:29 +00:00
},
2021-03-19 00:08:05 +00:00
"about": {
"type": "String"
},
"emoji": {
"type": "String"
},
2021-01-30 00:45:29 +00:00
"profile_name": {
"type": "String",
"doc": "The user's Signal profile name"
},
"inbox_position": {
"type": "Integer"
},
"expiration_time": {
"type": "int"
}
},
"doc": "Information about a Signal user"
},
"ListGroupsRequest": {
"fields": {
"account": {
"type": "String",
"required": true
}
}
},
"GroupList": {
"fields": {
"groups": {
"list": true,
"type": "JsonGroupV2Info",
"version": "v1"
},
"legacyGroups": {
"list": true,
"type": "JsonGroupInfo",
"version": "v1"
}
}
},
"ListContactsRequest": {
"fields": {
"account": {
"type": "String",
"required": true
},
"async": {
"type": "boolean",
2021-02-27 20:29:48 +00:00
"doc": "return results from local store immediately, refreshing from server afterward if needed. If false (default), block until all pending profiles have been retrieved."
}
}
},
"ProfileList": {
"fields": {
"profiles": {
"list": true,
"type": "Profile",
"version": "v1"
}
}
},
"CreateGroupRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to interact with",
"example": "\"+12024561414\"",
"required": true
},
"title": {
"type": "String",
"example": "\"Parkdale Run Club\"",
"required": true
},
"avatar": {
"type": "String",
"example": "\"/tmp/image.jpg\""
},
"members": {
"list": true,
"type": "JsonAddress",
2021-03-19 00:08:05 +00:00
"version": "v1",
"required": true
},
"timer": {
"type": "int",
"doc": "the message expiration timer"
},
"member_role": {
"type": "String",
"doc": "The role of all members other than the group creator. Options are ADMINISTRATOR or DEFAULT (case insensitive)",
"example": "\"ADMINISTRATOR\""
}
}
},
"LeaveGroupRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to use",
"example": "\"+12024561414\"",
"required": true
},
"groupID": {
"type": "String",
"doc": "The group to leave",
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"",
"required": true
}
}
},
"GenerateLinkingURIRequest": {
2021-07-09 06:56:58 +00:00
"fields": {
"server": {
"type": "String",
"doc": "The identifier of the server to use. Leave blank for default (usually Signal production servers but configurable at build time)"
}
},
"doc": "Generate a linking URI. Typically this is QR encoded and scanned by the primary device. Submit the returned session_id with a finish_link request."
},
2021-02-19 01:52:50 +00:00
"LinkingURI": {
"fields": {
"uri": {
"type": "String"
},
"session_id": {
"type": "String"
}
}
},
"FinishLinkRequest": {
"fields": {
"device_name": {
"type": "String"
},
"session_id": {
"type": "String"
}
2021-07-02 06:15:11 +00:00
},
"doc": "After a linking URI has been requested, finish_link must be called with the session_id provided with the URI. it will return information about the new account once the linking process is completed by the other device."
},
"Account": {
"fields": {
"address": {
"type": "JsonAddress",
"version": "v1",
"doc": "The address of this account"
},
"device_id": {
"type": "int",
"doc": "The Signal device ID. Official Signal mobile clients (iPhone and Android) have device ID = 1, while linked devices such as Signal Desktop or Signal iPad have higher device IDs."
},
"account_id": {
"type": "String",
"doc": "The primary identifier on the account, included with all requests to signald for this account. Previously called 'username'"
}
},
"doc": "A local account in signald"
},
2021-03-19 00:08:05 +00:00
"AddLinkedDeviceRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to interact with",
"example": "\"+12024561414\"",
"required": true
},
"uri": {
"type": "String",
"doc": "the tsdevice:/ uri provided (typically in qr code form) by the new device",
"example": "\"tsdevice:/?uuid=jAaZ5lxLfh7zVw5WELd6-Q&pub_key=BfFbjSwmAgpVJBXUdfmSgf61eX3a%2Bq9AoxAVpl1HUap9\"",
"required": true
}
},
"doc": "Link a new device to a local Signal account"
},
"RegisterRequest": {
"fields": {
"account": {
"type": "String",
"doc": "the e164 phone number to register with",
"example": "\"+12024561414\"",
"required": true
},
"voice": {
"type": "boolean",
"doc": "set to true to request a voice call instead of an SMS for verification"
},
"captcha": {
"type": "String",
2021-06-08 02:32:14 +00:00
"doc": "See https://signald.org/articles/captcha/"
2021-07-09 06:56:58 +00:00
},
"server": {
"type": "String",
"doc": "The identifier of the server to use. Leave blank for default (usually Signal production servers but configurable at build time)"
2021-03-19 00:08:05 +00:00
}
},
"doc": "begin the account registration process by requesting a phone number verification code. when the code is received, submit it with a verify request"
},
"VerifyRequest": {
"fields": {
"account": {
"type": "String",
"doc": "the e164 phone number being verified",
"example": "\"+12024561414\"",
"required": true
},
"code": {
"type": "String",
"doc": "the verification code, dash (-) optional",
"example": "\"555555\"",
"required": true
}
},
"doc": "verify an account's phone number with a code after registering, completing the account creation process"
},
"GetIdentitiesRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to interact with",
"example": "\"+12024561414\"",
"required": true
},
"address": {
"type": "JsonAddress",
"version": "v1",
"doc": "address to get keys for",
"required": true
}
},
"doc": "Get information about a known keys for a particular address"
},
"IdentityKeyList": {
"fields": {
"address": {
"type": "JsonAddress",
"version": "v1"
},
"identities": {
"list": true,
"type": "IdentityKey",
"version": "v1"
}
},
"doc": "a list of identity keys associated with a particular address"
},
"TrustRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to interact with",
"example": "\"+12024561414\"",
"required": true
},
"address": {
"type": "JsonAddress",
"version": "v1",
"doc": "The user to query identity keys for",
"required": true
},
"safety_number": {
"type": "String",
2021-07-02 06:15:11 +00:00
"doc": "required if qr_code_data is absent",
"example": "\"373453558586758076680580548714989751943247272727416091564451\""
2021-03-19 00:08:05 +00:00
},
"qr_code_data": {
"type": "String",
"doc": "base64-encoded QR code data. required if safety_number is absent"
},
"trust_level": {
"type": "String",
2021-03-23 10:44:46 +00:00
"doc": "One of TRUSTED_UNVERIFIED, TRUSTED_VERIFIED or UNTRUSTED. Default is TRUSTED_VERIFIED",
"example": "\"TRUSTED_VERIFIED\""
2021-03-19 00:08:05 +00:00
}
},
"doc": "Trust another user's safety number using either the QR code data or the safety number text"
},
"DeleteAccountRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to delete",
"example": "\"+12024561414\"",
"required": true
2021-06-08 02:32:14 +00:00
},
"server": {
"type": "boolean",
"doc": "delete account information from the server as well (default false)"
2021-03-19 00:08:05 +00:00
}
},
"doc": "delete all account data signald has on disk, and optionally delete the account from the server as well. Note that this is not \"unlink\" and will delete the entire account, even from a linked device."
},
2021-03-23 10:44:46 +00:00
"TypingRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to use",
"example": "\"+12024561414\"",
"required": true
},
"address": {
"type": "JsonAddress",
"version": "v1"
},
"group": {
"type": "String",
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""
},
"typing": {
"type": "boolean",
"example": "true",
"required": true
},
"when": {
"type": "long"
}
},
"doc": "send a typing started or stopped message"
},
"ResetSessionRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to use",
"example": "\"+12024561414\"",
"required": true
},
"address": {
"type": "JsonAddress",
"version": "v1",
"doc": "the user to reset session with",
"required": true
},
"timestamp": {
"type": "Long"
}
},
"doc": "reset a session with a particular user"
},
"RequestSyncRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to use",
"example": "\"+12024561414\"",
"required": true
},
"groups": {
"type": "boolean",
"doc": "request group sync (default true)"
},
"configuration": {
"type": "boolean",
"doc": "request configuration sync (default true)"
},
"contacts": {
"type": "boolean",
"doc": "request contact sync (default true)"
},
"blocked": {
"type": "boolean",
"doc": "request block list sync (default true)"
}
},
"doc": "Request other devices on the account send us their group list, syncable config and contact list."
},
"ListAccountsRequest": {
"fields": {},
"doc": "return all local accounts"
},
"AccountList": {
"fields": {
"accounts": {
"list": true,
"type": "Account",
"version": "v1"
}
}
},
2021-06-08 02:32:14 +00:00
"GroupLinkInfoRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to use",
"example": "\"+12024561414\"",
"required": true
},
"uri": {
"type": "String",
"doc": "the signald.group link",
"example": "\"https://signal.group/#CjQKINH_GZhXhfifTcnBkaKTNRxW-hHKnGSq-cJNyPVqHRp8EhDUB7zjKNEl0NaULhsqJCX3\"",
"required": true
}
},
"doc": "Get information about a group from a signal.group link"
},
"UpdateContactRequest": {
"fields": {
"account": {
"type": "String",
"required": true
},
"address": {
"type": "JsonAddress",
"version": "v1",
"required": true
},
"name": {
"type": "String"
},
"color": {
"type": "String"
},
"inbox_position": {
"type": "Integer"
}
},
"doc": "update information about a local contact"
},
"SetExpirationRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to use",
"example": "\"+12024561414\"",
"required": true
},
"address": {
"type": "JsonAddress",
"version": "v1"
},
"group": {
"type": "String",
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""
},
"expiration": {
"type": "int",
"example": "604800",
"required": true
}
},
"doc": "Set the message expiration timer for a thread. Expiration must be specified in seconds, set to 0 to disable timer"
},
"SetDeviceNameRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to set the device name of",
"example": "\"+12024561414\"",
"required": true
},
"device_name": {
"type": "String",
"doc": "The device name"
}
},
"doc": "set this device's name. This will show up on the mobile device on the same account under "
},
2021-06-12 23:13:00 +00:00
"GetAllIdentities": {
"fields": {
"account": {
"type": "String",
"doc": "The account to interact with",
"example": "\"+12024561414\"",
"required": true
}
},
"doc": "get all known identity keys"
},
"AllIdentityKeyList": {
"fields": {
"identity_keys": {
"list": true,
"type": "IdentityKeyList",
"version": "v1"
}
}
},
2021-07-02 06:15:11 +00:00
"SubscribeRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to subscribe to incoming message for",
"example": "\"+12024561414\"",
"required": true
}
},
"doc": "receive incoming messages. After making a subscribe request, incoming messages will be sent to the client encoded as ClientMessageWrapper. Send an unsubscribe request or disconnect from the socket to stop receiving messages."
},
"UnsubscribeRequest": {
"fields": {
"account": {
"type": "String",
"doc": "The account to unsubscribe from",
"example": "\"+12024561414\"",
"required": true
}
},
"doc": "See subscribe for more info"
},
"RemoteDeleteRequest": {
"fields": {
"account": {
"type": "String",
"doc": "the account to use",
"example": "\"+12024561414\"",
"required": true
},
"address": {
"type": "JsonAddress",
"version": "v1",
"doc": "the address to send the delete message to. should match address the message to be deleted was sent to. required if group is not set."
},
"group": {
"type": "String",
"doc": "the group to send the delete message to. should match group the message to be deleted was sent to. required if address is not set.",
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""
},
"timestamp": {
"type": "long",
"required": true
}
},
"doc": "delete a message previously sent"
},
2021-07-09 06:56:58 +00:00
"AddServerRequest": {
"fields": {
"server": {
"type": "Server",
"version": "v1",
"required": true
}
},
"doc": "add a new server to connect to. Returns the new server's UUID."
},
"GetServersRequest": {
"fields": {}
},
"ServerList": {
"fields": {
"servers": {
"list": true,
"type": "Server",
"version": "v1"
}
}
},
"RemoveServerRequest": {
"fields": {
"uuid": {
"type": "String"
}
}
},
"JsonDataMessage": {
"fields": {
"timestamp": {
"type": "long",
"doc": "the timestamp that the message was sent at, according to the sender's device. This is used to uniquely identify this message for things like reactions and quotes.",
2021-03-19 00:08:05 +00:00
"example": "1615576442475"
},
"attachments": {
"list": true,
"type": "JsonAttachment",
"version": "v0",
"doc": "files attached to the incoming message"
},
"body": {
"type": "String",
"doc": "the text body of the incoming message.",
"example": "\"hello\""
},
"group": {
"type": "JsonGroupInfo",
"version": "v1",
"doc": "if the incoming message was sent to a v1 group, information about that group will be here"
},
"groupV2": {
"type": "JsonGroupV2Info",
"version": "v1",
2021-07-02 06:15:11 +00:00
"doc": "if the incoming message was sent to a v2 group, basic identifying information about that group will be here. If group information changes, JsonGroupV2Info.revision is incremented. If the group revision is higher than previously seen, a client can retrieve the group information by calling get_group."
},
"endSession": {
"type": "boolean"
},
"expiresInSeconds": {
"type": "int",
"doc": "the expiry timer on the incoming message. Clients should delete records of the message within this number of seconds"
},
"profileKeyUpdate": {
"type": "boolean"
},
"quote": {
"type": "JsonQuote",
"version": "v1",
"doc": "if the incoming message is a quote or reply to another message, this will contain information about that message"
},
"contacts": {
"list": true,
"type": "SharedContact",
"version": "v0",
"doc": "if the incoming message has a shared contact, the contact's information will be here"
},
"previews": {
"list": true,
"type": "JsonPreview",
"version": "v0",
"doc": "if the incoming message has a link preview, information about that preview will be here"
},
"sticker": {
"type": "JsonSticker",
"version": "v0",
"doc": "if the incoming message is a sticker, information about the sicker will be here"
},
"viewOnce": {
"type": "boolean",
"doc": "indicates the message is a view once message. View once messages typically include no body and a single image attachment. Official Signal clients will prevent the user from saving the image, and once the user has viewed the image once they will destroy the image."
},
"reaction": {
"type": "JsonReaction",
"version": "v1",
"doc": "if the message adds or removes a reaction to another message, this will indicate what change is being made"
},
"remoteDelete": {
"type": "RemoteDelete",
2021-07-02 06:15:11 +00:00
"version": "v1",
"doc": "if the inbound message is deleting a previously sent message, indicates which message should be deleted"
},
"mentions": {
"list": true,
"type": "JsonMention",
"version": "v1",
"doc": "list of mentions in the message"
2021-07-02 06:15:11 +00:00
},
"payment": {
"type": "Payment",
"version": "v1",
"doc": "details about the MobileCoin payment attached to the message, if present"
},
"group_call_update": {
"type": "String",
"doc": "the eraId string from a group call message update"
}
}
},
"JsonSyncMessage": {
"fields": {
"sent": {
"type": "JsonSentTranscriptMessage",
"version": "v1"
},
"contacts": {
"type": "JsonAttachment",
"version": "v0"
},
"contactsComplete": {
"type": "boolean"
},
"groups": {
"type": "JsonAttachment",
"version": "v0"
},
"blockedList": {
"type": "JsonBlockedListMessage",
"version": "v1"
},
"request": {
"type": "String"
},
"readMessages": {
"list": true,
"type": "JsonReadMessage",
"version": "v1"
},
"viewOnceOpen": {
"type": "JsonViewOnceOpenMessage",
"version": "v1"
},
"verified": {
"type": "JsonVerifiedMessage",
"version": "v1"
},
"configuration": {
"type": "ConfigurationMessage",
"version": "v0"
},
"stickerPackOperations": {
"list": true,
"type": "JsonStickerPackOperationMessage",
"version": "v0"
},
"fetchType": {
"type": "String"
},
"messageRequestResponse": {
"type": "JsonMessageRequestResponseMessage",
"version": "v1"
}
}
},
2021-07-02 06:15:11 +00:00
"CallMessage": {
"fields": {
"offer_message": {
"type": "OfferMessage",
"version": "v1"
},
"answer_message": {
"type": "AnswerMessage",
"version": "v1"
},
"busy_message": {
"type": "BusyMessage",
"version": "v1"
},
"hangup_message": {
"type": "HangupMessage",
"version": "v1"
},
"ice_update_message": {
"list": true,
"type": "IceUpdateMessage",
"version": "v1"
},
"destination_device_id": {
"type": "Integer"
},
"multi_ring": {
"type": "boolean"
}
}
},
"ReceiptMessage": {
"fields": {
"type": {
"type": "String",
"doc": "options: UNKNOWN, DELIVERY, READ, VIEWED"
},
"timestamps": {
"list": true,
"type": "Long"
},
"when": {
"type": "long"
}
}
},
"TypingMessage": {
"fields": {
"action": {
"type": "String"
},
"timestamp": {
"type": "long"
},
"group_id": {
"type": "String"
}
}
},
"JsonQuote": {
"fields": {
"id": {
"type": "long",
"doc": "the client timestamp of the message being quoted",
2021-03-19 00:08:05 +00:00
"example": "1615576442475"
},
"author": {
"type": "JsonAddress",
"version": "v1",
"doc": "the author of the message being quoted"
},
"text": {
"type": "String",
"doc": "the body of the message being quoted",
"example": "\"hey what's up?\""
},
"attachments": {
"list": true,
"type": "JsonQuotedAttachment",
"version": "v0",
"doc": "list of files attached to the quoted message"
},
"mentions": {
"list": true,
"type": "JsonMention",
"version": "v1",
"doc": "list of mentions in the quoted message"
}
},
"doc": "A quote is a reply to a previous message. ID is the sent time of the message being replied to"
},
"JsonMention": {
"fields": {
"uuid": {
"type": "String",
"doc": "The UUID of the account being mentioned",
"example": "\"aeed01f0-a234-478e-8cf7-261c283151e7\""
},
"start": {
"type": "int",
"doc": "The number of characters in that the mention starts at. Note that due to a quirk of how signald encodes JSON, if this value is 0 (for example if the first character in the message is the mention) the field won't show up.",
"example": "4"
},
"length": {
"type": "int",
"doc": "The length of the mention represented in the message. Seems to always be 1 but included here in case that changes.",
"example": "1"
}
}
},
"JsonSendMessageResult": {
"fields": {
"address": {
"type": "JsonAddress",
"version": "v1"
},
"success": {
"type": "Success",
"version": "v0"
},
"networkFailure": {
"type": "boolean",
"example": "false"
},
"unregisteredFailure": {
"type": "boolean",
"example": "false"
},
"identityFailure": {
"type": "String"
}
}
},
"JsonReaction": {
"fields": {
"emoji": {
"type": "String",
"doc": "the emoji to react with",
"example": "\"👍\""
},
"remove": {
"type": "boolean",
"doc": "set to true to remove the reaction. requires emoji be set to previously reacted emoji"
},
"targetAuthor": {
"type": "JsonAddress",
"version": "v1",
"doc": "the author of the message being reacted to"
},
"targetSentTimestamp": {
"type": "long",
"doc": "the client timestamp of the message being reacted to",
2021-03-19 00:08:05 +00:00
"example": "1615576442475"
}
}
},
2021-02-08 03:59:35 +00:00
"GroupAccessControl": {
"fields": {
"link": {
"type": "String",
"doc": "UNSATISFIABLE when the group link is disabled, ADMINISTRATOR when the group link is enabled but an administrator must approve new members, ANY when the group link is enabled and no approval is required",
"example": "\"ANY\""
},
"attributes": {
"type": "String",
"doc": "who can edit group info"
},
"members": {
"type": "String",
"doc": "who can add members"
}
},
"doc": "group access control settings. Options for each controlled action are: UNKNOWN, ANY, MEMBER, ADMINISTRATOR, UNSATISFIABLE and UNRECOGNIZED"
},
"GroupMember": {
"fields": {
"uuid": {
"type": "String",
"example": "\"aeed01f0-a234-478e-8cf7-261c283151e7\""
},
"role": {
"type": "String",
"doc": "possible values are: UNKNOWN, DEFAULT, ADMINISTRATOR and UNRECOGNIZED",
"example": "\"DEFAULT\""
},
"joined_revision": {
"type": "int"
}
}
},
2021-06-08 02:32:14 +00:00
"DeviceInfo": {
"fields": {
"id": {
"type": "long"
},
"name": {
"type": "String"
},
"created": {
"type": "long"
},
"lastSeen": {
"type": "long"
}
}
},
2021-02-27 20:29:48 +00:00
"JsonGroupInfo": {
"fields": {
"groupId": {
"type": "String"
},
"members": {
"list": true,
"type": "JsonAddress",
"version": "v1"
},
"name": {
"type": "String"
},
"type": {
"type": "String"
},
"avatarId": {
"type": "long"
}
2021-07-02 06:15:11 +00:00
},
"doc": "information about a legacy group"
2021-02-27 20:29:48 +00:00
},
2021-01-30 00:45:29 +00:00
"Capabilities": {
"fields": {
"gv2": {
"type": "boolean"
},
"storage": {
"type": "boolean"
},
"gv1-migration": {
"type": "boolean"
}
}
},
2021-03-19 00:08:05 +00:00
"IdentityKey": {
"fields": {
"added": {
"type": "long",
"doc": "the first time this identity key was seen"
},
"safety_number": {
2021-07-02 06:15:11 +00:00
"type": "String",
"example": "\"373453558586758076680580548714989751943247272727416091564451\""
2021-03-19 00:08:05 +00:00
},
"qr_code_data": {
"type": "String",
"doc": "base64-encoded QR code data"
},
"trust_level": {
"type": "String",
"doc": "One of TRUSTED_UNVERIFIED, TRUSTED_VERIFIED or UNTRUSTED"
}
}
},
2021-07-09 06:56:58 +00:00
"Server": {
"fields": {
"uuid": {
"type": "UUID",
"doc": "A unique identifier for the server, referenced when adding accounts. Must be a valid UUID. Will be generated if not specified when creating."
},
"proxy": {
"type": "String"
},
"ca": {
"type": "String"
},
"service_url": {
"type": "String"
},
"cdn_urls": {
"list": true,
"type": "ServerCDN",
"version": "v1"
},
"contact_discovery_url": {
"type": "String"
},
"key_backup_url": {
"type": "String"
},
"storage_url": {
"type": "String"
},
"zk_param": {
"type": "String",
"doc": "base64 encoded ZKGROUP_SERVER_PUBLIC_PARAMS value"
},
"unidentified_sender_root": {
"type": "String"
}
},
"doc": "a Signal server"
},
2021-07-02 06:15:11 +00:00
"RemoteDelete": {
"fields": {
"target_sent_timestamp": {
"type": "long"
}
}
},
"Payment": {
"fields": {
"receipt": {
"type": "String",
"doc": "base64 encoded payment receipt data. This is a protobuf value which can be decoded as the Receipt object described in https://github.com/mobilecoinfoundation/mobilecoin/blob/master/api/proto/external.proto"
},
"note": {
"type": "String",
"doc": "note attached to the payment"
}
},
"doc": "details about a MobileCoin payment"
},
"JsonSentTranscriptMessage": {
"fields": {
"destination": {
"type": "JsonAddress",
"version": "v1"
},
"timestamp": {
"type": "long",
2021-03-19 00:08:05 +00:00
"example": "1615576442475"
},
"expirationStartTimestamp": {
"type": "long"
},
"message": {
"type": "JsonDataMessage",
"version": "v1"
},
"unidentifiedStatus": {
"type": "Map"
},
"isRecipientUpdate": {
"type": "boolean"
}
}
},
"JsonBlockedListMessage": {
"fields": {
"addresses": {
"list": true,
"type": "JsonAddress",
"version": "v1"
},
"groupIds": {
"list": true,
"type": "String"
}
}
},
"JsonReadMessage": {
"fields": {
"sender": {
"type": "JsonAddress",
"version": "v1"
},
"timestamp": {
"type": "long",
2021-03-19 00:08:05 +00:00
"example": "1615576442475"
}
}
},
"JsonViewOnceOpenMessage": {
"fields": {
"sender": {
"type": "JsonAddress",
"version": "v1"
},
"timestamp": {
"type": "long",
2021-03-19 00:08:05 +00:00
"example": "1615576442475"
}
}
},
"JsonVerifiedMessage": {
"fields": {
"destination": {
"type": "JsonAddress",
"version": "v1"
},
"identityKey": {
"type": "String"
},
"verified": {
"type": "String"
},
"timestamp": {
"type": "long"
}
}
},
"JsonMessageRequestResponseMessage": {
"fields": {
"person": {
"type": "JsonAddress",
"version": "v1"
},
"groupId": {
"type": "String"
},
"type": {
"type": "String"
}
}
},
2021-07-02 06:15:11 +00:00
"OfferMessage": {
"fields": {
2021-07-02 06:15:11 +00:00
"id": {
"type": "long"
},
2021-07-02 06:15:11 +00:00
"sdp": {
"type": "String"
},
2021-07-02 06:15:11 +00:00
"type": {
"type": "String"
},
2021-07-02 06:15:11 +00:00
"opaque": {
"type": "String"
}
}
},
2021-07-02 06:15:11 +00:00
"AnswerMessage": {
"fields": {
2021-07-02 06:15:11 +00:00
"id": {
"type": "long"
},
2021-07-02 06:15:11 +00:00
"sdp": {
"type": "String"
},
2021-07-02 06:15:11 +00:00
"opaque": {
"type": "String"
}
}
},
2021-07-02 06:15:11 +00:00
"BusyMessage": {
"fields": {
2021-07-02 06:15:11 +00:00
"id": {
"type": "long"
}
}
},
2021-07-02 06:15:11 +00:00
"HangupMessage": {
"fields": {
2021-07-02 06:15:11 +00:00
"id": {
"type": "long"
},
2021-07-02 06:15:11 +00:00
"type": {
"type": "String"
},
2021-07-02 06:15:11 +00:00
"legacy": {
"type": "boolean"
},
2021-07-02 06:15:11 +00:00
"device_id": {
"type": "int"
}
}
},
"IceUpdateMessage": {
"fields": {
"id": {
"type": "long"
},
"opaque": {
"type": "String"
},
"sdp": {
"type": "String"
}
}
2021-07-09 06:56:58 +00:00
},
"ServerCDN": {
"fields": {}
2021-07-02 06:15:11 +00:00
}
},
"v0": {
"JsonAccountList": {
"fields": {
"accounts": {
"list": true,
"type": "JsonAccount",
"version": "v0"
}
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonMessageEnvelope": {
"fields": {
"username": {
"type": "String",
"example": "\"+12024561414\""
},
"uuid": {
"type": "String",
"example": "\"0cc10e61-d64c-4dbc-b51c-334f7dd45a4a\""
},
"source": {
"type": "JsonAddress",
"version": "v0"
},
"sourceDevice": {
"type": "int"
},
"type": {
"type": "String"
},
"relay": {
"type": "String"
},
"timestamp": {
"type": "long",
"example": "1615576442475"
},
"timestampISO": {
"type": "String"
},
"serverTimestamp": {
"type": "long"
},
"serverDeliveredTimestamp": {
"type": "long",
"example": "161557644247580"
},
"hasLegacyMessage": {
"type": "boolean"
},
"hasContent": {
"type": "boolean"
},
"isUnidentifiedSender": {
"type": "boolean"
},
"dataMessage": {
"type": "JsonDataMessage",
"version": "v0"
},
"syncMessage": {
"type": "JsonSyncMessage",
"version": "v0"
},
"callMessage": {
"type": "JsonCallMessage",
"version": "v0"
},
"receipt": {
"type": "JsonReceiptMessage",
"version": "v0"
},
"typing": {
"type": "JsonTypingMessage",
"version": "v0"
}
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonCallMessage": {
"fields": {
"offerMessage": {
"type": "OfferMessage",
"version": "v0"
},
"answerMessage": {
"type": "AnswerMessage",
"version": "v0"
},
"busyMessage": {
"type": "BusyMessage",
"version": "v0"
},
"hangupMessage": {
"type": "HangupMessage",
"version": "v0"
},
"iceUpdateMessages": {
"list": true,
"type": "IceUpdateMessage",
"version": "v0"
},
"destinationDeviceId": {
"type": "int"
},
"isMultiRing": {
"type": "boolean"
}
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonReceiptMessage": {
"fields": {
"type": {
"type": "String"
},
"timestamps": {
"list": true,
"type": "Long"
},
"when": {
"type": "long"
}
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonTypingMessage": {
"fields": {
"action": {
"type": "String"
},
"timestamp": {
"type": "long"
},
"groupId": {
"type": "String"
}
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonAccount": {
"fields": {
"deviceId": {
"type": "int"
},
"username": {
"type": "String"
},
"filename": {
"type": "String"
},
"uuid": {
"type": "String"
},
"registered": {
"type": "boolean"
},
"has_keys": {
"type": "boolean"
},
"subscribed": {
"type": "boolean"
}
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonAddress": {
"fields": {
"number": {
"type": "String"
},
"uuid": {
"type": "UUID"
},
"relay": {
"type": "String"
}
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonDataMessage": {
"fields": {
"timestamp": {
"type": "long",
"doc": "the timestamp that the message was sent at, according to the sender's device. This is used to uniquely identify this message for things like reactions and quotes.",
"example": "1615576442475"
},
"attachments": {
"list": true,
"type": "JsonAttachment",
"version": "v0",
"doc": "files attached to the incoming message"
},
"body": {
"type": "String",
"doc": "the text body of the incoming message.",
"example": "\"hello\""
},
"group": {
"type": "JsonGroupInfo",
"version": "v0",
"doc": "if the incoming message was sent to a v1 group, information about that group will be here"
},
"groupV2": {
"type": "JsonGroupV2Info",
"version": "v0",
"doc": "is the incoming message was sent to a v2 group, basic identifying information about that group will be here. For full information, use list_groups"
},
"endSession": {
"type": "boolean"
},
"expiresInSeconds": {
"type": "int",
"doc": "the expiry timer on the incoming message. Clients should delete records of the message within this number of seconds"
},
"profileKeyUpdate": {
"type": "boolean"
},
"quote": {
"type": "JsonQuote",
"version": "v0",
"doc": "if the incoming message is a quote or reply to another message, this will contain information about that message"
},
"contacts": {
"list": true,
"type": "SharedContact",
"version": "v0",
"doc": "if the incoming message has a shared contact, the contact's information will be here"
},
"previews": {
"list": true,
"type": "JsonPreview",
"version": "v0",
"doc": "if the incoming message has a link preview, information about that preview will be here"
},
"sticker": {
"type": "JsonSticker",
"version": "v0",
"doc": "if the incoming message is a sticker, information about the sicker will be here"
},
"viewOnce": {
"type": "boolean",
"doc": "indicates the message is a view once message. View once messages typically include no body and a single image attachment. Official Signal clients will prevent the user from saving the image, and once the user has viewed the image once they will destroy the image."
},
"reaction": {
"type": "JsonReaction",
"version": "v0",
"doc": "if the message adds or removes a reaction to another message, this will indicate what change is being made"
},
"remoteDelete": {
"type": "RemoteDelete",
"version": "v0",
"doc": "if the inbound message is deleting a previously sent message, indicates which message should be deleted"
},
"mentions": {
"list": true,
"type": "JsonMention",
"version": "v0",
"doc": "list of mentions in the message"
}
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonSyncMessage": {
"fields": {
"sent": {
"type": "JsonSentTranscriptMessage",
"version": "v0"
},
"contacts": {
"type": "JsonAttachment",
"version": "v0"
},
"contactsComplete": {
"type": "boolean"
},
"groups": {
"type": "JsonAttachment",
"version": "v0"
},
"blockedList": {
"type": "JsonBlockedListMessage",
"version": "v0"
},
"request": {
"type": "String"
},
2021-07-02 06:15:11 +00:00
"readMessages": {
"list": true,
"type": "JsonReadMessage",
"version": "v0"
},
2021-07-02 06:15:11 +00:00
"viewOnceOpen": {
"type": "JsonViewOnceOpenMessage",
"version": "v0"
},
2021-07-02 06:15:11 +00:00
"verified": {
"type": "JsonVerifiedMessage",
"version": "v0"
},
"configuration": {
"type": "ConfigurationMessage",
"version": "v0"
},
"stickerPackOperations": {
"list": true,
"type": "JsonStickerPackOperationMessage",
"version": "v0"
},
"fetchType": {
"type": "String"
},
"messageRequestResponse": {
"type": "JsonMessageRequestResponseMessage",
"version": "v0"
}
2021-07-02 06:15:11 +00:00
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonAttachment": {
"fields": {
"contentType": {
"type": "String"
},
"id": {
"type": "String"
},
"size": {
"type": "int"
},
"storedFilename": {
"type": "String"
},
"filename": {
"type": "String"
},
"customFilename": {
"type": "String"
},
"caption": {
"type": "String"
},
"width": {
"type": "int"
},
"height": {
"type": "int"
},
"voiceNote": {
"type": "boolean"
},
"key": {
"type": "String"
},
"digest": {
"type": "String"
},
"blurhash": {
"type": "String"
}
2021-07-02 06:15:11 +00:00
},
"deprecated": true,
"removal_date": 1641027661
},
"SharedContact": {
"fields": {
"name": {
"type": "Name",
"version": "v0"
},
"avatar": {
"type": "Optional",
"version": "v0"
},
"phone": {
"type": "Optional",
"version": "v0"
},
"email": {
"type": "Optional",
"version": "v0"
},
"address": {
"type": "Optional",
"version": "v0"
},
2021-07-02 06:15:11 +00:00
"organization": {
"type": "Optional",
"version": "v0"
}
}
},
"JsonPreview": {
"fields": {
"url": {
"type": "String"
},
"title": {
"type": "String"
},
"attachment": {
"type": "JsonAttachment",
"version": "v0"
}
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonSticker": {
"fields": {
"packID": {
"type": "String"
},
"packKey": {
"type": "String"
},
"stickerID": {
"type": "int"
},
"attachment": {
"type": "JsonAttachment",
"version": "v0"
2021-07-09 06:56:58 +00:00
},
"image": {
"type": "String"
2021-07-02 06:15:11 +00:00
}
},
"deprecated": true,
"removal_date": 1641027661
},
"ConfigurationMessage": {
"fields": {
"readReceipts": {
"type": "Optional",
"version": "v0"
},
"unidentifiedDeliveryIndicators": {
"type": "Optional",
"version": "v0"
},
"typingIndicators": {
"type": "Optional",
"version": "v0"
},
"linkPreviews": {
"type": "Optional",
"version": "v0"
}
}
},
"JsonStickerPackOperationMessage": {
"fields": {
"packID": {
"type": "String"
},
"packKey": {
"type": "String"
},
"type": {
"type": "String"
}
},
"deprecated": true,
"removal_date": 1641027661
},
"OfferMessage": {
"fields": {
"id": {
"type": "long"
},
"sdp": {
"type": "String"
},
"type": {
"type": "Type",
"version": "v0"
},
"opaque": {
"type": "String"
}
}
},
"AnswerMessage": {
"fields": {
"id": {
"type": "long"
},
"sdp": {
"type": "String"
},
"opaque": {
"type": "String"
}
}
},
"BusyMessage": {
"fields": {
"id": {
"type": "long"
}
}
},
"HangupMessage": {
"fields": {
"id": {
"type": "long"
},
"type": {
"type": "Type",
"version": "v0"
},
"deviceId": {
"type": "int"
},
"legacy": {
"type": "boolean"
}
}
},
"IceUpdateMessage": {
"fields": {
"id": {
"type": "long"
},
"opaque": {
"type": "String"
},
"sdp": {
"type": "String"
}
}
},
"JsonGroupInfo": {
"fields": {
"groupId": {
"type": "String"
},
"members": {
"list": true,
"type": "JsonAddress",
"version": "v0"
},
"name": {
"type": "String"
},
"type": {
"type": "String"
},
"avatarId": {
"type": "long"
}
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonGroupV2Info": {
"fields": {
"id": {
"type": "String",
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""
},
"revision": {
"type": "int",
"example": "5"
},
"title": {
"type": "String",
"example": "\"Parkdale Run Club\""
},
"description": {
"type": "String"
},
"avatar": {
"type": "String",
"doc": "path to the group's avatar on local disk, if available",
"example": "\"/var/lib/signald/avatars/group-EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""
},
"timer": {
"type": "int",
"example": "604800"
},
"members": {
"list": true,
"type": "JsonAddress",
"version": "v0"
},
"pendingMembers": {
"list": true,
"type": "JsonAddress",
"version": "v0"
},
"requestingMembers": {
"list": true,
"type": "JsonAddress",
"version": "v0"
},
"inviteLink": {
"type": "String",
"doc": "the signal.group link, if applicable"
},
"accessControl": {
"type": "GroupAccessControl",
"version": "v0",
"doc": "current access control settings for this group"
},
"memberDetail": {
"list": true,
"type": "GroupMember",
"version": "v0",
"doc": "detailed member list"
},
"pendingMemberDetail": {
"list": true,
"type": "GroupMember",
"version": "v0",
"doc": "detailed pending member list"
}
2021-07-02 06:15:11 +00:00
},
"deprecated": true,
"removal_date": 1641027661
},
2021-07-02 06:15:11 +00:00
"JsonQuote": {
"fields": {
2021-07-02 06:15:11 +00:00
"id": {
"type": "long",
"doc": "the client timestamp of the message being quoted",
"example": "1615576442475"
},
2021-07-02 06:15:11 +00:00
"author": {
"type": "JsonAddress",
"version": "v0",
"doc": "the author of the message being quoted"
},
2021-07-02 06:15:11 +00:00
"text": {
"type": "String",
"doc": "the body of the message being quoted",
"example": "\"hey what's up?\""
},
"attachments": {
"list": true,
"type": "JsonQuotedAttachment",
"version": "v0",
"doc": "list of files attached to the quoted message"
},
"mentions": {
"list": true,
"type": "JsonMention",
"version": "v0",
"doc": "list of mentions in the quoted message"
}
2021-07-02 06:15:11 +00:00
},
"doc": "A quote is a reply to a previous message. ID is the sent time of the message being replied to",
"deprecated": true,
"removal_date": 1641027661
},
2021-07-02 06:15:11 +00:00
"JsonReaction": {
"fields": {
2021-07-02 06:15:11 +00:00
"emoji": {
"type": "String",
"doc": "the emoji to react with",
"example": "\"👍\""
},
2021-07-02 06:15:11 +00:00
"remove": {
"type": "boolean",
"doc": "set to true to remove the reaction. requires emoji be set to previously reacted emoji"
},
2021-07-02 06:15:11 +00:00
"targetAuthor": {
"type": "JsonAddress",
"version": "v0",
"doc": "the author of the message being reacted to"
},
2021-07-02 06:15:11 +00:00
"targetSentTimestamp": {
"type": "long",
"doc": "the client timestamp of the message being reacted to",
"example": "1615576442475"
}
2021-07-02 06:15:11 +00:00
},
"deprecated": true,
"removal_date": 1641027661
},
"RemoteDelete": {
"fields": {
"targetSentTimestamp": {
"type": "long"
}
}
},
2021-07-02 06:15:11 +00:00
"JsonMention": {
"fields": {
2021-07-02 06:15:11 +00:00
"uuid": {
"type": "String",
"doc": "The UUID of the account being mentioned",
"example": "\"aeed01f0-a234-478e-8cf7-261c283151e7\""
},
2021-07-02 06:15:11 +00:00
"start": {
"type": "int",
"doc": "The number of characters in that the mention starts at. Note that due to a quirk of how signald encodes JSON, if this value is 0 (for example if the first character in the message is the mention) the field won't show up.",
"example": "4"
},
2021-07-02 06:15:11 +00:00
"length": {
"type": "int",
"doc": "The length of the mention represented in the message. Seems to always be 1 but included here in case that changes.",
"example": "1"
}
2021-07-02 06:15:11 +00:00
},
"deprecated": true,
"removal_date": 1641027661
},
2021-07-02 06:15:11 +00:00
"JsonSentTranscriptMessage": {
"fields": {
2021-07-02 06:15:11 +00:00
"destination": {
"type": "JsonAddress",
"version": "v0"
},
2021-07-02 06:15:11 +00:00
"timestamp": {
"type": "long",
"example": "1615576442475"
},
2021-07-02 06:15:11 +00:00
"expirationStartTimestamp": {
"type": "long"
},
2021-07-02 06:15:11 +00:00
"message": {
"type": "JsonDataMessage",
"version": "v0"
},
2021-07-02 06:15:11 +00:00
"unidentifiedStatus": {
"type": "Map"
},
"isRecipientUpdate": {
"type": "boolean"
}
2021-07-02 06:15:11 +00:00
},
"deprecated": true,
"removal_date": 1641027661
},
2021-07-02 06:15:11 +00:00
"JsonBlockedListMessage": {
"fields": {
2021-07-02 06:15:11 +00:00
"addresses": {
"list": true,
"type": "JsonAddress",
"version": "v0"
},
2021-07-02 06:15:11 +00:00
"groupIds": {
"list": true,
"type": "String"
}
2021-07-02 06:15:11 +00:00
},
"deprecated": true,
"removal_date": 1641027661
},
2021-07-02 06:15:11 +00:00
"JsonReadMessage": {
"fields": {
2021-07-02 06:15:11 +00:00
"sender": {
"type": "JsonAddress",
"version": "v0"
},
"timestamp": {
"type": "long",
"example": "1615576442475"
}
2021-07-02 06:15:11 +00:00
},
"deprecated": true,
"removal_date": 1641027661
},
2021-07-02 06:15:11 +00:00
"JsonViewOnceOpenMessage": {
"fields": {
2021-07-02 06:15:11 +00:00
"sender": {
"type": "JsonAddress",
"version": "v0"
},
2021-07-02 06:15:11 +00:00
"timestamp": {
"type": "long",
"example": "1615576442475"
}
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonVerifiedMessage": {
"fields": {
"destination": {
"type": "JsonAddress",
"version": "v0"
},
2021-07-02 06:15:11 +00:00
"identityKey": {
"type": "String"
},
2021-07-02 06:15:11 +00:00
"verified": {
"type": "String"
},
"timestamp": {
"type": "long"
}
2021-07-02 06:15:11 +00:00
},
"deprecated": true,
"removal_date": 1641027661
},
2021-07-02 06:15:11 +00:00
"JsonMessageRequestResponseMessage": {
"fields": {
2021-07-02 06:15:11 +00:00
"person": {
"type": "JsonAddress",
"version": "v0"
},
2021-07-02 06:15:11 +00:00
"groupId": {
"type": "String"
},
2021-07-02 06:15:11 +00:00
"type": {
"type": "String"
}
2021-07-02 06:15:11 +00:00
},
"deprecated": true,
"removal_date": 1641027661
},
"JsonQuotedAttachment": {
"fields": {
"contentType": {
"type": "String"
},
"fileName": {
"type": "String"
},
"thumbnail": {
"type": "JsonAttachment",
"version": "v0"
}
2021-07-02 06:15:11 +00:00
},
"deprecated": true,
"removal_date": 1641027661
},
"Success": {
"fields": {
"unidentified": {
"type": "boolean"
},
"needsSync": {
"type": "boolean"
},
"duration": {
"type": "long"
}
}
},
"Name": {
"fields": {
"display": {
"type": "Optional",
"version": "v0"
},
"given": {
"type": "Optional",
"version": "v0"
},
"family": {
"type": "Optional",
"version": "v0"
},
"prefix": {
"type": "Optional",
"version": "v0"
},
"suffix": {
"type": "Optional",
"version": "v0"
},
"middle": {
"type": "Optional",
"version": "v0"
}
}
},
"Optional": {
"fields": {
"present": {
"type": "boolean"
}
}
},
"Type": {
"fields": {}
2021-07-02 06:15:11 +00:00
},
"GroupAccessControl": {
"fields": {
"link": {
"type": "String",
"doc": "UNSATISFIABLE when the group link is disabled, ADMINISTRATOR when the group link is enabled but an administrator must approve new members, ANY when the group link is enabled and no approval is required",
"example": "\"ANY\""
},
"attributes": {
"type": "String",
"doc": "who can edit group info"
},
"members": {
"type": "String",
"doc": "who can add members"
}
},
"doc": "group access control settings. Options for each controlled action are: UNKNOWN, ANY, MEMBER, ADMINISTRATOR, UNSATISFIABLE and UNRECOGNIZED",
"deprecated": true,
"removal_date": 1641027661
},
"GroupMember": {
"fields": {
"uuid": {
"type": "String",
"example": "\"aeed01f0-a234-478e-8cf7-261c283151e7\""
},
"role": {
"type": "String",
"doc": "possible values are: UNKNOWN, DEFAULT, ADMINISTRATOR and UNRECOGNIZED",
"example": "\"DEFAULT\""
},
"joined_revision": {
"type": "int"
}
},
"deprecated": true,
"removal_date": 1641027661
}
}
},
"actions": {
"v1": {
"send": {
"request": "SendRequest",
"response": "SendResponse"
},
"react": {
"request": "ReactRequest",
"response": "SendResponse",
"doc": "react to a previous message"
},
"version": {
"request": "VersionRequest",
"response": "JsonVersionMessage"
},
"accept_invitation": {
"request": "AcceptInvitationRequest",
"response": "JsonGroupV2Info",
"doc": "Accept a v2 group invitation. Note that you must have a profile name set to join groups."
},
"approve_membership": {
"request": "ApproveMembershipRequest",
"response": "JsonGroupV2Info",
"doc": "approve a request to join a group"
},
"get_group": {
"request": "GetGroupRequest",
"response": "JsonGroupV2Info",
2021-07-02 06:15:11 +00:00
"doc": "Query the server for the latest state of a known group. If no account in signald is a member of the group (anymore), an error with error_type: 'UnknownGroupException' is returned."
},
"get_linked_devices": {
"request": "GetLinkedDevicesRequest",
"response": "LinkedDevices",
"doc": "list all linked devices on a Signal account"
},
"join_group": {
"request": "JoinGroupRequest",
"response": "JsonGroupJoinInfo",
"doc": "Join a group using the a signal.group URL. Note that you must have a profile name set to join groups."
},
"remove_linked_device": {
"request": "RemoveLinkedDeviceRequest",
"doc": "Remove a linked device from the Signal account. Only allowed when the local device id is 1"
},
"update_group": {
"request": "UpdateGroupRequest",
"response": "GroupInfo",
2021-02-08 03:59:35 +00:00
"doc": "modify a group. Note that only one modification action may be preformed at once"
},
"set_profile": {
"request": "SetProfile"
},
"resolve_address": {
"request": "ResolveAddressRequest",
"response": "JsonAddress",
"doc": "Resolve a partial JsonAddress with only a number or UUID to one with both. Anywhere that signald accepts a JsonAddress will except a partial, this is a convenience function for client authors, mostly because signald doesn't resolve all the partials it returns"
},
"mark_read": {
"request": "MarkReadRequest"
2021-01-30 00:45:29 +00:00
},
"get_profile": {
"request": "GetProfileRequest",
"response": "Profile",
"doc": "Get all information available about a user"
},
"list_groups": {
"request": "ListGroupsRequest",
"response": "GroupList"
},
"list_contacts": {
"request": "ListContactsRequest",
"response": "ProfileList"
},
"create_group": {
"request": "CreateGroupRequest",
"response": "JsonGroupV2Info"
},
"leave_group": {
"request": "LeaveGroupRequest",
"response": "GroupInfo"
},
"generate_linking_uri": {
"request": "GenerateLinkingURIRequest",
2021-02-19 01:52:50 +00:00
"response": "LinkingURI",
"doc": "Generate a linking URI. Typically this is QR encoded and scanned by the primary device. Submit the returned session_id with a finish_link request."
},
"finish_link": {
"request": "FinishLinkRequest",
2021-07-02 06:15:11 +00:00
"response": "Account",
"doc": "After a linking URI has been requested, finish_link must be called with the session_id provided with the URI. it will return information about the new account once the linking process is completed by the other device."
2021-03-19 00:08:05 +00:00
},
"add_device": {
"request": "AddLinkedDeviceRequest",
"doc": "Link a new device to a local Signal account"
},
"register": {
"request": "RegisterRequest",
"response": "Account",
"doc": "begin the account registration process by requesting a phone number verification code. when the code is received, submit it with a verify request"
},
"verify": {
"request": "VerifyRequest",
"response": "Account",
"doc": "verify an account's phone number with a code after registering, completing the account creation process"
},
"get_identities": {
"request": "GetIdentitiesRequest",
"response": "IdentityKeyList",
"doc": "Get information about a known keys for a particular address"
},
"trust": {
"request": "TrustRequest",
"doc": "Trust another user's safety number using either the QR code data or the safety number text"
},
"delete_account": {
"request": "DeleteAccountRequest",
"doc": "delete all account data signald has on disk, and optionally delete the account from the server as well. Note that this is not \"unlink\" and will delete the entire account, even from a linked device."
2021-03-23 10:44:46 +00:00
},
"typing": {
"request": "TypingRequest",
"doc": "send a typing started or stopped message"
},
"reset_session": {
"request": "ResetSessionRequest",
"response": "SendResponse",
"doc": "reset a session with a particular user"
},
"request_sync": {
"request": "RequestSyncRequest",
"doc": "Request other devices on the account send us their group list, syncable config and contact list."
},
"list_accounts": {
"request": "ListAccountsRequest",
"response": "AccountList",
"doc": "return all local accounts"
2021-06-08 02:32:14 +00:00
},
"group_link_info": {
"request": "GroupLinkInfoRequest",
"response": "JsonGroupJoinInfo",
"doc": "Get information about a group from a signal.group link"
},
"update_contact": {
"request": "UpdateContactRequest",
"response": "Profile",
"doc": "update information about a local contact"
},
"set_expiration": {
"request": "SetExpirationRequest",
"response": "SendResponse",
"doc": "Set the message expiration timer for a thread. Expiration must be specified in seconds, set to 0 to disable timer"
},
"set_device_name": {
"request": "SetDeviceNameRequest",
"doc": "set this device's name. This will show up on the mobile device on the same account under "
2021-06-12 23:13:00 +00:00
},
"get_all_identities": {
"request": "GetAllIdentities",
"response": "AllIdentityKeyList",
"doc": "get all known identity keys"
2021-07-02 06:15:11 +00:00
},
"subscribe": {
"request": "SubscribeRequest",
"doc": "receive incoming messages. After making a subscribe request, incoming messages will be sent to the client encoded as ClientMessageWrapper. Send an unsubscribe request or disconnect from the socket to stop receiving messages."
},
"unsubscribe": {
"request": "UnsubscribeRequest",
"doc": "See subscribe for more info"
},
"remote_delete": {
"request": "RemoteDeleteRequest",
"response": "SendResponse",
"doc": "delete a message previously sent"
2021-07-09 06:56:58 +00:00
},
"add_server": {
"request": "AddServerRequest",
"response": "String",
"doc": "add a new server to connect to. Returns the new server's UUID."
},
"get_servers": {
"request": "GetServersRequest",
"response": "ServerList"
},
"delete_server": {
"request": "RemoveServerRequest"
}
}
}
}