Verifying a Customer

How do I create a customer identity verification?

Understand how to verify a newly created customer with an identity verification

After creating a new customer the customer state will progress from storing to unverified. The unverified state simply indicates that an identity verification needs to be created for the customer before any account activity can take place, such as fiat transfers or crypto trading.

Method of KYC / KYB Identity Verification (id_and_selfie)

The Cybrid Platform supports verifying users via government ID and Selfie check. Additionally, verification flows may request documentation if portions of the identity cannot be validated.

Approaches to using Cybrid KYC / KYB

If you're choosing the Cybrid (id_and_selfie) method of KYC, you have two different approaches for how you implement the process:

ApproachDescription
Cybrid UI SDKIn this approach, Cybrid's SDK drives the entire identity verification process on your behalf.
Partner DrivenIn this approach, you manually drive the identity verification process via our APIs.

Cybrid UI SDK: Identity Verification for 'id_and_selfie' Method

This is the easiest way to perform KYC verification of your users. In this method, you leverage the Cybrid UI SDK components from our Web, iOS or Android SDK libraries, and you do not need to interact directly with the identity verification APIs.

Cybrid's UI SDKs are designed to do all the heavy lifting by driving the identity verification process after you create the customer record (see How do I create a customer). Simply choose your preferred UI SDK component library and instantiate the identity-verification component to proceed through identity verification

📘

Tip: If you're testing with the Web Demo App, you can create your customer record, and authenticate in the Web Demo App with your customer GUID.To allow the Web Demo App to automatically create the identity verification for you, select the identity-verification in the component dropdown list and proceed through the identity verification steps.

Even if you plan to use this method, it's a good idea to review the Partner Driven method below, as it may still be beneficial to understand how to query the identity verification status of a customer on the Cybrid Platform.

Partner Driven: Identity Verification for 'id_and_selfie' Method

In this method, you will be creating an identity verification (IDV) that will drive a KYC workflow on the Cybrid Platform, but you will drive the verification process yourself. Cybrid partners with Persona for KYC identity verification, so you will need to implement one of Persona's methods in your application to complete an Identity Verification Inquiry.

The process will generally follow these steps (more details below):

  1. Create an identity verification record on the Cybrid Platform
  2. Get the Persona Inquiry ID from the newly created identity verification record from above
  3. Supply the Inquiry ID to the Persona implementation you chose to go with
  4. Wait for the identity verification to become completed on Cybrid's Platform
  5. Confirm that the customer record has become verified on Cybrid's Platform

Even though you will integrate one of Persona's SDKs yourself, the Inquiry ID you supply Persona's SDKs will report the verification status back to Cybrid's Platform.

Use the POST /api/identity_verifications endpoint, and fill in the below information in the request body:

{
  "type": "kyc",
  "method": "id_and_selfie",
  "customer_guid": "your-customer-guid",
  "expected_behaviours": ["string"]
}

📘

Note: The expected_behaviours is available in the sandbox to specify how you want the verification to be returned. This is helpful in testing success/failure scenarios. The expected_behaviour key can be removed completely for normal operation, or the array can include passed_immediately or failed_immediately for testing purposes.

You will see something similar to:

{
  "guid": "your-identity-verification-guid",
  "customer_guid": "your-customer-guid",
  "type": "kyc",
  "method": "id_and_selfie",
  "created_at": "2023-03-23T16:01:58.074Z",
  "state": "storing"
}

This starts a workflow on the Cybrid Platform to create an identity verification with our KYC provider. To proceed through a verification you'll need to take the GUID from the newly created record and poll via the GET /api/identity_verifications/{identity_verification_guid} endpoint, until you see the persona_inquiry_id field change from null to the Inquiry ID number. The response will look similar to:

{
  "guid": "your-identity-verification-guid",
  "customer_guid": "your-customer-guid",
  "type": "kyc",
  "method": "id_and_selfie",
  "created_at": "2023-03-23T16:05:40.757Z",
  "state": "waiting",
  "outcome": "passed",
  "persona_inquiry_id": "your-inquiry-id",
  "persona_state": "waiting"
}

