AEPS · Agents
Agent KYC
One-time biometric eKYC of the agent.
POST request
URL: https://uat-api.vizodigital.com/api/v1/aeps/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/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": "KYC completed successfully.",
"data": {
"reference_id": "KYC2026100300001",
"kyc_status": "verified"
}
}
Failure response
{
"status": "error",
"code": "provider_rejected",
"message": "Biometric data did not match."
}
Overview
Completes the agent's Aadhaar eKYC with a biometric capture.
Notes
- Take the agent's explicit consent for Aadhaar eKYC before capturing.
- Capture the PID block with the
kyc_wadhvalue from Agent Status that matchesbio_type. - Transactions are only allowed within 20 km of the location used for KYC.
reference_idcan be used once per account and environment, for both KYC and Daily 2FA. A repeated one is refused withduplicate_reference_id(409). After a502 provider_unavailable, send a newreference_id; the old one is used up.
Testing in UAT
- Sandbox keys never reach the bank network.
- Send a
reference_idthat starts withFAIL-to get a failed answer.
Business nature values
Send business_nature exactly as written in the first column.
| Business Nature | Description |
|---|---|
| Mobility | Digital banking services |
| Pharma | Pharmaceutical manufacturing, drug development and medical supply distribution |
| Import And Export Trader | International trade, cross-border commerce and goods distribution |
| Law | Legal services, law firms, attorneys and judicial consultation |
| Accountancy Firm | Financial accounting, auditing, tax preparation and bookkeeping services |
| Liquor | Manufacturing, distribution and retail of alcoholic beverages |
| Manufacturing | Production of goods, industrial processing and factory operations |
| Marketing including Multi-level Marketing | Advertising, promotion, brand management and network marketing |
| Media | Broadcasting, publishing, journalism and digital content creation |
| Pawn Shop | Collateral-based lending and trading of second-hand goods |
| Money Lender | Providing loans and credit services to individuals and businesses |
| Money Changer | Currency exchange and foreign exchange services |
| Real Estate | Property buying, selling, leasing and real estate development |
| Restaurant And Hospitality | Food service, accommodation and customer hospitality businesses |
| Retail Shop | Direct consumer sales of goods and merchandise |
| Service Provider | Various professional and personal services to clients |
| Small Vendor | Street vendors, small-scale traders and local merchants |
| Kirana Shop | Neighbourhood grocery stores and daily essentials retail |
| Stock Trading | Securities trading, investment brokerage and financial market operations |
| Brokerage | Intermediary services for financial transactions and investments |
| Transport | Passenger and cargo transportation services |
| Logistics | Supply chain management, warehousing and distribution services |
| Wholesale Trading | Bulk trading and distribution to retailers and businesses |
| Agriculture | Farming, cultivation of crops, livestock rearing and related agricultural activities |
| Antique Dealer | Trading in vintage collectibles, historical artifacts and antique items |
| Arms Dealer | Licensed trading and distribution of firearms, ammunition and defence equipment |
| Art Dealer | Buying, selling and trading of paintings, sculptures and artistic works |
| Banking | Financial services including deposits, loans, credit and monetary transactions |
| Barber | Hair cutting, grooming and basic personal care services for men |
| Parlour | Beauty treatments, skincare and cosmetic services primarily for women |
| Salon | Comprehensive hair styling, beauty treatments and personal grooming services |
| Bullion Dealer and Jeweller | Trading in precious metals, gold, silver and jewellery manufacturing |
| Casino | Gambling establishment offering games of chance and entertainment |
| Gaming Application | Digital gaming platforms, mobile games and online entertainment software |
| Educational Institute | Schools, colleges, training centres and academic institutions |
| Financial Institution | Banks, credit unions, investment firms and financial service providers |
| Healthcare | Medical services, hospitals, clinics and health-related treatments |
| Others | Miscellaneous business activities not covered in the above categories |
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` you sent when onboarding the agent.
Example: AC12345678
Body
Agent KYC 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. Must be one of the listed values."
},
"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
Example
{ "status": "success", "message": "KYC completed successfully.", "data": { "reference_id": "KYC2026100300001", "kyc_status": "verified" } } -
422 · application/json
Failed or rejected
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
Provider credentials are not available. Contact your partner.
{ "status": "error", "code": "noble_credentials_unavailable", "message": "Provider credentials are not available. Contact your partner." }
Rate Limits
100/min