API ReferenceIntegrationsKnowledge Base

Composite API

The composite API allows you to make a payout using a single API call. This reduces the number of calls you would otherwise need to make to create a payout. Normally, you would need to:

  1. Create a contact.
  2. Create a fund account.
  3. Make a payout.

The composite API gives you the flexibility to either create a new contact and fund account or use existing contact and fund account details (contact_id and fund_account_id) to make a payout.

Note:
No OTP authorization is required when creating a payout using APIs.

Payout to Bank Account#

Use the below endpoint to create a payout using contact and bank account details.

/payouts

Note:

  • Contact
    • A new contact is created if any combination of the following details is unique: fund_account.contact.name, fund_account.contact.email, fund_account.contact.contact, fund_account.contact.type and fund_account.contact.reference_id.
    • If all the above details match the details of an existing contact, the API returns details of the existing contact.
    • Use the Update Contact API if you want to make changes to an existing contact.
  • Fund Account
    • A new fund account is created if any combination of the following details is unique: fund_account.bank_account.name, fund_account.bank_account.ifsc, fund_account.bank_account.account_number, fund_account.contact.name, fund_account.contact.email, fund_account.contact.contact, fund_account.contact.type and fund_account.contact.reference_id.
    • If all the above details match the details of an existing fund account, the API returns details of the existing fund account.
    • You cannot edit the details of a fund account.

Request Parameters#

account_numbermandatory

string The account from which you want to make the payout.
Account details can be found on the RazorpayX Dashboard. For example, 7878780080316316.

  • Pass your virtual account number if you want money to be deducted from your virtual account.
  • Pass your current account number if you want money to be deducted from your current account.
    Note:
    This is NOT your contact's bank account number.
amountmandatory

integer The payout amount, in paise. For example, if you want to transfer ₹10000, pass 1000000. Minimum value is 100. Note:
The value passed here does not include fees and tax. Fees and tax, if any, are deducted from your account balance.

currencymandatory

string The payout currency. Here, it is INR.

modemandatory

string The mode to be used to create the payout. Available modes:

  • NEFT
  • RTGS
  • IMPS

    Payout Modes are Case Sensitive:
    The payout modes are case sensitive. When creating payouts using APIs, ensure payout modes are entered in upper case.
purposemandatory

string The purpose of the payout. Classifications available in the system by default:

  • refund
  • cashback
  • payout
  • salary
  • utility bill
  • vendor bill

    Note:
    Additional purposes for payouts can be created via the Dashboard and then used in the API. However, it is not possible to create a new purpose for the payout via the API.
fund_account

Details of the contact and fund account to which the payout should be made.

account_typemandatory

string The type of account to be linked to the contact ID. Here, the value has to be bank_account.

bank_account

The contact's bank account details.

namemandatory
string Account holder's name. Between 4 and 120 characters. This field is case sensitive. Supported characters: a-z, A-Z, 0-9, space, , - , _ , / , ( , ) and , .. For example,Gaurav Kumar.
ifscmandatory
string Beneficiary bank IFSC. Has to be 11 characters. Unique identifier of a bank branch. For example, HDFC0000053.
account_numbermandatory
string Beneficiary bank account number. Between 5 and 35 characters. Supported characters: a-z, A-Z and 0-9. Beneficiary account number. For example, 765432123456789.
contact

Details of the contact to whom the payout should be made.

namemandatory
string Contact's name. Minimum 3 characters. Maximum 50 characters. This field is case sensitive. Supported characters: a-z, A-Z, 0-9, space, , - , _ , / , ( , ) and , .. For example, Gaurav Kumar.
emailoptional
string The contact's email address. For example, gaurav.kumar@example.com.
contactoptional
string The contact's phone number. For example, 9123456789.
typeoptional
string Classification for the contact. For example, employee. Classifications are available by default:
  • vendor
  • customer
  • employee
  • self

    Additional classifications:
    Additional classifications can be created via the Dashboard and then used in APIs. It is not possible to create new classifications via the API.
