Use the Daimo API directly to build a custom deposit experience. This works with any language or framework, no React required.Documentation Index
Fetch the complete documentation index at: https://docs.daimo.com/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The deposit flow has four steps:- Create a session: server-side, with your API key
- Choose a payment method: client-side, with the client secret
- Wait for deposit: show the deposit address, poll for status
- Handle completion: process the result
Step 1: Create a session
Create a session on your server. Never expose your API key to the client.session.clientSecret and session.sessionId to your client.
Step 2: Choose a payment method
On the client, call the payment methods endpoint. This transitions the session fromrequires_payment_method to waiting_payment.
EVM deposit (any EVM chain):
receiverAddress in result.session.paymentMethod. Display this EVM address to the user - they send tokens to it from any supported chain.
tron.receiverAddress in result.session.paymentMethod, a temporary Tron address. Display it to the user so they can send USDT to it.
solana.serializedTx, a hex-encoded serialized Solana transaction for the user’s wallet to sign and submit.
This preserves a one-click wallet experience on Solana: swap and burn actions are bundled into one signed transaction. Unlike EVM and Tron, there is no receiverAddress for type: "solana".
fiat.hostedUrl; open it in a WebView or new browser tab. The session progresses through waiting_payment → processing → succeeded like any other payment method, and Daimo delivers the stablecoin to your destination once the fiat transfer settles.
paymentMethod.fiatMethod (one of interac, ach, sepa, apple_pay) to pin the hosted flow to one rail. If omitted, the hosted page shows every fiat method enabled for the org.
hostedUrl is returned only once from the createPaymentMethod call — store it on the client. It is not included when retrieving the session later. See the WebView guide for how to load the hosted URL in iOS, Android, and React Native.
Fiat rails are enabled per-org. To request access, contact us.
Step 3: Wait for session completion
Poll for status updates to the session after the user has paid.txHash to speed up detection.
Step 4: Handle completion
Check for terminal statuses:succeeded- funds deliveredbounced- delivery failed (e.g. contract call reverted). Funds returned to refund address.expired- session timed out
succeeded and bounced case, destination.delivery.txHash refers to the settlement transaction.