What you can verify
The order call, the capture surface appearing in your app, the SDK’s events, and the webhook chain. How far past that you can go depends on the provider’s sandbox and the payment method.Before you start
Base URL:https://api-sb.meld.io
- A sandbox API key with payment access
- Headless onramps enabled on your sandbox account. Ask your Meld representative. Until they are, orders are refused with
403 WHITELABEL_NOT_ENABLED - Sandbox credentials for the provider you are testing, on your Meld sandbox account
- A webhook endpoint reachable from the internet, configured in the dashboard
- A test customer, KYC-approved: see KYC Testing. Stripe also needs an email on the customer
Test the card flow
Test cards against Banxa. It is the provider with a published headless card sandbox, and the cards below are its.- Quote for your country, currency pair and amount, and pick the Banxa quote.
- Create the order with
paymentMethodType: CREDIT_DEBIT_CARD. - Mount the order in your client.
- Pay with one of the cards below.
Successful authorization
Failed and declined authorization
Run at least one decline as well as one success. A decline is the path most integrations get wrong: the surface stays mounted and the customer retries, so nothing should be torn down and no order should be credited.
Other providers’ card sandboxes behave differently and some reject transactions that would succeed in production. Where a provider publishes test cards, they are listed under its section in White-Label API and Meld Checkout testing credentials.
Test Apple Pay
Two options in sandbox:- Mercuryo or Banxa: you can present the sheet, but not settle a payment. Treat a settled purchase as a production check.
- Stripe: you can run the whole purchase, with Stripe’s test values, and nothing is charged.
Apple Pay with Mercuryo or Banxa
- Quote for a country and currency pair that return a Mercuryo or Banxa Apple Pay quote, and pick it.
- Create the order with
paymentMethodType: APPLE_PAY. - Check
canPresentApplePay(), then mount.
The iOS Simulator presents and authorises the sheet but can’t produce a decryptable token, so it exercises mounting, events and the cancel path only. A real device with an Apple sandbox tester account gets a genuine authorisation, and still no settlement.
Apple Pay with Stripe
Stripe orders run in an iOS app on Meld’s Stripe sandbox. Card orders run the same way, withpaymentMethodType: CREDIT_DEBIT_CARD and no Apple setup.
Setup:
- Ask your Meld representative to enable Stripe on your sandbox account. It appears under Integrations as Shared Meld Integration, and Meld manages its keys and webhooks.
- Send your Meld representative your app’s bundle ID and Apple Team ID, so Stripe registers the app as a trusted application. Stripe’s SDK runs only in a registered app, on a simulator too.
- For Apple Pay, register a sandbox merchant identifier, as in Stripe’s certificate.
- Build the test app on the iOS SDK or React Native SDK, with the camera permission, configured for
sandbox. - Create a KYC-approved test customer with an email, so the SDK fills Stripe’s KYC.
USDC / ETH), Base (USDC_BASE / BASE) and Solana (USDC_SOLANA / SOLANA), even when a quote lists other pairs.
Test values:
For document verification, Stripe’s sandbox lets you pick the outcome instead of uploading a document. For Apple Pay, use a physical iPhone with a real card in Wallet: Stripe’s sandbox returns a test token, so the card isn’t charged.
Run it:
- Quote with
integrationMode=HEADLESS,countryCode: US,sourceCurrencyCode: USDand one of the pairs above, includingdestinationNetworkCode. Pick theSTRIPEquote. - Create the order. Expect
201withresponseKind: SDK_BOOTSTRAP. - Mount it from the customer’s tap. Sign in to Link with
000000, and use the test values if Stripe asks for KYC. - Pay. Expect
onPaymentSubmitted, orPAYMENT_OUTCOME_UNKNOWNif Stripe hasn’t confirmed yet. Either way, unmount. - Expect
TRANSACTION_CRYPTO_PENDING, thenTRANSACTION_CRYPTO_TRANSFERRING. That’s a pass: Stripe’s sandbox doesn’t reliably report delivery, soTRANSACTION_CRYPTO_COMPLETEmay not arrive.
TRANSACTION_CRYPTO_FAILED. POST /payments/mock/headless/simulate doesn’t apply to Stripe orders.
Verify the result
For card, check all three. Each catches something the others do not.
The transaction is created asynchronously, so it will not exist the instant the order call returns. Wait for
TRANSACTION_CRYPTO_PENDING.