Get desktop application:
View/edit binary Protocol Buffers messages
Used in:
Used in:
0 means no universal expire timer.
Used in:
If unset, importers should ignore the subscriber data without throwing an error.
Identifies an Android Play Store IAP subscription.
Identifies an iOS App Store IAP subscription.
Used in:
Interpret as "Nobody"
Used in:
Used in:
32 bytes of entropy used for encryption
16 bytes of encoded UUID provided by the server
Used in:
Interpret as "Blue"
Used in:
Refers to a `CallLink` recipient.
Used in:
Interpret as "Generic"
If unset - computed as the value of the first byte of SHA-256(msg=CONTACT_ID) modulo the count of colors. Once set the avatar color for a recipient is never recomputed or changed. `CONTACT_ID` is the first available identifier from the list: - ServiceIdToBinary(ACI) - E164 - ServiceIdToBinary(PNI) - Group Id
Used in:
, ,32-byte random value generated when the backup is uploaded for the first time.
Used in:
'start' and 'length' are measured in UTF-16 code units. They may refer to offsets in a longText attachment.
If unset, importers should ignore the body range without throwing an error.
Used in:
Importers should ignore the body range without throwing an error.
* Call Links have some associated data including a call, but unlike other recipients are not tied to threads because they do not have messages associated with them. note: - room id can be derived from the root key - the presence of an admin key means this user is a call admin
Used in:
Only present if the user is an admin
Used in:
Interpret as "Admin Approval"
Used in:
generated id for reference only within this file
will be displayed in ascending order
INT64_MAX (2^63 - 1) = "always muted".
Used in:
Folder includes all 1:1 chats, unless excluded
Folder includes all group chats, unless excluded
generated recipient id of groups, contacts, and/or note to self
generated recipient id of groups, contacts, and/or note to self
Represents the default "All chats" folder record vs all other custom folders
Used in:
Interpret as "Custom"
Used in:
conversation id
recipient id
timestamp of when expiration timer started ticking down
how long timer of message is (ms)
ordered from oldest to newest
If unset, importers should skip this item without throwing an error.
If unset, importers should skip this item without throwing an error.
group story reply messages are not backed up
Used in:
(message has no fields)
Used in:
Used in:
Used in:
,If unset, importers should consider there to be no wallpaper.
This `FilePointer` is expected not to contain a `fileName`, `width`, `height`, or `caption`.
If unset, importers should consider it to be AutomaticBubbleColor
Bubble setting is automatically determined based on the wallpaper setting, or `SOLID_ULTRAMARINE` for `noWallpaper`
See AccountSettings.customChatColors
Used in:
(message has no fields)
Used in:
Interpret as the user's default chat bubble color
Used in:
If unset, use the default chat color
0xAARRGGBB
Used in:
degrees
0xAARRGGBB
percent from 0 to 1
Used in:
Interpret as the wallpaper being unset
Used in:
If unset, importers should ignore the update message without throwing an error.
Used in:
should be 16 bytes
should be 16 bytes
If unset, consider the user to be registered
absent iff both `given` and `family` are empty
Used in:
A valid value -- indicates unset by the user
Was once verified and is now unverified
Used in:
Used in:
Used in:
(message has no fields)
Used in:
A valid value -- the contact is not hidden
Used in:
Used in:
Used in:
Intepret as "Home"
Used in:
Used in:
Used in:
Interpret as "Home"
Used in:
Used in:
Interpret as "Home"
Used in:
Used in:
If unset, importers should ignore the message without throwing an error.
Used in:
Used in:
generated recipient id
Used in:
Interpret as "Only with"
Used in:
distribution ids are UUIDv4s. "My Story" is represented by an all-0 UUID (00000000-0000-0000-0000-000000000000).
distribution list ids are uuids
If unset, importers should skip the item entirely without showing an error.
For 1:1 chat updates only. For group thread updates use GroupExpirationTimerUpdate.
Used in:
0 means the expiration timer was disabled
Used in:
, , , , , ,If unset, importers should consider it to be an InvalidAttachmentLocator without throwing an error.
References attachments in the transit storage tier. May be downloaded or not when the backup is generated; primarily for free-tier users who cannot copy the attachments to the backup (media) storage tier.
Used in:
References attachments in the backup (media) storage tier.
Used in:
If present, the cdn number of the succesful upload. If empty/0, may still have been uploaded, and clients can discover the cdn number via the list endpoint.
Fallback in case backup tier upload failed.
References attachments that are invalid in such a way where download cannot be attempted. Could range from missing digests to missing CDN keys or anything else that makes download attempts impossible. This serves as a 'tombstone' so that the UX can show that an attachment did exist, but for whatever reason it's not retrievable.
Used in:
(message has no fields)
Frames must follow in the following ordering rules: 1. There is exactly one AccountData and it is the first frame. 2. A frame referenced by ID must come before the referencing frame. e.g. a Recipient must come before any Chat referencing it. 3. All ChatItems must appear in global Chat rendering order. (The order in which they were received by the client.) 4. ChatFolders must appear in render order (e.g., left to right for LTR locales), but can appear anywhere relative to other frames respecting rule 2 (after Recipients and Chats). Recipients, Chats, StickerPacks, AdHocCalls, and NotificationProfiles can be in any order. (But must respect rule 2.) For example, Chats may all be together at the beginning, or may each immediately precede its first ChatItem.
If unset, importers should skip this frame without throwing an error.
Used in:
Used in:
Used in:
A valid state
Used in:
Used in:
Used in:
Intepret as "Unsatisfiable"
Used in:
If unset, consider the field it represents to not be present
These are simply plaintext copies of the groups proto from Groups.proto. They should be kept completely in-sync with Groups.proto. These exist to allow us to have the latest snapshot of a group during restoration without having to hit the network. We would use Groups.proto if we could, but we want a plaintext version to improve export readability. For documentation, defer to Groups.proto. The only name change is Group -> GroupSnapshot to avoid the naming conflict.
Used in:
Used in:
,Used in:
Intepret as "Default"
Used in:
Used in:
Used in:
Used in:
A valid value -- indicates unset by the user
Used in:
The aci who had admin status granted or revoked.
Used in:
Used in:
Used in:
Used in:
The time the call ended.
Used in:
Interpret as "Generic"
A group call was started without ringing.
We joined a group call that was started without ringing.
An incoming group call is actively ringing.
We accepted an incoming group ring.
We declined an incoming group ring.
We missed an incoming group ring, for example because it expired.
We auto-declined an incoming group ring due to a notification profile.
An outgoing ring was started. We don't track any state for outgoing rings beyond that they started.
Used in:
Must be one or more; all updates batched together came from a single batched group state update.
Used in:
If unset, importers should consider it to be a GenericGroupUpdate with unset updaterAci
Used in:
Used in:
Null value means the group description was removed.
For 1:1 timer updates, use ExpirationTimerChatUpdate.
Used in:
0 means the expiration timer was disabled
Used in:
Used in:
Note: if invited by pni, just set inviteeAci to nil.
These invitees should never be the local user. Use GroupSelfInvitationRevokedUpdate in those cases. The inviter or updater can be the local user.
Used in:
The member that revoked the invite(s), not the inviter! Assumed to be an admin (at the time, may no longer be an admin or even a member).
Used in:
Prefer to use aci over pni. No need to set pni if aci is set. Both can be missing.
Used in:
Used in:
Used in:
Used in:
Used in:
The aci that approved or rejected the request.
Used in:
Used in:
Used in:
If hadOpenInvitation is true, optionally include aci of the inviter.
Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
Null value means the group name was removed.
An invitation to self was revoked.
Used in:
A single requestor has requested to join and cancelled their request repeatedly with no other updates in between. The last action encompassed by this update is always a cancellation; if there was another open request immediately after, it will be a separate GroupJoinRequestUpdate, either in the same frame or in a subsequent frame.
Used in:
Used in:
Can be the self user.
Used in:
,Interpret as "Unsatisfiable"
The local user migrated gv1->gv2 but was unable to add or invite some members and dropped them instead. (Happens for e164 members where we don't have an aci).
Used in:
The local user migrated gv1->gv2 but was unable to add some members and invited them instead. (Happens if we don't have the invitee's profile key)
Used in:
Another user migrated gv1->gv2 but was unable to add the local user and invited them instead.
Used in:
(message has no fields)
A gv1->gv2 migration occurred.
Used in:
(message has no fields)
Used in:
Used in:
Interpret as "Incoming"
Used in:
Interpret as "Accepted"
An incoming call that is no longer ongoing, which we neither accepted not actively declined. For example, it expired, was canceled by the sender, or was rejected due to being in another call.
We auto-declined an incoming call due to a notification profile.
Used in:
Interpret as "Audio call"
Used in:
If unset, importers should consider the previous name to be an empty string.
Used in:
A FilePointer on a message that has additional metadata that applies only to message attachments.
Used in:
, ,Cross-client identifier for this attachment among all attachments on the owning message. See: SignalService.AttachmentPointer.clientUuid.
Similar to SignalService.AttachmentPointer.Flags, but explicitly mutually exclusive. Note the different raw values (non-zero starting values are not supported in proto3.)
Used in:
A valid value -- no flag applied
Used in:
0xAARRGGBB
generated recipient id for allowed groups and contacts
24-hour clock int, 0000-2359 (e.g., 15, 900, 1130, 2345)
24-hour clock int, 0000-2359 (e.g., 15, 900, 1130, 2345)
Used in:
Interpret as "Monday"
Used in:
stored as a decimal string, e.g. 1.00001
stored as a decimal string, e.g. 1.00001
Used in:
If unset, importers should treat the transaction as successful with no metadata.
Failed payments can't be synced from the ledger
Used in:
Used in:
A valid value -- reason unknown
Used to map to payments on the ledger
Used in:
for received transactions
for sent transactions
Used in:
This identification is used to map the payment table to the ledger and is likely required otherwise we may have issues reconciling with the ledger
mobile coin blobs
mobile coin blobs
Used in:
A valid value -- state unconfirmed
Used in:
Used in:
null if the target message could not be found at time of quote insert
Used in:
Used in:
Interpret as "Normal"
Used in:
, , , ,A higher sort order means that a reaction is more recent. Some clients may export this as incrementing numbers (e.g. 1, 2, 3), others as timestamps.
Used in:
generated id for reference only within this file
If unset, importers should skip this frame without throwing an error.
Used in:
(message has no fields)
Tombstone for remote delete
Used in:
(message has no fields)
Used in:
Used in:
If no invitee id available, use GroupUnknownInviteeUpdate
Used in:
Used in:
the time the status was last updated -- if from a receipt, it should be the sentTime of the receipt
If unset, importers should consider the status to be "pending"
Used in:
Used in:
Used in:
A valid value -- could indicate a crash or lack of information
Used in:
(message has no fields)
Used in:
Used in:
e.g. user in group was blocked, so we skipped sending to them
Used in:
(message has no fields)
Used in:
Used in:
Used in:
Used in:
Importers should skip the update without throwing an error.
marking as unverified
Used in:
Used in:
Stickers are uploaded to be sent as attachments; we also back them up as normal attachments when they are in messages. DO NOT treat this as the definitive source of a sticker in an installed StickerPack that shares the same packId.
Used in:
Used in:
Used in:
, ,Used in:
Used in:
Will be null for viewed messages