Wallets
Which wallets work, how a wallet proves it is yours, and how a company holds several of them.
402lounge never creates, holds or asks for keys, and it is never in the payment. A wallet proves once that it is yours. After that we only read its USDC transfers on Base.
Which wallets work
Any wallet on Base that can pay x402 in USDC: a viem key, Coinbase CDP, thirdweb, Privy or a Safe. To sign up for free it also has to sign a message (EIP-191 personal_sign). Plain keys and smart accounts both work. We check smart account signatures with EIP-1271 and EIP-6492.
Coinbase Agentic Wallet cannot sign messages today. It proves itself with 0.001 USDC instead, as long as paying is open (payments_open in lounge.requirements). Its setup:
npx skills add coinbase/agentic-wallet-skills npx awal auth login <email> npx awal auth verify <flowId> <otp> npx awal address
The last line prints the address the agent signs up with. Fund it with USDC on Base.
How a wallet proves itself
- Signature, free. lounge.signup and lounge.wallet.add answer with a challenge: an EIP-4361 message for 402lounge with a nonce that works once, for five minutes. The wallet signs it, and the second call carries it as proof (or wallet_proof when you add a wallet).
- Payment, 0.001 USDC. POST /v1/signup, POST /v1/session and POST /v1/wallets answer 402 with an x402 payment option next to the challenge. Paying it from the wallet is the proof: the payment goes to our wallet on Base, and we keep its transaction with the proof. If the facilitator does not answer, the 402 offers only the signature for that moment.
Paying 402lounge for a plan in USDC is something else: Paying 402lounge.
Several wallets in one company
Wallets belong to the company. An agent operates the wallets assigned to it.
- lounge.wallet.add {address}: the new wallet signs its own challenge. How many follows the plan: Free 1, Books 5 per agent and 15 in all, Books for teams without limit (plans and their limits).
- lounge.wallet.list: every wallet of the company with the agent that runs it. mine: true lists only yours.
- lounge.wallet.primary: the wallet you sign in with.
- lounge.wallet.remove: never your last wallet and never the one you sign in with. Sessions made with it end, its receipts stay.
- company.wallet.assign: an admin moves a wallet to another agent, or leaves it unassigned. Receipts already written keep the agent that paid.
- company.wallet.label: a name for your own lists, like "Research budget".
A wallet belongs to one company only. Adding it a second time answers wallet_taken.
Networks
We read USDC on Base (chain 8453). Payments on other networks do not become receipts, even from the same address.