Payonclick Developer Docs
v1

AEPS — Aadhaar Enabled Payment System

Offer Aadhaar-based cash withdrawal, balance enquiry, mini statement, Aadhaar Pay and cash deposit at your own retail outlets. Onboard each outlet once, complete its eKYC and Bank eKYC, authenticate it every day, then transact with the customer’s fingerprint or iris. Every rupee settles in your AEPS wallet.

Base: /ext/v1/aeps Permission: aeps Wallet: AEPS Services: CW, BE, MS, AP, CD Cash Withdrawal: ₹100 – ₹10,000, multiples of ₹50 Aadhaar Pay: ₹1 – ₹50,000 Cash Deposit: ₹100 – ₹10,000, whole rupees Aadhaar OTP: CW / AP above ₹5,000 (NPCI) Idempotency: client_reference on every transaction (required)
📘
One outlet = one merchant

Every retail outlet you serve is onboarded once as a merchant under your account, identified by your merchant_ref. Its owner’s Aadhaar, PAN and bank account are verified by eKYC and Bank eKYC, and the owner must complete a fingerprint daily authentication each day before that outlet can transact. Read next_step on GET /merchants/{merchant_ref} — it always tells you what to call next.

⚠️
PENDING is not a failure — never pay out twice

A cash withdrawal the bank has not confirmed within the call is returned as PENDING. The money may already have left the customer’s account, so do not retry it under a new client_reference. Every pending transaction is re-checked with the bank automatically and settles to SUCCESS or FAILED; poll /transaction/{reference_id} every 60 seconds or subscribe to the aeps.* webhooks. Hand the customer cash only on SUCCESS.

📘
Biometric: send the RD service’s XML as it is

Capture with a UIDAI-registered L1 RD device (Mantra, Morpho, Startek, iris…) using the PidOptions from GET /pid-options, and send the PidData XML it returns, unchanged, in pid_data. eKYC uses a different PidOptions (wadh) from transactions and daily authentication. Face authentication is accepted for daily authentication only.

⚠️
Timeouts, concurrency and volume

A transaction waits for the bank and can take up to a minute: set your HTTP client timeout to 90 seconds, and if it still times out, read /transaction/by-client-reference/{client_reference} instead of sending it again. Different outlets transact in parallel; one outlet runs one transaction at a time (TRANSACTION_IN_PROGRESS). Each API key has a per-minute request limit (60 by default) — when you serve many outlets, ask us to raise it for your key, and use webhooks rather than frequent polling.

📘
Charges and commission

Charges and commission come from your API plan: CW and AP credit amount − charge + commission to your AEPS wallet; BE and MS debit their charge (if any); CD debits amount + charge before the bank call and refunds it automatically if the bank declines; daily authentication may carry a small charge per attempt. GET /charges shows the exact figures and every transaction reports its wallet_impact.

Integration flow

1
/merchants
1. Onboard the outlet once. You choose its merchant_ref.
2
/merchants/{merchant_ref}/ekyc/…
2. eKYC: send-otp → verify-otp → biometric.
3
/merchants/{merchant_ref}/bank-ekyc/…
3. Bank eKYC: the same three steps again (RBI mandate).
4
/merchants/{merchant_ref}/daily-auth
4. Every day: the outlet owner authenticates — AEPS and AP separately.
5
/cash-withdrawal
5. Transact: CW, BE, MS, AP or CD with the customer’s biometric.
6
/transaction/{reference_id}
6. Read the outcome, or take the aeps.* webhook.

Endpoints

Reference & Wallet

Merchant Onboarding

eKYC

Bank eKYC

Daily Authentication

Transactions

Status & History