← Protocols
Daimo
01Description

Stablecoin payment rails built on Base, with intent-based cross-chain deposits and a social P2P layer (request, send, memo). Daimo Pay is the developer product — a prebuilt React deposit UI plus a REST API for accepting USDC/stablecoins from any chain, any token, any wallet in one click.

02Best for
  • 01stablecoin checkout / deposits
  • 02cross-chain pay-in (any token, any chain) settled to Base
  • 03social P2P payments with memos
  • 04Hyperliquid / venue deposit flows
  • 05World Mini App and farcaster Frame payments
03Install
  • pnpm add @daimo/pay @daimo/pay-common viem wagmi
  • pnpm add @daimo/contract # optional onchain helpers
04Environment variables
VariableScopeDescription
NEXT_PUBLIC_DAIMO_PAY_APP_IDClientDaimo Pay app id (public) issued in the Daimo dashboard. Used to scope sessions to your project.
DAIMO_PAY_API_KEYServerServer-only API key for creating payment sessions and verifying webhooks against the Daimo REST API.
DAIMO_PAY_WEBHOOK_SECRETServerShared secret used to verify Daimo Pay webhook signatures on incoming payment events.
05Prompt snippet
Use Daimo Pay for stablecoin deposits/checkout on Base. Server-side, create a payment session: `POST https://pay.daimo.com/api/payments` with `Authorization: Bearer ${DAIMO_PAY_API_KEY}` and `{ destination: { chainId: 8453, token: USDC, address, amount }, externalId }` — store the returned session id and `payUrl`. On the client, render `<DaimoPayButton appId={NEXT_PUBLIC_DAIMO_PAY_APP_ID} payId={sessionId} onPaymentCompleted={...} />` from `@daimo/pay`, or redirect to `payUrl` for hosted checkout. Verify completion via the webhook (HMAC with `DAIMO_PAY_WEBHOOK_SECRET`) and your `externalId` rather than trusting `onPaymentCompleted` alone.
06Gotchas
  • Daimo settles to Base by default — accepting payment from other chains uses an intent/bridge under the hood, so the on-receipt asset and chain may differ from what the payer sent. Always reconcile by `externalId` + webhook, not by tx hash.
  • Onchain vs offchain content: payment metadata (memos, externalId, status) is hosted in Daimo's API, not on Base — losing your API key or app id means losing the lookup index even though the underlying transfers are onchain.
  • Message delivery semantics: webhooks are at-least-once and can arrive before or after `onPaymentCompleted` fires; treat your handler as idempotent and gate fulfilment on the webhook with HMAC verification.
  • EVM-only — Solana, Bitcoin, and other non-EVM chains as payment sources are routed through bridges; expect higher latency and per-route minimums versus a native Base USDC pay.
  • The legacy Daimo cash app (`daimo-eth/daimo`) is archived — for current product work use Daimo Pay (`@daimo/pay`), not the old `daimo-mobile` packages.
  • Content moderation surface: payment memos are user-supplied strings displayed in Daimo's social UI — sanitise/escape them in any frontend that surfaces them, or you risk XSS / abusive content.
07Alternatives