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"
replay 200 OKbuild of 8 Oct 2026 click a number for its filing
{  "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.

Make 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.xml

JavaScript

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.xml

Google 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,pass

Excel

In Excel for Windows, use Power Query:

  1. Data → Get Data → From Other Sources → From Web
  2. Paste the URL, then Load
  3. 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
    Headers

MCP

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/mcp

Claude Code

Terminal
claude mcp add --transport http brihas https://api.brihas.in/mcp

Cursor

~/.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_companies
  • get_shareholding
  • get_named_holders
  • get_fund_holdings
  • get_ipo_anchors
  • get_lockin_calendar
  • get_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."
  }
}
  1. source.urlThe filing itself
  2. source.filedWhen it was filed
  3. source.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
pass when the filing’s own blocks add up to its filed total; flag when 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.

Base URL https://api.brihas.in/v1 The open tier will need no key.
  • GET/companies?q=ISIN, symbol, name, status
  • GET/companies/{id}/shareholdingHoldings by category, adding up to the filed total
  • GET/companies/{id}/holdersNamed holders as filed
  • GET/companies/{id}/funds?kind=foreignUS funds that reported it on Form N-PORT (beta)
  • GET/ipos, /ipos/{id}/anchorsIPOs and their anchor books
  • GET/ipos/lock-insAnchor lock-in end dates, marked as estimates
  • GET/sources/{id}Where a value came from: URL, dates, working, check
  • GET/datasetsCoverage, rows, dates and build per dataset
  • GET/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=csv for 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-After header says when to try again.
EMPTY
A valid answer with no rows, with a note on what is missing and why.