Datatypes#
This section describes the core entities used by Olvid daemon and exposed entrypoints.
Message#
Related Endpoints:
Command: Message Command Service
Notification: Message Notification Service
Message#
An Olvid message posted in a discussion.
Sent messages are Outbound, received messages are Inbound.
Messages must have a body and/or one or more attachments.
Fields:
id(MessageId - the message unique identifier)discussion_id(uint64 - the discussion the message belongs to)sender_id(uint64 - set to 0 if you sent the message, or to the contact id referencing the sender)body(string - text body)sort_index(double - index used to sort messages in a discussion)timestamp(uint64 - the timestamp on which the message was received)attachments_count(uint64 - number of attachments for this message)replied_message_id(optional MessageId - set if this message is a reply to another message in this discussion)message_location(optional MessageLocation - set if this message is a location message)reactions(repeated MessageReaction - list of the reactions added on this message)forwarded(bool - does this message have been forwarded from another discussion by sender)edited_body(bool - does this message body have been edited)
MessageId#
A composite id to uniquely identify a message.
Fields:
type(MessageId.Type - inbound or outbound message)id(uint64)
MessageId.Type
Enum Values:
TYPE_UNSPECIFIED: 0TYPE_INBOUND: 1 - received messageTYPE_OUTBOUND: 2 - sent message
MessageEphemerality#
Describe message ephemerality.
Fields:
read_once(bool - message can only be read once (destroyed when discussion is closed))existence_duration(uint64 - message is destroyed after this duration, in seconds)visibility_duration(uint64 - *message is only visible for this duration, in seconds
seconds*)
MessageReaction#
Describe a reaction to a message, by a contact or yourself.
Fields:
contact_id(uint64 - set to 0 for owned reactions)reaction(string - reaction emoji)timestamp(uint64 - the timestamp at which the reaction was added.)
MessageLocation#
A location message content.
There are two location message families:
location sending: send a specific location.
location sharing: share someone’s location for a given duration.
Fields:
type(MessageLocation.LocationType)timestamp(uint64 - sending: when location was sent sharing: the last location update timestamp)latitude(double)longitude(double)altitude(optional double)precision(optional float - the accuracy this location was recorded with.)address(optional string - optionally set for sending, a human readable address for this location)
MessageLocation.LocationType
Enum Values:
LOCATION_TYPE_UNSPECIFIED: 0LOCATION_TYPE_SEND: 1 - a one shot location sendingLOCATION_TYPE_SHARING: 2 - a live location sharingLOCATION_TYPE_SHARING_FINISHED: 3 - a completed location sharing
MessageFilter#
Filter messages by attributes.
To pass a filter an element must match all specified conditions.
Fields:
type(optional MessageId.Type - is message inbound or outbound)discussion_id(optional uint64 - does message belongs to a specific discussion)sender_contact_id(optional uint64 - is message sent by a specific contact)body_search(optional string - regexp filter on body field)attachment(optional MessageFilter.Attachment - does message have attachments or not)location(optional MessageFilter.Location - is message a location message)min_timestamp(optional uint64 - is timestamp less or equal than min_timestamp)max_timestamp(optional uint64 - is timestamp more or equal than max_timestamp)has_reaction(optional MessageFilter.Reaction - does message have reactions or not)reaction_filters(repeated ReactionFilter - message must have at least one matching reaction for each reactions_filter)Oneof
reply:reply_to_a_message(bool - is message a reply to another message)do_not_reply_to_a_message(bool - is message not a reply to a message)replied_message_id(MessageId - is message a reply to a specific message id)
MessageFilter.Attachment
Enum Values:
ATTACHMENT_UNSPECIFIED: 0ATTACHMENT_HAVE: 1ATTACHMENT_HAVE_NOT: 2
MessageFilter.Location
Enum Values:
LOCATION_UNSPECIFIED: 0LOCATION_HAVE: 1LOCATION_HAVE_NOT: 2LOCATION_IS_SEND: 3LOCATION_IS_SHARING: 5LOCATION_IS_SHARING_FINISHED: 6
MessageFilter.Reaction
Enum Values:
REACTION_UNSPECIFIED: 0REACTION_HAS: 1REACTION_HAS_NOT: 2
ReactionFilter#
Fields:
Oneof
reacted_by:reacted_by_me(bool - is the reaction from yourself)reacted_by_contact_id(uint64 - is the reaction from a specific contact)
reaction(optional string - is reaction equal to the reaction field)
Attachment#
Related Endpoints:
Command: Attachment Command Service
Notification: Attachment Notification Service
Attachment#
An attachment represents a file attached to a message.
It is associated to a message_id and a discussion_id.Link previews are attachments with specific mime type: olvid/link-preview.
Fields:
id(AttachmentId)discussion_id(uint64)message_id(MessageId)file_name(string)mime_type(string)size(uint64 - file size in bytes)
AttachmentId#
A composite id to uniquely identify an attachment.
Fields:
type(AttachmentId.Type - inbound or outbound attachment)id(uint64)
AttachmentId.Type
Enum Values:
TYPE_UNSPECIFIED: 0TYPE_INBOUND: 1 - received attachmentsTYPE_OUTBOUND: 2 - sent attachments
AttachmentFilter#
Filter attachments by attributes.
To pass a filter an element must match all specified conditions.
Fields:
type(optional AttachmentId.Type - select only INBOUND or OUTBOUND attachments)file_type(optional AttachmentFilter.FileType - filter by file type (pre-defined regexp for mime_type))discussion_id(optional uint64)message_id(optional MessageId - optional uint64 contact_id = 4; not implementable now)filename_search(optional string - regexp filter on filename field)mime_type_search(optional string - regexp filter on mime_type field)min_size(optional uint64 - minimum or equal file size)max_size(optional uint64 - maximum or equal file size)
AttachmentFilter.FileType
apply pre-defined regexp filters on mime_type field.
Enum Values:
FILE_TYPE_UNSPECIFIED: 0FILE_TYPE_IMAGE: 3FILE_TYPE_VIDEO: 4FILE_TYPE_IMAGE_VIDEO: 5 - image or videoFILE_TYPE_AUDIO: 6FILE_TYPE_LINK_PREVIEW: 7FILE_TYPE_NOT_LINK_PREVIEW: 8 - all except link previews
Discussion#
Related Endpoints:
Command: Discussion Command Service
Notification: Discussion Notification Service
Discussion#
A discussion must be associated to a contact or to a group.
If contact_id and group_id are both zero, then it is an existing locked discussion.
Fields:
id(uint64)title(string - contact.display_name or group.name*)Oneof
identifier:contact_id(uint64)group_id(uint64)
DiscussionFilter#
Filter discussions by attributes.
To pass a filter an element must match all specified conditions.
Fields:
type(optional DiscussionFilter.Type - select group or contact discussions)Oneof
identifier:contact_id(uint64)group_id(uint64)
title_search(optional string - regexp filter on title field)
DiscussionFilter.Type
Enum Values:
TYPE_UNSPECIFIED: 0TYPE_OTO: 1TYPE_GROUP: 2
Contact#
Related Endpoints:
Command: Contact Command Service
Notification: Contact Notification Service
Contact#
A contact is another Olvid identity you are in contact with.
A contact can have an associated discussion if has_one_to_one_discussion is true, else it’s probably a collected contact you met in a group discussion.
Fields:
id(uint64)display_name(string - computed from details)details(IdentityDetails)established_channel_count(uint32 - shall be equal to device_count to exchange messages)device_count(uint32)has_one_to_one_discussion(bool)has_a_photo(bool)keycloak_managed(bool - contact is registered on the same directory)
ContactFilter#
Filter contacts by attributes.
To pass a filter an element must match all specified conditions.
Fields:
one_to_one(optional ContactFilter.OneToOne - select only contacts with or without one to one discussions)photo(optional ContactFilter.Photo - select only contacts with or without profile photo)keycloak(optional ContactFilter.Keycloak - select only contacts registered or not on your keycloak)display_name_search(optional string - regexp filter on display_name)details_search(optional IdentityDetails - a set of regexp filters, one for each field of details)
ContactFilter.OneToOne
Enum Values:
ONE_TO_ONE_UNSPECIFIED: 0ONE_TO_ONE_IS: 1ONE_TO_ONE_IS_NOT: 2
ContactFilter.Photo
Enum Values:
PHOTO_UNSPECIFIED: 0PHOTO_HAS: 1PHOTO_HAS_NOT: 2
ContactFilter.Keycloak
Enum Values:
KEYCLOAK_UNSPECIFIED: 0KEYCLOAK_MANAGED: 1KEYCLOAK_NOT_MANAGED: 2
Group#
Related Endpoints:
Command: Group Command Service
Notification: Group Notification Service
Group#
An Olvid group is a discussion with you and other Olvid identities.
Other identities in a group are automatically added to your contact book if they were not before as collected contacts (you do not have a one to one discussion with them).
keycloak_managed groups are not editable, and you cannot leave them. Group is managed from the keycloak admin console.
Fields:
id(uint64)type(Group.Type - specify a pre-set of permissions given to group members.)advanced_configuration(optional Group.AdvancedConfiguration - only set if group.type is TYPE_ADVANCED)own_permissions(GroupMemberPermissions - your permissions in this group)members(repeated GroupMember - members that accepted invitation)pending_members(repeated PendingGroupMember - members invited to join group)update_in_progress(bool - group is locked, edition will be delayed)keycloak_managed(bool - group automatically pushed by keycloak)name(string)description(string)has_a_photo(bool)
Group.Type
Enum Values:
TYPE_UNSPECIFIED: 0TYPE_STANDARD: 1 - all members are adminTYPE_CONTROLLED: 2 - non admin members cannot manage the groupTYPE_READ_ONLY: 3 - only admin members can post messagesTYPE_ADVANCED: 4 - specify an advanced configuration field
Group.AdvancedConfiguration
Fields:
read_only(bool - is group read only)remote_delete(Group.AdvancedConfiguration.RemoteDelete - who has permission to delete message for everyone)
Group.AdvancedConfiguration.RemoteDelete
Enum Values:
REMOTE_DELETE_UNSPECIFIED: 0REMOTE_DELETE_NOBODY: 1REMOTE_DELETE_ADMINS: 2REMOTE_DELETE_EVERYONE: 3
GroupMember#
Associate a contact, member of a group, with its permissions in this group.
Fields:
contact_id(uint64)permissions(GroupMemberPermissions)
PendingGroupMember#
Member of a group who has not yet accepted the invitation to join the group.
Fields:
pending_member_id(uint64 - unique identifier)contact_id(uint64 - set to 0 if this identity is not a contact yet)display_name(string - computed display name from their identity details.)declined(bool - does pending member declined invitation)permissions(GroupMemberPermissions - permissions given to this member)
GroupMemberPermissions#
Describe permission set associated to any group member.
Fields:
admin(bool - can edit the group (change name or description, and manage group members))remote_delete_anything(bool - can delete everywhere someone else’s message)edit_or_remote_delete_own_messages(bool - can edit or delete everywhere own messages)change_settings(bool - can change discussion shared settings (message ephemerality))send_message(bool - can post message in the group discussion)
GroupFilter#
Filter groups by attributes.
To pass a filter an element must match all specified conditions.
Fields:
type(optional Group.Type)empty(optional GroupFilter.Empty - does group have members or not)photo(optional GroupFilter.Photo - does group have a photo or not)keycloak(optional GroupFilter.Keycloak - is group keycloak managed or not)own_permissions_filter(optional GroupPermissionFilter - filter on your own permissions in the group)name_search(optional string - regexp filter on name_search field)description_search(optional string - regexp filter on description_search field)member_filters(repeated GroupMemberFilter - group must have at least one matching member for each member_filters)pending_member_filters(repeated PendingGroupMemberFilter - group must have at least one pending member matching each pending_member_filters)
GroupFilter.Empty
Enum Values:
EMPTY_UNSPECIFIED: 0EMPTY_IS_NOT: 1EMPTY_IS: 2
GroupFilter.Keycloak
Enum Values:
KEYCLOAK_UNSPECIFIED: 0KEYCLOAK_IS_NOT: 1KEYCLOAK_IS: 2
GroupFilter.Photo
Enum Values:
PHOTO_UNSPECIFIED: 0PHOTO_HAS_NOT: 1PHOTO_HAS: 2
GroupMemberFilter#
Fields:
contact_id(optional uint64 - is member a specific contact)permissions(optional GroupPermissionFilter - does member’s permissions match this permission filter)
PendingGroupMemberFilter#
Fields:
is_contact(optional PendingGroupMemberFilter.Contact - is pending member a contact or not)has_declined(optional PendingGroupMemberFilter.Declined - does pending member declined invitation or not)contact_id(optional uint64 - is pending member a specific known contact)display_name_search(optional string - regexp filter applied on display_name field)permissions(optional GroupPermissionFilter - pending member’s permissions match this permission filter)
PendingGroupMemberFilter.Contact
Enum Values:
CONTACT_UNSPECIFIED: 0CONTACT_IS: 1CONTACT_IS_NOT: 2
PendingGroupMemberFilter.Declined
Enum Values:
DECLINED_UNSPECIFIED: 0DECLINED_HAS: 1DECLINED_HAS_NOT: 2
GroupPermissionFilter#
Fields:
admin(optional GroupPermissionFilter.Admin - is user a group admin or not)send_message(optional GroupPermissionFilter.SendMessage - can the user post a message in the discussion)remote_delete_anything(optional GroupPermissionFilter.RemoteDeleteAnything - can the user remote-delete any message, even other members’ messages)edit_or_remote_delete_own_messages(optional GroupPermissionFilter.EditOrRemoteDeleteOwnMessage - can the user edit or remote-delete their own messages)change_settings(optional GroupPermissionFilter.ChangeSettings - can the user change group settings)
GroupPermissionFilter.Admin
Enum Values:
ADMIN_UNSPECIFIED: 0ADMIN_IS: 1ADMIN_IS_NOT: 2
GroupPermissionFilter.SendMessage
Enum Values:
SEND_MESSAGE_UNSPECIFIED: 0SEND_MESSAGE_CAN: 1SEND_MESSAGE_CANNOT: 2
GroupPermissionFilter.RemoteDeleteAnything
Enum Values:
REMOTE_DELETE_ANYTHING_UNSPECIFIED: 0REMOTE_DELETE_ANYTHING_CAN: 1REMOTE_DELETE_ANYTHING_CANNOT: 2
GroupPermissionFilter.EditOrRemoteDeleteOwnMessage
Enum Values:
EDIT_OR_REMOTE_DELETE_OWN_MESSAGE_UNSPECIFIED: 0EDIT_OR_REMOTE_DELETE_OWN_MESSAGE_CAN: 1EDIT_OR_REMOTE_DELETE_OWN_MESSAGE_CANNOT: 2
GroupPermissionFilter.ChangeSettings
Enum Values:
CHANGE_SETTINGS_UNSPECIFIED: 0CHANGE_SETTINGS_CAN: 1CHANGE_SETTINGS_CANNOT: 2
Identity#
Related Endpoints:
Command: Identity Command Service
Admin: Identity Admin Service
Identity#
Your own Olvid identity, stored on this daemon instance.
A daemon can manage multiple Olvid identities.
Fields:
id(uint64)display_name(string - computed from details)details(IdentityDetails)keycloak_managed(bool - identity is linked to a keycloak directory)has_a_photo(bool)api_key(Identity.ApiKey - Olvid api key to grant permissions)
Identity.ApiKey.Permission
Fields:
call(bool)multi_device(bool)
IdentityDetails#
Represents an Olvid identity details.
Used for any Olvid identity (owned identity or other contact).
Details are valid only if at least one field is not blank.
Fields:
first_name(optional string)last_name(optional string)company(optional string)position(optional string)
IdentityFilter#
Filter identities by attributes.
To pass a filter an element must match all specified conditions.
Fields:
keycloak(optional IdentityFilter.Keycloak - is identity keycloak managed or not)photo(optional IdentityFilter.Photo - does identity have a profile photo or not)api_key(optional IdentityFilter.ApiKey - does identity have an Olvid api key or not)display_name_search(optional string - regexp filter on display_name)details_search(optional IdentityDetails - a set of regexp filters, one for each field of details)
IdentityFilter.Keycloak
Enum Values:
KEYCLOAK_UNSPECIFIED: 0KEYCLOAK_IS_NOT: 1KEYCLOAK_IS: 2
IdentityFilter.Photo
Enum Values:
PHOTO_UNSPECIFIED: 0PHOTO_HAS_NOT: 1PHOTO_HAS: 2
IdentityFilter.ApiKey
Enum Values:
API_KEY_UNSPECIFIED: 0API_KEY_HAS_NOT: 1API_KEY_HAS: 2
Client_Key#
Related Endpoints:
Admin: Client Key Admin Service
ClientKey#
A client key can be used to authenticate on the daemon.
It can be associated to a daemon identity if identity_id is specified, if not (identity_id is equal to zero) it is an admin client.
An admin client key can use admin command services and impersonate any daemon identity.
Fields:
name(string - user defined name)key(string)identity_id(uint64 - 0 if an admin client key)
ClientKeyFilter#
Filter client keys by attributes.
Fields:
Oneof
identity:admin_key(bool - filter admin client keys)identity_id(uint64 - filter keys associated to an identity id)
name_search(optional string - regexp filter on name)key(optional string - key value)
Invitation#
Related Endpoints:
Command: Invitation Command Service
Notification: Invitation Notification Service
Invitation#
An invitation represents an instance of a protocol among several possibilities.
Protocols can be:
Invitation: the classic Olvid invitation protocol to add someone else to your contact book. Protocol implies multiple manual steps, with invitation acceptation and four digit code exchange.
Introduction: a third party identity presents two of its contacts to each other.
One to one invitation: One of your contact asked you to create a one to one discussion.
Group invitation: Someone invited you to join a group.
Each invitation have a status representing the protocol, and it’s current step.
Fields:
id(uint64 - invitation unique identifier)status(Invitation.Status - current protocol step)display_name(string - display name of the other identity or the group name)timestamp(uint64 - latest status update timestamp)sas(optional string - only set for STATUS_INVITATION_WAIT_YOU_FOR_SAS_EXCHANGE and STATUS_INVITATION_WAIT_IT_FOR_SAS_EXCHANGE four digit code to give to the other in an invitation protocol)mediator_id(optional uint64 - introductions protocol only the contact id of the person who initiated introduction protocol)
Invitation.Status
Enum Values:
STATUS_UNSPECIFIED: 0STATUS_INVITATION_WAIT_YOU_TO_ACCEPT: 1 - you received an invitation, accept or decline itSTATUS_INVITATION_WAIT_IT_TO_ACCEPT: 2 - you sent an invitation, recipient must accept it to continueSTATUS_INVITATION_STATUS_IN_PROGRESS: 3 - invitation process is in progress and will continue after automatic protocol message exchange between protagonistSTATUS_INVITATION_WAIT_YOU_FOR_SAS_EXCHANGE: 4 - you must set other sas codeSTATUS_INVITATION_WAIT_IT_FOR_SAS_EXCHANGE: 5 - you set other sas code, give your sas code to otherSTATUS_INTRODUCTION_WAIT_IT_TO_ACCEPT: 7 - you accepted an introduction, wait for the other to accept tooSTATUS_INTRODUCTION_WAIT_YOU_TO_ACCEPT: 8 - you received an introductionSTATUS_ONE_TO_ONE_INVITATION_WAIT_IT_TO_ACCEPT: 9 - you sent a one to one invitation, wait for the other to acceptSTATUS_ONE_TO_ONE_INVITATION_WAIT_YOU_TO_ACCEPT: 10 - you received a one to one invitation, accept or decline itSTATUS_GROUP_INVITATION_WAIT_YOU_TO_ACCEPT: 11 - you received a group invitation, accept or decline it
InvitationFilter#
Filter invitation by attributes.
To pass a filter an element must match all specified conditions.
Fields:
status(optional Invitation.Status - does invitation have a specific status)type(optional InvitationFilter.Type - does invitation belongs to a specific protocol)display_name_search(optional string - regexp filter on display_name field)min_timestamp(optional uint64 - is timestamp less or equal than min_timestamp)max_timestamp(optional uint64 - is timestamp more or equal than max_timestamp)
InvitationFilter.Type
Enum Values:
TYPE_UNSPECIFIED: 0TYPE_INVITATION: 1 - *is status one of :
STATUS_INVITATION_WAIT_YOU_TO_ACCEPT
STATUS_INVITATION_WAIT_IT_TO_ACCEPT
STATUS_INVITATION_STATUS_IN_PROGRESS
STATUS_INVITATION_WAIT_YOU_FOR_SAS_EXCHANGE
STATUS_INVITATION_WAIT_IT_FOR_SAS_EXCHANGE*
TYPE_INTRODUCTION: 2 - *is status one of :
STATUS_INTRODUCTION_WAIT_IT_TO_ACCEPT
STATUS_INTRODUCTION_WAIT_YOU_TO_ACCEPT*
TYPE_GROUP: 3 - *is status equals to:
STATUS_GROUP_INVITATION_WAIT_YOU_TO_ACCEPT*
TYPE_ONE_TO_ONE: 4 - *is status one of :
STATUS_ONE_TO_ONE_INVITATION_WAIT_IT_TO_ACCEPT
STATUS_ONE_TO_ONE_INVITATION_WAIT_YOU_TO_ACCEPT*
Settings#
Related Endpoints:
Command: Settings Command Service
IdentitySettings#
Settings for an Identity managed by a daemon.
AutoAcceptInvitation: when enabled the daemon will automatically accept incoming and existing invitations from specified protocol.
MessageRetention: when at least one element is set daemon will regularly check if some message can be deleted, matching filled criteria. This allows to save space and save performances by keeping database as small as possible.
Keycloak: directory related settings
Fields:
invitation(IdentitySettings.AutoAcceptInvitation)message_retention(IdentitySettings.MessageRetention)keycloak(IdentitySettings.Keycloak)
IdentitySettings.AutoAcceptInvitation
Fields:
auto_accept_introduction(bool - auto accept introductions (a trusted contact pushed a new contact))auto_accept_group(bool - auto accept invitations to a group)auto_accept_one_to_one(bool - auto accept contact invitations to one to one discussions)auto_accept_invitation(bool - auto accept olvid invitations (mind this will only accept invitation and not exchange sas code for you))
IdentitySettings.MessageRetention
Fields:
existence_duration(uint64 - if set, message older than existence_duration seconds will be deleted set to 0 to disable)discussion_count(uint64 - if set, if a discussion has more than discussion_count messages, older messages will be deleted. set to 0 to disable)global_count(uint64 - if set, if identity has more than global_count messages, older messages will be deleted. set to 0 to disable)clean_locked_discussions(bool - if true, messages in locked discussions will be deleted.)preserve_is_sharing_location_messages(bool - if true, live sharing location messages will never be deleted.)
IdentitySettings.Keycloak
Fields:
auto_invite_new_members(bool - if true, directory will regularly be scanned to add new members as contacts.)
DiscussionSettings#
Settings for a discussion. Those settings are shared with other contacts in this discussion.
Fields:
discussion_id(uint64)read_once(bool - are message read once)existence_duration(uint64 - if set, messages are destroyed after existence_duration seconds, 0 to disable)visibility_duration(uint64 - if set, messages are only visible for visibility_duration seconds, 0 to disable)
Storage#
Related Endpoints:
Command: Storage Command Service
StorageElement#
Daemon embed a key-value storage, accessible for clients.
Each client-key have it’s own global storage space, and a dedicated storage space for each discussion (see DiscussionStorageCommandService).
StorageElement is used for global and discussion storage.
Fields:
key(string)value(string)
StorageElementFilter#
Filter storage elements by attributes.
To pass a filter an element must match all specified conditions.
Fields:
key_search(optional string - regexp filter applied on key_search field)value_search(optional string - regexp filter applied on value_search field)
Keycloak#
Related Endpoints:
Command: Keycloak Command Service
KeycloakUser#
One of your directory user.
Fields:
keycloak_id(string - unique identifier for directory, to use to add this user as a contact)display_name(string - name computed from details)details(IdentityDetails - full identity details)contact_id(optional uint64 - filled if this user is already a contact, else set to 0)
KeycloakUserFilter#
Filter keycloak users by attributes.
To pass a filter an element must match all specified conditions.
Fields:
contact(optional KeycloakUserFilter.Contact - is user a contact or not)display_name_search(optional string - regexp filter on display_name field)details_search(optional IdentityDetails - a set of regexp filters, one for each field of details)
KeycloakUserFilter.Contact
Enum Values:
CONTACT_UNSPECIFIED: 0CONTACT_IS: 1CONTACT_IS_NOT: 2
Call#
Related Endpoints:
Command: Call Command Service
Notification: Call Notification Service
CallParticipantId#
Identify a call participant by its contact id, or a random identifier if it is not a contact.
Fields:
Oneof
id:contact_id(uint64)participant_id(string)
Backup#
Related Endpoints:
Admin: Backup Admin Service
Backup#
Describe a full backup obtained with a backup key.
A backup contains multiple parts.
The AdminBackup contains the admin client keys and the elements contained in the global daemon storage.
A backup may contain multiple profile backups (one per identity), and each may contain one or more snapshots.
A profile snapshot contains an identity, its discussions, contacts, groups, client keys, and discussion storage.Note: a backup does not contain any messages or attachments.
Fields:
admin_backup(Backup.AdminBackup)profile_backups(repeated Backup.ProfileBackup)
Backup.AdminBackup
Fields:
admin_client_key_count(uint64)storage_elements_count(uint64)
Backup.ProfileBackup
Fields:
profile_display_name(string)already_exists_locally(bool)keycloak_managed(bool)snapshots(repeated Backup.ProfileBackup.Snapshot)
Backup.ProfileBackup.Snapshot
Fields:
id(string - id to specify to restore an identity backup)timestamp(uint64)from_device_name(string)contact_count(uint64)group_count(uint64)client_key_count(uint64)storage_elements_count(uint64)identity_settings(IdentitySettings)