---
title: "AePS Fingpay — Biometric eKYC API Reference"
description: "Complete one-time AePS Fingpay eKYC by submitting the agent's Aadhaar and live biometric fingerprint capture."
canonical: "https://eps.eko.in/docs/aeps-biometric-ekyc"
---


> **Canonical URL:** https://eps.eko.in/docs/aeps-biometric-ekyc
> This is a machine-readable Markdown version of the page for AI agents and LLMs. The primary (HTML) version lives at the canonical URL above.

# AePS Fingpay — Biometric eKYC API Reference

`POST https://staging.eko.in/ekoapi/v3/customer/aeps/fingpay/kyc/biometric`

Complete one-time AePS Fingpay eKYC by submitting the agent's Aadhaar and live biometric fingerprint capture.

The final step in the one-time AePS Fingpay eKYC flow, called after OTP verification. Submits the agent's Aadhaar and biometric PID data to UIDAI for identity verification. On success, the agent's eKYC is marked complete and they can start performing AePS transactions (subject to completing daily 2FA each day). This step uses the same RSA-encrypted Aadhaar and PID XML format as the transaction APIs.

> View product & pricing details: [AePS Cashout](https://eps.eko.in/products/aeps-api.md)

## Body parameters

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| initiator_id | string | yes | Registered mobile number of the API user (see Platform Credentials). e.g. 9962981729 |
| user_code | string | yes | User code of the retailer/agent the service is run for. e.g. 20810200 |
| client_ref_id | string | no | Unique reference id per API call, generated by your system. e.g. REQ-20260101-001 |
| aadhaar | string | yes | RSA-encrypted, Base64-encoded Aadhaar number of the agent. e.g. BASE64_ENCRYPTED_AADHAAR |
| piddata | string | yes | PID XML string from the UIDAI-certified biometric device (fType=2, Data type='X', mc in DeviceInfo). e.g. <?xml version='1.0'?><PidData><Data type='X'>...</Data><DeviceInfo mc='...' /></PidData> |
| otp_ref_id | string | yes | Reference ID returned by the Send OTP (eKYC) API, linking this biometric capture to the verified OTP session. e.g. OTPREF20240101001 |

## Headers

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| developer_key | string | yes | Static API key issued to your account after KYC. |
| secret-key | string | yes | Dynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key))). |
| secret-key-timestamp | string | yes | Current time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time. |
| content-type | string | yes | application/json e.g. application/json |

## Response

⭐ marks fields highlighted as verifiable.

| Field | Type | Description |
| --- | --- | --- |
| status | number | Primary success indicator (0 = success). |
| message | string | Human-readable response / error message. |
| response_status_id | number | Granular status id; see the shared error-codes table. |
| response_type_id | number | A unique id for every possible response shape (success or error) — useful for client logic branching and analytics. |
| data | object | API-specific response payload. |
| data.kyc_status ⭐ | string | Result of the eKYC verification. 'completed' means the agent is now KYC-verified for AePS. |
| data.aadhaar_ref_num | string | UIDAI authentication reference number for the biometric capture. |

## Example request

```json
{
  "initiator_id": "9962981729",
  "user_code": "20810200",
  "client_ref_id": "REQ-20260101-001",
  "aadhaar": "BASE64_ENCRYPTED_AADHAAR",
  "piddata": "<?xml version='1.0'?><PidData><Data type='X'>...</Data><DeviceInfo mc='...' /></PidData>",
  "otp_ref_id": "OTPREF20240101001"
}
```

## Example response

```json
{
  "status": 0,
  "response_status_id": 0,
  "message": "Biometric eKYC completed successfully. Agent is now eligible for AePS transactions.",
  "response_type_id": 1388,
  "data": {
    "kyc_status": "completed",
    "aadhaar_ref_num": "UIDAI112233445"
  }
}
```

## Error scenarios

| Status | Scenario |
| --- | --- |
| 200 | Biometric match failed |
| 200 | OTP session expired |
