AEPS Express · Agents & Outlets
Outlet Biometric eKYC
Step 5: One-time biometric eKYC for AEPS Express outlet activation.
POST request
URL: https://uat-api.vizodigital.com/api/v1/aeps-express/agents/{agent_code}/kyc
Body
{
"reference_id": "KYC2026100300001",
"channel": "APP",
"device_id": "8f2d7c9a12bc45ef",
"ip_address": "49.47.133.99",
"user_agent": "Mozilla/5.0 Android",
"latitude": "25.5899",
"longitude": "85.1606",
"business_nature": "Retail Shop",
"annual_income": "300000",
"bio_type": "0",
"pid_data": "BASE64_ENCODED_PID_XML"
}
Include a valid Bearer token with every request
Code sample
curl -X POST "https://uat-api.vizodigital.com/api/v1/aeps-express/agents/AC12345678/kyc" \
-H "X-API-Key: YOUR_API_KEY_OR_TOKEN" \
-H "X-Timestamp: $(TZ=Asia/Kolkata date '+%Y-%m-%d %H:%M:%S')" \
-H "Content-Type: application/json" \
-d '{
"reference_id": "KYC2026100300001",
"channel": "APP",
"device_id": "8f2d7c9a12bc45ef",
"ip_address": "49.47.133.99",
"user_agent": "Mozilla/5.0 Android",
"latitude": "25.5899",
"longitude": "85.1606",
"business_nature": "Retail Shop",
"annual_income": "300000",
"bio_type": "0",
"pid_data": "BASE64_ENCODED_PID_XML"
}'
Success Response
{
"status": "success",
"message": "Outlet KYC completed successfully.",
"data": {
"reference_id": "KYC2026100300001",
"kyc_status": "verified"
}
}
Failure response
{
"status": "error",
"code": "provider_rejected",
"message": "Biometric data did not match."
}
Overview
Step 5: Completes the agent's biometric eKYC on AEPS Express switch. The merchant must capture their finger, face, or iris on a certified RD Service device using the kyc_wadh provided in Outlet Status & WADH.
Headers
-
X-API-Key · string required
Your credential: either your `rr_live_` API key, or the Bearer token from `POST /api/v1/auth/client-credentials` (the same token every other API uses). The token may instead be sent as `Authorization: Bearer <token>`. A token follows the same IP whitelist as your keys, and all your tokens share one requests-per-minute allowance.
Example: rr_live_xxxxxxxxxxxxx
-
X-Timestamp · string required
Current time in IST as `YYYY-MM-DD HH:MM:SS` (or `YYYY-MM-DDTHH:MM:SS`). Do not add a timezone suffix such as `+05:30`. Must be within 15 seconds of our server time.
Example: 2026-10-03 10:30:45
-
Content-Type · string required
Request content type.
Example: application/json
Parameters
-
agent_code · path · string required
The `agent_code` of the AEPS Express registered agent.
Example: AC12345678
Schema
{ "type": "string" }
Body
Outlet Biometric eKYC request body
Schema
{
"type": "object",
"required": [
"reference_id",
"channel",
"device_id",
"ip_address",
"user_agent",
"latitude",
"longitude",
"business_nature",
"annual_income",
"bio_type",
"pid_data"
],
"properties": {
"reference_id": {
"type": "string",
"description": "Your unique ID for this request."
},
"channel": {
"type": "string",
"enum": [
"APP",
"WEB"
],
"description": "Where the request comes from."
},
"device_id": {
"type": "string",
"description": "Android ID of the agent device (16 hex characters) when `channel` is `APP`. Send `Browser` when `channel` is `WEB`. Max 40 characters."
},
"ip_address": {
"type": "string",
"description": "Public IPv4 address of the agent device."
},
"user_agent": {
"type": "string",
"description": "App or browser user-agent string. Max 50 characters."
},
"latitude": {
"type": "string",
"description": "Live latitude of the agent, exactly 4 decimal places. Must not be hardcoded."
},
"longitude": {
"type": "string",
"description": "Live longitude of the agent, exactly 4 decimal places. Must not be hardcoded."
},
"business_nature": {
"type": "string",
"enum": [
"Mobility",
"Pharma",
"Import And Export Trader",
"Law",
"Accountancy Firm",
"Liquor",
"Manufacturing",
"Marketing including Multi-level Marketing",
"Media",
"Pawn Shop",
"Money Lender",
"Money Changer",
"Real Estate",
"Restaurant And Hospitality",
"Retail Shop",
"Service Provider",
"Small Vendor",
"Kirana Shop",
"Stock Trading",
"Brokerage",
"Transport",
"Logistics",
"Wholesale Trading",
"Agriculture",
"Antique Dealer",
"Arms Dealer",
"Art Dealer",
"Banking",
"Barber",
"Parlour",
"Salon",
"Bullion Dealer and Jeweller",
"Casino",
"Gaming Application",
"Educational Institute",
"Financial Institution",
"Healthcare",
"Others"
],
"description": "Type of business the agent runs."
},
"annual_income": {
"type": "string",
"description": "Annual income in INR, digits only."
},
"bio_type": {
"type": "string",
"enum": [
"0",
"1",
"2"
],
"description": "`0` = fingerprint, `1` = face, `2` = iris."
},
"pid_data": {
"type": "string",
"description": "Base64-encoded PID XML captured from a registered RD service device."
}
}
}
Example
{
"reference_id": "KYC2026100300001",
"channel": "APP",
"device_id": "8f2d7c9a12bc45ef",
"ip_address": "49.47.133.99",
"user_agent": "Mozilla/5.0 Android",
"latitude": "25.5899",
"longitude": "85.1606",
"business_nature": "Retail Shop",
"annual_income": "300000",
"bio_type": "0",
"pid_data": "BASE64_ENCODED_PID_XML"
}
Responses
-
200 · application/json default
Success
Schema
{ "type": "object" }Example
{ "status": "success", "message": "Outlet KYC completed successfully.", "data": { "reference_id": "KYC2026100300001", "kyc_status": "verified" } } -
422 · application/json
Failed or rejected
Schema
{ "type": "object" }Example
{ "status": "error", "code": "provider_rejected", "message": "Biometric data did not match." }
Errors
-
INVALID_API_KEY · HTTP 401
Invalid or revoked API key.
{ "message": "Invalid or revoked API key." } -
TIMESTAMP_OUT_OF_RANGE · HTTP 400
Request timestamp is outside the ±15 second window.
{ "message": "Request timestamp is outside the ±15 second window." } -
service_not_enabled · HTTP 403
AEPS is not enabled for your account. Contact your account manager to activate it.
{ "status": "error", "code": "service_not_enabled", "message": "AEPS is not enabled for your account. Contact your account manager to activate it." } -
RATE_LIMITED · HTTP 429
Rate limit exceeded.
{ "message": "Rate limit exceeded." } -
agent_not_found · HTTP 404
Agent not found.
{ "status": "error", "code": "agent_not_found", "message": "Agent not found." } -
agent_blocked · HTTP 403
This agent is blocked. Contact support.
{ "status": "error", "code": "agent_blocked", "message": "This agent is blocked. Contact support." } -
duplicate_reference_id · HTTP 409
This reference_id was already used. Send a new one.
{ "status": "error", "code": "duplicate_reference_id", "message": "This reference_id was already used. Send a new one." } -
provider_rejected · HTTP 422
The bank network refused the request. The message says why.
{ "status": "error", "code": "provider_rejected", "message": "The bank network refused the request. The message says why." } -
provider_unavailable · HTTP 502
The AEPS provider did not respond. Try again shortly.
{ "status": "error", "code": "provider_unavailable", "message": "The AEPS provider did not respond. Try again shortly." } -
noble_credentials_unavailable · HTTP 503
Noble credentials are not available. Contact your partner.
{ "status": "error", "code": "noble_credentials_unavailable", "message": "Noble credentials are not available. Contact your partner." } -
instantpay_credentials_unavailable · HTTP 503
InstantPay credentials are not configured or incomplete.
{ "status": "error", "code": "instantpay_credentials_unavailable", "message": "InstantPay credentials are not configured or incomplete." }
Rate Limits
100/min