Skip to main content

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.

Fiat lets your users deposit in local currency (CAD, USD) using familiar rails like Interac, ACH, and Apple Pay. Daimo hosts identity verification and the deposit UI, settles the fiat transfer, and delivers the stablecoin to your destination.
Fiat rails are enabled per-org. Contact us to request access and have specific rails enabled.

Supported rails

fiatMethodRegionCurrency
interacCanadaCAD
achUSUSD
apple_payUSUSD

How it works

Fiat options appear alongside your other payment options. When the user picks one, they’re handed off to a Daimo-hosted page that walks them through:
  1. Rail selection: Interac, ACH, Apple Pay, etc. Skipped if you’ve pinned a rail.
  2. Identity verification: first-time users complete a short KYC step (name, address, ID). Returning users skip through.
  3. Payment: the user pays through their chosen rail, e.g. an Interac e-Transfer, ACH debit, Apple Pay charge, etc.
  4. Confirmation: once the fiat payment clears, the page confirms success and the user returns to your app.
The user pays in their local currency and never touches crypto. Under the hood, Daimo settles the fiat transfer and delivers funds to your destination address on the chain you specified.

Integration

Include the AllFiat option in display.paymentOptions when creating the session. The modal renders the option, drives the hosted flow, and fires onPaymentCompleted on delivery.
await fetch("https://api.daimo.com/v1/sessions", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.DAIMO_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    destination: {
      type: "evm",
      address: "0xYourAddress",
      chainId: 8453,
      tokenAddress: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      amountUnits: "25.00",
    },
    display: {
      title: "Deposit to Acme",
      verb: "Deposit",
      paymentOptions: ["AllFiat"],
    },
  }),
});
"AllFiat" lists every rail available. To pin the flow to a single rail, use its name ("Interac", "ACH", "ApplePay") instead. See Payment Options for the full reference.
InputHosted page behavior
["AllFiat"]Lists every enabled rail for the user
["Interac"] (or "ACH", "ApplePay", etc.)Jumps straight into that rail

Custom integration

If you’re not using the modal, drive the flow yourself: create the session, then call POST /v1/sessions/{id}/paymentMethods with { type: "fiat" } to get back a fiat.hostedUrl. Render that URL in a WebView, iframe, or new tab. The hosted page handles KYC and payment collection, and Daimo delivers the stablecoin once the fiat transfer clears. See the full four-step flow for custom integrations. Pass the clientSecret returned by POST /v1/sessions.
fiat.hostedUrl is returned only once from POST /paymentMethods. It is not returned from GET /v1/sessions/{id}. Store it on the client as soon as you receive it.
Here is the fiat-specific POST /paymentMethods request and response:
curl -X POST https://api.daimo.com/v1/sessions/{sessionId}/paymentMethods \
  -H "Content-Type: application/json" \
  -d '{
    "clientSecret": "SESSION_CLIENT_SECRET",
    "paymentMethod": { "type": "fiat", "fiatMethod": "interac" }
  }'
The response:
{
  "session": {
    "status": "waiting_payment",
    "paymentMethod": {
      "type": "fiat",
      "fiatMethod": "interac",
      "createdAt": 1700000000
    }
  },
  "fiat": {
    "hostedUrl": "https://daimo.com/webview?session=...&cs=...",
    "fiatMethod": "interac"
  }
}
Open fiat.hostedUrl in a WebView or a new browser tab. When the user finishes, they return to your app; poll the session or use webhooks for the final status. Omit fiatMethod to let the user pick from every rail available, or set it to pin the flow to a specific one.
InputHosted page behavior
{ type: "fiat" }Lists every rail available for the user
{ type: "fiat", fiatMethod: "ach" }Jumps straight into the ACH flow

Rendering the hosted URL

hostedUrl points to a mobile-friendly Daimo page. Three ways to render it:
  • Native iOS / Android / React Native app → load in a WebView. The page posts session events back via postMessage. Full reference and code samples in the WebView guide.
  • Web app → open in a new tab or redirect. No special integration needed.
  • In-page iframe → append ?layout=embed to render inline instead of as a modal.

Tracking status

Fiat sessions use the same lifecycle, statuses, and webhooks as every other session. For a full overview, see Sessions and Webhooks.
Session statusWhat it means for fiat
waiting_paymentHosted URL is live; waiting for the user to complete the fiat transfer
processingFiat payment confirmed; Daimo is delivering the stablecoin on-chain
succeededStablecoin delivered to the destination address
bouncedOn-chain delivery reverted (e.g. contract call failure); funds refunded
expiredUser didn’t complete the fiat transfer in time
Subscribe to session.processing, session.succeeded, and session.bounced via webhooks to drive order fulfillment.

Reference

  • Create Session — include "AllFiat" or a specific rail in display.paymentOptions.
  • Create Payment Method — request body { type: "fiat", fiatMethod? }, response fiat.hostedUrl.
  • Payment Options — full list of paymentOptions values.
  • WebView — load the hosted URL in iOS, Android, and React Native.
  • Sessions — payment method shape and lifecycle details.