Skip to main content
This guide is for developers who already KYC their users using a KYC provider and want to reuse that verification with Meld onramps. You’ll pass Meld the user’s KYC data either via a KYC share token or via raw data, so the user can skip KYC on the onramp. Passing Meld the KYC share token is preferable, but passing Meld the user’s raw KYC data instead can be used if you collect KYC using a KYC provider that Meld doesn’t support, or if you collect KYC information directly from the user without using a KYC provider. Meld does not store raw KYC field values or document images. Data is passed through to the KYC provider on submit. Logs redact KYC fields entirely; Meld only retains metadata (customer id, timestamps, requesting party). Always obtain user consent before submitting KYC on their behalf.

Summary of the steps

  1. KYC the user with your own provider, and get their consent to share it
  2. Create a Meld customer and store the customerId
  3. Submit the KYC — either a share token or raw data plus documents
  4. Wait for APPROVED
  5. Start the transaction with bypassKyc: true

Before you begin

  • You have contacted your Meld account manager to enable this product for you
  • You have a KYC provider account and have integrated their KYC flow
  • You get a 1 time token from each onramp you use and add it to your KYC provider dashboard
  • You gather end-user consent in your UI before sharing KYC data with Meld and downstream partners
For sandbox testing details, see KYC testing.

Flows at a glance

To enable this flow, do the following:

Step 1: KYC Provider Setup

This step is needed for token share. If you’re passing the raw KYC data instead, you can skip this step. This requires you to integrate a KYC provider, and use them to KYC your user. Note that the steps below show the Sumsub dashboard as an example. Get a share token from each onramp you will pass the KYC token to and add them in your KYC provider dashboard in the Partners tab.
Image
For example, see Sumsub requirements for importing the applicant. You will need to pass the KYC provider’s KYC token, generated for client id meld.io_75082. This is done in the KYC provider’s dashboard, as shown below.

Step 2: KYC the User

In order for your user to not be asked for any additional KYC information by the onramp, you must collect, at minimum,
  1. Identity document (Driver’s license, ID card, Residence permit, or Passport)
  2. Selfie (advanced liveliness check)
  3. Applicant data
    • First name
    • Last name
    • Country
    • Street
    • Street (line 2)
    • City
    • State
    • Postcode
    • Nationality
    • TIN / SSN
    • Tax residence country
    • Date of birth
    • Phone Number
All of this must be under a KYC level named network-partner-level2.

Step 3: Create a Meld customer

This step is required for the user to skip logging into the onramp, and is a one-time setup per user. Call POST /accounts/customers and pass in the user’s first name, last name, email address, phone number, and birthday.

Request

Response

Store id as the Meld customerId. You need it for submit and export. With Meld-Version dated 2023-04-01 or later, the customer response also includes serviceProviderCustomers (including KYC status after submit).

Step 4: Submit KYC

Here, there are 2 flows to pass Meld the user’s KYC data. The first (and preferred) flow is via a KYC provider share token, while the second is via raw data. Call: POST /accounts/customers/{customerId}/kyc/initiate Choose a mode. Both modes return the same response shape and use the same webhook to signal approval. Note that the steps below show the Sumsub as the KYC provider as an example.

Mode A — KYC provider share token (TOKEN_IMPORT)

No raw PII or document images transit through this request. Generate the KYC share token for client id meld.io_75082 (the exact steps depend on which KYC provider you use).

Request (application/json)

Response

status is APPROVED when the imported applicant already matches Meld’s verification level; otherwise it may be PENDING. url is a KYC provider WebSDK link when present — often not needed if status is already APPROVED.

Mode B — Raw applicant data (RAW_DATA_IMPORT)

Use when you collect KYC using a KYC provider that Meld doesn’t support, or if you collect KYC information directly from the user without using a KYC provider. Send multipart/form-data. Do not send this mode as JSON — RAW_DATA_IMPORT is only accepted on the multipart route.

Multipart parts

data JSON schema

Field notes

Example (curl)

Response

Meld creates (or reuses) the KYC provider’s applicant, uploads the documents, and requests review immediately.

Wait for approval

For either submit mode, listen for the CUSTOMER_KYC_STATUS_CHANGE webhook until payload.status is APPROVED. See Webhook events for the full event catalog and delivery behavior.
If payload.status is REJECTED, the user failed KYC. They may retry submit with corrected data. If they still fail, then the user will have to try KYCing with the onramp directly, in the onramp’s widget.

Step 5: Initiate a transaction

Pass Meld the customerId of the user when you call POST /crypto/session/widget. Make sure to include the param "bypassKyc": true, which tells Meld to look up that customer’s KYC information and forward it to the onramp.

Request

Response

If you executed every step correctly, then when you open either the widgetUrl or serviceProviderWidgetUrl, then the user go straight to the onramp’s payment screen, as seen in this demo video.
And that’s it! Congrats, you are now using Meld’s Unified KYC product to enhance your users’ experience!

Error Cases