Before you begin
- Create a customer and complete Unified KYC. Required — almost every provider refuses an order for a customer Meld has not cleared
- Configure webhooks, before KYC so you receive status changes while it runs
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 thedestinationNetworkCode 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:
3. Mount the order
Hand the order to the SDK and let it present the surface.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_COMPLETEwebhook reaches your backend. It is the only signal that the money moved; no SDK event tells you that.