---
type: "product"
title: "PPI Wallet API India | Prepaid Payment Instrument (Levin & DigiKhata)"
description: "Open and operate PPI prepaid wallets with Eko's PPI Wallet API — Levin and DigiKhata rails. Sender onboarding, Aadhaar e-KYC consent, PAN KYC, wallet load, and wallet-to-bank IMPS/NEFT transfers — integrate in minutes."
category: "payment"
canonical: "https://eps.eko.in/products/ppi-api"
---


> **Canonical URL:** https://eps.eko.in/products/ppi-api
> This is a machine-readable Markdown version of the page for AI agents and LLMs. The primary (HTML) version lives at the canonical URL above.

# Prepaid Payment Instrument (PPI) Wallet API

Let retailers and agents open prepaid wallets for customers, complete Aadhaar (incl. multilingual e-KYC consent) and PAN KYC, load funds, and transfer money from the wallet to any bank account using IMPS and NEFT — with real-time status and receipts.

_Open and operate prepaid (PPI) wallets with assisted KYC and bank transfers — Levin & DigiKhata rails_

To get started, fill the form at https://eps.eko.in/signup (with your name, mobile number and email) or call us at +919513181707

## Features

- Assisted Wallet Onboarding: Open a customer's PPI wallet in seconds with OTP-based sender onboarding.
- Aadhaar & PAN KYC: Upgrade wallet limits with Aadhaar OTP and PAN validation, fully API-driven.
- Wallet-to-Bank Transfers: Move funds from the wallet to any bank account via IMPS and NEFT.
- Recipient Management: Add and reuse beneficiaries with bank-account verification.
- Real-time Status: Transaction inquiry and OTP-secured flows with audit trails.

## Benefits

- Higher Wallet Limits: Tiered monthly limits unlocked through Aadhaar and PAN KYC.
- Earn Commission: Earn on every successful wallet transfer processed through your network.
- Regulatory Compliant: Built for RBI PPI workflows with KYC, consent, and transaction controls.

## Use Cases

- Assisted Banking Networks
- Kirana Stores
- Agent Banking
- CSP/BC networks
- Retail Wallet Apps

## API Preview — Initiate Transaction

`POST /customer/payment/ppi-levin`

### Example inputs

| Field | Value |
| --- | --- |
| Recipient Id | 10017680 |
| Amount | 110 |
| Timestamp | 2025-01-21T07:07:20.562Z |
| Currency | INR |
| Customer Id | 8999999992 |
| Channel | 2 |
| Otp | 123456 |
| Otp Ref Id | zCISyglexo0Pjqp4YrS2ssweuD9v1c3aLKGxjTW8wU7An8Wem1UyNws5830yh7q/sf5J4R3BY= |
| Beneficiary Id | 40367 |
| Latlong | 28.63,77.22 |
| State | 1 |
| Recipient Id Type | 1 |

### Example outputs

| Field | Value |
| --- | --- |
| Tid | 2886522975 |
| Tx Status | 0 |
| Txstatus Desc | Success |
| Bank Ref Num | 250121123714472002 |
| Balance | 814.0 |

## API Preview — Initiate Transaction

`POST /customer/payment/ppi-digikhata`

### Example inputs

| Field | Value |
| --- | --- |
| Recipient Id | 10017680 |
| Amount | 110 |
| Timestamp | 2025-01-21T07:07:20.562Z |
| Currency | INR |
| Customer Id | 8999999992 |
| Channel | 2 |
| Otp | 123456 |
| Otp Ref Id | zCISyglexo0Pjqp4YrS2ssweuD9v1c3aLKGxjTW8wU7An8Wem1UyNws5830yh7q/sf5J4R3BY= |
| Beneficiary Id | 4202888 |
| Service Code | 80 |
| Latlong | 28.63,77.22 |
| State | 1 |

### Example outputs

| Field | Value |
| --- | --- |
| Tid | 2886522975 |
| Tx Status | 0 |
| Txstatus Desc | Success |
| Bank Ref Num | 250121123714472002 |
| Balance | 814.0 |

## API Preview — Validate Aadhaar

`POST /customer/payment/ppi-levin/sender/{customer_id}/aadhaar/otp`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 9876543210 |
| Aadhar | 123456789012 |
| Wallet Token | wtkn_abc123xyz |
| Wallet Id | wlt_0091234 |

### Example outputs

| Field | Value |
| --- | --- |
| Otp Ref Id | 66748392 |
| Mobile Hint | ******3210 |

