Skip to main content
GET
/
Gateway
/
v
{version}
/
Transaction
/
by-ref
/
{identifier}
curl --request GET \
  --url https://gateway.dev.waypay.live/Gateway/v1/Transaction/by-ref/550e8400-e29b-41d4-a716-446655440000 \
  --header 'SWICH-API-Key: pk_test_xxxxxxxx'
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "amount": 1000.00,
  "currency": "PKR",
  "fee": 25.00,
  "netAmount": 975.00,
  "txType": 1,
  "txnType": "WalletDeposit",
  "description": "Product Purchase",
  "transactionNotes": "Payment completed successfully",
  "txnprovider": "JazzCash",
  "txnRef": "WP20251212123456",
  "status": 2,
  "statusText": "Completed",
  "createdAtUtc": "2025-12-12T10:30:00Z",
  "isLive": false,
  "transactionMode": "Test",
  "merchantOrderRef": "ORD123456",
  "paymentIntentId": "770e8400-e29b-41d4-a716-446655440000",
  "appliedFeeRuleName": "Standard Fee",
  "feeCalculationBreakdown": "2.5% of 1000.00 = 25.00"
}

Overview

Retrieve detailed information about a specific transaction using one of three identifiers: the payment intent ID, your merchant order reference, or the Waypay transaction reference. This flexibility allows you to query transactions using whichever identifier is most convenient for your system.

Path Parameters

identifier
string
required
Transaction identifier - can be one of three types:You can provide any of the following:
  • Payment Intent ID - The UUID returned when creating a payment (e.g., 550e8400-e29b-41d4-a716-446655440000)
  • Merchant Order Reference - Your orderRef provided when creating the transaction (e.g., ORD123456)
  • Transaction Reference - The txnRef returned by Waypay (e.g., WP20251212123456)
Recommended: Use your merchant order reference for the easiest integration with your existing systems.
version
string
required
API version (e.g., “1”)

Response

id
uuid
Unique transaction identifier
amount
number
Transaction amount
currency
string
Currency code (e.g., “PKR”, “USD”)
fee
number
Transaction processing fee
netAmount
number
Net amount after fees
txType
integer
Transaction type:
  • 0 - CardDeposit (Deposit)
  • 1 - WalletDeposit
  • 2 - Transfer
  • 3 - Withdrawal
  • 4 - WalletWithdrawal
  • 5 - Fee
  • 6 - Reversal (Reversed)
  • 7 - Settlement
  • 8 - Refund
txnType
string
Transaction type description (e.g., “Deposit”, “WalletDeposit”, “Withdrawal”)
description
string
Transaction description
transactionNotes
string
Additional transaction notes
txnprovider
string
Payment provider used
txnRef
string
Transaction reference number
status
integer
Transaction status:
  • 1 - Pending
  • 2 - Completed
  • 3 - Failed
  • 4 - Cancelled
  • 5 - RefundRequested
  • 6 - RefundFailed
  • 7 - Refunded
  • 8 - InProgress
  • 9 - OnHold
  • 10 - Reversed
  • 11 - Disputed
  • 12 - Settled
statusText
string
Human-readable status description (e.g., “Pending”, “Completed”, “Failed”)
createdAtUtc
datetime
Transaction creation timestamp (UTC)
isLive
boolean
Whether this is a live or test transaction
transactionMode
string
Transaction mode (e.g., “Live”, “Test”)
merchantOrderRef
string
Your merchant order reference (the orderRef you provided)
paymentIntentId
uuid
Payment intent identifier
appliedFeeRuleName
string
Name of the fee rule applied to this transaction
feeCalculationBreakdown
string
Detailed breakdown of how the fee was calculated
curl --request GET \
  --url https://gateway.dev.waypay.live/Gateway/v1/Transaction/by-ref/550e8400-e29b-41d4-a716-446655440000 \
  --header 'SWICH-API-Key: pk_test_xxxxxxxx'
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "amount": 1000.00,
  "currency": "PKR",
  "fee": 25.00,
  "netAmount": 975.00,
  "txType": 1,
  "txnType": "WalletDeposit",
  "description": "Product Purchase",
  "transactionNotes": "Payment completed successfully",
  "txnprovider": "JazzCash",
  "txnRef": "WP20251212123456",
  "status": 2,
  "statusText": "Completed",
  "createdAtUtc": "2025-12-12T10:30:00Z",
  "isLive": false,
  "transactionMode": "Test",
  "merchantOrderRef": "ORD123456",
  "paymentIntentId": "770e8400-e29b-41d4-a716-446655440000",
  "appliedFeeRuleName": "Standard Fee",
  "feeCalculationBreakdown": "2.5% of 1000.00 = 25.00"
}

Query by Payment Intent ID, Order Reference, or Transaction Reference

This endpoint supports querying transactions using three types of identifiers, giving you maximum flexibility:

Payment Intent ID (paymentIntentId)

  • What it is: A UUID generated by Waypay when you create any payment, deposit, or withdrawal order
  • Format: UUID (e.g., 550e8400-e29b-41d4-a716-446655440000)
  • Where to get it: Returned immediately in the API response when creating a transaction
  • Use case: Query transactions right after creation using the payment intent ID you just received

Merchant Order Reference (orderRef)

  • What it is: Your own order reference that you provided when creating the transaction
  • Format: Your custom format (e.g., ORD123456, ORDER-2025-001, INV-2025-12345)
  • Where to get it: From your own system/database
  • Use case: Query transactions using your internal order tracking system without storing Waypay IDs

Transaction Reference (txnRef)

  • What it is: A unique reference generated by Waypay after the transaction is processed
  • Format: Waypay’s format (e.g., WP20251212123456)
  • Where to get it: Returned in webhook notifications and transaction details
  • Use case: Query transactions when you have the Waypay transaction reference from webhooks or receipts
