Skip to main content
Use this endpoint to create a payout to a mobile number using Composite Payout API.
Watch Out!
  • Ensure you allowlist IPs and pass the idempotency key to make a successful payout.
  • You can send payouts to VPA (UPI) linked mobile numbers only.
Consider the points given below before firing this API:
  • 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
      • 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
      • 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.
To understand the status of the payouts, refer to Payout Status Details.

Request

Curl

Response

Success

Parameters

account_number mandatory : 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 customer identifier if you want money to be deducted from RazorpayX Lite.
  • Pass your Current Account number if you want money to be deducted from your Current Account.
Watch Out!
  • This is not your contact’s bank account number. Log in to your RazorpayX Dashboard and go to My Account & Settings → Banking → Customer Identifier.
  • This value is different for Test Mode and Live Mode.
amount mandatory : integer The payout amount, in paise. For example, pass 1000000 to transfer an amount of ₹10,000. Minimum value is 100. The value passed here does not include fees and tax. Fees and tax, if any, are deducted from your account balance.currency mandatory : string The payout currency. Here, it is INR.mode mandatory : string The mode to be used to create the payout. Here, it is UPI.The payout modes are case-sensitive. When creating payouts using APIs, ensure payout modes are entered in upper case.purpose mandatory : string The purpose of the payout. Classifications available in the system by default:
  • refund
  • cashback
  • payout
  • salary
  • utility bill
  • vendor bill
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 mandatory : object Details of the contact and fund account to which the payout should be made.account_type mandatory : string The type of account linked to the contact ID. Here, the value has to be mobile.mobile mandatory : object Object for capturing phone number and the name linked to it (optional).number mandatory : string The contact’s 10-digit mobile number (without country code) to which you wish to send the payout. This has to be linked to a VPA (UPI). For example, 9876543210.account_holder_name optional : string The name linked to the mobile number. This, if provided, will be validated against the linked UPI/bank account name. This will not be validated if not entered. For example, Gaurav Kumar.contact mandatory : object Details of the contact to whom the payout should be made.name mandatory : 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.email optional : string The contact’s email address. For example, gaurav.kumar@example.com.contact optional : string The contact’s phone number. For example, 9000090000. This can be same or different from the number passed to the mobile object for payout.type optional : string Classification for the contact. For example, employee. Classifications are available by default:
  • vendor
  • customer
  • employee
  • self
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 optional : string Maximum length is 40 characters. A reference you enter for the contact. For example, Acme Contact ID 12345.notes optional : 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_balance optional : 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_id optional : string Maximum length is 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.narration optional : 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. If no value is passed for this parameter, it defaults to the Merchant Billing Label. Enter the important text in the first 9 characters as banks truncate the rest as per their standards.notes optional : array 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”.

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 : string 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 : string 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, 9000090000. 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 can be created via the Dashboard and then used in APIs. It is not possible to create new Classifications via 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 mobile. mobile : object The contact’s mobile number to which you wish to make a payout. number mandatory : string Account holder’s mobile number containing 10 digits. account_holder_name optional : string The name linked to the mobile number. vpa : string The contact’s VPA (UPI) details. username : string The user name from the VPA (UPI). For example, gauravkumar. handle : string The handle from the VPA (UPI) address. For example, exampleupi. address : string The VPA (UPI) address. For example, gauravkumar@exampleupi. 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
created_at : integer Timestamp, in Unix, when the contact was created. For example, 1545320320. amount : integer The payout amount, in paise. For example, if the amount transferred is ₹100, it will display 10000.
This value 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, 59 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, 9 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
utr : string The unique transaction number linked to a payout. For example, UPI2928292020. 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 why the payout has failed (only in case of a failure, else it will return a null value). merchant_id : string This parameter returns the merchant id. For example, Pup4LDLiA1DssX status_details_id : string This parameter returns the status id of the payout. For example, R7aA38hQzg5TDj status_details : object This parameter returns the current status of the payout. For example, IMPS is not enabled on beneficiary account, Retry with different mode. description : string A description for the error. For example, IMPS is not enabled on beneficiary account, please retry with different mode. source : string Possible values:
  • gateway: Technical error at Razorpay Partner bank.
  • beneficiary_bank: Technical error at beneficiary bank.
  • business: Merchant action required.
  • internal: Technical error at Razorpay’s server.
reason : string Reason for the current status. For example, imps_not_allowed. Payout Status Details and Next Steps. created_at : integer Timestamp, in Unix, when the payout was created. For example, 1545320320. fee_type : string Indicates the fee type charged for the payout. Possible values is free_payout.

Errors

No linked account details found
  • code: 400
  • description: No linked VPA (UPI) found for the entered mobile number.
  • solution: Enter a mobile number which is linked to a VPA.
Account holder name not matching with bank provided name
  • code: 400
  • description: Account holder name is not matching with the name fetched from the bank.
  • solution: account_holder_name is optional. Enter this only if you are sure of the name linked to the phone number, as per bank records. System will validate the name only if entered.
Mobile number should be 10-digit long
  • code: 400
  • description: Entered mobile number is not 10-digit long.
  • solution: Enter the correct 10-digit mobile number, without country code.
We are facing trouble fetching account details. Please try again shortly
  • code: 500
  • description: Server error. Unable to fetch account details from the server.
  • solution: This is due to the NPCI mapper API being unresponsive. Retry the request after sometime.