---
title: "Initiate Transfer API Reference"
description: "Execute a DMT-Fino money transfer after OTP verification."
canonical: "https://eps.eko.in/docs/dmt-initiate-transfer"
---


> **Canonical URL:** https://eps.eko.in/docs/dmt-initiate-transfer
> 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 Transfer API Reference

`POST https://staging.eko.in/ekoapi/v3/customer/payment/dmt-fino`

Execute a DMT-Fino money transfer after OTP verification.

The final and only financial step in the DMT flow. Debits the agent's wallet and initiates an IMPS transfer to the registered recipient's bank account after OTP validation. Requires the otp and otp_ref_id from Send Transaction OTP plus a unique client_ref_id per attempt for idempotency and reconciliation. The response returns tid (Eko transaction ID) and bank_ref_num (the IMPS RRN/UTR). Use a fresh otp_ref_id and OTP for each attempt — a consumed OTP is rejected — and always persist tid, bank_ref_num, and your client_ref_id to reconcile before retrying.

> View product & pricing details: [Domestic Money Transfer (DMT)](https://eps.eko.in/products/dmt-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 |
| recipient_id | number | yes | Unique recipient ID from Add Recipient or Get Recipients. e.g. 117015428 |
| amount | number | yes | Transfer amount in INR (must match the amount sent to Send Transaction OTP). e.g. 100 |
| customer_id | string | yes | Sender's 10-digit mobile number. e.g. 9155927131 |
| otp | string | yes | OTP entered by the customer, received on their registered mobile. e.g. 4702 |
| otp_ref_id | string | yes | OTP reference ID from the Send Transaction OTP response. e.g. 667007109 |
| client_ref_id | string | yes | Unique partner reference for this transaction (idempotency & reconciliation). Use a fresh value per attempt. e.g. <unique_client_ref_id> |

## 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.tx_status ⭐ | string | Transaction state within the data block: 0=Success, 1=Fail, 2=Awaited. |
| data.txstatus_desc | string | Human-readable transaction status. |
| data.tid ⭐ | string | Eko's internal transaction ID. Store for reconciliation and support queries. |
| data.bank_ref_num ⭐ | string | Bank reference number (RRN / UTR) for the IMPS transaction. |
| data.amount ⭐ | string | Amount transferred (INR). |
| data.fee | string | Fee charged for the transfer (INR). |
| data.collectable_amount | string | Total collectable from the sender (amount + fee). |
| data.service_tax | string | Service tax component on the fee (INR). |
| data.tds | string | Tax deducted at source on the agent's commission (INR). |
| data.commission | string | Commission earned by the agent on this transaction (INR). |
| data.sender_name | string | Name of the sender. |
| data.recipient_name ⭐ | string | Name of the beneficiary credited. |
| data.recipient_id | number | Recipient identifier credited. |
| data.bank | string | Beneficiary bank name. |
| data.account | string | Beneficiary account number credited. |
| data.channel_desc | string | Settlement channel used (e.g. IMPS). |
| data.balance ⭐ | string | Agent wallet balance after the transaction (INR). |
| data.client_ref_id | string | Echo of the partner reference sent in the request. |
| data.currency | string | Currency code. |
| data.timestamp | string | Server-side timestamp of the transaction. |

## Example request

```json
{
  "initiator_id": "9962981729",
  "recipient_id": 117015428,
  "amount": 100,
  "customer_id": "9155927131",
  "otp": "4702",
  "otp_ref_id": "667007109",
  "client_ref_id": "<unique_client_ref_id>"
}
```

## Example response

```json
{
  "status": 0,
  "response_status_id": 0,
  "message": "Transaction successful",
  "response_type_id": 325,
  "data": {
    "tx_status": "0",
    "txstatus_desc": "Success",
    "tid": "3570311831",
    "amount": "100.00",
    "fee": "10.0",
    "collectable_amount": "110.0",
    "service_tax": "1.53",
    "tds": "0.01",
    "commission": "0.47",
    "sender_name": "Rahul",
    "recipient_name": "Master YASHWANT BASNETT",
    "recipient_id": 117015428,
    "bank": "State Bank of India",
    "account": "38759149196",
    "channel_desc": "IMPS",
    "bank_ref_num": "620415011744",
    "balance": "10131.18",
    "client_ref_id": "<unique_client_ref_id>",
    "currency": "INR",
    "timestamp": "2026-07-23T09:46:35.396Z"
  }
}
```

## Error scenarios

| Status | response_type_id | Scenario |
| --- | --- | --- |
| 200 | `55` | Transaction declined — OTP already consumed |
| 200 | `55` | Transaction declined — insufficient balance in agent wallet |
| 200 | `55` | Transaction declined — wrong OTP entered |
| 200 | `55` | Transaction declined — sender monthly limit exhausted |
| 200 | — | Transaction awaited (non-final) — reconcile by tid before retrying |