reference_idoptional
string Maximum length 40 characters. A reference you enter for the contact. For example, Acme Contact ID 12345.
notesoptional
object Notes you can enter for the contact for future reference. This is a key-value pair. For example, "note_key": "Beam me up Scotty".
queue_if_low_balanceoptional

boolean Possible values:

  • true - The payout is queued when your business account does not have sufficient balance to process the payout.
  • false (default) - The payout is never queued. The payout fails if your business account does not have sufficient balance to process the payout.
reference_idoptional

string Maximum length 40 characters. A reference you enter for the payout. For example, Acme Transaction ID 12345. You can use this field to store your own transaction ID, if any.

narrationoptional

string Maximum length 30 characters. Allowed characters: a-z, A-Z, 0-9 and space. This is a custom note that also appears on the bank statement.

Note:
● If no value is passed for this parameter, it defaults to the Merchant Billing Label.
● Ensure that the most important text forms the first 9 characters as banks may truncate the rest as per their standards.

notesoptional

object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.

Response Parameters#

id

string The unique identifier linked to the payout. For example, pout_00000000000001.

entity

string The entity being created. Here, it will be payout.

fund_account_id

string The unique identifier linked to the fund account. For example, fa_00000000000001.

fund_account

Contact and fund account details to which the payout was made.

id

string The unique identifier linked to the fund account. For example, fa_00000000000001.

entity

string Here it will be fund_account.

contact_id

string The unique identifier linked to the contact. For example, cont_00000000000001.

contact

Details of the contact to whom the payout is being made.

id
string The unique identifier linked to the contact. For example, cont_00000000000001.
entity
string The entity being created. Here, it will be contact.
name
string The contact's name. For example, Gaurav Kumar.
contact
string The contact's phone number. For example, 9123456789.
email
string The contact's email address. For example, gaurav.kumar@example.com.
type
string Classification for the contact being created. For example, employee. Classifications are available by default:
  • vendor
  • customer
  • employee
  • self

    Additional classifications:
    Additional classifications can be created via the Dashboard and then used in APIs. It is not possible to create new classifications via the API.
reference_id
string A reference you entered for the contact. For example, Acme Contact ID 12345.
batch_id
string This parameter is populated if the contact was created as part of a bulk upload. For example, batch_00000000000001.
active
boolean Possible values:
  • true = active
  • false = inactive
notes
object User-entered notes for internal reference. This is a key-value pair. You can enter a maximum of 15 key-value pairs. For example, "note_key": "Beam me up Scotty”.
created_at
integer Timestamp, in Unix, when the contact was created. For example, 1545320320.
account_type

string The type of fund account being created. Here, it will be bank_account.

bank_account

The contact's bank account details.

ifsc
string Unique identifier of a bank branch. For example, HDFC0000053.
bank_name
string The contact's bank name. For example, HDFC.
name
string Account holder's name. For example,Gaurav Kumar.
account_number
string Beneficiary account number. For example, 765432123456789.
active

boolean Possible values:

  • true = active
  • false = inactive
batch_id

string This parameter is populated if the fund account was created as part of a bulk upload. For example, batch_00000000000001.

created_at

integer Timestamp, in Unix, when the fund account was created. For example, 1545320320.

amount

integer Minimum value 100. The payout amount, in paise. For example, if you want to transfer ₹10000, pass 1000000.

Note:
The value passed here does not include fees and tax. Fees and tax, if any, are deducted from your account balance.

currency

string The payout currency. Here, it is INR.

notes

object User-entered notes for internal reference. This is a key-value pair. You can enter a maximum of 15 key-value pairs. For example, "note_key": "Beam me up Scotty”.

fees

integer The fees for the payout. This field is populated only when the payout moves to the processing state. For example, 5.

tax

integer The tax that is applicable for the fee being charged. This field is populated only when the payout moves to the processing state. For example, 1.

status

string The payout status. Possible payout states:

purpose

string The purpose of the payout. Classifications available by default:

  • refund
  • cashback
  • payout
  • salary
  • utility bill
  • vendor bill

    Note:
    Additional purposes for payouts can be created via the Dashboard and then used in the API. However, it is not possible to create a new purpose for the payout via the API.
