You can collect card payments without redirection to bank page for entering OTP using S2S integration with Seamless Decoupled Flow. This flow enables pure server-to-server transaction processing for a streamlined payment experience.
The Seamless Decoupled Flow uses txnS2sFlow set to 2 for Pure S2S transactions, eliminating user interface redirections during the authentication process.
Environment
Test Environment | https://apitest.payu.in/v2/payments |
Production Environment | https://api.payu.in/v2/payments> |
Request header
Parameter | Description |
---|---|
date | The current date and time. For example, format of the date is Wed, 28 Jun 2023 11:25:19 GMT. |
authorization | The actual HMAC signature generated using the specified algorithm (sha512) and includes the hashed data. For more information, refer to authorization fields description. |
authorization fields description
Field | Description |
---|---|
username | Represents the username or identifier for the client or merchant, for example smsplus. |
algorithm | Use SHA512 algorithm for hashing and send this as header value. |
headers | Specifies which headers have been used in generating the hash, for example date. |
signature | The HMAC signature generated using the specified algorithm. For more information, refer to hashing algorithm. |
hashing algorithm
You must hash the request parameters using the following hash logic:
Hash logic: sha512(<Body data>
+ '|' + date + '|' + merchant_secret)
Where <Body data>
contains the request body posted with the request.
Sample header code
var merchant_key = 'smsplus';
var merchant_secret = 'izF09TlpX4ZOwmf9MvXijwYsBPUmxYHD';
// date
var date = new Date();
date = date.toUTCString();
// authorization
var authorization = getAuthHeader(date);
function getAuthHeader(date) {
var AUTH_TYPE = 'sha512';
var data = isEmpty(request['data']) ? "" : request['data'];
var hash_string = data + '|' + date + '|' + merchant_secret;
var hash = CryptoJS.SHA512(hash_string).toString(CryptoJS.enc.Hex);
return `hmac username="${merchant_key}", algorithm="${AUTH_TYPE}", headers="date", signature="${hash}"`;
}
Request body
Parameter | Description | Example |
---|---|---|
accountId |
|
UMXDPA |
txnId |
|
ZP6267f0d2996ce |
paymentMethod |
|
{"name": "CreditCard", "bankCode": "CC"} |
order |
|
|
additionalInfo |
|
|
callBackActions |
|
|
billingDetails |
|
Object field descriptions
paymentMethod object fields description
Field | Description | Example |
---|---|---|
name |
|
CreditCard |
bankCode |
|
CC |
paymentCard |
|
paymentCard object fields description
Parameter | Description | Example |
---|---|---|
cardNumbermandatory for physical card |
Card number. | 5497774415170603 |
validThroughmandatory for physical card |
Expiry date in MM/YYYY format. | 05/2025 |
ownerNameoptional |
Name of the card owner. | Ashish |
cvvmandatory for physical card |
CVV number of the card. | 123 |
tavvmandatory for saved card |
Cryptogram of the card for tokenized payments. | AAABAWFlmQAAAABjRWWZEEFgFz |
last4Digitsmandatory for saved card |
Last four digits of the card. | 0603 |
cardTokenTypemandatory for saved card |
Card token type. Valid values: PAYU, NETWORK, ISSUER. | PAYU |
cardTokenmandatory for saved card |
Card token of the stored card. | b5f2d8785768087678fm9 |
order object fields description
Parameter | Description | Example |
---|---|---|
productInfomandatory |
Product details. | Product details |
orderedItemoptional |
Details about the items ordered. | Array of Objects |
userDefinedFieldsoptional |
Custom fields for additional information. Fields: udf1, udf2, udf3, udf4, udf5, udf6, udf7, udf8, udf9, udf10. For more information, refer to | Object |
paymentChargeSpecificationmandatory |
Includes amount and charges. For more information, refer to paymentChargeSpecification object fields description | Object |
paymentChargeSpecification object fields description
Parameter | Description | Example |
---|---|---|
pricemandatory |
The transaction amount. | 1000 |
netAmountDebitoptional |
Net amount to be debited. | 1000 |
taxSpecificationoptional |
Tax details of the product/order. | Object |
convenienceFeeoptional |
Fees format (e.g., CC:12). | CC:12 |
offersoptional |
Offers applied or available for the payment. | Object |
userDefinedFields object fields description
Field | Description |
---|---|
udf1 | User defined field. |
udf2 | User defined field. |
udf3 | User defined field. |
udf4 | User defined field. |
udf5 | User defined field. |
udf6 | User defined field. |
udf7 | User defined field. |
udf8 | User defined field. |
udf9 | User defined field. |
udf10 | User defined field. |
additionalInfo object fields description
Parameter | Description | Example |
---|---|---|
enforcePaymethodoptional |
Force a transaction with a specified method (e.g., CC, DC). | CC |
forcePgidoptional |
Forces identification for payment gateway. | PG123 |
partnerHoldTimeoptional |
Time held by the partner for the transaction. | 60 |
userCredentialsoptional |
Credentials for user authentication. | string |
userTokenoptional |
Token for the customer. | user_token_123 |
subventionAmountoptional |
Amount paid through EMI subvention payments. | 100 |
authOnlyoptional |
Initiates an authentication-only payment (true/false). | false |
createOrderoptional |
A flag to store the order details (true/false). | true |
txnS2sFlowoptional |
For defining seamless/non-seamless flows in handling payments. | seamless |
Seamless Decoupled Flow-specific parameters:
Field | Description | Example |
---|---|---|
txnS2sFlow |
|
2 |
createOrder |
|
false |
decodedS2sResponse |
|
1 |
callBackActions object fields description
Parameter | Description | Example |
---|---|---|
successActionmandatory |
URL to be called on payment success. | https://example.com/success |
failureActionmandatory |
URL to be called on payment failure. | https://example.com/failure |
cancelActionmandatory |
URL to be called if user cancels the payment. | https://example.com/cancel |
codActionoptional |
URL for Cash on Delivery (COD) action. | https://example.com/cod |
billingDetails object fields description
Parameter | Description | Example |
---|---|---|
firstNamemandatory |
First name of the billing contact. | Ashish |
lastNameoptional |
Last name of the billing contact. | Kumar |
address1mandatory |
Primary billing address. | 123 Main Street |
address2optional |
Secondary billing address. | Apt 4B |
phoneoptional |
Phone number of the billing contact. | 9123456789 |
emailmandatory |
Email address of the billing contact. | [email protected] |
cityoptional |
City of the billing address. | Bharatpur |
stateoptional |
State of the billing address. | Rajasthan |
countryoptional |
Country of the billing address. | India |
zipCodeoptional |
Postal/Zip code of the billing address. | 321028 |
Sample request
curl --location 'https://apitest.payu.in/v2/payments' \
--header 'date: Thu, 27 Mar 2025 10:12:27 GMT' \
--header 'authorization: hmac username="UMXDPA", algorithm="sha512", headers="date", signature="ec84843a663143bb89391f6fa2d4b9404bab1543a3eee81263b4a507ebf5d289d8fad1fbcdd59da820951e3e0f9b0b0b3d1bad9b41338804e7c42a8a6197c6e9"' \
--header 'Content-Type: application/json' \
--data-raw '{
"accountId": "UMXDPA",
"txnId": "ZP6267f0d2996ce",
"amount": 10,
"paymentMethod": {
"name": "CreditCard",
"bankCode": "CC",
"paymentCard": {
"cardNumber": "5004461234560000",
"validThrough": "04/2025",
"ownerName": "John Doe",
"cvv": "987"
}
},
"order": {
"productInfo": "Seamless Decoupled Flow Payment",
"orderedItem": [
{
"description": "Product Description",
"amount": 10.0
}
]
},
"additionalInfo": {
"txnS2sFlow": "2",
"createOrder": false,
"decodedS2sResponse": "1"
},
"callBackActions": {
"successAction": "https://yoursite.com/success",
"failureAction": "https://yoursite.com/failure"
},
"billingDetails": {
"firstName": "John",
"lastName": "Doe",
"phone": "9876543210",
"email": "[email protected]"
}
}'
Sample response
Card/EMI Payment Response
{
"result": {
"authAction": "https://api.payu.in/payments/21667772394/otps",
"paymentId": "21667772394",
"card": {
"binData": {
"pureS2SSupported": false,
"issuingBank": "ICICI",
"category": "creditcard",
"cardType": "MAST",
"isDomestic": true
}
}
},
"status": "PENDING"
}
UPI Payment Response
{
"result": {
"upi": {
"amount": "10.00",
"merchantVpa": "merchant.payu@hdfcbank",
"intentURIData": "pa=merchant@vpa&tr=21667772414&am=10.00"
},
"orderId": "ZP6267f0d2996ce"
},
"status": "PENDING"
}
Response parameters
Parameter | Description | Example |
---|---|---|
authAction |
URL for authentication actions like OTP submission during the payment process. |
https://api.payu.in/payments/21667772394/otps |
paymentId |
Unique identifier for the payment transaction. |
21667772394 |
card.binData.issuingBank |
Name of the bank that issued the card. |
ICICI |
card.binData.category |
Category of the card (creditcard, debitcard). |
creditcard |
card.binData.pureS2SSupported |
Boolean indicating if the card supports pure server-to-server transactions. |
false |
upi.amount |
UPI payment amount (for UPI transactions). |
10.00 |
upi.merchantVpa |
Merchant's UPI VPA (for UPI transactions). |
merchant.payu@hdfcbank |
status |
Status of the payment transaction. |
PENDING |
Reference:To check the transaction status, refer to Verify Payment API. The Verify Payment API is mandatory for Seamless Decoupled Flow to obtain the final transaction status since the initial response is always PENDING.