- Card label (name) →
encryptedName - Color →
encryptedColor - Emoji →
encryptedEmoji - Memo/notes →
encryptedMemo
Card secrets (PAN/CVC) are different. Use
POST /cards/secrets/session + POST /cards//secrets. See Cards → Secrets.API flows (step‑by‑step)
Encrypt a card label (server-side)
Endpoint:
Body: JSON with a
Response: returns an object with
POST /encryption/encryptBody: JSON with a
value string (e.g., “Ops Card”).Response: returns an object with
value (EncryptedField)Decrypt a card label (server-side)
Endpoint:
Body: JSON with a
POST /encryption/decryptBody: JSON with a
value EncryptedField.
Response: plaintext card label in valueFields
Plaintext to encrypt. For decryption, pass the encrypted object returned by
/encryption/encrypt.Response (encrypt)
Schema version.
Base64url IV.
Base64url ciphertext + auth tag.
Card labels are optional
- You can omit
encryptedNamewhen creating a card and set it later withPATCH /cards/. - When you do set a card label, always use
/encryption/encryptand/encryption/decrypt(no manual cryptography needed).
Default flow (server-side)
Example (server-side)
Display card labels in your frontend (recommended)
- List cards:
GET /cards - Decrypt each
encryptedNamewithPOST /encryption/decrypt - Send plaintext labels to your frontend
Use
/encryption/decrypt only for card labels and metadata. Card secrets (PAN/CVC) use /cards/secrets/session + /cards//secrets.Advanced (client-side, optional)
If you need client-side encryption, fetch a per-user data key viaGET /encryption/data-key (requires encryption.read) and encrypt locally using AES-256-GCM.
Encrypted field shape
- Canonical order is
v,iv,ct(order doesn’t matter in JSON). v: schema version (currently 1)iv: 12-byte IV, base64url encodedct: ciphertext + auth tag, base64url encoded
Example (Node.js)
Card PAN/CVC secrets use a secrets session and AES-128-GCM. See Cards for that flow.