utr

string The unique transaction number linked to a payout. For example, HDFCN00000000001.

mode

string The mode used to make the payout. Available modes:

  • NEFT
  • RTGS
  • IMPS
  • UPI
reference_id

string A reference you entered for the payout. For example, Acme Transaction ID 12345. You can use this field to store your own transaction ID, if any.

narration

string This is a custom note that also appears on the bank statement.

If no value is passed for this parameter, it defaults to the Merchant Billing Label.

batch_id

string This parameter is populated if the contact was created as part of a bulk upload. For example, batch_00000000000001.

failure_reason

string The reason for the payout failing.

created_at

integer Timestamp, in Unix, at which the payout was created. For example, 1545320320.

Payout to Virtual Payment Address (VPA)#

Use the below endpoint to create a payout using contact and VPA details.

/payouts

Note:

  • Contact
    • A new contact is created if any combination of the following details is unique: fund_account.contact.name, fund_account.contact.email, fund_account.contact.contact, fund_account.contact.type and fund_account.contact.reference_id.
    • If all the above details match the details of an existing contact, the API returns details of the existing contact.
    • Use the Update Contact API if you want to make changes to an existing contact.
  • Fund Account
    • A new fund account is created if any combination of the following details is unique: fund_account.vpa.address, fund_account.contact.name, fund_account.contact.email, fund_account.contact.contact, fund_account.contact.type and fund_account.contact.reference_id.
    • If all the above details match the details of an existing fund account, the API returns details of the existing fund account.
    • You cannot edit the details of a fund account.

Request Parameters#

account_numbermandatory

string The account from which you want to make the payout.
Account details can be found on the RazorpayX Dashboard. For example, 7878780080316316.

  • Pass your virtual account number if you want money to be deducted from your virtual account.
  • Pass your current account number if you want money to be deducted from your current account.
    Note:
    This is NOT your contact's bank account number.
amountmandatory

integer The payout amount, in paise. For example, if you want to transfer ₹10000, pass 1000000. Minimum value 100. Note:
The value passed here does not include fees and tax. Fees and tax, if any, are deducted from your account balance.

currencymandatory

string The payout currency. Here, it is INR.

modemandatory

string Here, it has to be UPI.

Payout Modes are Case Sensitive:
The payout modes are case sensitive. When creating payouts using APIs, ensure payout modes are entered in upper case.

purposemandatory

string The purpose of the payout. Classifications available by default:

  • refund
  • cashback
  • payout
  • salary
  • utility bill
  • vendor bill

    Note:
    Additional purposes for payouts can be created via the Dashboard and then used in the API. However, it is not possible to create a new purpose for the payout via the API.
fund_account

Details of the contact and fund account to which the payout should be made.

account_typemandatory

string The type of account to be linked to the contact ID. Here, it is vpa.

vpa

The contact's virtual payment address (VPA) details.

addressmandatory
string Between 3 and 100 characters. Supported characters: a-z, A-Z, 0-9, ., - and one @. The virtual payment address. For example, gauravkumar@exampleupi.
contact

Details of the contact to whom the payout should be made.

namemandatory
string The contact's name. Minimum 3 characters. Maximum 50 characters. This field is case sensitive. Supported characters: a-z, A-Z, 0-9, space, , - , _ , / , ( , ) and , .. For example, Gaurav Kumar.
emailoptional
string The contact's email address. For example, gaurav.kumar@example.com.
contactoptional
string The contact's phone number. For example, 9123456789.
typeoptional
string Classification for the contact being created. For example, employee. Classifications available by default:
  • vendor
  • customer
  • employee
  • self

    Additional classifications:
    Additional classifications can be created via the Dashboard and then used in APIs. It is not possible to create new classifications via the API.
reference_idoptional
string Maximum length 40 characters. A reference you enter for the contact. For example, Acme Contact ID 12345.
notesoptional
object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.
queue_if_low_balanceoptional

boolean Possible values:

  • true - The payout is queued when your business account does not have sufficient balance to process the payout.
  • false (default) - The payout is never queued. The payout fails if your business account does not have sufficient balance to process the payout.
