Level 1 is off until Meld turns it on for your account. Until then, every customer is verified at Level 2, as before levels existed, and Stripe and Coinbase work as Wallets describes for accounts without Level 1. Ask your Meld account manager to turn it on once your integration reads the level fields on this page. A client that ignores them would take a Level 1 approval for a Level 2 one.
The levels
- A customer approved at a level also meets every lower one.
- Levels can be added. Treat a level you don’t recognise as not approved.
Each provider’s minimum level
Read a provider’s minimum from
kycLevel on GET /network-partner/supported/partners rather than hardcoding this table: NONE, LEVEL_1, LEVEL_2 or LEVEL_3. A provider can move to a lower level without a change on your side.
For a given customer, the quote answers it per row: each headless purchase row’s customerKyc carries the provider’s requiredLevel, the customer’s approvedLevel, and whether the customer reaches it.
Meld shares a customer’s KYC with a provider only once their approval reaches that provider’s level. A Level 1 approval isn’t shared with Banxa, Noah or Due Network, and doesn’t count for Mercuryo, until the customer steps up to Level 2. Some providers also need details or terms before the share: see What a provider needs before the share.
One provider list (Meld-Version 2026-11-01)
Start Unified KYC withPOST /accounts/customers/{customerId}/kyc/initiate and Meld-Version: 2026-11-01, naming every provider the customer may use:
serviceProvider and mode default to SUMSUB and HOSTED_URL on a POST, so you can leave them out.
Two rules apply on top:
- Level 1 is US-only. A customer without a
RESIDENCEaddress in the US is verified at Level 2. Add the address withPOST /accounts/customers/{customerId}/addressesbefore you start KYC. - Without Level 1 on your account, the level is always Level 2.
The response:
Open the
url in your app, as in Meld KYCes the user.
PATCH /accounts/customers/{customerId}/kyc/initiate takes the same list, with serviceProvider and mode. It adds the providers, and Meld shares with each one once it is ready, straight away for a customer already approved at its level. A PATCH never changes the level. serviceProviderDetails on a PATCH goes to the providers it names, and is a 400 without any.
Other spellings and older versions
On2026-11-01, targetServiceProvider and kycShareProviders still work. Meld adds them to the same list, and they behave exactly like targetServiceProviders, on POST, multipart POST and PATCH. Use targetServiceProviders in new code.
Before 2026-11-01, targetServiceProviders is refused with 400 and code: KYC_TARGETS_NEED_MELD_VERSION, even when it is empty, and nothing is started. Older versions take targetServiceProvider and kycShareProviders instead, as Before Meld-Version 2026-11-01 describes. An API key without a Meld-Version header gets its default version, which is older, so send the header.
Step up
When an order needs a higher level than the customer’s approval, call the samePOST with that provider in targetServiceProviders. Meld moves the customer’s existing verification up to the new level. It never starts a second one, and the customer adds only what the new level asks for: from Level 1 to Level 2, an ID document and a selfie.
On 2026-11-01, every POST answers by the state of the customer’s Unified KYC, so you can call it again at any time:
A step-up refused because the customer is in review still shares with the named providers their current approval reaches.
While the higher level is in review,
approvedLevel stays at the lower level, so providers that need only that level keep working. If the higher level is rejected and the customer can retry, approvedLevel still stays. A final rejection clears it.
Where you read the level
status: APPROVED on its own no longer means a customer can order from every provider. Compare approvedLevel with the provider’s level, or let eligibility do it for you.
The journey
The loop is the same for every provider. Eligibility tells you what’s outstanding,kyc/initiate starts or steps up Unified KYC, and the webhook tells you when to check again. This customer is approved at Level 1 and now orders from Banxa, which needs Level 2 and a share:
- Check eligibility with the customer and the whole order: Check the requirements.
- Work through
requirements, as The checklist describes: do every step whosedependsOnis clear and whoseactionis aCALL,OPEN_URLorSDK_STEP, and wait on the rest. AMELD_KYCitem that isREQUIREDcarries thekyc/initiatecall, withtargetServiceProvidersalready set when you read the checklist withMeld-Version: 2026-11-01. Send each call with the sameMeld-Versionyou read the checklist with. TheMELD_KYCitem never waits on what a provider needs before the share. - Wait for the webhooks: one when the customer’s Unified KYC is approved, and, for a provider that takes a share, one with
kycRecipientwhen the provider gives its verdict. Check eligibility again after each. - Create the order once
eligibleistrue.
Importing KYC you ran yourself
ARAW_DATA_IMPORT, as in You KYC the user, also takes targetServiceProviders and order in its data part, and Meld picks the level the same way:
- At Level 1,
documentsis optional, and the applicant’s address must be in the US. - Documents, or an address outside the US, make it Level 2.
- A Level 2 import without documents is refused with
400, before anything reaches Sumsub. - An import onto a customer verified at a lower level moves that verification up.
2026-11-01, an import without targetServiceProvider or order works as before and needs documents.