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:
Approach | Description |
---|---|
Cybrid UI SDK | In this approach, Cybrid's SDK drives the entire identity verification process on your behalf. |
Partner Driven | In 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):
- Create an identity verification record on the Cybrid Platform
- Get the Persona Inquiry ID from the newly created identity verification record from above
- Supply the Inquiry ID to the Persona implementation you chose to go with
- Wait for the identity verification to become completed on Cybrid's Platform
- 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:
- 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>
- 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/customers
endpoint, 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
anddrivers_license_back
fordrivers_lincense
id typepassport
forpassport
andpassport_card
id typesidentification_card
foridentification_card
id typetax_document
fortax_identification_number
id typeresidence_card
forresidence_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
ortax_document
file types forbusiness_registration_number
tax_document
file type fortax_identification_number
ein_letter
ortax_document
file types foremployer_identification_number
- A photo file type of
incoporation_certicate
orproof_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.
Updated 11 days ago