API Documentation
v1.0Base URL
Authentication
Every request must include your API key — either as an HTTP header (recommended) or a query parameter.
Method 1: Header (Recommended)
Best for server-side / backend apps.
X-API-KEY: your_api_key_here
Method 2: Query Parameter
Easier for quick browser testing.
?api_key=your_api_key_here
Rate Limits
Every API key has two independent limits enforced at the same time.
Burst protection. Response includes retry_after seconds when exceeded.
Daily quota. Response includes resets_at timestamp when reached.
429 Error Responses
HTTP 429 Too Many Requests
{
"message": "Rate limit exceeded. Maximum 15 requests per minute.",
"retry_after": "42 seconds"
}
HTTP 429 Too Many Requests
{
"message": "Daily limit of 300 requests reached.",
"resets_at": "25 Apr 2026, 12:00 AM IST"
}
Endpoints
Returns all active IPOs (Open, Upcoming, or recently listed). Filter with query parameters.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | Optional |
mainboard or sme
|
| status | string | Optional |
open, upcoming, or closed
|
Sample Response
JSON object with success, count, and a data array of IPO objects.
{
"success": true,
"count": 1,
"data": [
{
"name": "Adisoft Technologies",
"type": "SME",
"sub_type": "NSE SME",
"open_date": "2026-04-23",
"close_date": "2026-04-27",
"allotment_date": "2026-04-28",
"listing_date": "2026-04-30",
"listing_price": null,
"price_band": "163-172",
"issue_price": "172",
"face_value": "10",
"lot_size": "800",
"issue_size": "₹74 Cr",
"sale_type": "Fresh capital only",
"listing_on": "NSE",
"registrar": "Kfin Technologies Ltd.",
"status": "Open",
"subscription": {
"qib": "3.65",
"nii": "1.80",
"retail": "1.13",
"total": "1.99",
"updated_at": "23 Apr 2026, 05:10 PM IST"
},
"gmp": {
"price": "10",
"percentage": "6",
"updated_at": "23 Apr 2026, 04:53 PM IST"
}
}
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| IPO Details | ||
| name | string | Full IPO name |
| type | string | Mainboard or SME |
| sub_type | string | NSE SME, BSE SME, Equity, Trust |
| status | string | Open, Upcoming, or Closed — computed in real time |
| open_date | date | Subscription open date (YYYY-MM-DD) |
| close_date | date | Subscription close date (YYYY-MM-DD) |
| allotment_date | date | null | Expected allotment date |
| listing_date | date | null | Expected or actual listing date |
| listing_price | string | null | Actual listing price (available post-listing) |
| price_band | string | null | Price band e.g. 163-172 |
| issue_price | string | Final issue price (upper band) in ₹ |
| face_value | string | null | Face value per share in ₹ |
| lot_size | string | null | Minimum shares per application |
| issue_size | string | null | Total issue size e.g. ₹74 Cr |
| sale_type | string | null | Fresh capital only, OFS only, Mixed |
| listing_on | string | null | Exchange(s) e.g. BSE, NSE |
| registrar | string | null | Registrar name for allotment |
| Subscription Object | ||
| subscription.qib | string | null | QIB subscription (times subscribed) |
| subscription.nii | string | null | NII / HNI subscription |
| subscription.retail | string | null | Retail subscription |
| subscription.total | string | null | Overall subscription (times) |
| subscription.updated_at | string | null | Last update in IST e.g. 23 Apr 2026, 05:10 PM IST |
| GMP Object | ||
| gmp.price | string | Grey Market Premium in ₹ |
| gmp.percentage | string | number | GMP as % over issue price. 0 when unavailable |
| gmp.updated_at | string | null | Last GMP update in IST e.g. 23 Apr 2026, 04:53 PM IST |
name
string
Full IPO name
type
string
Mainboard or SME
sub_type
string
NSE SME, BSE SME, Equity, Trust
status
string
Open, Upcoming, or Closed — real time
open_date
date
Subscription open date (YYYY-MM-DD)
close_date
date
Subscription close date (YYYY-MM-DD)
allotment_date
date | null
Expected allotment date
listing_date
date | null
Expected or actual listing date
listing_price
string | null
Actual listing price (post-listing)
price_band
string | null
e.g. 163-172
issue_price
string
Final issue price in ₹
face_value
string | null
Face value per share in ₹
lot_size
string | null
Min shares per application
issue_size
string | null
Total issue size e.g. ₹74 Cr
sale_type
string | null
Fresh capital only / OFS only / Mixed
listing_on
string | null
Exchange(s) e.g. BSE, NSE
registrar
string | null
Registrar name
subscription.qib
string | null
QIB subscription (times)
subscription.nii
string | null
NII / HNI subscription (times)
subscription.retail
string | null
Retail subscription (times)
subscription.total
string | null
Overall subscription (times)
subscription.updated_at
string | null
Last update in IST
gmp.price
string
Grey Market Premium in ₹
gmp.percentage
string | number
GMP as % over issue price
gmp.updated_at
string | null
Last GMP update in IST
Code Examples
curl -X GET "https://www.ipoguru.in/api/v1/ipos?type=mainboard&status=open" \
-H "X-API-KEY: your_api_key_here"
import requests
url = "https://www.ipoguru.in/api/v1/ipos"
headers = { "X-API-KEY": "your_api_key_here" }
params = { "type": "mainboard", "status": "open" }
response = requests.get(url, headers=headers, params=params)
data = response.json()
print(data)
$curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => "https://www.ipoguru.in/api/v1/ipos?type=mainboard&status=open", CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["X-API-KEY: your_api_key_here"], ]); $data = json_decode(curl_exec($curl), true); curl_close($curl); print_r($data);
fetch("https://www.ipoguru.in/api/v1/ipos?type=mainboard&status=open", {
headers: { "X-API-KEY": "your_api_key_here" }
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET",
"https://www.ipoguru.in/api/v1/ipos?type=mainboard&status=open", nil)
req.Header.Add("X-API-KEY", "your_api_key_here")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(string(body))
}
Frequently Asked Questions
Is the IPO Guru API completely free?
Yes. The IPO Guru API is free for developers, students, and startups. Each key gets 300 requests per day and 15 requests per minute at no cost. No credit card required.
What data does the IPO Guru API provide?
The API provides real-time Indian IPO data including IPO name, type (Mainboard/SME), open and close dates, allotment date, listing date, listing price, price band, issue price, face value, lot size, issue size, sale type, exchange listing, registrar name, subscription data (QIB, NII, Retail, Total), and live Grey Market Premium (GMP) with percentage and last updated timestamp in IST.
How do I get an API key for IPO GMP data?
Email [email protected] with your name, app or company name, and intended use case. You can also use the contact form on this page. API keys are issued manually and are free.
How often is the GMP and subscription data updated?
GMP values are updated multiple times a day based on market activity. Subscription figures are updated as per exchange releases. Every IPO object includes gmp.updated_at and subscription.updated_at timestamps in IST so you always know how fresh the data is.
What are the API rate limits?
Each API key is limited to 15 requests per minute and 300 requests per day. The daily quota resets automatically at midnight IST. When a limit is hit, the API returns HTTP 429 with a retry_after (per-minute) or resets_at (daily) field.
Can I use the API for commercial projects?
Yes, commercial use is permitted. We ask that you attribute IPO data to IPO Guru in your application where appropriate.