- Every INR payout names a sender.
- The sender, the receiver, and the bank account must all be set up for the same kind of Indian account: regular or NRE.
- The bank account is identified by IFSC and account number.
- The name check runs once, when you register the bank account, and every later payout reuses it.
Set up the accounts and payout address
You do this once per receiver. All three must be ACTIVE before you can pay. Account model explains each status.
Both accounts must be individuals. INR doesn’t support organizations as sender or receiver.
How repatriability pairs
An Indian bank account is either NRE (funded from abroad and freely repatriable) or regular (NRO and ordinary resident accounts). The bank account says which withisNre, and each capability covers one kind, shown by repatriability in its details.
All three must match: the sender’s capability, the receiver’s capability, and the bank account’s isNre. This guide pays a regular account (isNre: false), so it uses the non-repatriable capabilities throughout. NRE accounts covers what changes for NRE.
- The receiver owns the bank account and needs a non-repatriable INR-receiving capability.
- The sender is the person the money comes from. They need a non-repatriable INR-sending capability, and every INR payout names them in
sender.
1
Create the sender account
Create the sender first, since its capability must be ACTIVE before a payout can name it. The sender needs a legal name, a phone number, and either a PAN or an identity document, wherever they live. Capabilities has the full list. This sender lives in India, so the example uses their Aadhaar, sent as a NATIONAL_ID in Wait until the sender’s capability is ACTIVE before naming them on a quote. The payout checks the capability and its repatriability again.
documents[].cURL
2
Create the receiver account
Create the account you’re paying, with a non-repatriable INR-receiving capability. The receiver needs only a name and a phone number, with no identity document.Wait for
cURL
common.account.capability_activated before you pay this account. You don’t need to wait to register the bank account, so do both at the same time.3
Create the Indian bank account payout address
Use A penny drop (IMPS_PENNY_DROP) runs during the call. It compares
routingFamily: "IN_LOCAL" with an ifsc and an accountNumber. Always set isNre: it says which kind of account this is, and the receiver’s capability must match it.cURL
accountHolderName with the name the bank returns, and checks isNre against the bank’s records. Both finish before the response, so its status already shows the result. The address comes back REJECTED if the result is NO_MATCH (the bank has a different holder) or ACCOUNT_TYPE_MISMATCH (the name matches but isNre doesn’t). Later payouts reuse this check instead of running a new one.Price and create the payout
1
(Optional) List the financial accounts that can fund an INR payout
An INR payout is funded from a balance in another currency and converted.
cURL
2
Quote the payout
Get a price before you create the payout, naming the sender in
sender. OpenFX picks the Indian payment rail for you, and the quote shows it in rail.cURL
fees includes the NETWORK_FEE every INR payout pays. A payout to a regular account (isNre: false) can also include a RESIDENT_DISCOUNT, a negative amount. The conversion cost isn’t listed separately: it’s already in fxRates.client.3
Create the payout from the quote
The payout takes the sender from the quote, so don’t name it again. There’s no new name check: the payout reuses the one from address setup, so the The reused result isn’t always MATCH. A failing result would already have rejected the address, and paying a rejected address fails with
AccountHolderNameConfirmation in confirmations[] has timestamps from before the payout.cURL
409 PAYOUT_ADDRESS_REJECTED.4
Confirm the payout
Confirm the payout to accept everything in
confirmations[] and move it to ACCEPTED.cURL
Track settlement and the trace reference
After ACCEPTED, the payout settles in the background. See Payouts for each status and webhook. Once the payment is sent,settlementTraceId carries the bank’s reference: an RRN on IMPS, or a UTR on NEFT and RTGS. key names the type and value holds the reference.
NRE accounts
Paying an NRE account needs its own setup at both ends. Only three things change:- The bank account sets
isNre: true, and the receiver needs the repatriable INR-receiving capability. - The sender needs the repatriable INR-sending capability, ACTIVE before the quote.
- Both ends need more identity details. Capabilities lists them.
cURL
nationality and phone number. An account that uses both kinds requests both capabilities when you create it, and each has its own status. NRE payouts don’t get the RESIDENT_DISCOUNT.
Common mistakes
- Mixing regular and NRE. The sender’s capability, the receiver’s capability, and the bank account’s
isNremust all match. A mismatch fails with409CAPABILITY_NOT_ACTIVE. - Leaving out
sender. Every INR payout needs one, and a sender whose capability isn’t ACTIVE fails the same way a receiver would. - Expecting a name check on every payout. It runs once, when you register the bank account. A rejected address can’t be fixed, only replaced.
- Leaving out the phone number. Every INR capability needs
identity.individual.phoneNumber, unless OpenFX has waived it for your organization. - Registering an NRE sender who lives in India. An NRE sender’s
residentialAddress.countrycan’t beINor a sanctioned country.
What’s next
Payouts
The general payout flow.
EUR payout integration guide
Paying euro accounts over SEPA or SWIFT.
Capabilities
Every INR capability’s id and identity requirements.
Payment Webhooks
Every payout, account, and address event.