## API Preview — Validate Aadhaar OTP

`POST /customer/payment/ppi-levin/sender/{customer_id}/aadhaar/otp/verify`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 9876543210 |
| Otp | 654321 |
| Otp Ref Id | 66748392 |
| Intent Id | 20 |
| Wallet Token | wtkn_abc123xyz |
| Wallet Id | wlt_0091234 |

### Example outputs

| Field | Value |
| --- | --- |
| Verified | true |
| Name | Sneha Patel |
| Gender | F |
| Dob | 05-07-1992 |
| Masked Aadhaar | XXXX-XXXX-7890 |

## API Preview — Get Sender Information

`GET /customer/payment/ppi-levin/sender/{customer_id}`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 9444444444 |

### Example outputs

| Field | Value |
| --- | --- |
| Otp Ref Id | IXrygqm0vTNbN35Lp5AfcbP69ifPhQ1Ee3u74AHY5fA9aMp2d94Yii3g+9fOBmbMsVTuaEQpDOEateP4tSTkQw== |

## API Preview — Onboard Sender

`POST /customer/payment/ppi-levin/sender/{customer_id}`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 9444444444 |
| Name | Shobhit |
| Dob | 1990-05-15 |
| Residence Address | ["123 MG Road","Bangalore","Karnataka","560001"] |
| Service Code | 80 |

### Example outputs

| Field | Value |
| --- | --- |
| Otp Ref Id | IXrygqm0vTNbN35Lp5AfcbP69ifPhQ1Ee3u74AHY5fA9aMp2d94YigSXr5Qr+aS8OTg/e0YrVEoPAbap746K5g== |

## API Preview — Verify Sender OTP

`POST /customer/payment/ppi-levin/sender/{customer_id}/otp/verify`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 9444444444 |
| Otp | 123456 |
| Otp Ref Id | 66748392 |
| Intent Id | 19 |

### Example outputs

| Field | Value |
| --- | --- |
| Name | Shobhit |
| Next Allowed Limit | 50000.0 |
| Balance | 0.00 |
| Wallet Token | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJJZGVudGlmaWNhdGlvbkNvZGUiOiJQaFY2Wkc1QjMzRDE2NzZWZGhKTStBPT0iLCJCQ0FnZW50SWQiOiJxYkxIdm1LMDBYU1NTcS9rL0tSN0pBPT0iLCJleHAiOjE3NDg0MTg0OTIsImlzcyI6IlBheVBvaW50IiwiYXVkIjoiUGFydG5lcnMifQ.ylDVDuNjIymfjBE9jB0ZU0Lqhvj67AWRQ_dC76HOHbA |

## API Preview — Validate PAN

`POST /customer/payment/ppi-levin/sender/{customer_id}/pan`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 9444444444 |
| Pan Number | ABCDE1234F |
| Wallet Id |  |
| Wallet Token |  |

### Example outputs

| Field | Value |
| --- | --- |
| Name | Karan Garg |
| Next Allowed Limit | 5287.0 |
| Sender Name | Karan Garg |

## API Preview — Get List of Recipients

`GET /customer/payment/ppi-levin/sender/{customer_id}/recipients`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 9444444444 |
| Wallet Token |  |

### Example outputs

| Field | Value |
| --- | --- |
| Recipient Id | 10018839 |
| Recipient Name | Aditya |

## API Preview — Add Recipient

`POST /customer/payment/ppi-levin/sender/{customer_id}/recipient`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 9444444444 |
| Bank Id | 12 |
| Recipient Name | Aditya |
| Recipient Mobile | 9775597777 |
| Recipient Type | 3 |
| Account | 1234567890657 |
| Ifsc | KKBK0000878 |
| Type | ifsc |
| Account Type | 1 |

### Example outputs

| Field | Value |
| --- | --- |
| Recipient Id | 10017740 |

## API Preview — Send Transaction OTP

`POST /customer/payment/ppi-levin/otp`

### Example inputs

| Field | Value |
| --- | --- |
| Recipient Id | 10017740 |
| Amount | 110 |
| Customer Id | 9444444444 |
| Service Code | 80 |
| Beneficiary Id | 40367 |

### Example outputs

| Field | Value |
| --- | --- |
| Otp Ref Id | zCISyglexo0Pjqp4YrS2ssweuD9v1c3aLKGxjTW8wU7An8Wem1UyNws5830yh7q/sf5J4R3BY= |

## API Preview — Get Sender Information

