Skip to main content
Unified KYC verifies a customer at a level. Each provider has a minimum level, and a customer reaches a provider once their Unified KYC is approved at that level or higher. You never choose the level: name the providers the customer may use, and Meld picks it.
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 with POST /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 RESIDENCE address in the US is verified at Level 2. Add the address with POST /accounts/customers/{customerId}/addresses before you start KYC.
  • Without Level 1 on your account, the level is always Level 2.
Every provider in the list that takes a KYC share waits for two things: an approval at its level, and what it needs before the share, such as Uphold’s terms. Meld shares with each one as soon as both are in, and what a provider needs never makes the call fail. A provider that takes no share, such as Coinbase or Stripe, only counts toward the level. See What a provider needs before the share. Name only the providers the customer should be ready for. One Level 2 provider in the list verifies a Level 1 customer at Level 2, with an ID document and a selfie. So a customer who onboards before choosing a provider, with no list, starts at the lowest level your providers use, and steps up only when they head to a provider that needs more. When Meld steps a customer up, it first shares with every named provider their current approval already reaches. 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

On 2026-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 same POST 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:
  1. Check eligibility with the customer and the whole order: Check the requirements.
  2. Work through requirements, as The checklist describes: do every step whose dependsOn is clear and whose action is a CALL, OPEN_URL or SDK_STEP, and wait on the rest. A MELD_KYC item that is REQUIRED carries the kyc/initiate call, with targetServiceProviders already set when you read the checklist with Meld-Version: 2026-11-01. Send each call with the same Meld-Version you read the checklist with. The MELD_KYC item never waits on what a provider needs before the share.
  3. Wait for the webhooks: one when the customer’s Unified KYC is approved, and, for a provider that takes a share, one with kycRecipient when the provider gives its verdict. Check eligibility again after each.
  4. Create the order once eligible is true.
For the provider-specific steps on top, see Coinbase guest checkout and step-up KYC and Wallets → Stripe.

Importing KYC you ran yourself

A RAW_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, documents is 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.
Before 2026-11-01, an import without targetServiceProvider or order works as before and needs documents.