---
title: "Initiate Transaction API Reference"
description: "Execute a DigiKhata wallet transfer to a recipient after OTP verification."
canonical: "https://eps.eko.in/docs/ppi-digikhata-initiate-transaction"
---


> **Canonical URL:** https://eps.eko.in/docs/ppi-digikhata-initiate-transaction
> 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.

# Initiate Transaction API Reference

`POST https://staging.eko.in/ekoapi/v3/customer/payment/ppi-digikhata`

Execute a DigiKhata wallet transfer to a recipient after OTP verification.

Initiates the money transfer from the sender's DigiKhata wallet to the recipient. Returns the financial response envelope with `tx_status`, transaction id (`tid`), bank reference number, fee, and updated balance.

> View product & pricing details: [PPI Wallet](https://eps.eko.in/products/ppi-api.md)

## Body parameters

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| initiator_id | string | yes | Registered mobile number of the API user (see Platform Credentials). e.g. 9962981729 |
| user_code | string | yes | User code of the retailer/agent the service is run for. e.g. 20810200 |
| client_ref_id | string | no | Unique reference id per API call, generated by your system. e.g. REQ-20260101-001 |
| recipient_id | integer | yes | Unique ID generated while adding the recipient. e.g. 10017680 |
| amount | integer | yes | Amount to be transferred (INR). e.g. 110 |
| timestamp | string | yes | Request timestamp (ISO 8601). e.g. 2025-01-21T07:07:20.562Z |
| currency | string | yes | Currency. Must be INR. e.g. INR |
| customer_id | string | yes | Sender's 10-digit mobile number. e.g. 8999999992 |
| channel | integer | yes | Transfer channel. Defaults to 2 (NEFT); 0 for IMPS. e.g. 2 |
| otp | string | no | OTP received from Send Transaction OTP. e.g. 123456 |
| otp_ref_id | string | no | otp_ref_id received from Send Transaction OTP. e.g. zCISyglexo0Pjqp4YrS2ssweuD9v1c3aLKGxjTW8wU7An8Wem1UyNws5830yh7q/sf5J4R3BY= |
| beneficiary_id | string | no | Beneficiary ID generated while getting the recipient details. e.g. 4202888 |
| service_code | integer | no | Fixed service code. Defaults to 80. e.g. 80 |
| latlong | string | no | Geographic coordinates of the user's location. e.g. 28.63,77.22 |
| state | string | no | State parameter. Defaults to 1. e.g. 1 |

## Headers

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| developer_key | string | yes | Static API key issued to your account after KYC. |
| secret-key | string | yes | Dynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key))). |
| secret-key-timestamp | string | yes | Current time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time. |
| content-type | string | yes | application/json e.g. application/json |

## Response

⭐ marks fields highlighted as verifiable.

| Field | Type | Description |
| --- | --- | --- |
| status | number | Primary success indicator (0 = success). |
| message | string | Human-readable response / error message. |
| response_status_id | number | Granular status id; see the shared error-codes table. |
| response_type_id | number | A unique id for every possible response shape (success or error) — useful for client logic branching and analytics. |
| tx_status | string | Transaction state: 0=Success, 1=Fail, 2=Awaited, 3=Refund Pending, 4=Refunded, 5=On Hold. |
| txstatus_desc | string | Human-readable transaction status. |
| data | object | API-specific response payload. |
| data.tid ⭐ | string | Eko transaction ID. |
| data.tx_status ⭐ | string | Transaction status (0 = success). |
| data.txstatus_desc ⭐ | string | Human-readable transaction status. |
| data.bank_ref_num ⭐ | string | Bank/UTR reference number for the transfer. |
| data.amount | string | Transferred amount (INR). |
| data.fee | string | Fee charged for the transfer (INR). |
| data.balance ⭐ | string | Sender's wallet balance after the transfer (INR). |
| data.channel_desc | string | Channel used (IMPS/NEFT). |
| data.recipient_name | string | Recipient's name. |

## Example request

```json
{
  "initiator_id": "9962981729",
  "user_code": "20810200",
  "client_ref_id": "REQ-20260101-001",
  "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 response

```json
{
  "response_status_id": 0,
  "data": {
    "tx_status": "0",
    "debit_user_id": "6000000094",
    "tds": "0.0",
    "txstatus_desc": "Success",
    "fee": "4.0",
    "total_sent": "",
    "channel": "2",
    "collectable_amount": "114.0",
    "txn_wallet": "0",
    "utility_acc_no": "8999999992",
    "sender_name": "8999999992",
    "ekyc_enabled": "0",
    "remaining_limit_before_pan_required": 49678,
    "tid": "2886522975",
    "bank": "UCO Bank",
    "utrnumber": "",
    "insurance_acquired": "",
    "balance": "814.0",
    "totalfee": "",
    "next_allowed_limit": "",
    "is_otp_required": "0",
    "aadhar": "",
    "currency": "INR",
    "commission": "0.0",
    "pipe": 13,
    "state": "1",
    "bank_ref_num": "250121123714472002",
    "recipient_id": 10017680,
    "timestamp": "2025-01-21T07:07:20.562Z",
    "amount": "110.00",
    "pan_required": 2,
    "pinNo": "",
    "gst_benefit": "0",
    "payment_mode_desc": "",
    "channel_desc": "IMPS",
    "last_used_okekey": "0",
    "npr": "",
    "insurance_amount": "",
    "service_tax": "0.61",
    "paymentid": "",
    "mdr": "",
    "recipient_name": "Krishna",
    "customer_id": "8999999992",
    "account": "67544100008454",
    "kyc_state": ""
  },
  "response_type_id": 325,
  "message": "Transaction successful",
  "status": 0
}
```