`GET /customer/payment/ppi-digikhata/sender/{customer_id}`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 8617567988 |

### Example outputs

| Field | Value |
| --- | --- |
| Otp Ref Id | IXrygqm0vTNbN35Lp5AfcbP69ifPhQ1Ee3u74AHY5fA9aMp2d94Yii3g+9fOBmbMsVTuaEQpDOEateP4tSTkQw== |

## API Preview — Onboard Sender

`POST /customer/payment/ppi-digikhata/sender/{customer_id}`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 8617567988 |
| Name | Yashwant Basnett |
| Dob | 1990-05-15 |
| Residence Address | ["123 MG Road","Bangalore","Karnataka","560001"] |

### Example outputs

| Field | Value |
| --- | --- |
| Otp Ref Id | leSLbMTFJpWWyG+NIDZW1IM6D+1tVJ6hgzp33AcOnMOJNPmRic8dJQazrKttIV3oIOpXKP8OdkARMo2DvP8bWEKK2P3h2dAK |

## API Preview — Generate Sender Verification OTP

`POST /customer/payment/ppi-digikhata/sender/{customer_id}/otp`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 8617567988 |

### Example outputs

| Field | Value |
| --- | --- |
| Otp Ref Id | leSLbMTFJpWWyG+NIDZW1IM6D+1tVJ6haUuWCwcbJVCWUgeMOoj5vNqXAGuOK+Cro+AqdfLdmm5z5AQ+PGkPdHUQJ9nuLPKS |

## API Preview — Verify Sender OTP

`POST /customer/payment/ppi-digikhata/sender/{customer_id}/otp/verify`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 8617567988 |
| Otp | 123456 |
| Otp Ref Id | 66748392 |

### Example outputs

| Field | Value |
| --- | --- |
| Name | Yashwant Basnett |
| Next Allowed Limit | 50000.0 |
| Balance | 0.00 |
| Sender Name | Yashwant Basnett |

## API Preview — Generate Sender Aadhaar OTP

`POST /customer/payment/ppi-digikhata/sender/{customer_id}/aadhaar/otp`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 8617567988 |
| Aadhar | 123456789012 |

### Example outputs

| Field | Value |
| --- | --- |
| Otp Ref Id | leSLbMTFJpWWyG+NIDZW1IM6D+1tVJ6haUuWCwcbJVCWUgeMOoj5vNqXAGuOK+Cro+AqdfLdmm5z5AQ+PGkPdHUQJ9nuLPKS |

## API Preview — Validate Sender Aadhaar OTP

`POST /customer/payment/ppi-digikhata/sender/{customer_id}/aadhaar/otp/verify`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 8617567988 |
| Otp | 654321 |
| Otp Ref Id | 66748392 |

### Example outputs

| Field | Value |
| --- | --- |
| Application Id |  |

## API Preview — Validate Sender PAN

`POST /customer/payment/ppi-digikhata/sender/{customer_id}/pan`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 9444444444 |
| Pan Number | ABCDE1234F |

### Example outputs

| Field | Value |
| --- | --- |
| Name | Karan Garg |
| Next Allowed Limit | 5287.0 |
| Sender Name | Karan Garg |

## API Preview — Load Sender DigiKhata Wallet

`POST /customer/payment/ppi-digikhata/sender/{customer_id}/wallet/loadwallet`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 8617567988 |
| Amount | 500 |
| Org Id | 1 |

### Example outputs

| Field | Value |
| --- | --- |
| Tid | 355419717321 |

## API Preview — Get List of Recipients

`GET /customer/payment/ppi-digikhata/sender/{customer_id}/recipients`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 8617567988 |

### Example outputs

| Field | Value |
| --- | --- |
| Recipient Id | 10018839 |
| Recipient Name | Aditya |

## API Preview — Add Recipient

`POST /customer/payment/ppi-digikhata/sender/{customer_id}/recipient`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 9444444444 |
| Bank Id | 12 |
| Recipient Name | Aditya |
| Recipient Mobile | 9775597777 |
| Account | 1234567890657 |
| Bank Code | KKBK0000878 |

### Example outputs

| Field | Value |
| --- | --- |
| Recipient Id | 10017740 |

## API Preview — Send Transaction OTP

`POST /customer/payment/ppi-digikhata/otp`

### Example inputs

| Field | Value |
| --- | --- |
| Recipient Id | 10017740 |
| Amount | 110 |
| Customer Id | 8617567988 |
| Service Code | 80 |
| Beneficiary Id | 4202888 |

