Skip to main content
Fiat lets your users deposit through supported local bank and wallet rails. Daimo hosts identity verification and the deposit UI, settles the fiat transfer, and delivers the stablecoin to your destination. The user pays in their local currency and never touches crypto. Fiat rails are part of the same integration. With paymentMethods: { mode: "auto" }, the fiat rails enabled for your org appear automatically in each user’s localized picker, alongside exchanges and wallets.
Fiat rails are enabled per-org. Contact us to request access and have specific rails enabled.

Supported rails

A rail appears for a user when it’s offered in their region and enabled for your org.

Verification

Each rail carries the verification requirement shown above. First-time users complete it once inside the hosted flow; returning users skip through.
  • No verification: the user can pay immediately.
  • Phone verification: a one-time phone confirmation (~1 min).
  • ID verification: name, address, and a government-issued ID (~3 min).
  • ID and selfie verification: the above plus a selfie check (~5 min).
Verification happens entirely on the Daimo-hosted page; you never collect or store identity data. If your users are already verified elsewhere, see KYC Import.

Fiat in auto mode

With paymentMethods: { mode: "auto" }:
  • Bank rails fold into one Bank transfer entry that expands to the rails available.
  • Apple Pay renders as its own entry.
  • Users in a country with no enabled fiat rail see crypto, exchange, and wallet methods instead.
See Payment Methods for the full per-country breakdown.

How the hosted flow works

When the user picks a fiat rail, they’re handed off to a Daimo-hosted page that walks them through:
  1. Rail selection: choose the rail. Skipped if the flow is pinned to one.
  2. Identity verification: first-time users complete the KYC step for that rail. Returning users skip through.
  3. Payment: the user pays through their chosen rail, e.g. an Interac e-Transfer, ACH debit, Apple Pay charge, or SEPA bank transfer.
  4. Confirmation: once the fiat payment clears, the page confirms success and the user returns to your app. Daimo delivers the stablecoin to your destination.

Integration

Set paymentMethods when creating the session. { mode: "auto" } includes every fiat rail enabled for the user’s country in the localized picker; { mode: "fixed", type } pins the session to a single rail.
Fixed type values for fiat: Interac, ApplePay, ACH, SEPA, JPYC, ARS, BreB. See Payment Methods for the full reference.

Auth prefill

If you already know the user’s email or phone, include it in session metadata:
Daimo uses these values as account auth hints for fiat deposits. Signed-out users with metadata.email skip email entry and start at OTP verification. Apple Pay users with metadata.phone skip phone entry and start at SMS OTP verification. They still verify each value before any account is created or reused. Phone numbers must be E.164. If a hint is missing or invalid, Daimo shows the normal entry step.

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:
The response:
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 enabled for your org, or set it to one of interac, apple_pay, ach, sepa, jpyc, ars, breb to pin the flow to a specific one.

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 Native WebView; on React Native, DaimoFrameRN handles this for you.
  • 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. Subscribe to session.processing, session.succeeded, and session.bounced via webhooks to drive order fulfillment.

Reference