> ## Documentation Index
> Fetch the complete documentation index at: https://developer.eka.care/llms.txt
> Use this file to discover all available pages before exploring further.

# Profile KYC

> Complete implementation guide for the ABHA SDK to be used for ABHA KYC Verification Flow.

# ABHA SDK - Profile KYC Implementation

This guide provides everything you need to integrate the ABHA SDK into your application for ABHA Profile KYC Verification.

* **ABHA Profile KYC**: Get your ABHA address KYC verified.

### Implementation Example

Add the following HTML and script tags to your webpage:

<Note>
  For staging/dev environments, replace the SDK URLs with:

  * **JS:** `https://unpkg.com/@eka-care/abha-stg/dist/sdk/abha/js/abha.js`
  * **CSS:** `https://unpkg.com/@eka-care/abha-stg/dist/sdk/abha/css/abha.css`
</Note>

```html theme={null}
<!DOCTYPE html>
<html>
  <head>
    <title>ABHA SDK Integration for ABHA Profile KYC</title>

    <!-- Include ABHA SDK CSS -->
    <link
      rel="stylesheet"
      href="https://unpkg.com/@eka-care/abha/dist/sdk/abha/css/abha.css"
    />
  </head>
  <body>
    <h1>ABHA SDK Demo</h1>

    <!-- Mount Button -->
    <button class="button" onclick="mountABHASDK()">Mount SDK</button>

    <!-- Container for ABHA SDK -->
    <div id="sdk_container"></div>

    <!-- Include ABHA SDK JS -->
    <script
      type="module"
      src="https://unpkg.com/@eka-care/abha/dist/sdk/abha/js/abha.js"
    ></script>

    <script>
      function mountABHASDK() {
        window.initAbhaApp({
          containerId: "sdk_container",
          clientId: 'ext',

         // Pass the data here: 
          data: {
             accessToken: "<your_access_token>", // Pass the access token you have
             oid: "<patient_oid>", // Pass OID of the patient
             hipId: "<available_HFR_ID>", // Pass the HFR ID you have
             identifier:'<phr_address_of_the_patient_to_be_kyced>', // Pass the phr address as identifier to get it kyc verified 
             identifier_type:"phr_address",  // Pass the identifier type i.e. "phr_address"
             flow:'abha-kyc', // Pass the flow as abha-kyc
             orgIconUrl: "<url_of_your_org_logo>", // Pass the url of the logo of your organisation for ex https://cdn.eka.care/vagus/cl5jgf0u500070shaetqw0r5l.png
             linkToOrgIcon: "<url_of_image_to_link_abha_to_your_org>", // Pass the url of an image which depicts linking abha to your organisation for ex https://cdn.eka.c
          },

          // KYC Success callback
          onKYCSuccess: (params) => {
            console.log("ABHA KYC Verified successfully:", params);
            
            // Example: Store ABHA data in your app
            if (window.EkaAbha) {
              window.EkaAbha.onAbhaKYCSuccess(JSON.stringify(params));
            }
          },

          // Error callback
          onError: (params) => {
            console.error("ABHA SDK failed:", params);

            // Example: Store ABHA data in your app
            if (window.EkaAbha) {
              window.EkaAbha.onAbhaFailure(JSON.stringify(params));
            }
          },

          // Abha Close callback
          onAbhaClose: () => {
            console.log("ABHA SDK closed");
          }, 

        });
      }
    </script>
  </body>
</html>
```

## Core Functions

### 1. initAbhaApp

Initializes and renders the ABHA SDK in your specified container.

**Parameters:**

