Get User Wallets
/wallets
Authentication: Required (Bearer token via Privy)
Response Fields
Unique wallet identifier
User’s DID who owns this wallet
User-defined wallet name for easy identification
Whether this is an Externally Owned Account (true) or Smart Account (false)
Whether this wallet has redeemer role for merchant QR code redemptions
Whether this wallet has minting privileges
Ethereum address of the EOA (or owner EOA for smart accounts)
Smart contract wallet address (null for EOAs)
Index for smart account derivation (null for EOAs)
ISO 8601 timestamp of last token unwrap operation
Add Wallet
/wallets
Authentication: Required (Bearer token via Privy)
Request Body
User-defined name for the wallet
Whether this is an Externally Owned Account (true) or Smart Account (false)
Ethereum address of the EOA (or owner EOA for smart accounts)
Smart contract wallet address (required if
is_eoa is false)Index for smart account derivation (required if
is_eoa is false)Whether this wallet should have redeemer privileges (defaults to false)
Whether this wallet should have minting privileges (defaults to false)
Response
Returns the newly created wallet’s ID as a string.Special Behavior
When adding a smart account (first wallet withsmart_index: 0) for a user who has an approved merchant location, the wallet is automatically granted redeemer role for QR code redemptions.
Update Wallet
/wallets
Authentication: Required (Bearer token via Privy)
Request Body
ID of the wallet to update
Updated wallet name
Whether this is an Externally Owned Account
Ethereum address of the EOA
Smart contract wallet address (for smart accounts)
Index for smart account derivation (for smart accounts)
Whether this wallet has redeemer privileges
Whether this wallet has minting privileges
ISO 8601 timestamp of last unwrap operation
Response
Returns201 Created on success with no body.
Authorization
Users can only update their own wallets. Theowner field is automatically set to the authenticated user’s DID.
Wallet Types
EOA (Externally Owned Account)
Traditional Ethereum accounts controlled by a private key (e.g., MetaMask, hardware wallets).- Set
is_eoa: true - Only
eoa_addressis required smart_addressandsmart_indexshould be null
Smart Account
Contract-based accounts with advanced features like batched transactions and gasless operations.- Set
is_eoa: false - Requires
eoa_address(owner),smart_address(contract), andsmart_index - Used with account abstraction and bundler services
Wallet Roles
Redeemer Role
Wallets withis_redeemer: true can redeem QR codes for merchant transactions. This role is automatically granted to merchants’ first smart account when they have an approved location.
Minter Role
Wallets withis_minter: true have privileges to mint new tokens. This is typically restricted to admin or authorized accounts.
Error Responses
400 Bad Request
Invalid request format or missing required fields
401 Unauthorized
Missing or invalid authentication token
403 Forbidden
User does not have permission to access this resource
500 Internal Server Error
Server-side error occurred during wallet operation