Customer verification

Like with many other types of financial products, customers cannot engage in investing until their personal information is verified. There are several flows supported out-of-the-box by DriveWealth:

  1. DriveWealth Does KYC (DO_KYC) — DriveWealth performs KYC (Know-Your-Customer) checks on all newly created Users.

  2. DriveWealth Relies on Partner (NO_KYC) — DriveWealth can rely on the partner’s KYC processes, pending a successful review of KYC policies and procedures.

  3. DriveWealth performs secondary KYC (VERIFY_KYC) — In some cases, DriveWealth can allow accounts to be opened immediately, based on the partner’s KYC processes, but DriveWealth must also verify all account details after the account is opened.

One of the three available verification methods will be selected based on the partners geographic location, licenses, and KYC/AML capabilities.

DO_KYC

Once a User is created, its status will be pending, as shown in the following Event:

{
  "id": "event_b84d304f-d434-4610-859a-ebdcda33ffcb",
  "type": "users.created",
  "timestamp": "2019-03-28T22:50:02.073327862Z",
  "payload": {
    "firstName": "John",
    "lastName": "Smith",
    "email" : "[email protected]",
    "userID": "0b06eda0-b7d6-4e4b-8f8f-c46426070957",
    "status": {
      "name": "PENDING",
      "description": "User is pending approval."
    }
  }
}

Depending on the region of the customer, you may need to upload physical document proofs as well before validation will begin. Refer back to Opening accounts for how to do this.

Verification of the customer is initiated automatically, and a determination is made within the next 15 minutes (but usually, within seconds). Once this is complete, the User status is changed, which can be subscribed to via an Event:

{
  "id": "event_4da42927...",
  "type": "users.updated",
  "timestamp": "2019-01-09T12:14:44.155187291Z",
  "payload": {
    "previous": {
      "status": {
        "name": "PENDING",
        "description": "User is pending approval."
      },
    },
    "current": {
      "status": {
        "name": "APPROVED",
        "description": "User is approved."
      },
    },
    "userID": "cc07f91b-7ee1..."
  }
}

If not using the Events system, you can alternatively check the Retrieve KYC status by User API. When something goes wrong, like if the customer cannot be verified, you can also use this API to determine the specific failure and action to take:

GET /back-office/users/:userID/kyc-status
{
    ...
  "kyc": {
        "status": {
            "name": "KYC_INFO_REQUIRED",
            "code": "KS102",
            "description": "User's PII not matched. Please revisit your PII info."
        }
        "approved": null,
        "accepted": null,
        "errors": [{
                "name": "USER_ID_ERROR",
                "code": "K101",
                "description": "SSN/ID number not matched. Please edit your PII info or submit the document for verification."
            },
            {
                "name": "USER_DOB_ERROR",
                "code ": "K102",
                "description": "Date of birth not matched."
            }
        ]
    },
    ...
}

NO_KYC and VERIFY_KYC

With these setups, once you create a User, you’re done! The User status will change to APPROVED within a few seconds.

🚧

Only customers whose details have been vetted and approved by your firm should be sent to DriveWealth in these models.

KYC status workflow

The Retrieve KYC status by User API will return different values based on the current KYC state of the customer. The workflow of statuses looks like this:

1187

At any point beyond KYC_PROCESSING, the User's KYC can be approved or denied.

KYC statusDescription
KYC_NOT_READYAll required data document fields have not been submitted.
KYC_READYAll required data document fields have been submitted successfully
KYC_PROCESSINGThe user's data submitted has been sent to our vendor to verify the user.
KYC_APPROVEDThe user's data has been verified by our vendor and the vendor has signed on the legitimacy of the user.
KYC_INFO_REQUIREDThe user's data that has been submitted to DriveWealth and thus our vendor has one or many errors in it. To have the KYC process rerun, once the user updates their information, call a PATCH on /users.
KYC_DOC_REQUIREDA physical document like a passport, driver's license, utilities bill, etc. is required to be uploaded to uploaded. Once the physical document has been uploaded this will automatically rerun the KYC process.
KYC_MANUAL_REVIEWThe user's KYC is under additional review after additional data and documents have been submitted.
KYC_DENIEDThe user's KYC was denied by our vendor automatically by the system or by a human operator.

Ongoing account monitoring

In all of these models, DriveWealth will perform some level of continuing checks on the customer throughout the lifecycle of the Account. If DriveWealth finds information that would prohibit further trading, the Account may change in status to prevent further trading. This can be captured via an Event:

{
  "id": "event_773a8a45-75fc...",
  "type": "accounts.updated",
  "timestamp": "2019-03-28T22:46:47.821071506Z",
  "payload": {
    "previous": {
      "status": {
        "name": "OPEN",
        "description": "Open"
      }
    },
    "current": {
      "status": {
        "name": "CLOSED",
        "description": "Closed"
      },
    },
    "accountID": "711c012d-7a3c...",
    "accountNo": "ABCD000001",
    "userID": "711c012d-7a3c..."
  }
}

In some cases, Accounts will be restricted from trading while an investigation is done (typically alongside the partner). In other cases, an Account may need to be closed with urgency.

Simulating specific cases

In sandbox, you can test error cases by setting the lastName of a User to the specific error condition you want to encounter.

For example, you can create a User with this data:

POST /back-office/users
{
      "userType": "INDIVIDUAL_TRADER",
        "documents": [
            {
                    "type": "BASIC_INFO",
                "data": {
                        "firstName": "Daryl",
                        "lastName": "DOB_NOT_MATCH",
                        "username": "DHall",
                        "country": "USA",
                        "phone": "2914443333",
                        "emailAddress": "[email protected]",
                        "language": "en_US"
                }
        },
        ...
        ]
}

Once the KYC workflow is invoked, this User will be rejected for an invalid date of birth.

Refer to the full list of KYC error codes, all of which can be used in this manner.