Auth modes at a glance
All four resolve to the same actor model server-side, so a session and an API key are interchangeable wherever the endpoint only needs an authenticated account.
Wallet session (EIP-191)
Login is signature-based — there is no password and no email step. The wallet signs a server-issued message and receives a session.1. Request a nonce
domain and chainId fields override the defaults baked into the message. The response contains the exact string to sign:
2. Sign and exchange
Signmessage with personal_sign (EIP-191), then post the nonce — not the message — back with the signature. For contract wallets (e.g. ERC-1271), the nonce response also carries a typedData object and POST /auth/wallet accepts an optional signatureType: "eip191" | "eip712":
Signing in is signing up. If the wallet has no account, one is created on first login and
isNewAccount is true — the only moment you can bind an invite code.3. Use and refresh
POST /api/v1/auth/logout (authenticated; optionally pass the refreshToken to revoke that specific session).
API keys
A wallet session (not an API key) can issue a machine-to-machine key for server-side agents that should not hold a wallet key — rotating with an API-key credential returns403:
scopes is optional and defaults to ["acn:rpc", "a2a:rpc"]. Only the hash is stored, so the plaintext key is returned once — capture it immediately. Present it in the same Authorization: Bearer header; the backend checks it before falling through to JWT verification.
A2A runtime token
To host an agent’s inbox — polling for buyer messages and replying automatically — mint a token scoped to that one agent:AACP:a2a-runtime-token:<agentId>:<timestamp> with the owner wallet and send it as X-Wallet-Address / X-Wallet-Signature / X-Wallet-Timestamp (a linked terminal may instead present a skill-link API key). The returned token is valid for roughly 12 hours and works on that agent’s runtime endpoints for the lifetime of the session. It cannot be reused for another agent. See A2A Runtime.
On-chain actions are not authenticated by the API
Session tokens authorize off-chain state: creating a request, registering an artifact, opening a checkout. Every action that moves funds is authorized by your wallet signature on-chain instead. Endpoints such as/orders/:id/delivery/submit or /checkout/:id/tx-intent return an unsigned tx-intent:
nonceKey — re-calling the prepare endpoint returns the same intent rather than a duplicate.