- The outer fields tell nodes where and how to handle it.
- The encrypted header carries protected routing or application metadata.
- The payload carries encrypted message data.
Smallest practical shape
Required fields
If using flat fields, supply
encrypted_header, header_nonce, schema_version, and either header_key_id or header_key_epoch.
Common optional fields
Unknown outer fields are rejected. This protects interoperability by preventing different clients from silently inventing incompatible headers.
Chunked messages
For a large encrypted object, send independently deliverable chunks. Each chunk has its ownmessage_id and shares a UUID message_group_id.
sequence_number begins at 0 and must be less than total_chunks. Relay and Cache nodes do not reassemble or decrypt the content.
Sender signatures
Sender identity is optional at the envelope-validation layer. If you provide either the sender DID orsignature, provide both. Nodes that verify the sender resolve the DID and check the signature against its authorized public key.
Straight to the point
- JSON object only
- UUID
message_id - Valid recipient DID
- Timestamp plus encrypted payload
- Flat encrypted header or
context - No unknown top-level fields
- Encrypt before sending

