The Get Transaction Details API retrieves transaction records processed by PayU between a given start date and end date. The response includes transaction status, net amount, payment mode, customer profile, and associated lifecycle actions (such as capture and refund). Results are returned in a paginated array format.
HTTP Method: POST
Environment
| Environment | URL |
|---|---|
| Test Environment | https://test.payu.in/v4/reporting/transactions |
| Production Environment | https://info.payu.in/v4/reporting/transactions |
Request Headers
| 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 = '<YOUR_TEST_KEY>';
var merchant_secret = 'YOUR_TEST_SALT';
// 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}"`;
}| Header | Type | Description |
|---|---|---|
Content-Type | String | Must be set to application/json. |
Accept | String | Must be set to application/json. |
Date | String | Current GMT timestamp (e.g. Tue, 12 Aug 2025 16:44:30 GMT). |
Digest | String | Base64-encoded SHA-256 hash of the JSON payload. |
Authorization | String | HMAC authorization header containing merchant key and computed signature. |
Request Body Parameters
| Parameter | Description | Example |
|---|---|---|
pageNumbermandatory | Number The page number to retrieve. Use 1 for the first page and increment for subsequent pages. | 1 |
startDatemandatory | String The start date for the transaction search in YYYY-MM-DD format. | 2025-08-11 |
endDatemandatory | String The end date for the transaction search in YYYY-MM-DD format. | 2025-08-11 |
totalRecordmandatory | Number The total number of records requested per query batch. | 50 |
Sample Request
curl --location 'https://info.payu.in/v4/reporting/transactions' \
--header 'Accept: application/json' \
--header 'Authorization: hmac username="<YOUR_MERCHANT_KEY>", algorithm="hmac-sha256", headers="date digest", signature="{{signature}}"' \
--header 'Digest: {{digest}}' \
--header 'Date: Tue, 12 Aug 2025 16:44:30 GMT' \
--header 'Content-Type: application/json' \
--data '{
"pageNumber": 1,
"startDate": "2025-08-11",
"endDate": "2025-08-11",
"totalRecord": 50
}'import requests
import json
url = "https://info.payu.in/v4/reporting/transactions"
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Date": "Tue, 12 Aug 2025 16:44:30 GMT",
"Digest": "YOUR_DIGEST",
"Authorization": "hmac username=\"<YOUR_MERCHANT_KEY>\", algorithm=\"hmac-sha256\", headers=\"date digest\", signature=\"YOUR_SIGNATURE\""
}
payload = {
"pageNumber": 1,
"startDate": "2025-08-11",
"endDate": "2025-08-11",
"totalRecord": 50
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())<?php
$url = "https://info.payu.in/v4/reporting/transactions";
$payload = json_encode([
"pageNumber" => 1,
"startDate" => "2025-08-11",
"endDate" => "2025-08-11",
"totalRecord" => 50
]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"Accept: application/json",
"Date: Tue, 12 Aug 2025 16:44:30 GMT",
"Digest: YOUR_DIGEST",
"Authorization: hmac username=\"<YOUR_MERCHANT_KEY>\", algorithm=\"hmac-sha256\", headers=\"date digest\", signature=\"YOUR_SIGNATURE\""
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class PayURequest {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
String payload = "{\"pageNumber\": 1, \"startDate\": \"2025-08-11\", \"endDate\": \"2025-08-11\", \"totalRecord\": 50}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://info.payu.in/v4/reporting/transactions"))
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("Date", "Tue, 12 Aug 2025 16:44:30 GMT")
.header("Digest", "YOUR_DIGEST")
.header("Authorization", "hmac username=\"<YOUR_MERCHANT_KEY>\", algorithm=\"hmac-sha256\", headers=\"date digest\", signature=\"YOUR_SIGNATURE\"")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}const url = "https://info.payu.in/v4/reporting/transactions";
const payload = {
pageNumber: 1,
startDate: "2025-08-11",
endDate: "2025-08-11",
totalRecord: 50
};
const options = {
method: "POST",
headers: {
"Content-Type": "application/json",
"Accept": "application/json",
"Date": "Tue, 12 Aug 2025 16:44:30 GMT",
"Digest": "YOUR_DIGEST",
"Authorization": "hmac username=\"<YOUR_MERCHANT_KEY>\", algorithm=\"hmac-sha256\", headers=\"date digest\", signature=\"YOUR_SIGNATURE\""
},
body: JSON.stringify(payload)
};
fetch(url, options)
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));Response Parameters
| Parameter | Type | Description | Example |
|---|---|---|---|
message | String | Status message describing the API result. | Success |
status | Number | Status flag for the API call: 1 for success, 0 for failure. | 1 |
currentPage | Number | Current page index in the paginated response. | 1 |
totalRecords | Number | Total transaction records found for the date range. | 83 |
pageSize | Number | Number of records returned on the current page. | 5 |
totalPages | Number | Total available pages. | 17 |
hasNextPage | Boolean | true if more records exist on subsequent pages. | true |
hasPreviousPage | Boolean | true if previous pages exist. | false |
result | Array | Array of transaction objects. | See details below. |
result[].transactionDetails Object Description
| Field | Description | Example |
|---|---|---|
id | PayU transaction ID (mihpayid). | 403993715534525267 |
transactionId | Merchant transaction identifier (txnId). | TXN1754891007637_38614 |
merchantKey | Merchant key associated with the transaction. | <YOUR_MERCHANT_KEY> |
merchantName | Business name of the merchant. | Merchant Enterprise |
status | Status of the payment: captured, failed, dropped, or bounced. | captured |
amount | Total transaction amount paid by the customer. | 1000.00 |
transactionFee | Base transaction amount before surcharges. | 1000.00 |
discount | Discount amount applied to the payment. | 0.00 |
additionalCharges | Additional convenience fee or surcharge applied. | 0.00 |
mode | Payment mode: CC, DC, NB, UPI, CASH (Wallet), or EMI. | NB |
ibiboCode | Bank or payment option code (e.g. HDFCNB, AXISB, UPI). | AXNBTPV |
bankRefNo | Bank reference identifier / UTR. | 3abaf676-4385-491e-9488-6490672baa42 |
addedOn | Date and time when transaction was initiated (YYYY-MM-DD HH:MM:SS). | 2025-08-11 11:13:30 |
updatedOn | Date and time when transaction was last modified. | 2025-08-11 11:13:40 |
productInfo | Product description supplied in payment request. | Order #12345 |
firstName | Customer first name. | Aarav |
lastName | Customer last name. | Sharma |
phone | Customer mobile number. | 9876543210 |
email | Customer email address. | [email protected] |
cardNo | Masked card number (for card payments). | XXXXXXXXXXXX4242 |
cardType | Card network type (VISA, MAST, AMEX, RUPAY). | VISA |
cardToken | Card token identifier if a saved card was used. | tok_card_12345 |
udf1 to udf5 | User-defined metadata fields passed in payment initiation. | custom_val_1 |
errorCode | Status error code. E000 indicates no error. | E000 |
errorMessage | Detailed error explanation from processor or bank. | No Error |
result[].transactionActionDetails Object Description
| Field | Type | Description | Example |
|---|---|---|---|
id | Number | Unique identifier for the action. | 138492940 |
actionType | String | Type of lifecycle action: capture or refund. | capture |
amount | Number | Amount processed in this action. | 1000.00 |
status | String | Status of the action: SUCCESS, queued, or FAILED. | SUCCESS |
token | String | Refund token identifier (if action is refund). | REF_sHGe_906836 |
bankRefNo | String | Bank reference identifier for this action. | 3abaf676-4385-491e-9488 |
bankArn | String | Bank Acquirer Reference Number (ARN) for card refunds. | 123456789012 |
refundMode | String | Refund routing mode (Back to Source). | Back to Source |
createdAt | String | Timestamp when action was initiated. | 2025-08-11 11:13:40 |
updatedAt | String | Timestamp when action status was updated. | 2025-08-11 11:13:40 |
Sample Response
{
"message": "Success",
"status": 1,
"currentPage": 1,
"totalRecords": 2,
"pageSize": 5,
"totalPages": 1,
"hasNextPage": false,
"hasPreviousPage": false,
"result": [
{
"payuId": 403993715534525267,
"transactionDetails": {
"id": 403993715534525267,
"transactionId": "TXN1754891007637_38614",
"merchantKey": "<YOUR_MERCHANT_KEY>",
"merchantName": "Merchant Enterprise",
"status": "captured",
"discount": 0.00,
"amount": 1000.00,
"transactionFee": 1000.00,
"additionalCharges": 0.00,
"mode": "NB",
"firstName": "Aarav",
"lastName": "Sharma",
"addedOn": "2025-08-11 11:13:30",
"updatedOn": "2025-08-11 11:13:40",
"phone": "9876543210",
"email": "[email protected]",
"productInfo": "Order #12345",
"errorCode": "E000",
"errorDescription": "No Error",
"ibiboCode": "AXNBTPV",
"bankRefNo": "3abaf676-4385-491e-9488-6490672baa42",
"errorMessage": "No Error",
"udf1": "meta_1",
"udf2": "",
"udf3": "",
"udf4": "",
"udf5": ""
},
"transactionActionDetails": [
{
"id": 138492940,
"bankRefNo": "3abaf676-4385-491e-9488-6490672baa42",
"token": "",
"actionType": "capture",
"prevStatus": null,
"amount": 1000.00,
"status": "SUCCESS",
"bankArn": null,
"updatedAt": "2025-08-11 11:13:40",
"createdAt": "2025-08-11 11:13:40",
"refundMode": "-"
}
]
}
]
}Response Status & Error Codes
| HTTP Status | Message | Description |
|---|---|---|
| 200 OK | Success | Request processed successfully with matching records. |
| 400 Bad Request | Invalid Date Range | Date range exceeds permissible bounds or invalid date format. |
| 401 Unauthorized | Unauthorized | Invalid merchant credentials, missing digest, or signature mismatch. |
| 500 Server Error | Internal Error | Temporary processing issue on reporting service. |
Next Steps
- Automate Daily Reconciliation:
- Ingest transaction records into your internal ERP or accounting systems by querying this endpoint across standard date windows (
startDateandendDate).
- Ingest transaction records into your internal ERP or accounting systems by querying this endpoint across standard date windows (
- Paginate Large Result Sets:
- Check
hasNextPageand incrementpageNumberuntil all records for the time range have been processed.
- Check
- Audit Transaction Lifecycles:
- Inspect the
transactionActionDetailsarray for each record to reconcile refunds, chargebacks, and partial captures against original order amounts.
- Inspect the
