Using this API, you can initiate the payment request from customers in your
purchase flow. In the message payload, you can add a specific business Virtual
Payment Address (VPA) in which you want to receive the payment. If you do not
pass the value in the vpa
field, the default VPA (added during merchant onboarding)
will receive the payment.
To initiate the payment, make the following POST request to the API:
POST https://nbupayments.googleapis.com/v1/merchantPayments:initiate
{
// googleMerchantId should be set. This ID is globally unique across all Google Pay merchants.
“merchantInfo”: {
“googleMerchantId”: “BREKJWNFNFLS”
},
“userInfo”: {
// Phone no. of the payer in E.164 format
“phoneNumber”: “+919876543210”
},
“merchantTransactionDetails”: {
// Transaction ID from Google Pay partner. This must be unique for every transaction done by the partner and should be in accordance with the syntax agreed upon with the merchant PSP.
“transactionId”: “transactionId”,
// Amount to be paid by user
“amountPayable”: {
// The 3-letter currency code defined in ISO 4217.
“currencyCode”: “INR”,
// The whole units of the amount.
// For example if currencyCode is "INR", then 1 unit is one rupee.
“units”: 100,
// Number of nano (10^-9) units of the amount.
“nanos”: 0
},
// Description for the transaction.
“description”: “Sample description”
// UPI Payment Details of the merchant.
“upiPaymentDetails”: {
// VPA where the payment needs to be done. Need to be specified only if it is different from the default VPA.
“vpa”: “abc@xyz”
}
// Details about GST.
"gst": {
// Merchant GSTIN (Goods and Services Tax Identification Number).
"gstin": "29ABCDE1234F2Z5"
"gstBreakUp": {
// Goods and Services Tax.
"gst": {
// The 3-letter currency code defined in ISO 4217.
“currencyCode”: “INR”,
// The whole units of the amount.
// For example if currencyCode is "INR", then 1 unit is one rupee.
“units”: 10,
// Number of nano (10^-9) units of the amount.
“nanos”: 0
}
// Central Goods and Services Tax.
"cgst": {
// The 3-letter currency code defined in ISO 4217.
“currencyCode”: “INR”,
// The whole units of the amount.
// For example if currencyCode is "INR", then 1 unit is one rupee.
“units”: 5,
// Number of nano (10^-9) units of the amount.
“nanos”: 0
}
// State Goods and Services Tax.
"sgst": {
// The 3-letter currency code defined in ISO 4217.
“currencyCode”: “INR”,
// The whole units of the amount.
// For example if currencyCode is "INR", then 1 unit is one rupee.
“units”: 3,
// Number of nano (10^-9) units of the amount.
“nanos”: 0
}
// Integrated Goods and Services Tax.
"igst": {
// The 3-letter currency code defined in ISO 4217.
“currencyCode”: “INR”,
// The whole units of the amount.
// For example if currencyCode is "INR", then 1 unit is one rupee.
“units”: 1,
// Number of nano (10^-9) units of the amount.
“nanos”: 0
}
// GST compensation cess.
"cess": {
// The 3-letter currency code defined in ISO 4217.
“currencyCode”: “INR”,
// The whole units of the amount.
// For example if currencyCode is "INR", then 1 unit is one rupee.
“units”: 1,
// Number of nano (10^-9) units of the amount.
“nanos”: 0
}
}
}
"invoice": {
"invoiceNumber": "Invoice456"
// The time of invoice in RFC 3339 format. Eg, 2017-02-15T16:20:30+05:30 for IST timezone; 2017-02-15T10:50:30Z for UTC.
"invoiceTime": “2017-02-15T10:50:30Z”
}
},
// The time at which the request expires in RFC 3339 format. Eg, 2017-02-15T16:20:30+05:30 for IST timezone; 2017-02-15T10:50:30Z for UTC.
“expiryTime”: “2017-02-15T10:50:30Z”,
// The platform at which the request is originating
“originatingPlatform”: “ANDROID_APP”
}
Parameters
User info
The following data parameter for the userInfo
object must be passed in the API
request:
Parameters | Type of value | Description | Required/Optional |
---|---|---|---|
phonenumber |
String | User mobile number in E.164 format. | Required |
Merchant info
The following data parameter for the merchantInfo
object must be passed in the
API request:
Parameters | Type of value | Description | Required/Optional |
---|---|---|---|
googleMerchantId |
String | Google assigned merchant ID (Generated at onboarding time). | Required |
Merchant transaction details
The following data parameters for the merchantTransactionDetails
object must
be passed in the API request:
Parameters | Type of value | Description | Required/Optional |
---|---|---|---|
transactionId |
String | A unique transaction ID generated by the partner for every transaction. This ID should be in accordance with the syntax agreed upon with the merchant PSP. | Required |
description |
String | Description for a transaction. | Optional |
UPI payment details
To add a specific VPA, you can pass the following data parameter in the
upiPaymentDetails
object.
Parameters | Type of value | Description | Required/Optional |
---|---|---|---|
vpa |
String | Business Virtual Payment Address (VPA) that receives the payment. Specify only if the VPA is different from the default one. | Optional |
Amount payable
The following are the data parameters to pass into the amountPayable
object
nested under the merchantTransactionDetails
object.
Parameters | Type of value | Description | Required/Optional |
---|---|---|---|
currencyCode |
String | The currency in which you want to make payment. | Required |
units |
Number | Amount to be paid. | Required |
nanos |
Number | Number of nano (10^-9) units of the amount. | Required |
Set expiry time
Pass the time at which the payment request expires in the expiryTime
key.
The time must be defined in the RFC 3339 format (example 2018-06-02T11:50:30Z).
This field is optional.
Set originating platform
You must set the originating platform by passing the enum value for originatingPlatform
key.
This field is required. The following are the possible values for originatingPlatform key.
- ANDROID_APP
- ANDROID_WEB
- IOS_APP
- IOS_WEB
- INSTORE_POS
- DESKTOP
- IVR
- OTHER
Gst
The following are the data parameters to pass into the gst
object nested under the merchantTransactionDetails
object.
Parameters | Type of value | Description | Required/Optional |
---|---|---|---|
gstin |
String | Merchant GSTIN (Goods and Services Tax Identification Number). | Optional |
Gst
The following are the data parameters to pass into the gst
object
nested under the gstBreakup
object.
Parameters | Type of value | Description | Required/Optional |
---|---|---|---|
currencyCode |
String | The currency in which you want to make payment. | Required |
units |
Number | GST amount | Required |
nanos |
Number | Number of nano (10^-9) units of the amount. | Required |
Cgst
The following are the data parameters to pass into the cgst
object
nested under the gstBreakup
object.
Parameters | Type of value | Description | Required/Optional |
---|---|---|---|
currencyCode |
String | The currency in which you want to make payment. | Required |
units |
Number | CGST amount | Required |
nanos |
Number | Number of nano (10^-9) units of the amount. | Required |
Igst
The following are the data parameters to pass into the igst
object
nested under the gstBreakup
object.
Parameters | Type of value | Description | Required/Optional |
---|---|---|---|
currencyCode |
String | The currency in which you want to make payment. | Required |
units |
Number | IGST amount | Required |
nanos |
Number | Number of nano (10^-9) units of the amount. | Required |
Sgst
The following are the data parameters to pass into the sgst
object
nested under the gstBreakup
object.
Parameters | Type of value | Description | Required/Optional |
---|---|---|---|
currencyCode |
String | The currency in which you want to make payment. | Required |
units |
Number | SGST amount | Required |
nanos |
Number | Number of nano (10^-9) units of the amount. | Required |
Cess
The following are the data parameters to pass into the cess
object
nested under the gstBreakup
object.
Parameters | Type of value | Description | Required/Optional |
---|---|---|---|
currencyCode |
String | The currency in which you want to make payment. | Required |
units |
Number | Cess amount | Required |
nanos |
Number | Number of nano (10^-9) units of the amount. | Required |
Invoice
The following are the data parameters to pass into the invoice
object nested under the merchantTransactionDetails
object.
Parameters | Type of value | Description | Required/Optional |
---|---|---|---|
invoiceNumber |
String | The number on the invoice | Optional |
invoiceTime |
String | The time of invoice in RFC 3339 format. Eg, 2017-02-15T16:20:30+05:30 for IST timezone; 2017-02-15T10:50:30Z for UTC. | Optional |
Response
Success
If successful, the POST request returns a 200 OK
HTTP status code, including an
empty JSON.
Failure
The API returns the following response if the request fails:
{
“error”: {
“code”: 400,
“status”: “INVALID_ARGUMENT”,
“message”: “Invalid phone number”
}
}
API specific error codes
Code | Title | Description |
---|---|---|
403 | PERMISSION_DENIED | Merchant is not authorized. |
400 | INVALID_ARGUMENT | Request contains invalid arguments. |
404 | NOT_FOUND | User was not found. |
404 | NOT_FOUND | Merchant was not found. |
409 | ALREADY_EXISTS | Duplicate transaction ID. |
400 | FAILED_PRECONDITION | Merchant has not setup to receive payments. |