Fund Transfer

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

Submit a domestic money transfer using the beneficiary account details, transfer OTP and current reference.

Endpoint

POST https://pay2new.in/apis/dmt/v2/fundTransfer

Authentication

Send both headers on every request:

HeaderRequiredDescription
secretYesYour Pay2New-issued API secret.
outletIdYesActive Pay2New customer/outlet ID from customer onboarding.

📘

Account and outlet access

Use an IP address registered on your partner account. The partner account, KYC, wallet, API access and DMT service must be active. The outlet must be enabled for this service.

Send an actual JSON object with Content-Type: application/json.

Request

Complete the remitter and beneficiary steps first, then obtain the transaction OTP for this transfer. Use a DMT product_code from the Product List configured for your account. IMPS, RTGS and NEFT are accepted request values; actual availability depends on the selected product and bank.

FieldTypeRequiredDescription
remitterMobilestringYesRemitter mobile number.
accountNumberstringYesBeneficiary account number. Keep as text to preserve leading zeroes.
ifscstringYesBeneficiary bank IFSC.
latitudedecimal stringYesDecimal latitude of the transaction or capture location.
longitudedecimal stringYesDecimal longitude of the transaction or capture location.
transferModestringYesIMPS, RTGS or NEFT; subject to product and bank availability.
request_idstringYesYour transaction reference, at least 8 characters. Retain it for reconciliation.
product_codestringYesNumeric DMT product code from Product List for your account.
ipstringYesValid end-user/device IPv4 address. This does not replace the registered source-IP requirement.
amountdecimal stringYesTransfer amount in INR, for example 100.00.
otpstringYesOTP for this operation; exactly 6 digits.
referenceKeystringYesCurrent reference returned by the preceding step for this remitter and operation; pass it unchanged.

Example request

The values below are synthetic. Replace the credential, outlet ID, response references and customer details before sending a request. Replace the bank/product placeholder with the numeric code returned for your account.

curl --request POST \
  --url 'https://pay2new.in/apis/dmt/v2/fundTransfer' \
  --header 'secret: YOUR_PAY2NEW_SECRET' \
  --header 'outletId: YOUR_PAY2NEW_OUTLET_ID' \
  --header 'Content-Type: application/json' \
  --data '{
  "remitterMobile": "9000000001",
  "accountNumber": "000123456789",
  "ifsc": "TEST0000001",
  "latitude": "18.5204",
  "longitude": "73.8567",
  "transferMode": "IMPS",
  "request_id": "DMT202609260001",
  "product_code": "DMT_PRODUCT_CODE_FROM_PRODUCT_LIST",
  "ip": "203.0.113.10",
  "amount": "100.00",
  "otp": "123456",
  "referenceKey": "REFERENCE_FROM_PREVIOUS_RESPONSE"
}'

Response

Read the JSON status and message even when the HTTP request completes successfully.

FieldTypeDescription
statusintegerOutcome of this operation; see the status notes below.
messagestringOutcome or rejection description.
order_idstringPay2New transaction reference, when a transaction is created.
data.txn_valuestringFormatted transaction amount.
data.balancestringFormatted wallet balance.
data.request_idstringYour submitted transaction reference.
data.bank_referencestring or nullBank reference when available; this field may be omitted when no provider result is available.

Amount and balance are returned as decimal strings and may contain grouping separators. Early failures may return only status and message.

An illustrative transfer response:

{
  "status": 1,
  "message": "Transaction Successful",
  "order_id": "P2N_EXAMPLE_ORDER_001",
  "data": {
    "txn_value": "100.00",
    "balance": "900.00",
    "request_id": "DMT202609260001",
    "bank_reference": "EXAMPLE_BANK_REFERENCE"
  }
}

🚧

Transfer status and retries

1 means successful, 2 means rejected or failed, and 3 means the transfer result is unresolved. On a timeout or unresolved result, retain both references and use Transaction Status to reconcile before starting another transfer. Replaying a request is not guaranteed to be idempotent.

Rejections

A missing secret header returns status: 2 and message: "Secret Header not found!". Missing outletId returns "Outlet ID not found!"; an unavailable outlet returns "Invalid OutletId". Invalid or missing JSON returns "Invalid Json!". Field validation failures return "Invalid Parameters" with an errors object containing the field messages. Application failures can be returned in an HTTP-success response.

{
  "status": 2,
  "message": "Invalid Json!"
}

Service-specific response fields and behaviour

The wallet data.balance is captured when the transaction is initially debited. In a failure response it must not be interpreted as the current post-refund wallet balance. Use Wallet Balance separately if needed. data.bank_reference can be null or omitted.

beneficiaryId is used during beneficiary management; the actual transfer takes accountNumber and ifsc. This v2 route requires both otp and referenceKey even if a profile capability flag suggests OTP is optional. Do not silently omit either field. RTGS is accepted by local validation, but do not use it unless the DMT product/provider explicitly supports it.

Response examples for this operation

Synthetic examples adapted to the Pay2New wrapper. Reference tokens and dates are placeholders. Provider data can omit fields depending on the outcome; the application status and current returned references control the next step.

Transfer successful

{
  "status": 1,
  "message": "Transaction Successful",
  "order_id": "P2N_SAMPLE_DMT_001",
  "data": {
    "txn_value": "100.00",
    "balance": "900.00",
    "request_id": "DMT202609260001",
    "bank_reference": "SAMPLE_BANK_REFERENCE"
  }
}

Transfer pending

{
  "status": 3,
  "message": "Transaction Under Process",
  "order_id": "P2N_SAMPLE_DMT_001",
  "data": {
    "txn_value": "100.00",
    "balance": "900.00",
    "request_id": "DMT202609260001",
    "bank_reference": null
  }
}

Transfer failed

{
  "status": 2,
  "message": "Transaction Failed",
  "order_id": "P2N_SAMPLE_DMT_001",
  "data": {
    "txn_value": "100.00",
    "balance": "900.00",
    "request_id": "DMT202609260001",
    "bank_reference": null
  }
}

Invalid outlet

{
  "status": 2,
  "message": "Invalid OutletId"
}

Service unavailable

{
  "status": 2,
  "message": "Oops, This service is not for you!"
}

Validation error

{
  "status": 2,
  "message": "Invalid Parameters",
  "errors": {
    "request_id": "This required field is missing or invalid."
  }
}

📘

Next step

For an uncertain result use Transaction Status with client_txn_id equal to your original request_id. Inspect order.status. Reconcile MONEY_TRANSFER webhooks against the same order.

See the DMT Integration Flow for all endpoints and Webhook Information for transaction notifications.

Body Params
string
required

Remitter mobile number.

string
required

Beneficiary account number. Keep as text to preserve leading zeroes.

string
required

Beneficiary bank IFSC.

string
required

Decimal latitude of the transaction or capture location.

string
required

Decimal longitude of the transaction or capture location.

string
required

IMPS, RTGS or NEFT; subject to product and bank availability.

string
required

Your transaction reference, at least 8 characters. Retain it for reconciliation.

string
required

Numeric DMT product code from Product List for your account.

string
required

Valid end-user/device IPv4 address. This does not replace the registered source-IP requirement.

string
required

Transfer amount in INR, for example 100.00.

string
required

OTP for this operation; exactly 6 digits.

string
required

Current reference returned by the preceding step for this remitter and operation; pass it unchanged.

Headers
string
required

Pay2New-issued API secret. Use a registered source IP.

string
required

Active Pay2New customer/outlet ID from customer onboarding.

Response

Language
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json