2021-01-29 08:27:09 +00:00
{
"doc_version" : "v1" ,
"version" : {
"name" : "signald" ,
2021-02-08 03:59:35 +00:00
"version" : "0.12.0+git2021-02-08r98148393.17" ,
2021-01-29 08:27:09 +00:00
"branch" : "main" ,
2021-02-08 03:59:35 +00:00
"commit" : "9814839376b0aceed8329fecc7477a5da7d0cae8"
2021-01-29 08:27:09 +00:00
} ,
"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-02-08 03:59:35 +00:00
"example" : "1612746778552"
2021-01-29 08:27:09 +00:00
} ,
"timestampISO" : {
"type" : "String"
} ,
"serverTimestamp" : {
"type" : "long"
} ,
"serverDeliveredTimestamp" : {
"type" : "long" ,
2021-02-08 03:59:35 +00:00
"example" : "161274677855280"
2021-01-29 08:27:09 +00:00
} ,
"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"
}
}
} ,
"SendRequest" : {
"fields" : {
"username" : {
"type" : "String" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"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-02-08 03:59:35 +00:00
"example" : "1612746778552"
2021-01-29 08:27:09 +00:00
}
}
} ,
"ReactRequest" : {
"fields" : {
"username" : {
"type" : "String" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"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
2021-01-29 08:27:09 +00:00
} ,
"timestamp" : {
"type" : "long"
}
} ,
"doc" : "react to a previous message"
} ,
"VersionRequest" : {
"fields" : { }
} ,
"JsonVersionMessage" : {
"fields" : {
"name" : {
"type" : "String" ,
"example" : "\"signald\""
} ,
"version" : {
"type" : "String" ,
2021-02-08 03:59:35 +00:00
"example" : "\"0.12.0+git2021-02-08r98148393.17\""
2021-01-29 08:27:09 +00:00
} ,
"branch" : {
"type" : "String" ,
"example" : "\"main\""
} ,
"commit" : {
"type" : "String" ,
2021-02-08 03:59:35 +00:00
"example" : "\"9814839376b0aceed8329fecc7477a5da7d0cae8\""
2021-01-29 08:27:09 +00:00
}
}
} ,
"AcceptInvitationRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The account to interact with" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"groupID" : {
"type" : "String" ,
2021-01-30 00:45:29 +00:00
"example" : "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
}
} ,
"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-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=\""
} ,
2021-01-29 08:27:09 +00:00
"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-01-29 08:27:09 +00:00
}
}
} ,
"ApproveMembershipRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The account to interact with" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"groupID" : {
"type" : "String" ,
2021-01-30 00:45:29 +00:00
"example" : "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"members" : {
"list" : true ,
"type" : "JsonAddress" ,
"version" : "v1" ,
2021-01-30 00:45:29 +00:00
"doc" : "list of requesting members to approve" ,
"required" : true
2021-01-29 08:27:09 +00:00
}
} ,
"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
2021-01-29 08:27:09 +00:00
} ,
"groupID" : {
"type" : "String" ,
2021-01-30 00:45:29 +00:00
"example" : "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"revision" : {
"type" : "int" ,
"doc" : "the latest known revision, default value (-1) forces fetch from server"
}
} ,
"doc" : "Query the server for the latest state of a known group"
} ,
"GetLinkedDevicesRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The account to interact with" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
}
} ,
"doc" : "list all linked devices on a Signal account"
} ,
"LinkedDevices" : {
"fields" : {
"devices" : {
"list" : true ,
"type" : "DeviceInfo" ,
"version" : "v0"
}
}
} ,
"JoinGroupRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The account to interact with" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"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
2021-01-29 08:27:09 +00:00
}
} ,
"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"
}
}
} ,
"ProtocolRequest" : {
"fields" : { }
} ,
"RemoveLinkedDeviceRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The account to interact with" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"deviceId" : {
"type" : "long" ,
"doc" : "the ID of the device to unlink" ,
2021-01-30 00:45:29 +00:00
"example" : "3" ,
"required" : true
2021-01-29 08:27:09 +00:00
}
} ,
"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
2021-01-29 08:27:09 +00:00
} ,
"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
2021-01-29 08:27:09 +00:00
} ,
"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."
} ,
2021-01-29 08:27:09 +00:00
"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-01-29 08:27:09 +00:00
}
} ,
2021-02-08 03:59:35 +00:00
"doc" : "modify a group. Note that only one modification action may be preformed at once"
2021-01-29 08:27:09 +00:00
} ,
"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
2021-01-29 08:27:09 +00:00
} ,
"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
2021-01-29 08:27:09 +00:00
} ,
"avatarFile" : {
"type" : "String" ,
"doc" : "Path to new profile avatar file, if the avatar should be updated" ,
"example" : "\"/tmp/image.jpg\""
}
}
} ,
"ResolveAddressRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The signal account to use" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"partial" : {
"type" : "JsonAddress" ,
"version" : "v1" ,
2021-01-30 00:45:29 +00:00
"doc" : "The partial address, missing fields" ,
"required" : true
2021-01-29 08:27:09 +00:00
}
} ,
"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
2021-01-29 08:27:09 +00:00
} ,
"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
2021-01-29 08:27:09 +00:00
} ,
"timestamps" : {
"list" : true ,
"type" : "Long" ,
"doc" : "List of messages to mark as read" ,
2021-02-08 03:59:35 +00:00
"example" : "1612746778552" ,
2021-01-30 00:45:29 +00:00
"required" : true
2021-01-29 08:27:09 +00:00
}
}
} ,
2021-01-30 00:45:29 +00:00
"GetProfileRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "the signald account to use" ,
"required" : true
} ,
2021-01-30 22:23:10 +00:00
"async" : {
"type" : "boolean" ,
"doc" : "return results from local store immediately, refreshing from server if needed. If false (default), block until all pending profiles have been retrieved."
} ,
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
} ,
"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"
} ,
2021-01-30 22:23:10 +00:00
"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" ,
"doc" : "return results from local store immediately, refreshing from server if needed. If false (default), block until all pending profiles have been retrieved."
}
}
} ,
"ProfileList" : {
"fields" : {
"profiles" : {
"list" : true ,
"type" : "Profile" ,
"version" : "v1"
}
}
} ,
2021-01-29 08:27:09 +00:00
"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-02-08 03:59:35 +00:00
"example" : "1612746778552"
2021-01-29 08:27:09 +00:00
} ,
"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" ,
"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" : "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" ,
"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" : "v1" ,
"doc" : "list of mentions in the message"
}
}
} ,
"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"
}
}
} ,
"JsonQuote" : {
"fields" : {
"id" : {
"type" : "long" ,
"doc" : "the client timestamp of the message being quoted" ,
2021-02-08 03:59:35 +00:00
"example" : "1612746778552"
2021-01-29 08:27:09 +00:00
} ,
"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-02-08 03:59:35 +00:00
"example" : "1612746778552"
2021-01-29 08:27:09 +00:00
}
}
} ,
"JsonGroupInfo" : {
"fields" : {
"groupId" : {
"type" : "String"
} ,
"members" : {
"list" : true ,
"type" : "JsonAddress" ,
"version" : "v1"
} ,
"name" : {
"type" : "String"
} ,
"type" : {
"type" : "String"
} ,
"avatarId" : {
"type" : "long"
}
}
} ,
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-01-30 00:45:29 +00:00
"Capabilities" : {
"fields" : {
"gv2" : {
"type" : "boolean"
} ,
"storage" : {
"type" : "boolean"
} ,
"gv1-migration" : {
"type" : "boolean"
}
}
} ,
2021-01-29 08:27:09 +00:00
"JsonSentTranscriptMessage" : {
"fields" : {
"destination" : {
"type" : "JsonAddress" ,
"version" : "v1"
} ,
"timestamp" : {
"type" : "long" ,
2021-02-08 03:59:35 +00:00
"example" : "1612746778552"
2021-01-29 08:27:09 +00:00
} ,
"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-02-08 03:59:35 +00:00
"example" : "1612746778552"
2021-01-29 08:27:09 +00:00
}
}
} ,
"JsonViewOnceOpenMessage" : {
"fields" : {
"sender" : {
"type" : "JsonAddress" ,
"version" : "v1"
} ,
"timestamp" : {
"type" : "long" ,
2021-02-08 03:59:35 +00:00
"example" : "1612746778552"
2021-01-29 08:27:09 +00:00
}
}
} ,
"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"
}
}
}
} ,
"v0" : {
"JsonAccountList" : {
"fields" : {
"accounts" : {
"list" : true ,
"type" : "JsonAccount" ,
"version" : "v0"
}
}
} ,
"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"
}
}
} ,
"JsonReceiptMessage" : {
"fields" : {
"type" : {
"type" : "String"
} ,
"timestamps" : {
"list" : true ,
"type" : "Long"
} ,
"when" : {
"type" : "long"
}
}
} ,
"JsonTypingMessage" : {
"fields" : {
"action" : {
"type" : "String"
} ,
"timestamp" : {
"type" : "long"
} ,
"groupId" : {
"type" : "String"
}
}
} ,
"JsonAccount" : {
"fields" : {
"deviceId" : {
"type" : "int"
} ,
"username" : {
"type" : "String"
} ,
"filename" : {
"type" : "String"
} ,
"uuid" : {
"type" : "String"
} ,
"registered" : {
"type" : "boolean"
} ,
"has_keys" : {
"type" : "boolean"
} ,
"subscribed" : {
"type" : "boolean"
}
}
} ,
"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"
}
}
} ,
"DeviceInfo" : {
"fields" : {
"id" : {
"type" : "long"
} ,
"name" : {
"type" : "String"
} ,
"created" : {
"type" : "long"
} ,
"lastSeen" : {
"type" : "long"
}
}
} ,
"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"
} ,
"organization" : {
"type" : "Optional" ,
"version" : "v0"
}
}
} ,
"JsonPreview" : {
"fields" : {
"url" : {
"type" : "String"
} ,
"title" : {
"type" : "String"
} ,
"attachment" : {
"type" : "JsonAttachment" ,
"version" : "v0"
}
}
} ,
"JsonSticker" : {
"fields" : {
"packID" : {
"type" : "String"
} ,
"packKey" : {
"type" : "String"
} ,
"stickerID" : {
"type" : "int"
} ,
"attachment" : {
"type" : "JsonAttachment" ,
"version" : "v0"
}
}
} ,
"RemoteDelete" : {
"fields" : {
"targetSentTimestamp" : {
"type" : "long"
}
}
} ,
"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"
}
}
} ,
"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"
}
}
} ,
"JsonQuotedAttachment" : {
"fields" : {
"contentType" : {
"type" : "String"
} ,
"fileName" : {
"type" : "String"
} ,
"thumbnail" : {
"type" : "JsonAttachment" ,
"version" : "v0"
}
}
} ,
"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" : { }
}
} ,
"v1alpha1" : {
"ProtocolRequest" : {
"fields" : { } ,
"deprecated" : true
} ,
"GetLinkedDevicesRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The account to interact with" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
}
} ,
"doc" : "list all linked devices on a Signal account" ,
"deprecated" : true
} ,
"LinkedDevices" : {
"fields" : {
"devices" : {
"list" : true ,
"type" : "DeviceInfo" ,
"version" : "v0"
}
}
} ,
"RemoveLinkedDeviceRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The account to interact with" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"deviceId" : {
"type" : "long" ,
"doc" : "the ID of the device to unlink" ,
2021-01-30 00:45:29 +00:00
"example" : "3" ,
"required" : true
2021-01-29 08:27:09 +00:00
}
} ,
2021-01-30 22:23:10 +00:00
"doc" : "Remove a linked device from the Signal account. Only allowed when the local device id is 1" ,
"deprecated" : true
2021-01-29 08:27:09 +00:00
} ,
"JoinGroupRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The account to interact with" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"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
2021-01-29 08:27:09 +00:00
}
} ,
"doc" : "Join a group using the a signal.group URL. Note that you must have a profile name set to join groups." ,
"deprecated" : true
} ,
"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"
}
}
} ,
"UpdateGroupRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The account to interact with" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"groupID" : {
"type" : "String" ,
2021-01-30 00:45:29 +00:00
"example" : "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"title" : {
"type" : "String" ,
"example" : "\"Parkdale Run Club\""
} ,
"addMembers" : {
"list" : true ,
"type" : "JsonAddress" ,
"version" : "v1"
} ,
"removeMembers" : {
"list" : true ,
"type" : "JsonAddress" ,
"version" : "v1"
}
} ,
"doc" : "modify a group. only v2 groups for now" ,
"deprecated" : true
} ,
"JsonGroupV2Info" : {
"fields" : {
"id" : {
"type" : "String" ,
"example" : "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""
} ,
"revision" : {
"type" : "int" ,
"example" : "5"
} ,
"title" : {
"type" : "String" ,
"example" : "\"Parkdale Run Club\""
} ,
"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" : {
"type" : "String"
}
}
} ,
"AcceptInvitationRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The account to interact with" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"groupID" : {
"type" : "String" ,
2021-01-30 00:45:29 +00:00
"example" : "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
}
} ,
"doc" : "Accept a v2 group invitation. Note that you must have a profile name set to join groups." ,
"deprecated" : true
} ,
"ApproveMembershipRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The account to interact with" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"groupID" : {
"type" : "String" ,
2021-01-30 00:45:29 +00:00
"example" : "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"members" : {
"list" : true ,
"type" : "JsonAddress" ,
"version" : "v1" ,
2021-01-30 00:45:29 +00:00
"doc" : "list of requesting members to approve" ,
"required" : true
2021-01-29 08:27:09 +00:00
}
} ,
"doc" : "approve a request to join a group" ,
"deprecated" : true
} ,
"GetGroupRequest" : {
"fields" : {
"account" : {
"type" : "String" ,
"doc" : "The account to interact with" ,
2021-01-30 00:45:29 +00:00
"example" : "\"+12024561414\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"groupID" : {
"type" : "String" ,
2021-01-30 00:45:29 +00:00
"example" : "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"revision" : {
"type" : "int" ,
"doc" : "the latest known revision, default value (-1) forces fetch from server"
}
} ,
"doc" : "Query the server for the latest state of a known group" ,
"deprecated" : true
}
} ,
"v1alpha2" : {
"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
2021-01-29 08:27:09 +00:00
} ,
"groupID" : {
"type" : "String" ,
2021-01-30 00:45:29 +00:00
"example" : "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"" ,
"required" : true
2021-01-29 08:27:09 +00:00
} ,
"title" : {
"type" : "String" ,
"example" : "\"Parkdale Run Club\""
} ,
"avatar" : {
"type" : "String" ,
"example" : "\"/tmp/image.jpg\""
} ,
"addMembers" : {
"list" : true ,
"type" : "JsonAddress" ,
"version" : "v1"
} ,
"removeMembers" : {
"list" : true ,
"type" : "JsonAddress" ,
"version" : "v1"
}
} ,
"doc" : "modify a group" ,
"deprecated" : true
} ,
"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"
}
}
} ,
"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" ,
"doc" : "Query the server for the latest state of a known group"
} ,
"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."
} ,
"protocol" : {
"request" : "ProtocolRequest"
} ,
"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"
2021-01-29 08:27:09 +00:00
} ,
"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"
2021-01-30 22:23:10 +00:00
} ,
"list_groups" : {
"request" : "ListGroupsRequest" ,
"response" : "GroupList"
} ,
"list_contacts" : {
"request" : "ListContactsRequest" ,
"response" : "ProfileList"
2021-01-29 08:27:09 +00:00
}
} ,
"v1alpha1" : {
"protocol" : {
"request" : "ProtocolRequest" ,
"deprecated" : true
} ,
"get_linked_devices" : {
"request" : "GetLinkedDevicesRequest" ,
"response" : "LinkedDevices" ,
"doc" : "list all linked devices on a Signal account" ,
"deprecated" : true
} ,
"remove_linked_device" : {
"request" : "RemoveLinkedDeviceRequest" ,
2021-01-30 22:23:10 +00:00
"doc" : "Remove a linked device from the Signal account. Only allowed when the local device id is 1" ,
"deprecated" : true
2021-01-29 08:27:09 +00:00
} ,
"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." ,
"deprecated" : true
} ,
"update_group" : {
"request" : "UpdateGroupRequest" ,
"response" : "JsonGroupV2Info" ,
"doc" : "modify a group. only v2 groups for now" ,
"deprecated" : true
} ,
"accept_invitation" : {
"request" : "AcceptInvitationRequest" ,
"response" : "JsonGroupV2Info" ,
"doc" : "Accept a v2 group invitation. Note that you must have a profile name set to join groups." ,
"deprecated" : true
} ,
"approve_membership" : {
"request" : "ApproveMembershipRequest" ,
"response" : "JsonGroupV2Info" ,
"doc" : "approve a request to join a group" ,
"deprecated" : true
} ,
"get_group" : {
"request" : "GetGroupRequest" ,
"response" : "JsonGroupV2Info" ,
"doc" : "Query the server for the latest state of a known group" ,
"deprecated" : true
}
} ,
"v1alpha2" : {
"update_group" : {
"request" : "UpdateGroupRequest" ,
"response" : "GroupInfo" ,
"doc" : "modify a group" ,
"deprecated" : true
}
}
}
}