VardhanPay API Documentation
Welcome to the official VardhanPay API integration guide. Use our REST APIs to accept UPI payments, generate dynamic QR codes, track payments, and verify callbacks.
1. Environment & Base URL
| Environment | Base URL |
|---|---|
| Production API | https://api.vardhanpay.com |
| Merchant Portal | https://mch.vardhanpay.com |
2. Signature Algorithm (MD5)
Every API request must include a cryptographic signature generated using your Merchant Secret Key:
- Filter out parameters with empty/null values and exclude
signanddeepLinks. - Sort parameter keys in alphabetical order (case-insensitive ASCII).
- Concatenate keys and values:
k1=v1&k2=v2&...&key=YOUR_SECRET_KEY - Calculate the MD5 hash of the string and convert to lowercase.
sign = md5("amount=100.00¤cy=INR&mchNo=100333084&mchOrderNo=ORD123&version=V3&key=YOUR_SECRET_KEY")
3. Create Payin Order (V3)
POST /api/v1/payin/create (or /findRealChannel)
Request Parameters
| Field | Type | Required | Description |
|---|---|---|---|
mchNo | String | Yes | Merchant No (e.g. 100333084) |
mchOrderNo | String | Yes | Unique Merchant Order ID |
amount | String | Yes | Amount in INR (e.g. 100.00) |
currency | String | Yes | INR |
version | String | Yes | V3 |
notifyUrl | String | Yes | Webhook callback URL |
sign | String | Yes | MD5 signature |
Success Response
{
"code": 0,
"msg": "Success",
"data": {
"amount": 100.00,
"transferUpi": "paylinker@upi",
"remark": "P2026082201",
"imgCode": "data:image/png;base64,iVBORw0KGgo...",
"upi": "upi://pay?pa=paylinker@upi&am=100.00...",
"paytmmp": "paytmmp://cash_wallet?pa=paylinker@upi..."
}
}
4. Query Order Status
POST /api/v1/payin/query (or /findOrderStatus)
{
"code": 0,
"msg": "Success",
"data": {
"status": 2, // 1: PENDING, 2: SUCCESS, 3: FAILED
"payinState": 2
}
}
5. Submit 12-Digit Banking UTR
POST /api/v1/payin/utr/submit (or /uploadUtr)
{
"mchNo": "100333084",
"mchOrderNo": "ORD123",
"utr": "423512345678",
"version": "V1",
"sign": "..."
}
6. Callback Notification (Webhook)
When an order is completed, our server sends a POST request to your notifyUrl. Your server must respond with HTTP 200 and plain text success.
POST /your-webhook-handler.php
Content-Type: application/json
{
"mchNo": "100333084",
"mchOrderNo": "ORD123",
"amount": "100.00",
"payinState": 2,
"sign": "..."
}
7. PHP Integration Example
<?php
function createVardhanPayOrder($mchNo, $secretKey, $orderNo, $amount, $notifyUrl) {
$params = [
'mchNo' => $mchNo,
'mchOrderNo' => $orderNo,
'amount' => number_format((float)$amount, 2, '.', ''),
'currency' => 'INR',
'version' => 'V3',
'notifyUrl' => $notifyUrl
];
uksort($params, 'strcasecmp');
$signStr = urldecode(http_build_query($params)) . '&key=' . $secretKey;
$params['sign'] = strtolower(md5($signStr));
$ch = curl_init('https://api.vardhanpay.com/findRealChannel');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
return json_decode(curl_exec($ch), true);
}