POST /v1/sessions. See also: Create Session.
Prefilled Amount (amountUnits)
Pass destination.amountUnits to lock the deposit to an exact amount. The user skips amount selection and proceeds directly to the payment flow.
| Field | Type | Description |
|---|---|---|
amountUnits | string, optional | Fixed amount in token units (e.g. "25.00" for $25 USDC). When omitted, the user chooses the amount. |
Contract Calls (calldata)
Pass destination.calldata to execute an arbitrary contract call with deposited funds. When using calldata, destination.address is the contract being called.
How it works
- Daimo delivers the destination token to the contract
- A token approval of the deposit amount is made to the contract
- The contract is called with the provided
calldata - If the call succeeds, the session completes normally
- If the call reverts, funds are sent to
refundAddressinstead, and the session status becomesbounced
Contract requirements
Your contract must handle variable input amounts. Specifically, it should:- Check the allowance of the destination token from
msg.sender - Use
transferFromto pull the full allowance
amountUnits is set. While over- or under-payments are rare with a fixed amount, they cannot be guaranteed to never happen.
Example: generating calldata with viem
Error handling
If your contract call reverts:- The session status becomes
bounced - Funds are sent to the
refundAddressyou specified
refundAddress when using calldata to ensure funds are recoverable.
Payment Options (Legacy)
Optionally passdisplay.paymentOptions to control which payment methods appear and in what order.
When omitted, all available methods are shown.
Categories
| Option | Description |
|---|---|
"AllFiat" | All eligible fiat methods configured for the org |
"AllBank" | All eligible bank fiat methods configured for the org |
"AllAddresses" | Deposit address options for all supported EVM chains |
"AllExchanges" | All exchange options (Coinbase, Binance USDC, Lemon). Excludes opt-in options like BinanceUSDT, CashApp, and MtPelerin |
"AllWallets" | All supported wallet deeplinks (MetaMask, Trust, Phantom, etc.) |
Fiat
| Option | Description |
|---|---|
"Interac" | Interac hosted fiat flow |
"ApplePay" | Apple Pay hosted fiat flow |
"ACH" | ACH hosted fiat flow |
"SEPA" | SEPA hosted fiat flow |
"JPYC" | JPYC hosted fiat flow |
"ARS" | ARS hosted fiat flow |
Deposit Addresses
| Option | Description |
|---|---|
"Tron" | Tron USDT deposit address; payment-method responses can include an optional Trust Wallet send deeplink |
"Arbitrum" | Arbitrum deposit address |
"Base" | Base deposit address |
"Optimism" | Optimism deposit address |
"Polygon" | Polygon deposit address |
"Ethereum" | Ethereum deposit address |
"BSC" | BSC (BNB Chain) deposit address |
Exchanges
| Option | Description |
|---|---|
"Coinbase" | Coinbase onramp |
"BinanceUSDC" | Binance Connect (USDC withdrawal) |
"BinanceUSDT" | Binance Connect (USDT withdrawal, opt-in) |
"Lemon" | Lemon cash-out |
Cash App
| Option | Description |
|---|---|
"CashApp" | Cash App payment via Lightning |
Wallets
| Option | Description |
|---|---|
"MetaMask" | MetaMask wallet |
"Trust" | Trust Wallet with USDT on Tron and Ethereum choices |
"Phantom" | Phantom wallet |
"Rainbow" | Rainbow wallet |
"BaseApp" | Base (Coinbase Wallet) |
"Bitget" | Bitget wallet |
"OKX" | OKX wallet |
"Zerion" | Zerion wallet |
"ConnectedWallet" | Use already-connected browser wallet (no prompt, errors if none) |
"AutoconnectInjectedWallets" | Auto-connect injected browser wallet |
paymentOptions is omitted, the default is ["AllWallets", "AllExchanges", "AllAddresses"]. CashApp, Tron, AllFiat, AllBank, and individual chain addresses must be explicitly included.
Array order defines display order. A single option skips the selection screen (e.g. ["Lemon"] goes straight to Lemon).
Nested arrays control wallet ordering within a group: