Built and run by one person.

VIGIL API - India Red Flag Tracker

TigZig API & MCP Hub

Open, no-auth HTTP API for India corporate red-flag signals sourced from NSE and SEBI - credit ratings, insider trading, promoter pledges, SAST disclosures, encumbrance events, surveillance flags, and related-party transactions for ~750 listed companies. Built for AI agents first, humans second: every page here has a Copy-as-Markdown button so you can hand it straight to your agent.

7data tables
~750NSE companies
455K+total rows
No authfully open
7 formatsbulk download
AI agents: this API is open (no auth). Start with the OpenAPI spec for this API: https://api.tigzig.com/vigil/v1/openapi.json. The RFC 9727 catalog at api.tigzig.com/.well-known/api-catalog is a site-level directory of all TigZig APIs - go there only if you want a different API, not for more detail on this one.
Quick start
REST API base URL
https://api.tigzig.com/vigil/v1

Overview

VIGIL exposes seven datasets of Indian corporate "red-flag" signals, all read-only and free, no API key. The data is extracted from NSE corporate filings and SEBI BRSR XBRL filings and refreshed on a regular cadence (see the freshness endpoint).

Two ways to use it:

  • Targeted queries - hit /data/{table} (paginated), /company/{symbol} (everything for one company), /companies, or /tables.
  • Bulk download - grab a whole table or all seven tables in one file via /download/{table} and /download/all. For full-dataset work, prefer the bulk download over paginating.

Agents: the machine-readable catalog is at the base URL, the full spec at /openapi.json, and this API is listed in the site API catalog (RFC 9727).

The Seven Tables

Use these names anywhere a {table_name} is required.

TableWhat it is~Rows
credit_ratingsNSE Centralised Rating Database - instrument-level credit ratings from all agencies (CRISIL, ICRA, CARE, India Ratings, Acuite, Brickwork, Infomerics).12,562
insider_tradingNSE PIT disclosures - promoter, director and KMP buy/sell/pledge transactions.34,357
pledge_dataNSE promoter pledge / encumbrance snapshot - current pledge levels (latest quarter).1,529
sast_disclosuresNSE SAST Reg 29 - substantial acquisition / sale of shares and takeover filings.11,751
encumbrance_eventsNSE SAST Reg 31/32 - promoter share pledge creation, release and invocation events.1,735
surveillance_flagsNSE surveillance flags - ASM, GSM, ESM, IRP, ICA and other regulatory flags (snapshot).680
rpt_transactionsRelated Party Transactions from XBRL filings - half-yearly RPT data for Nifty Total Market companies.393,272

Row counts are approximate and grow over time - call /tables or /freshness for current numbers.

Download Formats

The /download/{table_name} endpoint accepts a format query parameter. Seven formats, and the compression matters - read this before you parse the bytes:

format=You getContent-Type
csvCSV inside a .zip archive (PK header)application/zip
tsvTSV inside a .zip archiveapplication/zip
sqliteSQLite DB inside a .zip archiveapplication/zip
csv.gzgzip-compressed CSVapplication/gzip
tsv.gzgzip-compressed TSVapplication/gzip
sqlite.gzgzip-compressed SQLiteapplication/gzip
parquetParquet (internally compressed, no outer wrapper)application/octet-stream

Gotcha: bare csv / tsv / sqlite are ZIP archives (PK), NOT gzip - use the .gz variants if you want gzip. The authoritative per-file list (sizes, row counts) is at /downloads/manifest. /download/all returns a single combined SQLite of all seven tables.

Guides

This page is the reference - what the endpoints are and how to call them. The guides below are the long-form versions, with worked examples and the edges you only meet in real use:

Each is a plain page with a Markdown twin, so you can hand a URL straight to an agent. Come back to this page when you want parameter-level detail.

Rate limits

Published so a well-behaved client can plan around them. These are per-IP limits:

  • Per IP: 30 requests / minute.
  • Downloads (/vigil/v1/download/*): 10 requests / minute.

You get a 429. Back off and retry after the window.

Avoiding 429s: Pulling a whole table? Use the bulk download rather than paging the query endpoints.

The current numbers are also published as machine-readable JSON at https://api.tigzig.com/vigil/v1/, derived from live config. Read those at runtime rather than hard-coding the figures above - limits change, and these channels change with them.

Other 4xx responses are a JSON envelope: { error, status, path, message, help: { catalog, docs } } where error is a snake_case slug (not_found, bad_request, unprocessable_entity, ...) and help points at the machine catalog (https://api.tigzig.com/vigil/v1/) plus this docs page, so a client that hits an error can self-recover.

API Endpoints (REST / HTTP)

Base URLhttps://api.tigzig.com/vigil/v1Prepend this to every path listed below (e.g. /series becomes https://api.tigzig.com/vigil/v1/series). The curl example on each card shows the full URL.

Generated from the live OpenAPI spec - always in sync with the API. Try them interactively in Swagger.

GET /

API catalog - list all available endpoints and tables

Returns a catalog of all available endpoints, tables, and their descriptions.

curl "https://api.tigzig.com/vigil/v1/"
GET /companies

List all companies with symbol and ISIN

Returns a unique list of all companies across all tables.

curl "https://api.tigzig.com/vigil/v1/companies"
GET /company/{identifier}

All data for a single company

Fetch all available data for a single company across all tables.

ParamInTypeDescription
identifierpathstringrequired
tablesquerystringoptionalComma-separated table names to include (default: all)
formatquerystringoptionalResponse format: json or tsv
curl "https://api.tigzig.com/vigil/v1/company/RELIANCE?format=json"
GET /data/{table_name}

Paginated table data

Paginated data from a single table.

ParamInTypeDescription
table_namepathstringrequired
limitqueryintegeroptionalRows per page (max 5000)
offsetqueryintegeroptionalRow offset for pagination
formatquerystringoptionalResponse format: json or tsv
curl "https://api.tigzig.com/vigil/v1/data/credit_ratings?format=json"
GET /download/all

Download all tables as a single file

Download all tables in a single SQLite database file.

ParamInTypeDescription
formatquerystringoptionalFile format: sqlite, sqlite.gz
curl "https://api.tigzig.com/vigil/v1/download/all?format=sqlite"
GET /download/{table_name}

Download full table as a file

Download an entire table as a pre-generated static file.

ParamInTypeDescription
table_namepathstringrequired
formatquerystringoptionalFile format: csv, tsv, parquet, sqlite, csv.gz, tsv.gz, sqlite.gz
curl "https://api.tigzig.com/vigil/v1/download/credit_ratings?format=csv"
GET /downloads/manifest

Download file manifest with sizes

Returns the manifest of pre-generated download files with file sizes.

curl "https://api.tigzig.com/vigil/v1/downloads/manifest"
GET /freshness

Data freshness - last sync time per table

Returns the last sync time and record count for each table.

curl "https://api.tigzig.com/vigil/v1/freshness"
GET /tables

List all tables with row counts and freshness

Returns all available table names with row counts and data freshness.

curl "https://api.tigzig.com/vigil/v1/tables"