There's two ways to test this:

  1. Add the returned Inquiry ID to the following URL and navigate to it in your browser: https://withpersona.com/verify?inquiry-id=<your-inquiry-id>
  2. Provide the Inquiry ID to the Persona component you have implemented

Using one of the methods above, proceed through the verification process.

Understanding when an identity verification is complete

After you have proceeded through the verification process we suggest you take the the following actions to validate verification was successful.

First, poll on the GET /api/identity_verifications/{identity_verification_guid} endpoint until the state is completed, and the outcome is passed, as shown below:

{
  "guid": "your-identity-verification-guid",
  "customer_guid": "your-customer-guid",
  "type": "kyc",
  "method": "id_and_selfie",
  "created_at": "2023-03-23T16:05:40.757Z",
  "state": "completed",
  "outcome": "passed",
  "persona_inquiry_id": "your-inquiry=id",
  "persona_state": "completed"
}

You'll also note above that the persona_state will be in completed. If for some reason the verification failed, you can look at the failure_codes key, which will return the specific issue encountered during verification.

Once the identity verification has completed and has passed, we suggest you confirm that the customer record has also entered the verified state. You can call the GET /api/customers/{customer_guid} endpoint and confirm the state is verified, as indicated below:

{
  "guid": "your-customer-guid",
  "type": "individual",
  "created_at": "2023-03-23T17:07:08.118Z",
  "state": "verified"
}

Attested identity verification methods

These methods allow you to use data collected by your customer verification process to "attest" their identity verification on the Cybrid platform.

❗️

Important: In order to use the attested methods, you will need a KYC / AML program in place, and will be required to share your KYC Policies and Procedures with Cybrid, share the vendor which handles your KYC, and be prepared to demonstrate the user experience.

Individual customer attestation

To use the attestation method, the customer KYC information must be provided during the customer creation. Use the POST /api/customersendpoint, this is an example payload:

{
  "type": "individual",
  "name": {
      "first": "{first_name}",
    	"middle": "{middle_name}",
      "last": "{last_name}"
  },
  "address": {
      "street": "{street}",
      "city": "{city}",
      "postal_code": "{postal_code}",
      "country_code": "{country}",
      "subdivision": "{state}"
  },
  "date_of_birth": "{dd-mm-yyyy}",
  "phone_number": "{phone_number}",
  "email_address": "{email}",
  "identification_numbers": [
      {
        "type": "drivers_license",
        "issuing_country_code": "{country}",
        "identification_number": "{id_number}"
      }
  ]
}

Valid identification number types for an individual are:

  • drivers_license
  • passport
  • identification_card
  • residence_card
  • passport_card
  • tax_identification_number
  • social_security_number

The next step is to upload files supporting the attested verification process:

  • Copies of the documents for the identification numbers, valid types:
    • drivers_license_front and drivers_license_back for drivers_lincense id type
    • passportfor passport and passport_card id types
    • identification_card for identification_card id type
    • tax_document for tax_identification_number id type
    • residence_cardfor residence_card id type
  • Photos to prove a liveness check was performed, file types required:
    • selfie
    • selfie_right
    • selfie_left
  • Photos of documents for the proof of address, valid types
    • utility_bill
    • bank_statement
    • property_tax

To prepare a file see the "File Upload" guide.

After the new customer records and the supporting files have been created (their state is completed) you can proceed with the creation of the identity verification using the POST /api/identity_verifications endpoint. Here is a sample payload:

{
  "type": "kyc",
  "method": "attested_id_and_selfie",
  "customer_guid": "{customer_guid}",
  "name": {
    "first": "{first_name}",
    "middle": "{middle_name}",
    "last": "{last_name}"
  },
  "address": {
    "street": "{street}",
    "city": "{city}",
    "postal_code": "{postal_code}",
    "country_code": "{country}",
    "subdivision": "{state}"
  },
  "date_of_birth": "{dd-mm-yyyy}",
  "phone_number": "{phone_number}",
  "email_address": "{email}",
  "occupation": "{individual_occupation}",
  "identification_numbers": [
    {
      "type": "drivers_license",
      "issuing_country_code": "{country_code}",
      "identification_number": "{id_number}"
    }
  ],
  "supporting_file_guids": [
    "{drivers_license_front_file_guid}",
    "{drivers_license_back_guid}",
    "{selfie_file_guid}",
    "{selfie_right_file_guid}",
    "{selfie_left_file_guid}",
    "{utility_bill_file_guid}"
  ]
}

