Skip to main content
Pay with a Wallet lets customers pay from a self-custody wallet by signing payloads that place a hold on their funds. It supports 500+ EVM wallets, including MetaMask, Trust Wallet, Base Pay, and Rabby, and Solana wallets such as Phantom and Solflare. The session target can be a CDP account or a Base address.
Coinbase’s hosted checkout runs this flow for you. Call these endpoints only when you build the checkout yourself.

How it works

Before you start, create a payment session.

1. Get authorization options

Pass every address the connected wallet controls, up to 5, comma-separated. Each returned option gives the network, asset, amount, and payloads to sign.
  • Coinbase returns at most one option per asset, from the address with the highest stablecoin balance. That can be a Solana address.
  • Addresses that aren’t chosen, for example because of insufficient funds, are omitted.
  • Add network or asset only when you must restrict the choice. The Solana network name is solana in every environment, including Sandbox.

EVM wallet

Add network=solana only when the payment must come from Solana.
This call doesn’t modify the session.

2. Sign the payloads

Sign every payload in the chosen option. The payload type tells you how to handle data:

Solana signatures

data.transaction is the unsigned transaction, base64-encoded. Coinbase broadcasts it, so you submit only the signature:
  1. Base64-decode data.transaction.
  2. Pass the bytes to Wallet Standard signTransaction.
  3. Take the 64-byte ed25519 signature of the signer: data.signerAddress for a payment, or the customer’s Solana address for a mandate approval.
  4. Base58-encode that signature and submit it as signature.
Submitting the signed transaction bytes or a transaction ID returns invalid_signature.

3. Submit the signatures

Submit the signatures with the chosen optionId:

EVM wallet

The authorization starts as pending and moves to succeeded or failed. Track it with webhooks.

Payment Sessions

Session lifecycle, authorization outcomes, and idempotency

Recurring Payments

Approve once, then authorize payments without a new signature

Webhooks

Get notified when authorization succeeds or fails

API Reference - Wallet Auth

Wallet authorization API