The postal register’s parts, each drawn in every state it can be in. Red appears only in wax: the seal, and the word “lock”. Airmail blue marks what is open. Everything else is ink, pencil and ruling on manila.
ExampleAddresses, keys and letters here are examples made by the SDK. The Monad mainnet smoke-test key and its transaction link are real.
Colour and type
Six brand values and their surfaces. The wax is a state, not a decoration: it appears when a seal presses shut and when it breaks.
Manila--bg #F3EEE3the page: envelope stock
Letter sheet--bg-elevated #F8F4EBcards, slips, the letter
Five states. It presses in 280 ms with an overshoot and cracks in 560 ms; with reduced motion the change is instant. It appears on the seal and open screens only.
absentwhere the wax will landpressedseal() completedcrackedopen() succeeded
pressing, frame by frame
0 ms
70 ms
140 ms
210 ms
280 ms
cracking, frame by frame
0 ms
140 ms
280 ms
420 ms
560 ms
replaypress it shut, crack it open, at full speed
Envelope
An airmail edge, an italic address line, a flap that is down or folded back, a slot for the seal and one for the letter. The letter exists only before sealing and after opening.
Maya, the dentist moved to Thursday at 10:40. I will remind you on Wednesday evening.
A returned-to-sender slip for each SDK error a person can meet: what happened, in plain words, and what to do. Inked, never red.
Returned to sender
ExamplePRF_UNSUPPORTED
Returned to sender: This passkey can’t make an encryption key.
Your passkey provider returned no PRF output, and your encryption key is derived from that output. Some providers return none, for example Dashlane and some Chrome profiles.
No key from this passkey
No passkey answered
Not in the register
Key from another epoch
Sealed to another passkey
Damaged in transit
Postage due
No answer from the register
Not the agent’s owner
What to doUse a passkey saved in a provider that returns PRF output, such as iCloud Keychain in Safari 18 or later, and create your address again.
Returned to sender
ExamplePASSKEY_FAILED
Returned to sender: No passkey answered.
The passkey prompt was cancelled or timed out, or this device has no passkey for this site.
No key from this passkey
No passkey answered
Not in the register
Key from another epoch
Sealed to another passkey
Damaged in transit
Postage due
No answer from the register
Not the agent’s owner
What to doTry again and approve the prompt. If no passkey is offered, use the device where you created your address, or one that syncs its passkeys.
Returned to sender
ExampleNO_KEY_PUBLISHED
Returned to sender: Addressee not in the register.
The directory has no key for this address, so there is nothing to seal to. Nothing was sealed and nothing was sent.
No key from this passkey
No passkey answered
Not in the register
Key from another epoch
Sealed to another passkey
Damaged in transit
Postage due
No answer from the register
Not the agent’s owner
What to doAsk them to create their Letterlock address, then seal the note again.
The envelope is sealed to epoch 1, and the key in hand is for epoch 2.
No key from this passkey
No passkey answered
Not in the register
Key from another epoch
Sealed to another passkey
Damaged in transit
Postage due
No answer from the register
Not the agent’s owner
What to doOpen it with your passkey again: it re-derives the key for every earlier epoch, including epoch 1.
Returned to sender
ExampleWRONG_KEY
Returned to sender: Sealed to a different passkey.
The envelope did not open. It names key 6b52 86d1 ad27 08a1, and the passkey you chose derives 5930 13e0 5c26 c52f.
No key from this passkey
No passkey answered
Not in the register
Key from another epoch
Sealed to another passkey
Damaged in transit
Postage due
No answer from the register
Not the agent’s owner
What to doOpen it again and choose the passkey you used when you created this address.
Returned to sender
ExampleTAMPERED
Returned to sender: Damaged in transit.
The envelope failed its authentication check: it was changed after it was sealed. No part of it was decrypted.
No key from this passkey
No passkey answered
Not in the register
Key from another epoch
Sealed to another passkey
Damaged in transit
Postage due
No answer from the register
Not the agent’s owner
What to doDon’t trust this copy. If you know who sent it, ask them to seal the note again.
Returned to sender
ExampleINSUFFICIENT_FUNDS
Returned to sender: Not enough postage.
Posting is a Monad transaction, paid in MON by your passkey account, and it holds too little. Nothing was sent.
No key from this passkey
No passkey answered
Not in the register
Key from another epoch
Sealed to another passkey
Damaged in transit
Postage due
No answer from the register
Not the agent’s owner
What to doSend a little MON to your passkey account from any wallet, then press the button again.
Returned to sender
ExampleCHAIN_UNAVAILABLE
Returned to sender: The register did not answer.
Monad’s RPC gave no answer, so nothing is known either way. This is not the same as “no key”: the key may well be there.
No key from this passkey
No passkey answered
Not in the register
Key from another epoch
Sealed to another passkey
Damaged in transit
Postage due
No answer from the register
Not the agent’s owner
What to doTry again in a moment. If a transaction link was shown, open it before sending anything again.
Returned to sender
ExampleNOT_AGENT_OWNER
Returned to sender: Not the agent’s owner.
Only the account that owns an ERC-8004 agent in the identity registry may post that agent’s key, and this account does not own it.
No key from this passkey
No passkey answered
Not in the register
Key from another epoch
Sealed to another passkey
Damaged in transit
Postage due
No answer from the register
Not the agent’s owner
What to doPost the key from the account that owns the agent, or check the agent id.
ExampleThe quoted keys and epochs are what the SDK’s open() really reports for example letters: Maya’s letter opened with Nadia’s passkey, and Kai’s epoch 1 letter with his epoch 2 key.
PasskeyButton
The one primary action on a screen that raises a passkey prompt. Ink, or airmail blue when it opens a letter; never red. While the prompt is up it keeps focus and says what it waits for.
ink
idlehoverfocuskeyboardpressedwaitingthe prompt is updisabled
airmail
idlehoverfocuskeyboardpressedwaitingthe prompt is updisabled
Other actions, same stamp
inkno promptairmaila letter going outairmail, waitinga transaction is outoutlinesecondaryoutline, hover
Ink marks struck on the paper. The strip is a postal 4-state bar code of the key fingerprint: 32 bars, two bits each, the same 16 digits as the hex beside it.
Postmarkring onlyPostmarkwith cancellation barsWordmarkoutlined; “lock” is wax
6b52 86d1 ad27 08a1
KeyStripopen: a key found in the register
KeyStripink · pencil (superseded)
Example
ExampleBadgestamped on anything not on chain
Fields
A postal form’s lines: capitals for the label, a ruled box to write in. The note is written on a ruled sheet and counted in bytes, the unit the envelope limit is written in.
An address (0x…) or an agent (agent:<id>).
TextFieldaddress, in the data face
That is not a whole address: an address is 0x and 40 hex digits.
TextFieldwith a form error
85 bytes
NoteFieldbytes counted live
85 bytes of 64 bytes
The note is over its limit of 64 bytes.
NoteFieldover its byte limit (64 here), announced once as it goes over