GET/ipos/orders
Get IPO Orders
API to retrieve IPO applications ordered newest first. Each record contains the submitted bids, the status of the UPI mandate backing the application, the exchange submission timestamps, and the allotment outcome once available. To read a single application by its ID, use the Get IPO Order Details
Application status
The status field tracks the lifecycle stage of the application.
| Status | Description |
|---|---|
| awaiting_mandate | The application reached the exchange and is waiting for the applicant to approve the UPI mandate. |
| ipo_allotted | Allotment completed and shares were allotted. Check units_allotted for the quantity. |
| ipo_not_allotted | Allotment completed and no shares were allotted. The blocked amount is released. |
| application_deleted | The application was cancelled, either by the user through Cancel IPO Order or by the exchange. |
Order status
The order_status field records the outcome of the application.
| Order status | Description |
|---|---|
| scheduled | The application is waiting for the applicant to approve the UPI mandate or it is not yet confirmed with the exchange. |
| success | The application was accepted by the exchange. Allotment has not been processed yet. |
| allotted | Shares were allotted against this application. |
| not_allotted | No shares were allotted against this application. |
Payment status
The payment_status field reflects the state of the UPI mandate that blocks the application amount.
| Payment status | Description |
|---|---|
| pending | The mandate request has been raised and is awaiting approval in the applicant's UPI app. |
| mandate_accepted | The mandate was approved and the application amount is blocked in the bank account. |
The status, order_status, and payment_status fields are returned as free-form strings rather than fixed enums. The values above are the ones currently returned; handle unrecognised values gracefully.
Query Parameters
| Name | Required | Type | Description |
|---|---|---|---|
| page_number | Optional | integer | Page number for pagination, starting at 1. Default: 1. |
| records | Optional | integer | Number of application records to return per page. Default: 10. Maximum: 30. |
Request
curl --location 'https://api.upstox.com/v2/ipos/orders?page_number=1&records=10' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {your_access_token}'
For additional samples in various languages, please refer to the Sample code section on this page.
Responses
- 200
Response Body
{
"status": "success",
"data": [
{
"id": "mandb-engineering-limited-ipo",
"symbol": "MANDB",
"exchange": "nse",
"order_id": "UPCHK500000020",
"status": "awaiting_mandate",
"order_status": "success",
"payment_status": "pending",
"category": "IND",
"issue_type": "regular",
"reason": null,
"upi": "91xxxxxxxx@ybl",
"upi_amount_blocked": "0",
"nse_submitted_date": "2026-08-10T10:14:20",
"bse_submitted_date": null,
"mandate_approved_date": null,
"rejection_date": null,
"mandate_rejection_date": null,
"cancel_requested_date": null,
"cancel_accepted_date": null,
"units_allotted": 0,
"bids": [
{
"quantity": 20,
"price": 385,
"amount": 7700,
"message": null
}
],
"created_at": "2026-08-10T10:14:18",
"last_updated_at": "2026-08-10T10:14:20"
},
{
"id": "deepak-builders-engineers-india-ipo",
"symbol": "DBEIL",
"exchange": "nse",
"order_id": "UPROYAL00000003",
"status": "ipo_allotted",
"order_status": "allotted",
"payment_status": "mandate_accepted",
"category": "IND",
"issue_type": "regular",
"reason": "alloted",
"upi": "91xxxxxxxx@ybl",
"upi_amount_blocked": "14819",
"nse_submitted_date": "2026-07-21T08:14:20",
"bse_submitted_date": "2026-07-21T08:14:20",
"mandate_approved_date": "2026-07-21T09:02:11",
"rejection_date": null,
"mandate_rejection_date": null,
"cancel_requested_date": null,
"cancel_accepted_date": null,
"units_allotted": 73,
"bids": [
{
"quantity": 30,
"price": 150.3,
"amount": 4509,
"message": "Bid accepted"
}
],
"created_at": "2026-07-21T08:14:18",
"last_updated_at": "2026-07-30T17:36:36"
}
],
"meta_data": {
"page": {
"page_number": 1,
"total_pages": 1,
"records": 2,
"total_records": 2
}
}
}
| Name | Type | Description |
|---|---|---|
| status | string | Outcome of the request. Possible values: success, error, partial_success. |
| data | array | IPO applications belonging to the authenticated user. |
| data[].id | string | Identifier of the IPO the application was placed against. Pass it to Get IPO Details. |
| data[].symbol | string | Stock exchange ticker symbol of the issuer. |
| data[].exchange | string | Exchange the application was submitted to. |
| data[].order_id | string | Application ID. Pass it as the order_id path parameter to Get IPO Order Details and Cancel IPO Order. |
| data[].status | string | Lifecycle stage of the application. See Application status. |
| data[].order_status | string | Outcome of the application. See Order status. |
| data[].payment_status | string | State of the UPI mandate backing the application. See Payment status. |
| data[].category | string | Investor category the application was placed under. IND (individual) and HNI can be applied for; EMP appears on employee-quota applications. |
| data[].issue_type | string | Issue type of the IPO. Possible values: regular (mainboard), sme. |
| data[].reason | string | Free-text reason from the exchange or registrar explaining the current status. null when none was returned. |
| data[].upi | string | UPI ID the mandate was raised against. |
| data[].upi_amount_blocked | string | Amount blocked in the applicant's bank account for this application (in INR), returned as a string. "0" until the mandate is approved. |
| data[].nse_submitted_date | string | Timestamp of submission to NSE in YYYY-MM-DDTHH:MM:SS format. null if not submitted there. |
| data[].bse_submitted_date | string | Timestamp of submission to BSE in YYYY-MM-DDTHH:MM:SS format. null if not submitted there. |
| data[].mandate_approved_date | string | Timestamp at which the UPI mandate was approved. null until approved. |
| data[].rejection_date | string | Timestamp at which the application was rejected. null unless rejected. |
| data[].mandate_rejection_date | string | Timestamp at which the UPI mandate was rejected. null unless rejected. |
| data[].cancel_requested_date | string | Timestamp at which cancellation was requested. null unless a cancellation was raised. |
| data[].cancel_accepted_date | string | Timestamp at which the cancellation completed. null unless the cancellation was accepted. |
| data[].units_allotted | integer | Number of shares allotted. 0 until allotment completes, and on applications that were not allotted. |
| data[].bids | array | Bids submitted with this application. |
| data[].bids[].quantity | integer | Number of shares bid for. |
| data[].bids[].price | number | Bid price per share (in INR). |
| data[].bids[].amount | number | Value of the bid (in INR), calculated as quantity × price. |
| data[].bids[].message | string | Message returned by the exchange for this bid. null when none was returned. |
| data[].created_at | string | Timestamp at which the application was created, in YYYY-MM-DDTHH:MM:SS format. |
| data[].last_updated_at | string | Timestamp at which the application was last updated, in YYYY-MM-DDTHH:MM:SS format. |
| meta_data.page.page_number | integer | Current page number returned. |
| meta_data.page.total_pages | integer | Total number of pages available. |
| meta_data.page.records | integer | Number of records in the current page. |
| meta_data.page.total_records | integer | Total number of applications on the account. |
Sample Code
- Python
- Node.js
- Java
- PHP
import requests
url = 'https://api.upstox.com/v2/ipos/orders'
params = {
'page_number': 1,
'records': 10
}
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {your_access_token}'
}
response = requests.get(url, params=params, headers=headers)
print(response.json())
const axios = require('axios');
axios.get('https://api.upstox.com/v2/ipos/orders', {
params: {
page_number: 1,
records: 10
},
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer {your_access_token}'
}
}).then(response => console.log(response.data))
.catch(error => console.error('Error:', error));
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class GetIpoOrders {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://api.upstox.com/v2/ipos/orders?page_number=1&records=10"))
.header("Accept", "application/json")
.header("Authorization", "Bearer {your_access_token}")
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = 'https://api.upstox.com/v2/ipos/orders?' . http_build_query([
'page_number' => 1,
'records' => 10
]);
$headers = [
'Accept: application/json',
'Authorization: Bearer {your_access_token}'
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_errno($ch) ? print('Error: ' . curl_error($ch)) : print($response);
curl_close($ch);
?>