Vizo Digital Api
Sign in

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_wadh value from Agent Status that matches bio_type.
  • Transactions are only allowed within 20 km of the location used for KYC.
  • reference_id can be used once per account and environment, for both KYC and Daily 2FA. A repeated one is refused with duplicate_reference_id (409). After a 502 provider_unavailable, send a new reference_id; the old one is used up.

Testing in UAT

  • Sandbox keys never reach the bank network.
  • Send a reference_id that starts with FAIL- 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

application/json required

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