Export a key
Key export is session-only: it must be performed from a signed-in browser session (the dashboard does this under Wallets → Export), and API keys are rejected with403 session_required. This means a leaked API key can move
sandbox funds, but it can never exfiltrate key material.
It also needs step-up: re-enter your
account password, plus a fresh authenticator code when 2FA is on. An
exported key never expires and can’t be revoked, so a stolen session cookie
alone must not be enough to take it. A wrong password or code is 401
(invalid_credentials / invalid_totp_code; totp_required when the code is
missing), and failures count toward the step-up locks like any other step-up.
The wallet is checked first: an unknown id (404) or an external wallet
(400 wallet_not_custodial) is refused before step-up, so it doesn’t use up
your code.
- You choose a passphrase of 8–200 characters; pick a long one.
- The server decrypts the stored key transiently and immediately re-encrypts it under your passphrase with PBKDF2-SHA256 (310,000 iterations) + AES-256-GCM. The plaintext private key never leaves the server.
- The response is
{ filename, nota }; writenotato disk as the suggested.notafile.
400).
Share an address, not a screenshot
For the receive side, produce an address card: a.nota file with the
public address and chain context, zero key material:
Backup checklist
1
Export each custodial wallet you care about
One
.nota per wallet, each under a strong, unique passphrase.2
Store file and passphrase separately
File in encrypted storage; passphrase in your password manager. Together
they are the wallet; apart they are inert.
3
Record the address mapping
Keep each wallet’s address (or its address card) alongside your records so
you can verify a restored key against the expected address.
Deactivating an account (an admin action) kills sessions and API keys
immediately, but exported files you already hold remain valid ciphertext.
Rotate what matters accordingly.