---
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. Requires the OTP and otp_ref_id from Send Transaction OTP and the merchant's GPS coordinates (latlong). The response returns a tid (Eko transaction ID) and the banking UTR for the IMPS transaction. Always poll Get Transaction Status if tx_status is 2 (Awaited).

> 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 |
| 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 | number | yes | Unique recipient ID from Add Recipient or Get Recipients. e.g. 98765 |
| amount | number | yes | Transfer amount in INR (must match the amount sent to Send OTP). e.g. 500 |
| customer_id | string | yes | Sender's 10-digit mobile number. e.g. 9123456789 |
| otp | string | yes | OTP entered by the customer, received on their registered mobile. e.g. 251834 |
| otp_ref_id | string | yes | OTP reference ID from the Send Transaction OTP response. e.g. TXNOTP20240101001 |
| latlong | string | yes | GPS coordinates of the agent/merchant's device at the time of transaction (required for regulatory compliance). e.g. 28.6139,77.2090 |
| state | string | yes | Fixed value: "1". e.g. 1 |
| recipient_id_type | string | yes | Fixed value: "1" for bank account recipients. e.g. 1 |
| channel | number | no | Transfer channel. Fixed value: 2 (IMPS). Defaults to 2. e.g. 2 |
| currency | string | no | Currency code. Defaults to "INR". e.g. INR |
| timestamp | string | no | ISO 8601 request timestamp. e.g. 2024-01-01T10:30:00Z |

## 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's internal transaction ID. Use this for status enquiries and reconciliation. |
| data.utrnumber ⭐ | string | Unique Transaction Reference (UTR) from the IMPS network — the banking-side reference number. |
| data.amount ⭐ | number | Amount transferred in INR. |
| data.recipient_name ⭐ | string | Name of the beneficiary credited. |
| data.account | string | Beneficiary account number credited. |
| data.ifsc | string | IFSC code of the credited bank account. |
| data.fee | number | Transaction fee charged (in INR). |
| data.commission | number | Commission earned by the agent on this transaction (in INR). |
| data.balance | number | Remaining wallet balance of the agent after the transaction. |
| data.client_ref_id | string | Your system's reference ID (echoed back). |
| data.timestamp | string | Server-side timestamp of the transaction. |

## Example request

```json
{
  "initiator_id": "9962981729",
  "user_code": "20810200",
  "client_ref_id": "REQ-20260101-001",
  "recipient_id": 98765,
  "amount": 500,
  "customer_id": "9123456789",
  "otp": "251834",
  "otp_ref_id": "TXNOTP20240101001",
  "latlong": "28.6139,77.2090",
  "state": "1",
  "recipient_id_type": "1",
  "channel": 2,
  "currency": "INR",
  "timestamp": "2024-01-01T10:30:00Z"
}
```

## Example response

```json
{
  "status": 0,
  "response_status_id": 0,
  "message": "Transaction successful",
  "tx_status": "0",
  "txstatus_desc": "Success",
  "data": {
    "tid": "2309876543",
    "utrnumber": "412345678901",
    "amount": 500,
    "tx_status": "0",
    "recipient_name": "Sunil Sharma",
    "account": "012345678901",
    "ifsc": "SBIN0001234",
    "fee": 5,
    "commission": 3,
    "balance": 4495,
    "client_ref_id": "REF-20240101-001",
    "timestamp": "2024-01-01T10:30:05Z"
  }
}
```

## Error scenarios

| Status | Scenario |
| --- | --- |
| 200 | Insufficient balance in agent wallet |
| 200 | Transaction pending / awaited — poll Get Transaction Status |
| 200 | Wrong OTP entered |
| 200 | Sender monthly limit exhausted |