reference_idoptional

string Maximum length 40 characters. A reference you enter for the payout. For example, Acme Transaction ID 12345. You can use this field to store your own transaction ID, if any.

narrationoptional

string Maximum length 30 characters. Allowed characters: a-z, A-Z, 0-9 and space. This is a custom note that also appears on the bank statement.

Note:
● If no value is passed for this parameter, it defaults to the Merchant Billing Label.
● Ensure that the most important text forms the first 9 characters as banks may truncate the rest as per their standards.

notesoptional

object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.

Response Parameters#

id

string The unique identifier linked to the payout. For example, pout_00000000000001.

entity

string The entity being created. Here, it will be payout.

fund_account_id

string The unique identifier linked to the fund account. For example, fa_00000000000001.

fund_account

Contact and fund account details to which the payout was made.

id

string The unique identifier linked to the fund account. For example, fa_00000000000001.

entity

string Here it will be fund_account.

contact_id

string The unique identifier linked to the contact. For example, cont_00000000000001.

contact

Details of the contact to whom the payout is being made.

id
string The unique identifier linked to the contact. For example, cont_00000000000001.
entity
string The entity being created. Here, it will be contact.
name
string The contact's name. For example, Gaurav Kumar.
contact
string The contact's phone number. For example, 9123456789.
email
string The contact's email address. For example, gaurav.kumar@example.com.
type
string Classification for the contact being created. For example, employee. Classifications are available by default:
  • vendor
  • customer
  • employee
  • self

    Additional classifications:
    Additional classifications can be created via the Dashboard and then used in APIs. It is not possible to create new classifications via the API.
reference_id
string A user-generated reference given to the contact. For example, Acme Contact ID 12345.
batch_id
string This parameter is populated if the contact was created as part of a bulk upload. For example, batch_00000000000001.
active
boolean Possible values:
  • true = active
  • false = inactive
notes
object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.
created_at
integer Timestamp, in Unix, when the fund account was created. For example, 1545320320.
account_type

string The type of fund account being created. Here, it will be vpa.

batch_id

string This parameter is populated if the fund account was created as part of a bulk upload. For example, batch_00000000000001.

vpa

The contact's virtual payment address (VPA) details.

username
string The user name from the virtual payment address. For example, gauravkumar.
handle
string The handle from the virtual payment address. For example, exampleupi.
address
string The virtual payment address. For example, gauravkumar@exampleupi.
active

boolean Possible values:

  • true = active
  • false = inactive
created_at

integer Timestamp, in Unix, when the contact was created. For example, 1545320320.

amount

integer The payout amount, in paise. For example, if you want to transfer ₹10000, pass 1000000. Minimum value 100. Note:
The value passed here does not include fees and tax. Fees and tax, if any, are deducted from your account balance.

currency

string The payout currency. Here, it is INR.

notes

object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.

fees

integer The fees for the payout. This field is populated only when the payout moves to the processing state. For example, 5.

tax

integer The tax that is applicable for the fee being charged. This field is populated only when the payout moves to the processing state. For example, 1.

status

string The payout status. Possible payout states:

purpose

string The purpose of the payout. Classifications available by default:

  • refund
  • cashback
  • payout
  • salary
  • utility bill
  • vendor bill

    Note:
    Additional purposes for payouts can be created via the Dashboard and then used in the API. However, it is not possible to create a new purpose for the payout via the API.
utr

string The unique transaction number linked to a payout. For example, HDFCN00000000001.

mode

string Here, it is UPI.

reference_id

string A user-generated reference given to the payout. For example, Acme Transaction ID 12345. You can use this field to store your own transaction ID, if any.

narration

string This is a custom note that also appears on the bank statement.

If no value is passed for this parameter, it defaults to the Merchant Billing Label.

batch_id

string This parameter is populated if the contact was created as part of a bulk upload. For example, batch_00000000000001.

failure_reason

string The reason for the payout failing.

created_at

integer Timestamp, in Unix, when the payout was created. For example, 1545320320.

Payout to Card#

