signald-go/protocol.json

1674 lines
45 KiB
JSON
Raw Normal View History

{
"doc_version": "v1",
"version": {
"name": "signald",
2021-01-30 00:45:29 +00:00
"version": "0.11.1+git2021-01-30r350d7b78.75",
"branch": "main",
2021-01-30 00:45:29 +00:00
"commit": "350d7b78e6d8579866da07b9dc91035663e0b073"
},
"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 00:45:29 +00:00
"example": "1611966817808"
},
"timestampISO": {
"type": "String"
},
"serverTimestamp": {
"type": "long"
},
"serverDeliveredTimestamp": {
"type": "long",
2021-01-30 00:45:29 +00:00
"example": "161196681780880"
},
"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
},
"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 00:45:29 +00:00
"example": "1611966817808"
}
}
},
"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-01-30 00:45:29 +00:00
"example": "\"0.11.1+git2021-01-30r350d7b78.75\""
},
"branch": {
"type": "String",
"example": "\"main\""
},
"commit": {
"type": "String",
2021-01-30 00:45:29 +00:00
"example": "\"350d7b78e6d8579866da07b9dc91035663e0b073\""
}
}
},
"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\""
},
"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
},
"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"
}
},
"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
}
},
"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
},
"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"
}
}
},
"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
},
"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-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\""
},
"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
},
"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\""
}
}
},
"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-01-30 00:45:29 +00:00
"example": "1611966817808",
"required": true
}
}
},
2021-01-30 00:45:29 +00:00
"GetProfileRequest": {
"fields": {
"account": {
"type": "String",
"doc": "the signald account to use",
"required": true
},
"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"
},
"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 00:45:29 +00:00
"example": "1611966817808"
},
"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 00:45:29 +00:00
"example": "1611966817808"
},
"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 00:45:29 +00:00
"example": "1611966817808"
}
}
},
"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"
}
}
},
"JsonSentTranscriptMessage": {
"fields": {
"destination": {
"type": "JsonAddress",
"version": "v1"
},
"timestamp": {
"type": "long",
2021-01-30 00:45:29 +00:00
"example": "1611966817808"
},
"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 00:45:29 +00:00
"example": "1611966817808"
}
}
},
"JsonViewOnceOpenMessage": {
"fields": {
"sender": {
"type": "JsonAddress",
"version": "v1"
},
"timestamp": {
"type": "long",
2021-01-30 00:45:29 +00:00
"example": "1611966817808"
}
}
},
"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
}
},
"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
},
"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"
},
"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.",
"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
},
"groupID": {
"type": "String",
2021-01-30 00:45:29 +00:00
"example": "\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\"",
"required": true
},
"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
},
"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.",
"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
},
"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",
"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
},
"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"
}
},
"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
},
"groupID": {
"type": "String",
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\""
},
"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"
}
},
"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",
"doc": "Remove a linked device from the Signal account. Only allowed when the local device id is 1"
},
"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
}
}
}
}