### Example outputs

| Field | Value |
| --- | --- |
| Otp Ref Id | zCISyglexo0Pjqp4YrS2ssweuD9v1c3aLKGxjTW8wU7An8Wem1UyNws5830yh7q/sf5J4R3BY= |

## API Preview — Add Recipient Bank

`POST /customer/payment/ppi-levin/sender/{customer_id}/bank/recipient`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 9444444444 |
| Recipient Id | 10017740 |
| Wallet Token |  |

### Example outputs

| Field | Value |
| --- | --- |
| Beneficiary Id | 40367 |

## API Preview — Get Aadhaar KYC Consent Languages

`GET /customer/payment/ppi-digikhata/sender/{customer_id}/aadhaar/consent/languages`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 8617567988 |
| Org Id | 1 |
| Client Ref Id | ref_20250121_001 |

### Example outputs

| Field | Value |
| --- | --- |
| Pkid | 1 |

## API Preview — Get Aadhaar KYC Consent Details

`GET /customer/payment/ppi-digikhata/sender/{customer_id}/aadhaar/consent/details`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 8617567988 |
| Org Id | 1 |
| Client Ref Id | ref_20250121_001 |
| Consent Language | 1 |

### Example outputs

| Field | Value |
| --- | --- |
| Consent | Consent for Authentication: I, the holder of Aadhaar number, hereby give my consent … |

## API Preview — Generate Add Recipient Bank OTP

`POST /customer/payment/ppi-digikhata/sender/{customer_id}/recipient/bank/otp`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 8617567988 |
| Recipient Id | 10017740 |

### Example outputs

| Field | Value |
| --- | --- |
| Beneficiary Id | 4202888 |
| Otp Ref Id | 8617567988~8617567988~Channel4~4202888~4202888 |

## API Preview — Validate OTP to Add Recipient

`POST /customer/payment/ppi-digikhata/sender/{customer_id}/recipient/bank/otp/verify`

### Example inputs

| Field | Value |
| --- | --- |
| Customer Id | 8617567988 |
| Otp | 654321 |
| Otp Ref Id | 66748392 |

### Example outputs

| Field | Value |
| --- | --- |
| Application Id |  |

## Integration Steps

1. **Sign Up** — Create an account on Connect App and get your sandbox credentials.
2. **Submit KYC** — Complete your KYC verification process by submitting the required documents.
3. **Integrate API** — Use our comprehensive documentation to integrate the APIs.
4. **Test in Sandbox** — Test your integration thoroughly in our sandbox environment.
5. **Go Live** — Get production credentials and start opening wallets and processing transfers.

## FAQs

### What KYC is needed to raise wallet limits?
Sender onboarding uses OTP; limits are upgraded with Aadhaar OTP validation and PAN verification, all via API.

### How does money leave the wallet?
Add a recipient bank account, send a transaction OTP, then initiate the transfer — funds move via IMPS (instant) or NEFT.

### How do I get started?
Sign up on Connect App, submit the required documents, integrate the REST API using our sandbox environment, and go live.

### What are the different ways to integrate with Eko?
Integrate in whichever way suits your stack: call the REST APIs directly, use our official SDKs (JavaScript and PHP) to skip request-signing boilerplate, or let an AI coding agent build the integration using our MCP server and skills. See the Developers and AI sections for each path.

### How does API authentication work?
Each request carries your static `developer_key` header plus a per-request `secret-key` header — an HMAC-SHA256 signature of the current timestamp, keyed by your access key. The access key itself is never sent over the wire. You receive UAT keys on signup and production keys after KYC.

### Is there a sandbox environment for testing?
Yes. A full sandbox environment is available immediately on signup. You can test your integration end-to-end before going live — no commitment required.

### What are the sandbox and production base URLs?
Sandbox and production share the same paths and differ only by base URL: use https://staging.eko.in/ekoapi/v3 for UAT / Sandbox, and https://api.eko.in/ekoicici/v3 for Production. A common cause of failures is calling the sandbox/staging URL with live credentials (or vice-versa) — make sure the base URL matches the keys you are using.

### Do I need to whitelist my server IP?
Production API access may require your static public (server) IP to be whitelisted. If your calls work from Postman but fail or time out from your own server, share your static public IP with us so we can whitelist it.

### What response times can I expect?
Most verification APIs return in real time with sub-second responses, and 99th-percentile latency stays under two seconds across verification endpoints. Transaction APIs (DMT, AePS, BBPS) respond within seconds.

