Creates an INR bank withdrawal.
Request fields#
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
webhook_url | URL | Yes | Valid public URL | Receives withdrawal status postbacks |
amount | Integer | Yes | INR 100 to 100,000 | Withdrawal amount; decimals are not accepted |
transaction_id | String | Yes | Unique, 7 to 32 characters | Your merchant withdrawal ID |
beneficiary_name | String | Yes | Non-empty | Bank account beneficiary |
bank_name | String | Yes | Non-empty | Beneficiary bank name |
bank_account | String | Yes | Non-empty | Beneficiary account number |
ifsc | String | Yes | Non-empty | Beneficiary bank branch IFSC |
Request example
Server-side
curl -X POST https://api.niripay.com/api/v1/merchant/withdrawals/create \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://merchant.example/webhooks/withdrawal",
"amount": 5000,
"transaction_id": "WD-2026-001",
"beneficiary_name": "Test Merchant",
"bank_name": "Example Bank",
"bank_account": "1234567890123",
"ifsc": "EXAM0001234"
}'const withdrawal = await niripayJson("/api/v1/merchant/withdrawals/create", {
webhook_url: "https://merchant.example/webhooks/withdrawal",
amount: 5000,
transaction_id: "WD-2026-001",
beneficiary_name: "Test Merchant",
bank_name: "Example Bank",
bank_account: "1234567890123",
ifsc: "EXAM0001234"
});Success response#
JSON
{
"status": "success",
"message": "Withdrawal created successfully",
"data": {
"transaction_id": "WD-2026-001",
"internal_transaction_id": "example-internal-id",
"amount": 5000,
"status": "pending",
"fees": {
"percentage": 3,
"fixed_amount": 2,
"total_amount": 152,
"total_debit_amount": 5152
}
}
}Important rules#
- Amount must be a whole number from INR 100 to INR 100,000.
transaction_idmust be unique for the merchant and 7 to 32 characters long.- Persist the API response before considering the request accepted.
- Do not retry an accepted create request with the same transaction ID.