One call, with its source
JSON or CSV, with a source object on every row.
The open API is not live yet.
Until it opens, every response on this page is a recording built from our database (build of 8 Oct 2026).
The requests are the ones you will send.
$ curl "https://api.brihas.in/v1/companies/RELIANCE/shareholding?quarter=2026-06"
{ "data": [{ "isin": "INE002A01018", "symbol": "RELIANCE", "quarter": "2026-06-30", "promoter": , "fpi": , "mf": , "insurance": , "retail": , "total_shares": , "shareholders": , "source": { "doc": "Shareholding pattern (XBRL), NSE", "url": "https://nsearchives.nseindia.com/corporate/xbrl/SHP_1694620_16072026072434_WEB.xml", "filed": "2026-07-16", "as_of": "2026-06-30", "check": "pass" } }], "meta": { "dataset": "own", "version": "2026-10-08", "note": "Facts from public filings, shown as filed. Not investment advice." }}
replayThe /v1 response for this request, built from our database (build of 8 Oct 2026). Figures: Reliance Industries’ shareholding pattern, filed with NSE on 16 Jul 2026. Query time for this row on our build machine: 0.35 ms, median of 40 runs on 23 Oct 2026. Not network time.
- Filed as
- Working
- In filing
- Filed
- 16 Jul 2026, NSE, XBRL
Our database row matches the filing
Open the filingMake your first call
Each asks for Reliance Industries’ shareholding on 30 Jun 2026.
curl
Shareholding by category for one quarter. See the response
Request
curl "https://api.brihas.in/v1/companies/RELIANCE/shareholding?quarter=2026-06"Python
With the requests package (pip install requests). No SDK is needed.
shareholding.py
import requests
r = requests.get(
"https://api.brihas.in/v1/companies/RELIANCE/shareholding",
params={"quarter": "2026-06"},
timeout=10,
)
r.raise_for_status()
row = r.json()["data"][0]
print(row["mf"], row["source"]["filed"], row["source"]["url"])Output · recorded
10.1062 2026-07-16 https://nsearchives.nseindia.com/corporate/xbrl/SHP_1694620_16072026072434_WEB.xmlJavaScript
With fetch, in Node 18 or later, or in a browser.
shareholding.mjs
const url = "https://api.brihas.in/v1/companies/RELIANCE/shareholding?quarter=2026-06";
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const { data: [row] } = await res.json();
console.log(row.fpi, row.source.filed, row.source.url);Output · recorded
17.0648 2026-07-16 https://nsearchives.nseindia.com/corporate/xbrl/SHP_1694620_16072026072434_WEB.xmlGoogle Sheets
Paste this into cell A1.
Cell A1
=IMPORTDATA("https://api.brihas.in/v1/companies/RELIANCE/shareholding?quarter=2026-06&format=csv")In the sheet · recorded
isin,symbol,quarter,promoter,fpi,mf,insurance,retail,total_shares,shareholders,source_url,filed,as_of,check
INE002A01018,RELIANCE,2026-06-30,50.4808,17.0648,10.1062,9.2029,7.1634,13303071854,4651863,https://nsearchives.nseindia.com/corporate/xbrl/SHP_1694620_16072026072434_WEB.xml,2026-07-16,2026-06-30,passExcel
In Excel for Windows, use Power Query:
- Data → Get Data → From Other Sources → From Web
- Paste the URL, then Load
- Refresh fetches it again
On a Mac, use Sheets or download the CSV.
Advanced Editor (M)
let
Source = Csv.Document(
Web.Contents("https://api.brihas.in/v1/companies/RELIANCE/shareholding?quarter=2026-06&format=csv"),
[Delimiter = ",", Encoding = 65001, QuoteStyle = QuoteStyle.Csv]
),
Headers = Table.PromoteHeaders(Source, [PromoteAllScalars = true])
in
HeadersMCP
One remote server over HTTP, with read-only tools.
Every result carries the API’s source object; the server tells the assistant to cite it.
Server URL
https://api.brihas.in/mcpClaude Code
Terminalclaude mcp add --transport http brihas https://api.brihas.in/mcpCursor
~/.cursor/mcp.json{
"mcpServers": {
"brihas": { "url": "https://api.brihas.in/mcp" }
}
}VS Code
.vscode/mcp.json{
"servers": {
"brihas": { "type": "http", "url": "https://api.brihas.in/mcp" }
}
}Claude and ChatGPT apps
Add a custom connector and paste the server URL. The open tier will need no key.
Tools
search_companiesget_shareholdingget_named_holdersget_fund_holdingsget_ipo_anchorsget_lockin_calendarget_source
What each tool does, and the server’s instructions
- search_companies
- Find a company by name, ISIN or symbol.
- get_shareholding
- Holdings by category for a quarter, adding up to the filed total.
- get_named_holders
- Promoters by name, and public holders at 1% or more.
- get_fund_holdings
- US funds that reported the company on Form N-PORT (beta).
- get_ipo_anchors
- An IPO’s anchor book, line by line.
- get_lockin_calendar
- Anchor lock-in end dates, marked as estimates.
- get_source
- Where any value came from: URL, filed date, working and check.
Server instructions, sent to every client
Cite source.url for every figure. Report what was filed, by whom, and when. Do not rank, score, recommend or predict. Not investment advice.Where each value came from
API, MCP and CSV give the same values and source.
Response · recorded
{
"data": [
{
"isin": "INE002A01018",
"symbol": "RELIANCE",
"quarter": "2026-06-30",
"promoter": 50.4808,
"fpi": 17.0648,
"mf": 10.1062,
"insurance": 9.2029,
"retail": 7.1634,
"total_shares": 13303071854,
"shareholders": 4651863,
"source": {
"doc": "Shareholding pattern (XBRL), NSE",
"url": "https://nsearchives.nseindia.com/corporate/xbrl/SHP_1694620_16072026072434_WEB.xml",
"filed": "2026-07-16",
"as_of": "2026-06-30",
"check": "pass"
}
}
],
"meta": {
"dataset": "own",
"version": "2026-10-08",
"note": "Facts from public filings, shown as filed. Not investment advice."
}
}source.urlThe filing itselfsource.filedWhen it was filedsource.checkChecked against its total
Every field, and the named holders
- source.doc
- The document type and where it was filed.
- source.url
- A link to the filing itself, on the regulator’s or exchange’s own site.
- source.filed
- The date the filing was made.
- source.as_of
- The date the figures describe, such as a quarter end.
- source.check
passwhen the filing’s own blocks add up to its filed total;flagwhen they do not, or when we had to recover a block. See Method.- meta.version
- The dated build the answer came from.
Percentages are computed from the filed share counts and kept to four decimals.
Named holders, the same filing (first three of 12 rows at 1% or more):
GET /v1/companies/RELIANCE/holders?quarter=2026-06&min_pct=1 · recorded
{
"data": [
{
"name": "Srichakra Commercials LLP",
"category": "promoter",
"filed_sub_category": "Others Indian shareholders · Bodies Corporate",
"shares": 1479199658,
"pct": 11.1192
},
{
"name": "Devarshi Commercials LLP",
"category": "promoter",
"filed_sub_category": "Others Indian shareholders · Bodies Corporate",
"shares": 1091138920,
"pct": 8.2022
},
{
"name": "Karuna Commercials LLP",
"category": "promoter",
"filed_sub_category": "Others Indian shareholders · Bodies Corporate",
"shares": 1091138920,
"pct": 8.2022
}
],
"more": "… 9 more rows at 1% or more",
"source": {
"doc": "Shareholding pattern (XBRL), NSE",
"url": "https://nsearchives.nseindia.com/corporate/xbrl/SHP_1694620_16072026072434_WEB.xml",
"filed": "2026-07-16",
"as_of": "2026-06-30"
}
}What you can ask for
The first set, planned for the open API.
https://api.brihas.in/v1
The open tier will need no key.
GET/companies?q=ISIN, symbol, name, statusGET/companies/{id}/shareholdingHoldings by category, adding up to the filed totalGET/companies/{id}/holdersNamed holders as filedGET/companies/{id}/funds?kind=foreignUS funds that reported it on Form N-PORT (beta)GET/ipos, /ipos/{id}/anchorsIPOs and their anchor booksGET/ipos/lock-insAnchor lock-in end dates, marked as estimatesGET/sources/{id}Where a value came from: URL, dates, working, checkGET/datasetsCoverage, rows, dates and build per datasetGET/statusLast build and the latest filing read per dataset
IDs, limits, versions and errors
Parameters and limits
- {id}
- An ISIN, an NSE symbol or a BSE code. The response always returns the ISIN.
- format
- JSON by default. Add
format=csvfor CSV. - limits
- Planned for the open tier: 100 calls a day per IP address, 10 a minute.
Versions
Each build is dated and kept.
Add version=YYYY-MM-DD to get the answer a build gave on that day, so a figure you cite can be fetched again.
Errors
- 404
- No such company or quarter.
- 422
- A parameter is not valid. The body says which.
- 429
- Daily or per-minute limit reached. The
Retry-Afterheader says when to try again. - EMPTY
- A valid answer with no rows, with a note on what is missing and why.