Skip to main content
Pay a receiver’s Indian bank account in INR. This guide covers only what’s specific to India. For the general flow, see Payouts. INR payouts differ in four ways:
  • 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 with isNre, 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 documents[].
cURL
Wait until the sender’s capability is ACTIVE before naming them on a quote. The payout checks the capability and its repatriability again.
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.
cURL
Wait for 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 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
A penny drop (IMPS_PENNY_DROP) runs during the call. It compares 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 AccountHolderNameConfirmation in confirmations[] has timestamps from before the payout.
cURL
The reused result isn’t always MATCH. A failing result would already have rejected the address, and paying a rejected address fails with 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
Set up the receiver the same way, with the repatriable INR-receiving capability and a 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 isNre must all match. A mismatch fails with 409 CAPABILITY_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.country can’t be IN or 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.