The Non-Seamless Debit Transaction  API allows you to debit funds from a wallet using a non-seamless integration approach. This API requires user interaction and redirection through a payment interface for transaction authorization.
Environment URL Test https://test.payu.in/_paymentProduction https://secure.payu.in/_payment
 
HTTP Method : POST
Parameter Description Content-Typemandatory String application/x-www-form-urlencoded
 
The request body is sent as form-encoded parameters.
    
        
            Parameter 
            Description 
            Example 
         
     
    
        
            txnIdmandatory 
            String Unique transaction ID generated by the merchant 
            RAM1234 
         
        
            keymandatory 
            String Merchant's identifier key provided by PayU 
            KOEfPI 
         
        
            productinfomandatory 
            String Information about the product or service 
            iPhone 
         
        
            customer_idoptional 
            Numeric Unique customer ID from merchant's system 
            89342546 
         
        
            walleturnoptional 
            Numeric Wallet reference number (URN) 
            70000000008 
         
        
            firstNamemandatory 
            String Customer's first name 
            Ravi 
         
        
            lastNameoptional 
            String Customer's last name 
            Kumar 
         
        
            phonemandatory 
            Numeric Customer's mobile number with country code 
            919988776655 
         
        
            emailmandatory 
            String Customer's email address 
            [email protected]  
         
        
            ws_online_responsemandatory 
            String Callback URL for successful transactions 
            https://merchant.com/success  
         
        
            ws_failure_responsemandatory 
            String Callback URL for failed transactions 
            https://merchant.com/failure  
         
        
            amountmandatory 
            Numeric Amount to debit in implied decimals (₹41.00 → 4100) 
            4100 
         
        
            pgmandatory 
            String Payment gateway constant (set to 'CLW') 
            CLW 
         
        
            hashmandatory 
            String SHA512 hash for request validation 
            6e640b... 
         
     
 
📘 Note : Either customer_id or walleturn must be provided to identify the wallet.
 
The hash is calculated using SHA512 with the following string:
key|txnId|amount|productinfo|firstName|email|||||||||||||{salt} 
Parameter Description Example mihpayid Unique PayU-generated transaction reference number 1735903830180094 mode Payment method used CLW status Transaction status (success, failure, pending) success key Merchant's key (echoed back) KOEfPI txnid Transaction ID (echoed back) RAM1234 amount Transaction amount 41.00 net_amount_debit Net amount debited from the wallet 41.00 productinfo Product information (echoed back) iPhone firstname Customer's first name Ravi lastname Customer's last name Kumar email Customer's email [email protected] phone Customer's phone number 919988776655 addedon Transaction date and time 2025-01-13 18:24:06 hash Response hash for verification abc123... PG_TYPE Payment gateway type CLW error Error message (if transaction failed) Insufficient balance error_Message Detailed error description Wallet balance is insufficient 
 
Bash 
curl --location --request POST 'https://test.payu.in/_payment' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'key=KOEfPI' \
--data-urlencode 'txnid=RAM1234' \
--data-urlencode 'amount=41.00' \
--data-urlencode 'productinfo=iPhone' \
--data-urlencode 'firstname=Ravi' \
--data-urlencode '[email protected] ' \
--data-urlencode 'phone=919988776655' \
--data-urlencode 'ws_online_response=https://merchant.com/success' \
--data-urlencode 'ws_failure_response=https://merchant.com/failure' \
--data-urlencode 'pg=CLW' \
--data-urlencode 'walleturn=70000000008' \
--data-urlencode 'hash=6e640b...' 
JSON 
{
  "mihpayid": "1735903830180094",
  "mode": "CLW",
  "status": "success",
  "key": "KOEfPI",
  "txnid": "RAM1234",
  "amount": "41.00",
  "net_amount_debit": "41.00",
  "productinfo": "iPhone",
  "firstname": "Ravi",
  "lastname": "Kumar",
  "email": "[email protected] ",
  "phone": "919988776655",
  "addedon": "2025-01-13 18:24:06",
  "hash": "def456ghi789...",
  "PG_TYPE": "CLW"
} 
JSON 
{
  "mihpayid": "1735903830180095",
  "mode": "CLW",
  "status": "failure",
  "key": "KOEfPI",
  "txnid": "RAM1235",
  "amount": "41.00",
  "productinfo": "iPhone",
  "firstname": "Ravi",
  "lastname": "Kumar",
  "email": "[email protected] ",
  "phone": "919988776655",
  "error": "Insufficient balance",
  "error_Message": "Wallet balance is insufficient for this transaction",
  "hash": "xyz789abc123..."
} 
Status Code Description 200 OK - Request processed successfully 400 Bad Request - Invalid request parameters 401 Unauthorized - Authentication failed 500 Internal Server Error 
 
Initiate Transaction : Send a POST request with all required parameters 
User Redirection : User is redirected to PayU's payment interface for authorization 
User Authorization : User confirms the transaction on the payment page 
Callback : PayU sends the result to either ws_online_response or ws_failure_response 
Verification : Use the response hash to verify the authenticity of the callback 
 
Feature Non-Seamless Seamless User Interaction Requires redirection and user authorization No user interaction required Flow Manual redirection through PayU interface Direct server-to-server communication Callback URLs Uses ws_online_response and ws_failure_response Uses different callback mechanism User Experience More friction due to redirection Smoother, no redirection Use Case Consumer-facing transactions requiring authorization Backend transactions or auto-debit scenarios 
 
Hash Security : Protect your salt key and never expose it in client-side code 
Callback Handling : Implement proper callback URL handlers for success and failure scenarios 
Transaction Verification : Always verify the response hash for authenticity 
Error Handling : Implement comprehensive error handling for different failure scenarios 
User Experience : Provide clear messaging during the redirection flow 
Reconciliation : Use the enquiry API to verify final transaction status 
 
Error Description Solution Insufficient balance Wallet doesn't have enough funds Ask customer to load wallet first Invalid wallet Customer ID or wallet URN not found Verify customer details Transaction limit exceeded Amount exceeds allowed limits Check transaction limits Wallet blocked Customer wallet is temporarily blocked Contact support Hash mismatch Invalid hash in request Verify hash calculation 
 
Use HTTPS for all API communications 
Validate all input parameters before processing 
Implement rate limiting to prevent abuse 
Store sensitive data securely 
Monitor for suspicious transaction patterns 
Implement proper logging for audit trails