"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",
"example":"\"+12024561414\""
},
"name":{
"type":"String",
"doc":"New profile name. Set to empty string for no profile name",
"example":"\"signald user\""
},
"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",
"example":"\"+12024561414\""
},
"partial":{
"type":"JsonAddress",
"version":"v1",
"doc":"The partial address, missing fields"
}
},
"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",
"example":"\"+12024561414\""
},
"to":{
"type":"JsonAddress",
"version":"v1",
"doc":"The address that sent the message being marked as read"
},
"timestamps":{
"list":true,
"type":"Long",
"doc":"List of messages to mark as read",
"example":"1611698481651"
}
}
},
"JsonDataMessage":{
"fields":{
"timestamp":{
"type":"long",
"doc":"the timestamp that the message was sent at, according to the sender's device. This is used to uniquely identify this message for things like reactions and quotes.",
"example":"1611698481651"
},
"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",
"example":"1611698481651"
},
"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"
"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",
"example":"1611698481651"
}
}
},
"JsonGroupInfo":{
"fields":{
"groupId":{
"type":"String"
},
"members":{
"list":true,
"type":"JsonAddress",
"version":"v1"
},
"name":{
"type":"String"
},
"type":{
"type":"String"
},
"avatarId":{
"type":"long"
}
}
},
"JsonSentTranscriptMessage":{
"fields":{
"destination":{
"type":"JsonAddress",
"version":"v1"
},
"timestamp":{
"type":"long",
"example":"1611698481651"
},
"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",
"example":"1611698481651"
}
}
},
"JsonViewOnceOpenMessage":{
"fields":{
"sender":{
"type":"JsonAddress",
"version":"v1"
},
"timestamp":{
"type":"long",
"example":"1611698481651"
}
}
},
"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",
"example":"\"+12024561414\""
}
},
"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",
"example":"\"+12024561414\""
},
"deviceId":{
"type":"long",
"doc":"the ID of the device to unlink",
"example":"3"
}
},
"doc":"Remove a linked device from the Signal account. Only allowed when the local device id is 1"
"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"
}
},
"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",