| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Complete merchant/outlet biometric KYC for AEPS using a fresh registered-device capture. Start with the AEPS Biometric KYC Status API to obtain the capture reference and required action.
POST https://pay2new.in/apis/aeps/v1/biometricKyc
Headers
| Header | Required | Description |
|---|---|---|
secret | Yes | Your Pay2New API secret. |
outletId | Yes | Pay2New outlet/customer ID returned after successful onboarding; do not send the provider outlet ID. |
Content-Type | Yes | application/json |
Accept | No | Request a JSON response. |
Requests require an active partner account, approved KYC, active wallet and API access, an allowlisted source IP, and the relevant service enabled.
Merchant KYC flow
| Step | API / action | What to use |
|---|---|---|
| 1 | AEPS Biometric KYC Status | Read data.action, data.status, data.referenceKey and data.pidOptionWadh. |
| 2 | Capture the merchant’s biometrics | Use the returned pidOptionWadh in your RD capture options when supplied. Obtain a fresh capture with the merchant’s consent. |
| 3 | Submit this Biometric KYC API | Send the status referenceKey, location, request_id and the full biometricData object shown below. |
| 4 | Check KYC status again | Confirm the resulting status/action. When no further action is required, follow the Merchant Login flow before AEPS transactions. |
Use the KYC status reference
Use data.referenceKey from AEPS Biometric KYC Status for this outlet. If that response says NO-ACTION-REQUIRED, do not submit another capture merely to repeat KYC. Follow its action and status. A cash-withdrawal Transaction OTP reference belongs to a different flow.
JSON request
| Field | Required | Description |
|---|---|---|
referenceKey | Yes | data.referenceKey returned by AEPS Biometric KYC Status for the same outlet. |
latitude | Yes | Latitude as a decimal value. Accepted as a JSON number or decimal string. |
longitude | Yes | Longitude as a decimal value. Accepted as a JSON number or decimal string. |
request_id | Yes | Your required client reference. The returned order_id is generated separately by Pay2New. |
biometricData | Yes | Fresh biometric capture object from the registered device. Pass the capture fields required by your integration; do not reuse sample or previous capture data. Include aadhaar_number (12 digits) and the fresh registered-device capture fields. Never substitute a sample capture. |
Pay2New request format
| Instantpay field / setting | What to send to Pay2New |
|---|---|
| Provider authentication headers | Use secret and outletId as documented above; Pay2New supplies the upstream credentials. |
| encryptedAadhaar | Send biometricData.aadhaar_number. Pay2New encrypts it before forwarding the capture. |
| externalRef | Send your required request_id. Pay2New generates a separate provider reference and returns it as order_id. |
| referenceKey | Use the reference from the Pay2New AEPS KYC Status response. |
| captureType | The current Pay2New KYC endpoint does not forward this optional provider field; it is not part of this request contract. |
The live endpoint accepts the five top-level body fields shown in the request table. Biometric capture fields remain nested inside biometricData.
Biometric request fields
Pass biometricData as a nested JSON object inside the request. Pay2New accepts aadhaar_number and creates the provider’s encryptedAadhaar internally. Keep sessionKey, pidData, rdsId and the other RD field names exactly as shown.
| JSON field | Value / RD mapping |
|---|---|
biometricData.aadhaar_number | Consenting customer/merchant Aadhaar number; exactly 12 digits. |
biometricData.dc | DeviceInfo.dc |
biometricData.ci | Skey.ci |
biometricData.hmac | Hmac element text |
biometricData.dpId | DeviceInfo.dpId |
biometricData.mc | DeviceInfo.mc |
biometricData.pidDataType | Data.type, for example X for XML |
biometricData.sessionKey | Skey element text |
biometricData.mi | DeviceInfo.mi |
biometricData.rdsId | DeviceInfo.rdsId |
biometricData.errCode | Resp.errCode |
biometricData.errInfo | Resp.errInfo |
biometricData.fCount | Resp.fCount |
biometricData.fType | Resp.fType |
biometricData.iCount | Resp.iCount |
biometricData.iType | Resp.iType |
biometricData.pCount | Resp.pCount |
biometricData.pType | Resp.pType |
biometricData.srno | DeviceInfo/additional_info device serial value |
biometricData.sysid | DeviceInfo/additional_info system ID, when supplied |
biometricData.ts | Capture timestamp returned by the RD integration, when supplied |
biometricData.pidData | Data element text (encrypted PID) |
biometricData.qScore | Resp.qScore |
biometricData.nmPoints | Resp.nmPoints |
biometricData.rdsVer | DeviceInfo.rdsVer |
Copy capture values from the RD response without altering their case or encrypted contents. Use the actual capture counts/types; the example is a fingerprint capture. Optional device metadata should reflect what your device supplies.
Format reference: Instantpay biometric request documentation. The request below uses Pay2New’s URL, authentication and field names.
Request example
Complete biometric sample
The sample below includes the full biometric field structure. Replace the illustrative customer/device values and encrypted-data placeholders with the values from a fresh registered-device capture. Keep the field names and their case; capture counts and types must match the actual device response.
The example contains illustrative values. Replace the KYC status reference, merchant Aadhaar, location, request reference and RD output fields before submitting.
{
"referenceKey": "REFERENCE_FROM_AEPS_KYC_STATUS",
"latitude": "18.5204",
"longitude": "73.8567",
"request_id": "EXAMPLE202609260001",
"biometricData": {
"aadhaar_number": "999999999999",
"dc": "SAMPLE_REGISTERED_DEVICE_CODE",
"ci": "20261231",
"hmac": "BASE64_ENCRYPTED_PID_HASH",
"dpId": "SAMPLE_DEVICE_PROVIDER_ID",
"mc": "BASE64_DEVICE_CERTIFICATE",
"pidDataType": "X",
"sessionKey": "BASE64_ENCRYPTED_SESSION_KEY",
"mi": "SAMPLE_DEVICE_MODEL",
"rdsId": "SAMPLE_RD_SERVICE_ID",
"errCode": "0",
"errInfo": "",
"fCount": "1",
"fType": "2",
"iCount": "0",
"iType": "",
"pCount": "0",
"pType": "",
"srno": "SAMPLE_DEVICE_SERIAL_NUMBER",
"sysid": "SAMPLE_SYSTEM_ID",
"ts": "2026-09-26T12:00:00+05:30",
"pidData": "BASE64_ENCRYPTED_PID_DATA",
"qScore": "100",
"nmPoints": "46",
"rdsVer": "SAMPLE_RD_SERVICE_VERSION"
}
}
Complete cURL request
curl --request POST \
--url 'https://pay2new.in/apis/aeps/v1/biometricKyc' \
--header 'secret: YOUR_PAY2NEW_SECRET' \
--header 'outletId: YOUR_PAY2NEW_OUTLET_ID' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"referenceKey": "REFERENCE_FROM_AEPS_KYC_STATUS",
"latitude": "18.5204",
"longitude": "73.8567",
"request_id": "EXAMPLE202609260001",
"biometricData": {
"aadhaar_number": "999999999999",
"dc": "SAMPLE_REGISTERED_DEVICE_CODE",
"ci": "20261231",
"hmac": "BASE64_ENCRYPTED_PID_HASH",
"dpId": "SAMPLE_DEVICE_PROVIDER_ID",
"mc": "BASE64_DEVICE_CERTIFICATE",
"pidDataType": "X",
"sessionKey": "BASE64_ENCRYPTED_SESSION_KEY",
"mi": "SAMPLE_DEVICE_MODEL",
"rdsId": "SAMPLE_RD_SERVICE_ID",
"errCode": "0",
"errInfo": "",
"fCount": "1",
"fType": "2",
"iCount": "0",
"iType": "",
"pCount": "0",
"pType": "",
"srno": "SAMPLE_DEVICE_SERIAL_NUMBER",
"sysid": "SAMPLE_SYSTEM_ID",
"ts": "2026-09-26T12:00:00+05:30",
"pidData": "BASE64_ENCRYPTED_PID_DATA",
"qScore": "100",
"nmPoints": "46",
"rdsVer": "SAMPLE_RD_SERVICE_VERSION"
}
}'
Response
Application status is returned in the JSON status field. A successful HTTP response alone does not confirm a successful operation.
| Field | Description |
|---|---|
status | integer: application status, not HTTP status |
message | string |
data | empty array |
order_id | server-generated string |
| JSON status | Meaning / next step |
|---|---|
| 1 | KYC submission succeeded. Confirm the outlet’s current KYC state through Biometric KYC Status. |
| 2 | Validation, access or processing failure. Read message and errors when present. |
| 3 | Uncertain provider outcome. Check KYC status before repeating the submission. |
A provider-processing response includes data as an empty array and a generated order_id. An early validation or access failure may contain only status, message and errors. The client request_id is required but is not echoed by this response.
Illustrative response:
{
"status": 1,
"message": "Success",
"data": [],
"order_id": "EXAMPLE_ORDER_001"
}
Errors
Validation errors can include an errors object keyed by field name. Authentication, outlet, service and other processing errors can return only status and message. Errors are application-level responses; do not rely on an HTTP 400 status.
{
"status": 2,
"message": "Invalid Parameters",
"errors": {
"referenceKey": "Provide a valid value for this field."
}
}