Recommended Approach: Use your merchant order reference (orderRef) for the easiest integration. This allows you to query transactions without storing any Waypay-generated identifiers.

Which Identifier Should You Use?

IdentifierBest ForAvailabilityFormat
Payment Intent IDImmediate status checks after creating a transactionAvailable instantly in API responseUUID
Order ReferenceIntegration with existing order management systemsAlways available (you provide it)Your custom format
Transaction ReferenceWebhook processing and customer receiptsAvailable after transaction processingWaypay format

Response Fields Explained

Transaction Types (txType)

The txType field indicates what type of transaction this is:
ValueTypeDescription
0CardDepositCustomer payment via card (displays as “Deposit”)
1WalletDepositPayment via mobile wallet
2TransferInternal transfer between accounts
3WithdrawalBank withdrawal/disbursement
4WalletWithdrawalMobile wallet withdrawal
5FeeTransaction processing fee
6ReversalTransaction reversal (displays as “Reversed”)
7SettlementMerchant settlement payout
8RefundMoney returned to customer

Transaction Status (status)

The status field shows the current state of the transaction:
ValueStatusDescription
1PendingTransaction initiated, awaiting processing
2CompletedTransaction completed successfully
3FailedTransaction failed
4CancelledTransaction cancelled by user or system
5RefundRequestedRefund has been requested
6RefundFailedRefund attempt failed
7RefundedTransaction has been refunded
8InProgressTransaction is currently being processed
9OnHoldTransaction temporarily on hold
10ReversedTransaction has been reversed
11DisputedTransaction is under dispute
12SettledTransaction has been settled to merchant account

Best Practices

  • Use Order Reference: Query by your orderRef for the easiest integration - no need to store Waypay identifiers
  • Store Payment Intent ID: If you need immediate status checks, save the paymentIntentId returned from transaction creation
  • Poll Wisely: Don’t poll too frequently. Use webhooks for real-time updates instead
  • Handle 404s: A 404 response means the identifier doesn’t exist or you don’t have access to it
  • Store Transaction IDs: Save the id field from responses for your records and reconciliation
  • Check Status: Always verify the status field before processing the transaction
  • Fee Transparency: Use feeCalculationBreakdown to understand fee calculations
  • Reconciliation: Use merchantOrderRef to match transactions with your orders
  • Live vs Test: Check isLive to distinguish between production and test transactions
  • Choose the Right Identifier: Use payment intent ID for immediate checks, order reference for long-term tracking

Use Cases

Check transaction status immediately after creating a payment using the payment intent ID.
// Step 1: Create payment
const paymentResponse = await createPayment({
  amount: 1000,
  orderRef: { orderRef: 'ORD123456' },
  description: 'Product Purchase'
});

// Step 2: Immediately check status using payment intent ID
const transaction = await getTransactionByRef(paymentResponse.paymentIntentId);
console.log(`Payment ${paymentResponse.paymentIntentId} status: ${transaction.statusText}`);
Display transaction status to customers on your order status page by querying with your order reference.
const orderRef = 'ORD123456'; // From your database
const transaction = await getTransactionByRef(orderRef);
console.log(`Order ${orderRef} status: ${transaction.statusText}`);
Verify webhook notifications by querying the transaction using the txnRef from the webhook payload.
function handleWebhook(webhookData) {
  const txnRef = webhookData.data.TransactionReference;
  const transaction = await getTransactionByRef(txnRef);
  // Verify the webhook data matches the actual transaction
  if (transaction.status === 2) { // Completed
    fulfillOrder(transaction.merchantOrderRef);
  }
}
Match transactions with your internal orders for accounting and reconciliation.
const internalOrders = await getOrdersFromDatabase();
for (const order of internalOrders) {
  const transaction = await getTransactionByRef(order.orderRef);
  await updateOrderStatus(order.id, transaction.status);
}
Look up transaction details when customers contact support with their order number.
const customerOrderNumber = 'ORD123456';
const transaction = await getTransactionByRef(customerOrderNumber);
console.log(`Transaction Status: ${transaction.statusText}`);
console.log(`Amount: ${transaction.amount} ${transaction.currency}`);
console.log(`Payment Method: ${transaction.txnprovider}`);
console.log(`Waypay Reference: ${transaction.txnRef}`);
Generate detailed payment receipts using the payment intent ID or transaction reference.
const paymentIntentId = '550e8400-e29b-41d4-a716-446655440000';
const transaction = await getTransactionByRef(paymentIntentId);

const receipt = {
  orderId: transaction.merchantOrderRef,
  amount: transaction.amount,
  fee: transaction.fee,
  netAmount: transaction.netAmount,
  transactionRef: transaction.txnRef,
  paymentMethod: transaction.txnprovider,
  status: transaction.statusText,
  date: transaction.createdAtUtc
};

await generateReceipt(receipt);

Common Error Scenarios

ErrorCauseSolution
404 Not FoundIdentifier doesn’t exist or access deniedVerify the identifier is correct and belongs to your merchant account
400 Bad RequestInvalid identifier formatEnsure the identifier string is properly formatted (UUID for payment intent, your format for order ref)
401 UnauthorizedInvalid or missing API keyCheck your API key is correct and has not expired

Security Considerations

  • Keep API keys secure and never expose them in client-side code
  • Use HTTPS for all API communications
  • Implement proper error handling for failed queries
  • Log all transaction queries for audit purposes
  • Rate limit your queries to avoid overwhelming the API
  • Validate transaction data before using it in your system

Next Steps

Setup Webhooks

Get real-time transaction updates

Transaction Status Guide

Understand transaction lifecycle

Create Refund

Process refunds for transactions

Payment Endpoints

Create new payment transactions