The information you provide in the identity verification payload needs to match the data provided on the customer otherwise the verification will be marked as failed.

Once the data is submitted a decision will be automatically made within a minute unless the verification is marked for review in which case the data will be manually assessed by the Cybrid's compliance team.

Business customer attestation

The process for business customers is similar to the individual, first you need to provide the business' KYC information when you create the customer using the POST /api/customers endpoint, sample payload:

{
  "type": "business",
  "name": {
      "full": "{business name}"
  },
  "address": {
    "street": "{street}",
    "city": "{city}",
    "postal_code": "{postal_code}",
    "country_code": "{country}",
    "subdivision": "{state}"
  },
  "aliases": [
    {
      "full": "{business_dba}"
    }
  ],
  "phone_number": "{phone_number}",
  "email_address": "{email}",
  "website": "{website}",
  "identification_numbers": [
      {
        "type": "business_registration_number",
        "issuing_country_code": "{country}",
        "identification_number": "{id_number}"
      }
  ],
}

Valid identification number types for a business are:

  • business_registration_number
  • employer_identification_number
  • tax_identification_number

Similar to the individual case, you will need to prepare the documents supporting the identity verification:

  • Photos of the documents for the identification numbers, required types are:
    • incorporation_certificate or tax_document file types for business_registration_number
    • tax_document file type for tax_identification_number
    • ein_letter or tax_document file types for employer_identification_number
  • A photo file type ofincoporation_certicate or proof_of_benficial_ownership to support the ultimate beneficial ownership information
  • Photos of documents for the proof of address, valid types:
    • utility_bill
    • bank_statement
    • property_tax

Company’s ultimate beneficial owners (UBOs) must also be verified. You will need to create customer records for each UBO, provide their information, and complete their verification using the ‘Individual customer attestation’ method.

Company's directors - you will also need to provide information related to the company's directors, same as UBO you will need to create customer records for each director and then run the watchlists screening for their customer records using the POST /api/identity_verifications endpoint, sample payload:

{
  "type": "kyc",
  "method": "watchlists",
  "customer_guid": "{{director_customer_guid}}"
}

Note that the verification requirements are different between UBOs and company directors, a UBO will need to be fully verified (their customer records should have a state of verified) while a director only needs to have a compliance decision of type person_watchlists with a state of passed

When the customer, supporting files, UBOs and directors have been created and their records are in a completed state, you can create the identity verification records using the POST /api/identity_verifications endpoint, sample payload:

{
  "type": "kyc",
  "method": "attested_business_registration",
  "customer_guid": "{{customer_guid}}",
  "name": {
      "full": "{business name}"
  },
  "address": {
    "street": "{street}",
    "city": "{city}",
    "postal_code": "{postal_code}",
    "country_code": "{country}",
    "subdivision": "{state}"
  },
  "aliases": [
    {
      "full": "{business_dba}"
    }
  ],
  "phone_number": "{phone_number}",
  "email_address": "{email}",
  "website": "{website}",
  "nature_of_business": "Retail",
  "identification_numbers": [
      {
        "type": "business_registration_number",
        "issuing_country_code": "{country}",
        "identification_number": "{id_number}"
      }
  ],
  "director_customer_guids": [
    "{director_customer_guid}"
  ],
  "ultimate_beneficial_owners": [
    {
      "customer_guid": "{ubo_customer_guid}",
      "ownership_percentage": 100
    }
  ],
  "supporting_file_guids": [
    "{{incorporation_certificate_file_guid}}",
    "{{tax_document_file_guid}}",
    "{{utility_bill_file_guid}}"
  ]
}

Same as with the individual customer, an automated decision will be usually made within a minute unless the case is marked for manual review for Cybrid's compliance team.

Now that the customer is verified you can proceed with account funding and trading.