signald-go/protocol.json
2021-01-26 14:25:56 -08:00

1 line
24 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"doc_version":"v1","version":{"name":"signald","version":"0.11.1+git2021-01-26r209ba8f1.66","branch":"main","commit":"209ba8f1b1f472ca1fb2b0f1790f7cd1fad0658b"},"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","example":"1611698481651"},"timestampISO":{"type":"String"},"serverTimestamp":{"type":"long"},"serverDeliveredTimestamp":{"type":"long","example":"161169848165180"},"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","example":"\"+12024561414\""},"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","example":"1611698481651"}}},"ReactRequest":{"fields":{"username":{"type":"String","example":"\"+12024561414\""},"recipientAddress":{"type":"JsonAddress","version":"v1"},"recipientGroupId":{"type":"String","example":"\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""},"reaction":{"type":"JsonReaction","version":"v1"},"timestamp":{"type":"long"}},"doc":"react to a previous message"},"VersionRequest":{"fields":{}},"JsonVersionMessage":{"fields":{"name":{"type":"String","example":"\"signald\""},"version":{"type":"String","example":"\"0.11.1+git2021-01-26r209ba8f1.66\""},"branch":{"type":"String","example":"\"main\""},"commit":{"type":"String","example":"\"209ba8f1b1f472ca1fb2b0f1790f7cd1fad0658b\""}}},"AcceptInvitationRequest":{"fields":{"account":{"type":"String","doc":"The account to interact with","example":"\"+12024561414\""},"groupID":{"type":"String","example":"\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""}},"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","example":"\"+12024561414\""},"groupID":{"type":"String","example":"\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""},"members":{"list":true,"type":"JsonAddress","version":"v1","doc":"list of requesting members to approve"}},"doc":"approve a request to join a group"},"GetGroupRequest":{"fields":{"account":{"type":"String","doc":"The account to interact with","example":"\"+12024561414\""},"groupID":{"type":"String","example":"\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""},"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","example":"\"+12024561414\""}},"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","example":"\"+12024561414\""},"uri":{"type":"String","doc":"The signal.group URL","example":"\"https://signal.group/#CjQKINH_GZhXhfifTcnBkaKTNRxW-hHKnGSq-cJNyPVqHRp8EhDUB7zjKNEl0NaULhsqJCX3\""}},"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","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"},"UpdateGroupRequest":{"fields":{"account":{"type":"String","doc":"The identifier of the account to interact with","example":"\"+12024561414\""},"groupID":{"type":"String","example":"\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""},"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","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"},"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","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"},"JoinGroupRequest":{"fields":{"account":{"type":"String","doc":"The account to interact with","example":"\"+12024561414\""},"uri":{"type":"String","doc":"The signal.group URL","example":"\"https://signal.group/#CjQKINH_GZhXhfifTcnBkaKTNRxW-hHKnGSq-cJNyPVqHRp8EhDUB7zjKNEl0NaULhsqJCX3\""}},"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","example":"\"+12024561414\""},"groupID":{"type":"String","example":"\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""},"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","example":"\"+12024561414\""},"groupID":{"type":"String","example":"\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""}},"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","example":"\"+12024561414\""},"groupID":{"type":"String","example":"\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""},"members":{"list":true,"type":"JsonAddress","version":"v1","doc":"list of requesting members to approve"}},"doc":"approve a request to join a group","deprecated":true},"GetGroupRequest":{"fields":{"account":{"type":"String","doc":"The account to interact with","example":"\"+12024561414\""},"groupID":{"type":"String","example":"\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""},"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","example":"\"+12024561414\""},"groupID":{"type":"String","example":"\"EdSqI90cS0UomDpgUXOlCoObWvQOXlH5G3Z2d3f4ayE=\""},"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"}},"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}}}}