AEPS Express · Agents & Outlets
Daily 2FA Login
Step 6: Daily biometric login for AEPS Express outlet (valid till 23:59:59 IST).
POST request
URL: https://uat-api.vizodigital.com/api/v1/aeps-express/agents/{agent_code}/daily-2fa
Body
{
"reference_id": "TFA2026100300001",
"channel": "APP",
"device_id": "8f2d7c9a12bc45ef",
"ip_address": "49.47.133.99",
"user_agent": "Mozilla/5.0 Android",
"latitude": "25.5899",
"longitude": "85.1606",
"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/daily-2fa" \
-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": "TFA2026100300001",
"channel": "APP",
"device_id": "8f2d7c9a12bc45ef",
"ip_address": "49.47.133.99",
"user_agent": "Mozilla/5.0 Android",
"latitude": "25.5899",
"longitude": "85.1606",
"bio_type": "0",
"pid_data": "BASE64_ENCODED_PID_XML"
}'
Success Response
{
"status": "success",
"message": "Daily Auth Completed Successfully",
"data": {
"reference_id": "TFA2026100300001",
"status": "success",
"is_chargeable": true,
"charge": "0.9440"
}
}
Failure response
{
"status": "success",
"message": "Authentication Failed. Invalid Biometric data.",
"data": {
"reference_id": "TFA2026100300002",
"status": "failed",
"is_chargeable": true,
"charge": "0.9440"
}
}
Overview
Step 6: Authenticates the merchant agent for the business day on AEPS Express switch. Once authenticated, status is active till 23:59:59 IST, so subsequent customer transactions do not prompt the merchant again that day.
- A small fee (₹0.9440) is billed per attempt.
- Capture PID block with empty
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
Daily 2FA Login request body
Schema
{
"type": "object",
"required": [
"reference_id",
"channel",
"device_id",
"ip_address",
"user_agent",
"latitude",
"longitude",
"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."
},
"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": "TFA2026100300001",
"channel": "APP",
"device_id": "8f2d7c9a12bc45ef",
"ip_address": "49.47.133.99",
"user_agent": "Mozilla/5.0 Android",
"latitude": "25.5899",
"longitude": "85.1606",
"bio_type": "0",
"pid_data": "BASE64_ENCODED_PID_XML"
}
Responses
-
200 · application/json default
Success
Schema
{ "type": "object" }Example
{ "status": "success", "message": "Daily Auth Completed Successfully", "data": { "reference_id": "TFA2026100300001", "status": "success", "is_chargeable": true, "charge": "0.9440" } } -
200 · application/json
Failed or rejected
Schema
{ "type": "object" }Example
{ "status": "success", "message": "Authentication Failed. Invalid Biometric data.", "data": { "reference_id": "TFA2026100300002", "status": "failed", "is_chargeable": true, "charge": "0.9440" } }
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." } -
insufficient_wallet_balance · HTTP 402
Wallet balance is too low for the Daily 2FA charge of Rs 0.9440.
{ "status": "error", "code": "insufficient_wallet_balance", "message": "Wallet balance is too low for the Daily 2FA charge of Rs 0.9440." } -
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