Payout Request
API to place a fund withdrawal (payout) request for the authenticated user. Supports Standard (NEFT) and Instant (IMPS) withdrawal modes. The withdrawal is credited to the user's registered primary bank account.
Check Eligibility and Withdrawal Fees
- Use the Get Payout Modes API to fetch the modes available and eligible withdrawal amount to your account along with the minimum and maximum withdrawal amounts for each mode before placing a request.
- NEFT (Standard): Free of charge.
- IMPS (Instant): Credited within minutes subject to eligibility.
Fee: ₹20 + GST (Basic plan); Free (Plus plan). - Only one active withdrawal request is allowed at a time.
- IMPS requests cannot be edited once initiated.
- The Payout APIs are subject to a separate rate limit. For more information, please check here.
Instant Withdrawal Eligibility
IMPS (Instant) withdrawals are subject to real-time eligibility checks. See Instant Withdrawal Eligibility for the full list of criteria.
Request
curl --location --request POST 'https://api.upstox.com/v2/user/payments/payout' \
--header 'accept: application/json' \
--header 'Authorization: Bearer {your_access_token}' \
--header 'Content-Type: application/json' \
--data '{"mode": "IMPS", "amount": 5000.0}'
Additional samples in various languages are available in the Sample Code section on this page.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| mode | string | Yes | Withdrawal mode. One of NEFT (Standard) or IMPS (Instant). |
| amount | number | Yes | Withdrawal amount in INR. Must satisfy the min/max bounds for the selected mode. |
Responses
- 200
- 400
Response Body
{
"status": "success",
"data": {
"transaction_id": "ABC123XYZ-GC0173-7HIMPSABC",
"status": "received",
"mode": "IMPS",
"amount": 5000.0,
"currency": "INR",
"eta": "2026-04-19 13:30:00",
"created_at": "2026-04-19 13:25:56",
"bank_name": "AXIS BANK",
"message": "Your instant withdrawal request has been received. Funds will be credited within 5 minutes."
}
}
| Name | Type | Description |
|---|---|---|
| status | string | Outcome of the request. |
| data | object | Payout transaction record. |
| data.transaction_id | string | Unique identifier for the payout transaction. |
| data.status | string | Current state of the payout. One of RECEIVED, VALIDATING, APPROVED, TRANSFER_IN_PROGRESS, COMPLETED, REJECTED, REVERSED. |
| data.mode | string | Resolved payout mode. One of NEFT or IMPS. |
| data.amount | number | Withdrawal amount in INR. |
| data.currency | string | Currency code. Always INR. |
| data.eta | string | Estimated completion time (YYYY-MM-DD HH:MM:SS). |
| data.created_at | string | Transaction creation timestamp (YYYY-MM-DD HH:MM:SS). |
| data.bank_name | string | Display name of the destination bank. |
| data.message | string | User-facing status message. |
Error codes
Errors follow the standard API error format.
| Error Code | Description |
|---|---|
| UDAPI1215 | Payout mode is required. |
| UDAPI1216 | Payout mode must be NEFT or IMPS. |
| UDAPI1217 | Payout amount is required. |
| UDAPI1218 | Payout amount must be at least 100. |
| UDAPI100072 | The Funds service is accessible from 5:30 AM to 12:00 AM IST daily. Please try again during these service hours. |
| UDAPI100500 | Your withdrawal amount cannot be greater than your available to withdraw balance. |
| UDAPI100500 | Another withdrawal request is already active. Only one pending payout is allowed at a time. |
| UDAPI100500 | User account is inactive, dormant, or not eligible for the selected mode. |
| UDAPI100500 | Primary bank account not found. |
Sample Code
Payout request
- Python
- Node.js
- Java
- PHP
import requests
url = 'https://api.upstox.com/v2/user/payments/payout'
headers = {
'accept': 'application/json',
'Authorization': 'Bearer {your_access_token}',
'Content-Type': 'application/json',
}
payload = {
'mode': 'IMPS',
'amount': 5000.0,
}
print(requests.post(url, headers=headers, json=payload).json())
const axios = require('axios');
axios.post('https://api.upstox.com/v2/user/payments/payout',
{ mode: 'IMPS', amount: 5000.0 },
{
headers: {
accept: 'application/json',
Authorization: 'Bearer {your_access_token}',
'Content-Type': 'application/json',
},
}
).then(r => console.log(r.data));
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
String body = "{\"mode\": \"IMPS\", \"amount\": 5000.0}";
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.upstox.com/v2/user/payments/payout"))
.header("accept", "application/json")
.header("Authorization", "Bearer {your_access_token}")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
System.out.println(HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString()).body());
}
}
<?php
$url = 'https://api.upstox.com/v2/user/payments/payout';
$payload = json_encode(['mode' => 'IMPS', 'amount' => 5000.0]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'accept: application/json',
'Authorization: Bearer {your_access_token}',
'Content-Type: application/json',
]);
echo curl_exec($ch);
curl_close($ch);
Loading...