Your wallet becomes your account
Pay per call is a door, not a meter. The payer address on an x402 payment keys a Pay as you go account. The first time a wallet pays for an inbox, the response carries credentials: an API key for that account, shown once. Every later paid request from the same wallet operates the same account, and so does the key.
- Each paid inbox adds 1 inbox and 1,000 sends per month to the account.
- With the key, reads and sends within those limits are free. Send
Authorization: Bearer dse_...like any other client. - Paid sends bypass the monthly ceiling, so a wallet can always send by paying $0.01 even after the plan's sends are used up.
- The key has the same scoped permissions as an agent-signup key: inboxes and messages, no domains, billing, team, or extra keys.
- Claim the account with a verified email via
POST /v1/auth/claimto move to a regular plan, lift the limits and add custom domains. - A wallet that has never bought an inbox has nothing to read, so a paid
GETfrom an unknown wallet returns402witherror.reasonexplaining thatPOST /v1/inboxescomes first.
{
"data": {
"inbox_id": "6f1c2d3e-8a4b-4c5d-9e6f-0a1b2c3d4e5f",
"email": "paid-bot_3e7a9c1d@box1.deadsimple.email",
"display_name": "Paid Bot",
"credentials": {
"api_key": "dse_...",
"key_id": "key_...",
"account_id": "0b7d4a6e-2c19-4f8e-b3a1-5d6e7f8a9b0c",
"note": "Use this key (Authorization: Bearer ...) for free reads and sends within the plan; or keep paying per request from the same wallet. Claim the account with a verified email via POST /v1/auth/claim to lift limits and add custom domains.",
"warning": "Store this key now. It is shown once and cannot be retrieved again."
},
"payment": {
"transaction": "0x9f3c...",
"network": "eip155:8453",
"payer": "0xAbCd...0001"
}
}
}
# Second paid inbox from the same wallet: same account, inbox_limit +1,
# no "credentials" block. With Stripe MPP, "payment" is {"reference": "pi_...", "method": "stripe"}.