Skip to main content

Product overview

Partners who are doing some form of KYC collection/verification using Sumsub will be able to pass KYC information to MoonPay via a share token so that we can expedite your users’ verification. Doing so will dramatically reduce friction with your users by only having to KYC once. This is in addition to MoonPay’s 20M verified users, millions of which we’ve KYCed with an ID & selfie.

Product benefits

  • Higher conversion – users skip a second ID & selfie step inside MoonPay, dramatically reducing drop‑offs.
  • Expanded reach – MoonPay’s >20 M verified‑user database increases the chance we already know your customers.
  • Simple and secure integration – a single endpoint, no sensitive PII passed directly to MoonPay.

Prerequisites

  1. Verify required KYC information
    Make sure your app collects the information required for MoonPay’s KYC process.
  2. Integrate Sumsub’s Reusable KYC
    Build Sumsub’s reusable KYC feature using their SDK or API.
  3. Connect to Sumsub’s Share-Token API
    See Sumsub’s Share-Token API documentation. This will generate the share token you use to provide to MoonPay. Sumsub allows partners and their data to be transferred between services.
    # request signing skipped for brevity
    curl --request POST \
        --url https://api.sumsub.com/resources/accessTokens/shareToken \
        --header 'content-type: application/json' \
        --header 'x-app-token: sbx:...'
        --data '{
                 "applicantId": "{{applicantId}}", // applicant id they want to import
                 "forClientId": "Moonpay",
                 "ttlInSecs": 600
                }'
    

Integration guide

  1. Enable KYC Sharing
    Reach out to your MoonPay representative and we will enable your account for KYC sharing in our backend.
  2. Share your customers data with MoonPay
    Call our POST /v3/customers/import endpoint with the externalCustomerId and the SumSub share token (see payload below). The externalCustomerId is a unique identifier for the customer in your platform. A successful import returns HTTP 200 with an empty body.
    curl --request POST \
        --url https://api.moonpay.com/v3/customers/import \
        --header 'content-type: application/json' \
        --header 'authorization: api-key sk_test_...'
        --data '{
        externalCustomerId: '{{userIdInPartner}}',  // unique identifier for the customer in the partner platform
        identity: [
        {
            source: 'sumsub',
            shareToken: 'eyJhbGciOiJub25lIn0.eyJqdGkiOiJfYWN0LTZmODI2ZTU0LTE2MzctNDViMS05NzMyLWY1MjZiN2YxNWE3YyIsInVybCI6Imh0dHBzOi8vYXBpLnN1bXN1Yi5jb20ifQ.',  // share token generated in step 4
        },
        ],
    }'
    
  3. Calling the MoonPay widget
    When loading the MoonPay widget, make sure the same externalCustomerId is passed as a parameter. MoonPay will require the exact identifier to retrieve the user data and verify their KYC.