Skip to main content
Your backend mints the order, the Meld SDK mounts the provider’s card form inside your checkout, and settlement arrives by webhook. You own every screen around it; the card fields are the provider’s, which is what keeps them out of your PCI scope.

Before you begin

  1. Create a customer and complete Unified KYC. Required — almost every provider refuses an order for a customer Meld has not cleared
  2. Configure webhooks, before KYC so you receive status changes while it runs
You also need the Meld SDK in your client. Card capture runs on the provider’s PCI surface, mounted by the SDK — there is no supported path that renders a card form yourself.

Flow overview

A card purchase end to end, with the provider's form mounted in the app


1. Quote, then check eligibility

Every order starts here, not just the first one. Get a quote — it prices the order, names the providers that can take it, and carries the destinationNetworkCode the order needs. Then check eligibility for the provider you picked: agreements to show, a verified email or phone to collect, KYC the provider still wants. Collect whatever is outstanding before you mint the order, or the rejection lands after the customer thinks they are done.

2. Create the order

Endpoint: POST /crypto/order/headless/onramp Headers: Meld-Version: 2026-05-01, X-Idempotency-Key: <uuid> Call this from your backend. The API key never reaches the device.
Send clientIpAddress on every order. Some providers require it and some ignore it, nothing rejects it, and no endpoint will tell you which you have — the ones that need it fail provider-side, which reads as an opaque decline rather than a missing field. The last two rows are different: they cannot be sent blind. Meld tells you if the provider you are enabling needs them, as part of enabling it. Until then, leave them out. Currency and network codes are Meld’s own. Meld translates them to whatever the provider calls the same asset, so the same order body works across providers and you never keep a per-provider symbol table. Coverage lists them, and the quote returns the codes it priced. Response:
Return the response to your client verbatim. The SDK reads it; you do not need to interpret it, and the fields present differ by provider. Some of them are short-lived credentials scoped to the order, so log that the response arrived and not what was in it.

3. Mount the order

Hand the order to the SDK and let it present the surface.
Keep it mounted until the user finishes paying. Tearing it down mid-flow takes the surface with it. See the SDK guides for install and platform setup.

4. Settlement

onPaymentSubmitted means the user finished the form. It does not mean the payment cleared. Two things to do when it fires:
  • Unmount the surface and show your own processing screen. The provider’s post-submit screen has nothing left for the user to do, and leaving them on it reads as a stall.
  • Do not credit anything yet. Credit when Meld’s TRANSACTION_CRYPTO_COMPLETE webhook reaches your backend. It is the only signal that the money moved; no SDK event tells you that.

Troubleshooting