### Can the API handle high volumes?
Yes. The API is designed to handle large-scale volumes reliably without performance degradation.

### How is API usage billed?
Usage is billed per successful API call with no minimum commitment. Volume-based pricing tiers are available — contact our team for detailed rates.

## API Endpoints

- **Levin**
  - **Transaction**
    - [Initiate Transaction](https://eps.eko.in/docs/ppi-levin-initiate-transaction.md) (POST)
    - [Send Transaction OTP](https://eps.eko.in/docs/ppi-levin-send-transaction-otp.md) (POST)
  - **Sender**
    - [Validate Aadhaar](https://eps.eko.in/docs/aadhaar-ppi-levin-validate.md) (POST)
    - [Validate Aadhaar OTP](https://eps.eko.in/docs/aadhaar-ppi-levin-verify-otp.md) (POST)
    - [Get Sender Information](https://eps.eko.in/docs/ppi-levin-get-sender.md) (GET)
    - [Onboard Sender](https://eps.eko.in/docs/ppi-levin-onboard-sender.md) (POST)
    - [Verify Sender OTP](https://eps.eko.in/docs/ppi-levin-verify-otp.md) (POST)
    - [Validate PAN](https://eps.eko.in/docs/ppi-levin-validate-pan.md) (POST)
  - **Recipients**
    - [Get List of Recipients](https://eps.eko.in/docs/ppi-levin-get-recipients.md) (GET)
    - [Add Recipient](https://eps.eko.in/docs/ppi-levin-add-recipient.md) (POST)
    - [Add Recipient Bank](https://eps.eko.in/docs/ppi-levin-add-recipient-bank.md) (POST)
- **DigiKhata**
  - **Transaction**
    - [Initiate Transaction](https://eps.eko.in/docs/ppi-digikhata-initiate-transaction.md) (POST)
    - [Send Transaction OTP](https://eps.eko.in/docs/ppi-digikhata-send-transaction-otp.md) (POST)
  - **Sender**
    - [Get Sender Information](https://eps.eko.in/docs/ppi-digikhata-get-sender.md) (GET)
    - [Onboard Sender](https://eps.eko.in/docs/ppi-digikhata-onboard-sender.md) (POST)
    - [Generate Sender Verification OTP](https://eps.eko.in/docs/ppi-digikhata-generate-sender-otp.md) (POST)
    - [Verify Sender OTP](https://eps.eko.in/docs/ppi-digikhata-verify-otp.md) (POST)
    - [Generate Sender Aadhaar OTP](https://eps.eko.in/docs/ppi-digikhata-generate-aadhaar-otp.md) (POST)
    - [Validate Sender Aadhaar OTP](https://eps.eko.in/docs/ppi-digikhata-verify-aadhaar-otp.md) (POST)
    - [Validate Sender PAN](https://eps.eko.in/docs/ppi-digikhata-validate-pan.md) (POST)
    - [Load Sender DigiKhata Wallet](https://eps.eko.in/docs/ppi-digikhata-load-wallet.md) (POST)
    - [Get Aadhaar KYC Consent Languages](https://eps.eko.in/docs/ppi-digikhata-consent-languages.md) (GET)
    - [Get Aadhaar KYC Consent Details](https://eps.eko.in/docs/ppi-digikhata-consent-details.md) (GET)
  - **Recipients**
    - [Get List of Recipients](https://eps.eko.in/docs/ppi-digikhata-get-recipients.md) (GET)
    - [Add Recipient](https://eps.eko.in/docs/ppi-digikhata-add-recipient.md) (POST)
    - [Generate Add Recipient Bank OTP](https://eps.eko.in/docs/ppi-digikhata-recipient-bank-otp.md) (POST)
    - [Validate OTP to Add Recipient](https://eps.eko.in/docs/ppi-digikhata-validate-recipient-otp.md) (POST)

## API Documentation

- [Full developer docs](https://eps.eko.in/docs/ppi-levin-initiate-transaction)

## Related Products

- [Domestic Money Transfer (DMT)](https://eps.eko.in/products/dmt-api): Instant domestic money transfer via IMPS/NEFT ([markdown](https://eps.eko.in/products/dmt-api.md))
- [AePS Cashout](https://eps.eko.in/products/aeps-api): Aadhaar-enabled biometric cash withdrawal & transfer ([markdown](https://eps.eko.in/products/aeps-api.md))

- [Site index](https://eps.eko.in/index.md): Full list of API products, industries, and solution packs
