Vizo Digital Api
Sign in

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

application/json required

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