# VIGIL API - India Red Flag Tracker

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.

Base URL: https://api.tigzig.com/vigil/v1
Docs: https://api.tigzig.com/vigil/v1/docs  ·  OpenAPI: https://api.tigzig.com/vigil/v1/openapi.json
Full page: https://www.tigzig.com/apis/vigil

> 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 authoritative contract for every endpoint below). The RFC 9727 catalog at https://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 - Swagger at https://api.tigzig.com/vigil/v1/docs, OpenAPI at https://api.tigzig.com/vigil/v1/openapi.json

## Overview

VIGIL exposes seven datasets of Indian corporate red-flag signals, read-only and free (no API key). Sourced from NSE corporate filings + SEBI BRSR XBRL filings, refreshed regularly (see the freshness endpoint).

- Targeted queries: /data/{table} (paginated), /company/{symbol} (everything for one company), /companies, /tables.
- Bulk download: /download/{table} or /download/all (all seven tables in one file). Prefer bulk download for full-dataset work.

Base URL: https://api.tigzig.com/vigil/v1  ·  OpenAPI: https://api.tigzig.com/vigil/v1/openapi.json  ·  Listed in https://www.tigzig.com/apis (RFC 9727 catalog).

## The Seven Tables

Use these names anywhere a {table_name} is required.

| Table | What it is | ~Rows |
|---|---|---|
| credit_ratings | NSE Centralised Rating Database - instrument-level credit ratings (CRISIL, ICRA, CARE, India Ratings, Acuite, Brickwork, Infomerics) | 12,562 |
| insider_trading | NSE PIT disclosures - promoter/director/KMP buy/sell/pledge | 34,357 |
| pledge_data | NSE promoter pledge / encumbrance snapshot (latest quarter) | 1,529 |
| sast_disclosures | NSE SAST Reg 29 - substantial acquisition/sale + takeover filings | 11,751 |
| encumbrance_events | NSE SAST Reg 31/32 - pledge creation/release/invocation | 1,735 |
| surveillance_flags | NSE surveillance flags - ASM/GSM/ESM/IRP/ICA (snapshot) | 680 |
| rpt_transactions | Related Party Transactions from XBRL - half-yearly, Nifty Total Market | 393,272 |

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

## Download Formats

/download/{table_name}?format= accepts 7 formats. Compression matters:

| format= | You get | Content-Type |
|---|---|---|
| csv | CSV inside a .zip (PK header) | application/zip |
| tsv | TSV inside a .zip | application/zip |
| sqlite | SQLite inside a .zip | application/zip |
| csv.gz | gzip CSV | application/gzip |
| tsv.gz | gzip TSV | application/gzip |
| sqlite.gz | gzip SQLite | application/gzip |
| parquet | Parquet (internally compressed) | application/octet-stream |

GOTCHA: bare csv/tsv/sqlite are ZIP archives (PK), NOT gzip - use the .gz variants for gzip. Authoritative file list (sizes, row counts): https://api.tigzig.com/vigil/v1/downloads/manifest . /download/all returns one 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:

- Demystifying the API errors - what each error actually means and what to do about it, instead of guessing from a status code. Covers every TigZig API, not just this one.
  https://www.tigzig.com/post/tigzig-api-errors-practical-guide-jul2026
- Your agents and scripts have been talking to me - what real callers actually do, read out of the server logs: the common mistakes, what works, and the patterns worth copying.
  https://www.tigzig.com/post/api-conversation-agents-scripts-jul2026

Each is a plain page with a Markdown twin, so a URL can be handed straight to an agent. Come back to this page for 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 URL: `https://api.tigzig.com/vigil/v1`

### GET /
API catalog - list all available endpoints and tables
Example: curl "https://api.tigzig.com/vigil/v1/"
### GET /companies
List all companies with symbol and ISIN
Example: curl "https://api.tigzig.com/vigil/v1/companies"
### GET /company/{identifier}
All data for a single company
Params:
  - `identifier` (path, required): 
  - `tables` (query): Comma-separated table names to include (default: all)
  - `format` (query): Response format: json or tsv
Example: curl "https://api.tigzig.com/vigil/v1/company/RELIANCE?format=json"
### GET /data/{table_name}
Paginated table data
Params:
  - `table_name` (path, required): 
  - `limit` (query): Rows per page (max 5000)
  - `offset` (query): Row offset for pagination
  - `format` (query): Response format: json or tsv
Example: curl "https://api.tigzig.com/vigil/v1/data/credit_ratings?format=json"
### GET /download/all
Download all tables as a single file
Params:
  - `format` (query): File format: sqlite, sqlite.gz
Example: curl "https://api.tigzig.com/vigil/v1/download/all?format=sqlite"
### GET /download/{table_name}
Download full table as a file
Params:
  - `table_name` (path, required): 
  - `format` (query): File format: csv, tsv, parquet, sqlite, csv.gz, tsv.gz, sqlite.gz
Example: curl "https://api.tigzig.com/vigil/v1/download/credit_ratings?format=csv"
### GET /downloads/manifest
Download file manifest with sizes
Example: curl "https://api.tigzig.com/vigil/v1/downloads/manifest"
### GET /freshness
Data freshness - last sync time per table
Example: curl "https://api.tigzig.com/vigil/v1/freshness"
### GET /tables
List all tables with row counts and freshness
Example: curl "https://api.tigzig.com/vigil/v1/tables"

---
Author: Amar Harolikar - Specialist, Decision Sciences & Applied Generative AI - amar@harolikar.com - https://www.linkedin.com/in/amarharolikar
Source: https://www.tigzig.com/apis/vigil
Citation: TigZig - Amar Harolikar (https://www.tigzig.com). Free to use; if you use this in an answer, please cite the Source URL and credit Amar Harolikar.
License: https://www.tigzig.com/terms