Feature Enablement:
The Payout to Cards feature is not available by default. To enable this feature, raise a request using the support form on the RazorpayX Dashboard.

Important:
This API should only be used by PCI DSS compliant merchants. Refer to our payouts to cards documentation if you are NOT PCI DSS compliant.

Use the below endpoint to create a payout using contact and card details.

/payouts

Note:

  • Contact
    • A new contact is created if any combination of the following details is unique: fund_account.contact.name, fund_account.contact.email, fund_account.contact.contact, fund_account.contact.type and fund_account.contact.reference_id.
    • If all the above details match the details of an existing contact, the API returns details of the existing contact.
    • Use the Update Contact API if you want to make changes to an existing contact.
  • Fund Account
    • A new fund account is created if any combination of the following details is unique: fund_account.card.name, fund_account.card.number``fund_account.contact.name, fund_account.contact.email, fund_account.contact.contact, fund_account.contact.type and fund_account.contact.reference_id.
    • If all the above details match the details of an existing fund account, the API returns details of the existing fund account.
    • You cannot edit the details of a fund account.

Request Parameters#

account_numbermandatory

string The account from which you want to make the payout.
Account details can be found on the RazorpayX Dashboard. For example, 7878780080316316.

  • Pass your virtual account number if you want money to be deducted from your virtual account.
  • Pass your current account number if you want money to be deducted from your current account.
    Note:
    This is NOT your contact's bank account number.
amountmandatory

integer The payout amount, in paise. For example, if you want to transfer ₹10000, pass 1000000. Minimum value is 100. Note:
The value passed here does not include fees and tax. Fees and tax, if any, are deducted from your account balance.

currencymandatory

string The payout currency. Here, it is INR.

modemandatory

string The mode to be used to create the payout. Available modes:

  • NEFT
  • RTGS
  • IMPS
  • UPI
purposemandatory

string The purpose of the payout. Classifications available in the system by default:

  • refund
  • cashback
  • payout
  • salary
  • utility bill
  • vendor bill

    Note:
    Additional purposes for payouts can be created via the Dashboard and then used in the API. However, it is not possible to create a new purpose for the payout via the API.
fund_account

Details of the contact and fund account to which the payout should be made.

account_typemandatory

string The type of account linked to the contact id. Here, it will be card.

card

Details of the credit card.

namemandatory
string Credit card holder's name. Maximum 100 characters. Supported characters: a-z, A-Z, 0-9, space, - , . and '. The credit card holder's name. For example,Gaurav Kumar.
numbermandatory
string Beneficiary credit card number. For example, 765432123456789.
contact

Details of the contact to whom the payout should be made.

namemandatory
string The contact's name. Minimum 3 characters. Maximum 50 characters. This field is case sensitive. Supported characters: a-z, A-Z, 0-9, space, , - , _ , / , ( , ) and , .. For example, Gaurav Kumar.
emailoptional
string The contact's email address. For example, gaurav.kumar@example.com.
contactoptional
string The contact's phone number. For example, 9123456789.
typeoptional
string Classification for the contact being created. For example, employee. The following classifications are available by default:
  • vendor
  • customer
  • employee
  • self

    Additional classifications:
    Additional classifications can be created via the Dashboard and then used in APIs. It is not possible to create new classifications via the API.
reference_idoptional
string A user-generated reference given to the contact. For example, Acme Contact ID 12345. This field can have a maximum length of 40 characters.
notesoptional
object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.
queue_if_low_balanceoptional

boolean Possible values:

  • true - The payout is queued when your business account does not have sufficient balance to process the payout.
  • false (default) - The payout is never queued. The payout fails if your business account does not have sufficient balance to process the payout.
reference_idoptional

string Maximum length 40 characters. A user-generated reference given to the payout. For example, Acme Transaction ID 12345. You can use this field to store your own transaction id, if any.

narrationoptional

string This is a custom note that also appears on the bank statement. This field can have a maximum length of 30 characters. Allowed characters are: a-z, A-Z, 0-9 and space.

