POSTInitiate DMT-Levin Transaction
Execute a DMT-Levin money transfer to a bank account after OTP verification.
https://staging.eko.in/ekoapi/v3 return an error response. Test it in Production.The financial step in the DMT Levin 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 plus a unique client_ref_id per attempt. The response returns tid (Eko transaction ID) and bank_ref_num (the IMPS RRN/UTR); persist both with your client_ref_id for reconciliation.
If tx_status is any value other than those documented, treat the transaction as initiated and poll Transaction Inquiry until a final status is received.
Timeout: a transaction can time out due to a bad connection or a slow partner-bank response. Do not treat a timeout as declined or failed — look it up with Transaction Inquiry using your client_ref_id.
Refund: when a transaction fails, an OTP is automatically sent to the customer. Collect that OTP and call Get Refund OTP as consent that you refunded the cash to the customer; the eValue is then refunded to your account.
Request
Body parameters
| Field | Type | Required | Description |
|---|---|---|---|
initiator_id | string | required | Registered mobile number of the API user (see Platform Credentials).e.g. 9962981729 |
user_code | string | required | User code value of the retailer from whom the request is coming.e.g. 17260001 |
customer_id | string | required | Sender's 10-digit mobile number.e.g. 8999999992 |
recipient_id | integer | required | Unique recipient ID from Add Recipient or Get Recipients.e.g. 10017680 |
amount | integer | required | Transfer amount in INR (must match the amount sent to Send Transaction OTP).e.g. 110 |
otp | string | required | OTP received from the Send Transaction OTP API.e.g. 778341 |
otp_ref_id | string | required | OTP reference ID from the Send Transaction OTP response.e.g. zCISyglexo0Pjqp4YrS2ssweuD9v1GxjISTW8wU7An8Wem1UyNws5830yh7q/sf5J4R3BY= |
client_ref_id | string | required | Unique reference number from your system — make it as unique as possible so it never matches another partner's reference. Used for Transaction Inquiry lookup.e.g. RIM65656566 |
timestamp | string | required | Request date and time (`YYYY-MM-DD HH:mm:ss`).e.g. 2025-01-21 11:48:50 |
currency | string | required | Currency code. Always `INR`.e.g. INR |
channel | integer | required | Send the fixed value 2.e.g. 2 |
state | string | required | Send the fixed value 1.e.g. 1 |
recipient_id_type | integer | required | Send the fixed value 1.e.g. 1 |
latlongGeolocation | string | required | GPS coordinates of the user from whom the request is coming, used in case of fraud — pass the valid location of the merchant's system. Format: <latitude,longitude>e.g. 26.8863786,75.7393589 |
initiator_idstringRequiredRegistered mobile number of the API user (see Platform Credentials).
example: 9962981729
user_codestringRequiredUser code value of the retailer from whom the request is coming.
example: 17260001
customer_idstringRequiredSender's 10-digit mobile number.
example: 8999999992
recipient_idintegerRequiredUnique recipient ID from Add Recipient or Get Recipients.
example: 10017680
amountintegerRequiredTransfer amount in INR (must match the amount sent to Send Transaction OTP).
example: 110
otpstringRequiredOTP received from the Send Transaction OTP API.
example: 778341
otp_ref_idstringRequiredOTP reference ID from the Send Transaction OTP response.
example: zCISyglexo0Pjqp4YrS2ssweuD9v1GxjISTW8wU7An8Wem1UyNws5830yh7q/sf5J4R3BY=
client_ref_idstringRequiredUnique reference number from your system — make it as unique as possible so it never matches another partner's reference. Used for Transaction Inquiry lookup.
example: RIM65656566
timestampstringRequiredRequest date and time (`YYYY-MM-DD HH:mm:ss`).
example: 2025-01-21 11:48:50
currencystringRequiredCurrency code. Always `INR`.
example: INR
channelintegerRequiredSend the fixed value 2.
example: 2
statestringRequiredSend the fixed value 1.
example: 1
recipient_id_typeintegerRequiredSend the fixed value 1.
example: 1
latlongstringRequired· GeolocationGPS coordinates of the user from whom the request is coming, used in case of fraud — pass the valid location of the merchant's system. Format: <latitude,longitude>
example: 26.8863786,75.7393589
These headers authenticate and sign every request. See How Auth Works for details.
| Field | Type | Required | Description |
|---|---|---|---|
developer_key | string | required | Static API key issued to your account after KYC. |
secret-key | string | required | Dynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key))). |
secret-key-timestamp | string | required | Current time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time. |
content-type | string | required | application/jsone.g. application/json |
developer_keystringRequiredStatic API key issued to your account after KYC.
secret-keystringRequiredDynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key))).
secret-key-timestampstringRequiredCurrent time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time.
content-typestringRequiredapplication/json
example: application/json
Response types
| response_type_id | Meaning | Next step |
|---|---|---|
325 | Transaction successful | — |
Responses
325Transaction successful
statusnumberPrimary success indicator (0 = success).
messagestringHuman-readable response / error message.
response_status_idnumberUI display hint only (-1/0 success, 1 failure, 2 initiated, 3 refund initiated, 4 refunded). Never branch on it — use `status` (and `tx_status` for financial APIs), or `response_type_id` where documented.
response_type_idnumberA unique id for every possible response shape (success or error) — useful for client logic branching and analytics.
tx_statusstringTransaction state: 0=Success, 1=Fail, 2=Initiated / Response Awaited (NEFT) — poll Transaction Inquiry, 3=Refund Pending, 4=Refunded, 6=Response Awaited — Transaction Inquiry required.
txstatus_descstringHuman-readable transaction status.
dataobjectAPI-specific response payload.
tidstringEko's internal transaction ID. Store for reconciliation and support queries.
bank_ref_numstringBank reference number (RRN / UTR) for the IMPS transaction.
amountstringAmount transferred (INR).
feestringFee charged for the transfer (INR).
collectable_amountstringTotal collectable from the sender (INR).
service_taxstringService tax component on the fee (INR).
tdsstringTax deducted at source on the agent's commission (INR).
commissionstringCommission earned by the agent on this transaction (INR).
sender_namestringName of the sender.
recipient_namestringName of the beneficiary credited.
recipient_idnumberRecipient identifier credited.
bankstringBeneficiary bank name.
accountstringBeneficiary account number credited.
channel_descstringSettlement channel used (e.g. IMPS).
balancestringAgent wallet balance after the transaction (INR).
remaining_limit_before_pan_requirednumberAmount the sender can still transfer before PAN becomes mandatory (INR).
client_ref_idstringEcho of the partner reference sent in the request.
currencystringCurrency code.
timestampstringServer-side timestamp of the transaction.