| Name           | Type                                                                                                                                                                                                                             | Required    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `containerId`  | `string`                                                                                                                                                                                                                         | ✅           | The HTML element ID where the SDK will mount.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `clientId`     | `string`                                                                                                                                                                                                                         | ✅           | Provide clientId as `ext`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `data`         | `{`<br />`accessToken: string;`<br />`oid?: string;`<br />`hipId?: string;`<br />`identifier: string;`<br />`identifier_type: string;`<br />`flow: string;`<br />`orgIconUrl?: string;`<br />`linkToOrgIcon?: string;`<br />` }` | ⚙️ Optional | Configuration data for initializing the ABHA flow. <br /><br />- <strong>accessToken:</strong> Pass the access token you have generated from [Connect Login ](https://developer.eka.care/api-reference/authorization/client-login) API without the word `Bearer`.<br />- <strong>oid:</strong> Pass the OID of the patient if available.<br />- <strong>hipId:</strong> Pass the HFR ID you have.<br />- <strong>identifier:</strong> Pass the identifier value i.e. phr address to get it kyced.<br />- <strong>identifier\_type:</strong> Pass the type of identifier which you passed in `identifier` key i.e. "phr\_address".  <br />- <strong>flow:</strong> Pass the type of flow for which you want to use SDK for i.e. `abha-kyc` for KYC flow.<br />- <strong>orgIconUrl:</strong> Public CDN URL of the logo of your organisation url should start with https\://. [Example](https://cdn.eka.care/vagus/cl5jgf0u500070shaetqw0r5l.png)<br />- <strong>linkToOrgIcon:</strong> Public CDN URL of the icon representing “Link ABHA to your organisation” url should start with https\://. [Example](https://cdn.eka.care/vagus/cm6agrs5000090tfwfz984x5b.webp)<br /> <br /> `keys with ? are optional.` |
| `onKYCSuccess` | `(params: TOnAbhaKycSuccessParams) => void`                                                                                                                                                                                      | ✅           | Triggered when the user KYC verified successfully.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `onError`      | `(params: TOnAbhaFailureParams) => void`                                                                                                                                                                                         | ✅           | Triggered when an error occurs during the ABHA flow.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `onAbhaClose`  | `() => void`                                                                                                                                                                                                                     | ✅           | Triggered when SDK closes.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |

**Example:**

```javascript theme={null}
window.initAbhaApp({
  containerId: "sdk_container",
  data: {
    accessToken: "your_access_token_here",
    oid: "patient_oid_here",
    identifier: "phr_address_of_the_patient_to_be_kyced"
    identifier_type: "phr_address"
    flow: "abha-kyc"
    hipId: "available HFR ID",
    linkToOrgIcon: "url_of_image_to_link_abha_to_your_org",
  },
  onKYCSuccess: (params) => {
    console.log("ABHA KYC verification successful!", params);
  },
  onError: (error) => {
    console.error("ABHA flow failed:", error);
  },
  onAbhaClose: (error) => {
    console.error("ABHA SDK closed");
  },
});
```

## Callback Parameters

### onKYCSuccess Callback

The onKYCSuccess callback is triggered when the ABHA KYC flow completes successfully.
It returns a confirmation message indicating that the KYC has been verified.

**Callback Signature:**

```typescript theme={null}
onKYCSuccess: (params: TOnAbhaKycSuccessParams) => void;
```

**Type Definitions**

```typescript theme={null}
type TOnAbhaKycSuccess = string;
```

**Parameters**

|                     | Type     | Description                                           |
| ------------------- | -------- | ----------------------------------------------------- |
| `TOnAbhaKycSuccess` | `string` | A confirmation message from SDK post KYC verification |

**Example:**

```javascript theme={null}
const onKYCSuccess = (params) => {
  console.log("KYC verification Success:", params);

  alert("KYC was verified successfully!");

  // Optionally pass data to native bridge if available
  if (window.EkaAbha) {
    window.EkaAbha.onAbhaKYCSuccess(params);
  }
};
```

### onError Callback

The onError callback is triggered whenever an ABHA flow fails or is interrupted.
It provides details about the failure through structured parameters, allowing you to handle or forward the error appropriately (for example, to native apps or monitoring tools).

**Callback Signature:**

```typescript theme={null}
onError: (params: TOnAbhaFailureParams) => void;
```

**Type Definitions**

```typescript theme={null}
type TOnAbhaFailureParams = {
  error?: string;
  response?: TAuthVerifyV2Response;
};

type TAuthVerifyV2Response = {
  skip_state: number;
  method: AUTH_METHOD;
  data?: {
    tokens: {
      sess: string;
      refresh: string;
    };
    profile: TProfileRecord;
  };
  txn_id: string;
  error?: {
    code: number;
    message: string;
  };
};

enum AUTH_METHOD {
  EMAIL = 1,
  MOBILE = 2,
  ABHA = 7,
}

type TProfileRecord = {
  fln: string;
  fn: string;
  mn?: string;
  ln?: string;
  gen?: "M" | "F" | "O" | "U" | undefined; // 'male' | 'female' | 'other' | 'unknown'
  dob?: string;
  mobile?: string;
  email?: string;
  uuid?: string;
  bloodgroup?: "" | "A+" | "A-" | "B+" | "B-" | "O+" | "O-" | "AB+" | "AB-";
  pic?: string;
  as?: string;
  "dob-valid"?: boolean;
  "is-d"?: boolean;
  "is-d-s"?: boolean;
  "is-p"?: boolean;
  oid: string;
  at: string;
  type?: 1 | 2 | 3 | 4 | 5 | 6;
  "health-ids"?: Array<string>;
  abha_number?: string;
  kyc_verified?: boolean;
};

```

**Parameters**

| Key        | Type                     | Description                                                      |
| ---------- | ------------------------ | ---------------------------------------------------------------- |
| `error`    | `string?`                | Short description of the failure or error message.               |
| `response` | `TAuthVerifyV2Response?` | Partial or full API response object returned from ABHA services. |

**Example:**

```javascript theme={null}
const onError = (params) => {
  console.error("ABHA Error:", params);

  if (params.response?.error?.code === 1001) {
    alert("Authentication failed. Please try again.");
  } else if (params.error === "NETWORK_ERROR") {
    alert("Please check your internet connection.");
  } else {
    alert("Something went wrong. Please retry.");
  }

  // Forward the error to native handler if available
  if (window.EkaAbha) {
    window.EkaAbha.onAbhaFailure(JSON.stringify(params));
  }
};
```

### onAbhaClose Callback

The onAbhaClose callback is triggered when the ABHA SDK flow gets closed.

**Callback Signature:**

```typescript theme={null}
onAbhaClose: () => void;
```

**Example:**

```javascript theme={null}
const onAbhaClose = () => {
  console.log("ABHA SDK Closed");
};
```

**Suggest Handling**

* Always log the full error response (params) for debugging.
* Display friendly error messages for known error.code values.
* If params.response is present, inspect response.error.message for more detail.
* If integrating with native apps, forward the serialized error object:

```javascript theme={null}
window.EkaAbha.onAbhaFailure(JSON.stringify(params));
```

## Container Styling

Ensure your container has sufficient space:

```html theme={null}
<div
  id="sdk_container"
  style="width: 100%; height: 600px; border: 1px solid #ddd;"
></div>
```

## Troubleshooting

### Common Issues

#### 1. SDK Not Rendering

**Problem**: Nothing appears in the container.

**Solution**:

* Ensure containerId matches an existing HTML element.
* Verify the SDK JS and CSS are correctly loaded.
* Check browser console for errors.

#### 2. APIs Not Being Called

**Problem**: API requests are not triggered after the SDK is mounted.

**Solution**:

* Ensure that the accessToken is passed correctly (do not include the Bearer prefix) and that the token has not expired.
* To prevent CORS-related issues, ensure that your domain is whitelisted.

#### 3. Callback Not Triggered

**Problem**: onSuccess, onError, onKYCSuccess, onConsentSuccess, onAbhaClose isn’t firing.

**Solution**:

* Make sure callbacks are passed as valid functions.
* Avoid race conditions (e.g., calling before SDK fully loads).

#### 4. Styling Issues

**Problem**: SDK content appears misaligned or clipped.

**Solution**:

* Give your container a fixed height (e.g., 600px).
* Ensure no parent element uses overflow: hidden.