Note:
● If no value is passed for this parameter, it defaults to the Merchant Billing Label.
● Ensure that the most important text forms the first 9 characters as banks may truncate the rest as per their standards.

notesoptional

object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.

Response Parameters#

id

string The unique identifier linked to the payout. For example, pout_00000000000001.

entity

string The entity being created. Here, it will be payout.

fund_account_id

string The unique identifier linked to the fund account. For example, fa_00000000000001.

fund_account

Contact and fund account details to which the payout was made.

id

string The unique identifier linked to the fund account. For example, fa_00000000000001.

entity

string Here it will be fund_account.

contact_id

string The unique identifier linked to the contact. For example, cont_00000000000001.

contact

Details of the contact to whom the payout is being made.

id
string The unique identifier linked to the contact. For example, cont_00000000000001.
entity
string The entity being created. Here, it will be contact.
name
string The contact's name. For example, Gaurav Kumar.
contact
string The contact's phone number. For example, 9123456789.
email
string The contact's email address. For example, gaurav.kumar@example.com.
type
string Classification for the contact being created. For example, employee.
reference_id
string A user-generated reference given to the contact. For example, Acme Contact ID 12345.
batch_id
string This parameter is populated if the contact was created as part of a bulk upload. For example, batch_00000000000001.
active
boolean Possible values:
  • true = active
  • false = inactive
notes
object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.
created_at
integer Timestamp, in Unix, when the contact was created. For example, 1545320320.
account_type

string The type of fund account being created. Here, it will be card.

card

Details of the credit card that is being used to create the fund account.

name
string The credit card holder's name. For example,Gaurav Kumar.
last4
string The last four digits of the credit card. For example, 0001.
network
string The credit card issuing network. Possible values are:
  • Visa
  • Mastercard
  • American Express
  • Diners Club
type
string Currently, this can only be credit.
issuer
string The name of bank that issued the card. For example, HDFC. Refer to the Supported Banks and Payout Modes section for more details.
batch_id

string This parameter is populated if the fund account was created as part of a batch. For example, batch_00000000000001.

active

boolean Possible values:

  • true = active
  • false = inactive
created_at

integer Timestamp, in Unix, when the fund account was created. For example, 1545320320.

amount

integer The payout amount, in paise. For example, if you want to transfer ₹10000, pass 1000000. Minimum value 100. Note:
The value passed here does not include fees and tax. Fees and tax, if any, are deducted from your account balance.

currency

string The payout currency. Here, it is INR.

notes

object Key-value pair that can be used to store additional information about the entity. Maximum 15 key-value pairs, 256 characters (maximum) each. For example, "note_key": "Beam me up Scotty”.

fees

integer The fees for the payout. This field is populated only when the payout moves to the processing state. For example, 5.

tax

integer The tax that is applicable for the fee being charged. This field is populated only when the payout moves to the processing state. For example, 1.

status

string The payout status. Possible payout states:

purpose

string The purpose of the payout. Classifications available by default:

  • refund
  • cashback
  • payout
  • salary
  • utility bill
  • vendor bill

    Note:
    Additional purposes for payouts can be created via the Dashboard and then used in the API. However, it is not possible to create a new purpose for the payout via the API.
utr

string The unique transaction number linked to a payout. For example, HDFCN00000000001.

mode

string The mode used to make the payout. Refer to the Payout Modes section for more details.

reference_id

string A user-generated reference given to the payout. For example, Acme Transaction ID 12345. You can use this field to store your own transaction ID, if any.

narration

string This is a custom note that also appears on the bank statement.

If no value is passed for this parameter, it defaults to the Merchant Billing Label.

batch_id

string This parameter is populated if the contact was created as part of a bulk upload. For example, batch_00000000000001.

failure_reason

string The reason for the payout failing.

created_at

integer Timestamp, in Unix, when the payout was created. For example, 1545320320.

Improve Payout Processing Time#

We recommend that you create the contact and fund account before making a payout. Doing this helps you improve payout processing time.

You can continue to use the contact and fund account details (instead of IDs) in the composite API to make payouts. Doing this will not create duplicate contacts or fund accounts in your system.

×