POSTSend OTP (eKYC)
Initiate AePS Fingpay eKYC by sending an OTP to the agent's registered Aadhaar-linked mobile number.
- Sends OTP: Sends an SMS to the customer; repeating the call sends another.
First-time KYC follows three steps in order: Send OTP → Verify OTP → Biometric. On subsequent days, use the Daily KYC (biometric-only) endpoint.
This is the first step in the one-time AePS Fingpay eKYC flow. The OTP is delivered to the number passed in customer_id. The eKYC flow — Send OTP → Verify OTP → Biometric — must be completed once per agent before they can perform any AePS transactions. This step is a prerequisite; do not confuse it with the Daily KYC which is required on each calendar day.
The aadhar parameter must be encrypted with Fingpay's RSA public key (PKCS#1 v1.5 padding) and Base64-encoded — never sent as plain text. See Aadhaar Encryption (Fingpay AePS) for how to get the production key and code samples.
- AePS (Fingpay) — Cash Withdrawal — Aadhaar-enabled cash withdrawal: one-time agent activation and eKYC, daily KYC, a transaction OTP for amounts above ₹5,000, then the biometric withdrawal.
Request
Body parameters
| Field | Type | Required | Description |
|---|---|---|---|
initiator_id | string | required | Registered mobile number of the API user (see Platform Credentials).e.g. 9962981729 |
client_ref_id | string | optional | Unique reference ID per API call, generated by your system (10–20 characters; 10 recommended). The SDKs generate one for every non-GET call when you don't.e.g. 2026010100123456789 |
user_code | string | required | Unique code of your user/agent/retailer the service is run for. Use `Onboard Agent` API to register your userse.g. 20810200 |
aadhar | string | required | RSA-encrypted (PKCS#1 v1.5), Base64-encoded Aadhaar number of the agent undergoing eKYC. See the Aadhaar Encryption (Fingpay AePS) guide for the key and code samples.e.g. BASE64_ENCRYPTED_AADHAAR |
customer_id | string | required | Registered mobile number of the agent/merchant undergoing eKYC. The OTP is delivered to this number.e.g. 9123456789 |
latlong | string | required | Agent's GPS coordinates as `latitude,longitude`. Required for security and fraud prevention.e.g. 28.6139,77.2090 |
initiator_idstringRequiredRegistered mobile number of the API user (see Platform Credentials).
example: 9962981729
client_ref_idstringoptionalUnique reference ID per API call, generated by your system (10–20 characters; 10 recommended). The SDKs generate one for every non-GET call when you don't.
example: 2026010100123456789
user_codestringRequiredUnique code of your user/agent/retailer the service is run for. Use `Onboard Agent` API to register your users
example: 20810200
aadharstringRequiredRSA-encrypted (PKCS#1 v1.5), Base64-encoded Aadhaar number of the agent undergoing eKYC. See the Aadhaar Encryption (Fingpay AePS) guide for the key and code samples.
example: BASE64_ENCRYPTED_AADHAAR
customer_idstringRequiredRegistered mobile number of the agent/merchant undergoing eKYC. The OTP is delivered to this number.
example: 9123456789
latlongstringRequiredAgent's GPS coordinates as `latitude,longitude`. Required for security and fraud prevention.
example: 28.6139,77.2090
These headers authenticate and sign every request. See How Auth Works for details.
| Field | Type | Required | Description |
|---|---|---|---|
developer_key | string | required | Static API key issued to your account after KYC. |
secret-key | string | required | Dynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key))). |
secret-key-timestamp | string | required | Current time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time. |
content-type | string | required | application/jsone.g. application/json |
developer_keystringRequiredStatic API key issued to your account after KYC.
secret-keystringRequiredDynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key))).
secret-key-timestampstringRequiredCurrent time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time.
content-typestringRequiredapplication/json
example: application/json
Response types
| response_type_id | Meaning | Next step |
|---|---|---|
1600 | OTP request has been sent | Verify OTP (eKYC) |
Responses
1600OTP request has been sentNext:Verify OTP (eKYC)
statusnumberPrimary success indicator (0 = success).
messagestringHuman-readable response / error message.
response_status_idnumberUI display hint only (-1/0 success, 1 failure, 2 initiated, 3 refund initiated, 4 refunded). Never branch on it — use `status` (and `tx_status` for financial APIs), or `response_type_id` where documented.
response_type_idnumberA unique id for every possible response shape (success or error) — useful for client logic branching and analytics.
dataobjectAPI-specific response payload.
reference_tidstringTransaction reference ID for this eKYC session. Must be passed to the Verify OTP API.
otp_ref_idstringReference ID for the OTP session. Must be passed to the Verify OTP API.
Next steps
NextPUTVerify OTP (eKYC)Verify the eKYC OTP sent to the agent's Aadhaar-linked mobile number to advance the one-time AePS Fingpay eKYC.Related
- AePS Cashout — details & pricingFeatures, plans and pricing for this product.
- Integrate using AIBuild agent-native integrations with MCP, SDKs and packs.
- Integrate using an SDKNode.js, Python, PHP, Go and Java clients with signing built in.
- Aadhaar Encryption (Fingpay AePS) guideWhere to get the RSA public key, encryption steps and code samples for the `aadhar` parameter.