> For the complete documentation index, see [llms.txt](https://docs.nymcard.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.nymcard.com/get-started/program-management/user-kyc-process.md).

# User KYC process

### **About KYC verification**

Know Your Customer (KYC) is the mandatory process of identifying and verifying the customer's identity before allowing them to have an account and perform transactions. KYC standards are designed to protect financial institutions against fraud, corruption etc. KYC process helps to establish customer identity and understand the nature of customers’ activities by performing KYC risk intelligence screening in order to qualify that the source of funds is legitimate.&#x20;

&#x20;

#### **KYC policies for individual user**

nCore platform offers KYC process on two types of individual users given below:

<table data-header-hidden><thead><tr><th width="150"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>S No.</strong></td><td><strong>User Type</strong></td><td><strong>Policy name</strong></td><td><strong>Prerequisite</strong></td></tr><tr><td>1</td><td>Parent user</td><td>UAE_INDIVIDUAL_PRIMARY</td><td>KYC processing must be enabled at tenant level</td></tr><tr><td>2</td><td>Child user</td><td>UAE_INDIVIDUAL_SECONDARY</td><td><p>KYC processing must be enabled at tenant level <strong>and</strong> </p><p>Parent user must be KYC verified</p></td></tr></tbody></table>

Please contact the NymCard representative at <contact@nymcard.com> to enable KYC processing.

&#x20;

#### **Restrictions on user status**

Following are the KYC restrictions based on user status.

When the user status is “**PENDINGKYC**”, “**SUSPENDED**” or “**TERMINATED**”, then operations like creating an account, creating a card and linking a card are not allowed. These operations are enabled for the user only when the user status is marked as “**ACTIVE**”. In addition to that, when the user status is “**PENDINGKYC**”, then the user can create a child user.

&#x20;Note, that if KYC settings=true at the tenant level, the following parameters can not be updated for user with **ACTIVE** status:

![](/files/sXMkn5gKnVbsqDr0Gt1R)

#### **How to simulate user KYC process**

nCore sandbox environment provides a feature to simulate the KYC processing of user(s) and update appropriate user statuses based on the KYC result.

Once you create a request to perform a user KYC successfully by sending a **POST** request to **/users/{id}/kyc** endpoint, the platform starts a service which runs internally and performs the checks based on the policy you linked in the request. You can create more than one request. The internal service will pick all submitted KYC requests, process them and update the user and KYC statuses and give you a glance of the frictionless KYC processing which nCore platform provides in sandbox as well as in production environments. After a successful KYC processing you can create resources for the KYC verified users in a sandbox environment.

#### **KYC Use cases**

In the following ways you can simulate different KYC processing use cases.

Before creating a user, please make sure that the KYC service picks only those KYC requests when

* The ‘require\_kyc’ parameter is set as “true” at tenant level **and**
* The user status is set as “PENDINGKYC” **and**
* The KYC status is “SUBMITTED”

&#x20;

*Positive use case:*&#x20;

To simulate a positive KYC processing case, please create a user with ‘last\_name’ as “pass” as given below.

<details>

<summary><a href="https://nymcard.com/docs/api#tag/Users/operation/createUser">POST /users</a></summary>

**`{`**

&#x20;   **`"first_name": "John",`**\
`    `**`"last_name": "pass"`**

**`}`**

</details>

Now create a ‘perform KYC’ request as given below.

<details>

<summary><a href="https://nymcard.com/docs/api#tag/User-KYC/operation/performKyc">POST /users/{id}/kyc</a></summary>

**`{`**

&#x20; **`"kyc_policy": "UAE_INDIVIDUAL_PRIMARY"`**

**`}`**

</details>

{% hint style="success" %}
Note: the KYC service will process the request and return a response as “OK”.
{% endhint %}

&#x20;

*Negative use case:*&#x20;

To simulate a negative KYC processing case, please create a user with a **last\_name** as “**fail**” as given below.

<details>

<summary><a href="https://nymcard.com/docs/api#tag/Users/operation/createUser">POST /users</a></summary>

**`{`**

&#x20;   **`"first_name": "John",`**\
`    `**`"last_name": "fail"`**

**`}`**

</details>

Now create a ‘perform KYC’ request as given below.

<details>

<summary><a href="https://nymcard.com/docs/api#tag/User-KYC/operation/performKyc">POST /users/{id}/kyc</a></summary>

**`{`**

&#x20; **`"kyc_policy": "UAE_INDIVIDUAL_PRIMARY"`**

**`}`**

</details>

{% hint style="danger" %}
Note: the KYC service will process the request and return a response as “FAILED”.
{% endhint %}

####

#### **KYC webhooks**

Once the API user submits the KYC request a webhook ‘KYC\_RESULT’ is triggered and the notification is sent  to the configured endpoint to notify the client.&#x20;

You can create a corresponding webhook as shown in the below example.

<details>

<summary><a href="https://nymcard.com/docs/api#tag/Webhooks/operation/createWebhookNotification"><strong>POST</strong> /webhooks</a></summary>

**`{`**\
`    `**`"endpoint": "`**[**`https://example.com/`**](https://example.com/)**`",`**\
`    `**`"events": [`**\
`        `**`"KYC_RESULT"`**\
`  `**`],`**\
`    `**`"config": {`**\
`        `**`"basic_auth_username": "username",`**\
`        `**`"basic_auth_password": "password",`**\
`        `**`"custom_headers": [`**\
`        `**`{`**\
`            `**`"header_name": "apikey",`**\
`            `**`"header_value": "306e38e4-54be-469f-beca-4297129289d6"`**\
`        `**`}`**\
`        `**`],`**\
`        `**`"created": "2021-05-27T18:48:00.074Z",`**\
`        `**`"modified": "2021-05-27T18:48:00.074Z"`**\
`    `**`}`**\
\&#xNAN;**`}`**

</details>

Also when the user's status is changing internally based on the KYC processing, the webhook status is kept notifying the client.&#x20;

You can create a corresponding webhook as shown in the below example.

<details>

<summary><a href="https://nymcard.com/docs/api#tag/Webhooks/operation/createWebhookNotification"><strong>POST</strong> /webhooks</a></summary>

**`{`**\
`    `**`"endpoint": "`**[**`https://example.com/`**](https://example.com/)**`",`**\
`    `**`"events": [`**\
`        `**`"USER_STATUS_CHANGE"`**\
`  `**`],`**\
`    `**`"config": {`**\
`        `**`"basic_auth_username": "username",`**\
`        `**`"basic_auth_password": "password",`**\
`        `**`"custom_headers": [`**\
`        `**`{`**\
`            `**`"header_name": "apikey",`**\
`            `**`"header_value": "306e38e4-54be-469f-beca-4297129289d6"`**\
`        `**`}`**\
`        `**`],`**\
`        `**`"created": "2021-05-27T18:48:00.074Z",`**\
`        `**`"modified": "2021-05-27T18:48:00.074Z"`**\
`    `**`}`**\
\&#xNAN;**`}`**

</details>

For further details, please refer to the [Webhooks](/get-started/webhooks.md) section.

&#x20;

### **KYC management**

You can perform and manage KYC verification by using our APIs. Following are the APIs available at nCore platform for KYC management.

* Perform KYC&#x20;
* Get KYC by ID
* Search for KYC requests

&#x20;

#### **Perform KYC of user**

You can perform KYC on a user by sending a POST request to /users/{id}/kyc endpoint; where id is the user’s id to whom the KYC is requested. An example is given below.

<details>

<summary><a href="https://nymcard.com/docs/api#tag/User-KYC/operation/performKyc">POST /users/{id}/kyc</a></summary>

**`{`**\
`    `**`"kyc_policy": "UAE_INDIVIDUAL_PRIMARY"`**\
\&#xNAN;**`}`**

</details>

#### **Get KYC by ID**

You can retrieve a specific KYC by sending a GET request to /users/kyc/{id} endpoint, where id is the KYC request ID.

> [**GET /users/kyc/{id}**](https://nymcard.com/docs/api#tag/User-KYC/paths/~1v1~1users~1kyc~1%7Bid%7D/get)

&#x20;

#### **Search for KYC requests**

You can search for KYC requests by sending a POST request to /users/kyc:search endpoint along with the filter as shown below.

<details>

<summary><a href="https://nymcard.com/docs/api#tag/User-KYC/paths/~1v1~1users~1kyc:search/post">POST /users/kyc:search</a></summary>

**`{`**\
`    `**`"query": "Transfer",`**\
`    `**`"sort_by": "By name",`**\
`    `**`"order_by": "asc",`**\
`    `**`"matcher": [`**\
`        `**`"and"`**\
`    `**`],`**\
`    `**`"filters": [`**\
`    `**`{`**\
`        `**`"field": "ID",`**\
`        `**`"operator": "any_of",`**\
`        `**`"values": [`**\
`            `**`"21"`**\
`            `**`]`**\
`        `**`}`**\
`    `**`],`**\
`    `**`"cursors": {`**\
`        `**`"after": "John Smith",`**\
`        `**`"has_more": true`**\
`    `**`},`**\
`    `**`"limit": 0`**\
\&#xNAN;**`}`**

</details>

&#x20;


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.nymcard.com/get-started/program-management/user-kyc-process.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
