2021-01-29 08:27:09 +00:00
{
"doc_version" : "v1" ,
"version" : {
"name" : "signald" ,
2021-01-30 22:23:10 +00:00
"version" : "0.12.0+git2021-01-30rce7ef396.5" ,
2021-01-29 08:27:09 +00:00
"branch" : "main" ,
2021-01-30 22:23:10 +00:00
"commit" : "ce7ef39669fc7482b2efe6555bc2962cca8e1ca6"
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-01-30 22:23:10 +00:00
"example" : "1612005072095"
2021-01-29 08:27:09 +00:00
} ,
"timestampISO" : {
"type" : "String"
} ,
"serverTimestamp" : {
"type" : "long"
} ,
"serverDeliveredTimestamp" : {
"type" : "long" ,
2021-01-30 22:23:10 +00:00
"example" : "161200507209580"
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-01-30 22:23:10 +00:00
"example" : "1612005072095"
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-01-30 22:23:10 +00:00
"example" : "\"0.12.0+git2021-01-30rce7ef396.5\""
2021-01-29 08:27:09 +00:00
} ,
"branch" : {
"type" : "String" ,
"example" : "\"main\""
} ,
"commit" : {
"type" : "String" ,
2021-01-30 22:23:10 +00:00
"example" : "\"ce7ef39669fc7482b2efe6555bc2962cca8e1ca6\""
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\""
} ,
"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"
}
}
} ,
"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-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"
} ,
"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-01-30 22:23:10 +00:00
"example" : "1612005072095" ,
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" : {
"type" : "String"
} ,
"address" : {
"type" : "JsonAddress" ,
"version" : "v1"
} ,
"capabilities" : {
"type" : "Capabilities" ,
"version" : "v1"
} ,
"color" : {
"type" : "String"
} ,
"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-01-30 22:23:10 +00:00
"example" : "1612005072095"
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-01-30 22:23:10 +00:00
"example" : "1612005072095"
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-01-30 22:23:10 +00:00
"example" : "1612005072095"
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-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-01-30 22:23:10 +00:00
"example" : "1612005072095"
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-01-30 22:23:10 +00:00
"example" : "1612005072095"
2021-01-29 08:27:09 +00:00
}
}
} ,
"JsonViewOnceOpenMessage" : {
"fields" : {
"sender" : {
"type" : "JsonAddress" ,
"version" : "v1"
} ,
"timestamp" : {
"type" : "long" ,
2021-01-30 22:23:10 +00:00
"example" : "1612005072095"
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" ,
"doc" : "modify a group"
} ,
"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
}
}
}
}