{"openapi":"3.1.0","info":{"title":"TigZig Public API","description":"Open API gateway for TigZig apps. No authentication required.\n\n## Vigil - India Red Flag Tracker\n\nCredit ratings, insider trading, pledge data, SAST, encumbrance, surveillance, and related party transactions for ~750 Indian listed companies. Dedicated docs: [/vigil/v1/docs](/vigil/v1/docs)\n\n## MF NAV - Open Mutual Fund Data\n\nDaily NAV history for 38,000+ Indian mutual fund schemes from AMFI India. April 2006 onward, including matured schemes. Rolling returns for 100+ tracked funds. Dedicated docs: [/mf/v1/docs](/mf/v1/docs)\n\n## Tigzig Unified Data Surface (recommended)\n\nCategory-first access to macro, credit, valuation, India, global, markets, and FX indicators (FRED, OECD, RBI, MoSPI, ECB, BoE, NY Fed, NCUA, FDIC, Shiller, NSE) across 8 categories. Designed for AI agents and HTTP consumers. MCP endpoint: `/mcp` (Streamable HTTP). REST base: `/v1/`. Dedicated docs: [/v1/docs](/v1/docs)\n\nProduct-scoped paths remain for backward compatibility: Tremor V1 at `/tremor/v1/` (frozen shape, data still refreshed).\n\n## Rate Limits\n\n**Per-IP limits (per minute):**\n- Unified surface (`/v1/*`): 60 req/min\n- Tremor V1 (`/tremor/v1/*`): 30 indicators, 20 series\n- Vigil (`/vigil/v1/*`): 30 req/min\n- MF NAV (`/mf/v1/*`): 300 req/min\n- Downloads (`/*/download/*`): whole-file downloads 60 a minute and 500 a day; range reads 3,000 a minute and 25,000 a day\n\nWhen you exceed a limit, the API returns HTTP 429 with `Retry-After: 60` and a JSON body that includes the limit hit, recommended retry delay, and a path-aware suggestion (typically: use the bulk download endpoint instead of paginating). Honor `Retry-After` to back off cleanly.\n\nFor full programmatic limits + tool surface see `GET /v1/`.\n\n## Usage\n\nAPI endpoints return JSON. Download endpoints support CSV, TSV, Parquet, SQLite, and DuckDB file formats. For large data pulls, prefer `/v1/download/all` (single file with every table) over paginating `/v1/series`.\n\nAuthor: Amar Harolikar - https://www.linkedin.com/in/amarharolikar\n\n## Whole-dataset downloads\n\nEvery downloadable file, for every product, with sizes and formats: https://api.tigzig.com/downloads. Parquet files support HTTP range requests, so DuckDB, pyarrow, polars or a browser can query them in place and read only the parts a query needs. Example: `SELECT count(*) FROM read_parquet('https://api.tigzig.com/mf/v1/download/amfi_nav_master.parquet');`","contact":{"name":"Amar Harolikar","url":"https://www.tigzig.com/","email":"amar@harolikar.com"},"license":{"name":"CC0 1.0 - public domain dedication. Free for any use, no attribution required (appreciated). Underlying data: public records as published by source.","url":"https://creativecommons.org/publicdomain/zero/1.0/"},"version":"3.1.0"},"servers":[{"url":"https://api.tigzig.com","description":"Production"}],"paths":{"/vigil/v1/terms":{"get":{"tags":["Vigil - India Red Flag Tracker"],"summary":"Licence, data source and warranty, as plain text","description":"The same three statements the whole API carries, as plain text you can save\nor diff, rather than JSON you have to unwrap.\n\n**Licence.** To the extent this service holds any rights in the compilation, meaning\nthe assembly, the schema and the derived fields, they are released under CC0 1.0. No\nattribution required, though it is always appreciated.\n\n**Source.** The underlying filings are published by their original\nsources as public records, and this service reformats and republishes them. It is not\nan authoritative source and is not affiliated with or endorsed by any of them. The licence above covers this\nservice's compilation of it, never the underlying records themselves. No rights in\nthose are claimed here and none are granted, so check the original publisher's own terms before\nrelying on it.\n\n**No warranty.** Provided as is. No guarantee of accuracy, completeness or\navailability, and no support commitment.\n\nThe same three statements also travel with the bulk downloads: in the manifest, and\nin the footer metadata of the parquet files, so they survive being copied onward.\n\nReturns `text/plain`, cached for a day.","operationId":"vigil_terms","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}}},"/vigil/v1/":{"get":{"tags":["Vigil - India Red Flag Tracker"],"summary":"API catalog - list all available endpoints and tables","description":"Machine-readable catalog of every endpoint and table. Start here.\n\nReturns each endpoint with its purpose, each table with its columns and row\ncount, and pointers to the OpenAPI spec and the human documentation. An agent\ncan read this one response and know the whole surface without being told.\n\n## Where to go next\n\n- `/vigil/v1/tables` - row counts, columns and freshness per table\n- `/vigil/v1/company/{identifier}` - everything held on one company\n- `/vigil/v1/data/{table_name}` - page through a single table\n- `/vigil/v1/download/{table_name}` - a whole table as one file\n- `/vigil/v1/openapi.json` - the full machine spec\n- `/vigil/v1/redoc` - the same spec as a readable page\n\n## What this API covers\n\nCorporate red-flag signals for Indian listed companies, sourced from NSE and\nSEBI filings: credit rating actions, insider trades, promoter pledging and\nencumbrance, takeover filings, exchange surveillance stages, and related party\ntransactions. No authentication, no key, free to use.\n\nRate limit: **30 requests per minute per IP**.","operationId":"catalog_vigil_v1__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}}},"/vigil/v1/tables":{"get":{"tags":["Vigil - India Red Flag Tracker"],"summary":"List all tables with row counts and freshness","description":"Row counts, column lists and last-sync time for all seven tables.\n\nStart here if you are exploring. Every table name returned is a valid\n`table_name` for `/data/{table_name}` and `/download/{table_name}`.\n\n## What the seven tables hold\n\n- `credit_ratings` - rating actions from every SEBI-registered agency, with the\n  agency, instrument, rating, outlook and a derived `red_flag_reason`\n- `insider_trading` - SEBI PIT disclosures: who traded, how much, at what value\n- `pledge_data` - promoter share pledging, as a **current snapshot** per company\n- `sast_disclosures` - substantial acquisition and takeover filings\n- `encumbrance_events` - promoter encumbrance creation and release events\n- `surveillance_flags` - NSE ASM, GSM and ESM surveillance stages, as a **daily\n  snapshot**\n- `rpt_transactions` - related party transactions from half-yearly filings\n\n## Snapshot tables behave differently, and it matters\n\n`pledge_data` and `surveillance_flags` are **snapshots, not history**. Every row\ncarries the same `sync_date`, and each refresh replaces the whole table. Asking\neither of them \"what changed last month\" returns nothing useful.\n\nThe other five are **append-only history** and are safe to filter by date.","operationId":"tables_list_vigil_v1_tables_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}}},"/vigil/v1/companies":{"get":{"tags":["Vigil - India Red Flag Tracker"],"summary":"List all companies with symbol and ISIN","description":"Every distinct company across all seven tables, with NSE symbol and ISIN.\n\nUse this to resolve a name you have into an identifier `/company/{identifier}`\naccepts, or to enumerate the universe before a batch job.\n\n## Coverage note\n\nThe list is the union of companies appearing in **any** table, so it is wider\nthan the currently listed universe. It includes companies that have since been\ndelisted, suspended, or merged, because their historical filings are still in\nthe data. A company appearing here is not a statement that it is currently\nlisted or trading.","operationId":"companies_list_vigil_v1_companies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}}},"/vigil/v1/company/{identifier}":{"get":{"tags":["Vigil - India Red Flag Tracker"],"summary":"All data for a single company","description":"Every record held for one company, across all seven tables, in a single call.\n\nThis is the endpoint most callers want. One request returns the company's credit\nrating actions, insider trades, pledge position, takeover filings, encumbrance\nevents, surveillance flags and related party transactions together.\n\n## The identifier is forgiving\n\nPreferred is the **NSE symbol**, which is unambiguous:\n\n    /vigil/v1/company/RELIANCE\n\nAlso accepted:\n\n- **ISIN** - `INE002A01018`\n- **Company name** - `Reliance Industries Limited`\n\nName and symbol matching ignores case, punctuation and spacing, and treats `Ltd`\nand `Limited` as the same word. All four of these resolve to the same company:\n\n    JBCHEPHARM\n    jbchepharm\n    JB Chemicals & Pharmaceuticals Limited\n    J.B. Chemicals & Pharmaceuticals Ltd.\n\nDeliberately **not** merged: `X Private Limited` stays distinct from `X Limited`,\nbecause an unlisted subsidiary and its listed parent are different companies.\n\n### Prefer the symbol, because ISIN reaches only one table\n\nOnly `credit_ratings` carries an ISIN column. The other six tables are keyed on\nsymbol and company name, so an ISIN lookup returns credit ratings and **nothing\nelse**, with a `200` and no warning. For `RELIANCE` that is 55 records against\n5,727 by symbol.\n\nUse the ISIN to find the company, then query by its symbol.\n\n## Narrowing the response\n\nA full company payload can be large, and it is usually one table making it large.\nAn unfiltered `RELIANCE` is about **5.9 MB**, of which `rpt_transactions` is 5,662\nof the 5,727 records. Request only the tables you need:\n\n    /vigil/v1/company/RELIANCE?tables=credit_ratings,insider_trading\n\nThat is 63 records and about 59 KB. Read `summary` first if you want to see what\nexists before pulling it - an unfiltered call returns the counts and the rows\ntogether, so there is no cheap way to look before you fetch.\n\n## Response shape\n\n- `identifier` - the value you sent, echoed back\n- `summary` - record count per table, so you can see what exists before reading it\n- `total_records` - sum across all tables\n- `sections` - the actual rows, keyed by table name\n\n`total_records: 0` means the identifier resolved to nothing. It is not an error,\nso no 404 is raised. Check `/companies` if you expected a match.\n\n## Parameters\n\n- `format` - `json` (default) or `tsv`. Any other value is rejected with `400`\n- Rate limit: **30 requests per minute per IP**","operationId":"company_lookup_vigil_v1_company__identifier__get","parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string","description":"NSE symbol (preferred), ISIN, or company name.","title":"Identifier"},"description":"NSE symbol (preferred), ISIN, or company name.","examples":{"symbol":{"summary":"NSE symbol, the preferred form","value":"RELIANCE"},"company_name":{"summary":"Full company name, punctuation and case ignored","value":"J.B. Chemicals & Pharmaceuticals Ltd."}}},{"name":"tables","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated table names to include (default: all).","title":"Tables"},"description":"Comma-separated table names to include (default: all).","examples":{"narrowed":{"summary":"Two tables instead of all seven, to keep the response small","value":"credit_ratings,insider_trading"}}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or tsv","enum":["json","tsv"],"default":"json","title":"Format"},"description":"Response format: json or tsv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}}},"/vigil/v1/data/{table_name}":{"get":{"tags":["Vigil - India Red Flag Tracker"],"summary":"Paginated table data","description":"Paginated rows from one table, for browsing or for pulling a slice.\n\nUse this to page through a table. To take a **whole** table, use\n`/download/{table_name}` instead - it serves a pre-generated file and is far\ncheaper for both sides than paging through hundreds of thousands of rows.\n\n## Valid table names\n\n`credit_ratings`, `insider_trading`, `pledge_data`, `sast_disclosures`,\n`encumbrance_events`, `surveillance_flags`, `rpt_transactions`\n\nAn unknown name returns `400` with the full list, so you never have to guess.\n\n## Pagination\n\n- `limit` - rows per page. Default **1000**, maximum **5000**\n- `offset` - row offset, default `0`\n- `total`, `has_more` and `next_offset` come back in every response, so a client\n  can loop on `has_more` without tracking its own counter\n\n## Parameters\n\n- `format` - `json` (default) or `tsv`. Any other value is rejected with `400`\n- Rate limit: **30 requests per minute per IP**\n\n## One caveat on long sweeps\n\nPaging is not a snapshot. The syncs run four times a day, and a long sweep can\ncross one, so a row may shift page between requests. If you need a consistent\npoint-in-time view, take the download file, which is generated atomically.","operationId":"table_data_vigil_v1_data__table_name__get","parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","description":"One of the seven table names from GET /vigil/v1/tables.","title":"Table Name"},"description":"One of the seven table names from GET /vigil/v1/tables.","examples":{"credit_ratings":{"summary":"Credit rating actions, with the derived red flag reason","value":"credit_ratings"},"surveillance_flags":{"summary":"Current NSE surveillance stages (a daily snapshot)","value":"surveillance_flags"}}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Rows per page (default 1000, max 5000)","default":1000,"title":"Limit"},"description":"Rows per page (default 1000, max 5000)","examples":{"first_page":{"summary":"A small first page - the response carries has_more and next_offset","value":100}}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Row offset for pagination","default":0,"title":"Offset"},"description":"Row offset for pagination"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or tsv","enum":["json","tsv"],"default":"json","title":"Format"},"description":"Response format: json or tsv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}}},"/vigil/v1/download/all":{"head":{"tags":["Vigil - India Red Flag Tracker"],"summary":"Download all tables as a single file","description":"All seven tables in one SQLite database, ready to query with joins.\n\nThe whole dataset as a single file, about 475,000 rows across seven tables. Use\nthis when you want to work across tables locally rather than pull each one.\n\n## Formats\n\n- `sqlite` - zipped. Unzip to get `vigil_all_tables.db`\n- `sqlite.gz` - gzipped, for scripts\n\n`sqlite.zip`, `db.zip` and `db.gz` are accepted as aliases. Anything else\nreturns `400`.\n\n## Why the combined file is useful\n\nEvery table keys on `symbol`, so one file lets you ask cross-table questions\nwithout joining across HTTP calls:\n\n```sql\nSELECT s.symbol, s.gsm_stage, p.perc_shares_pledged\nFROM surveillance_flags s\nJOIN pledge_data p ON p.nse_symbol = s.symbol\nWHERE p.perc_shares_pledged > 50;\n```\n\nColumn types are preserved, so numeric comparisons like the one above behave\ncorrectly rather than sorting as text.\n\nSizes and generation time: `/vigil/v1/downloads/manifest`. Supports `HEAD`.","operationId":"download_all_vigil_v1_download_all_head","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"File format: sqlite, sqlite.gz","enum":["sqlite","sqlite.gz"],"default":"sqlite","title":"Format"},"description":"File format: sqlite, sqlite.gz"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}},"get":{"tags":["Vigil - India Red Flag Tracker"],"summary":"Download all tables as a single file","description":"All seven tables in one SQLite database, ready to query with joins.\n\nThe whole dataset as a single file, about 475,000 rows across seven tables. Use\nthis when you want to work across tables locally rather than pull each one.\n\n## Formats\n\n- `sqlite` - zipped. Unzip to get `vigil_all_tables.db`\n- `sqlite.gz` - gzipped, for scripts\n\n`sqlite.zip`, `db.zip` and `db.gz` are accepted as aliases. Anything else\nreturns `400`.\n\n## Why the combined file is useful\n\nEvery table keys on `symbol`, so one file lets you ask cross-table questions\nwithout joining across HTTP calls:\n\n```sql\nSELECT s.symbol, s.gsm_stage, p.perc_shares_pledged\nFROM surveillance_flags s\nJOIN pledge_data p ON p.nse_symbol = s.symbol\nWHERE p.perc_shares_pledged > 50;\n```\n\nColumn types are preserved, so numeric comparisons like the one above behave\ncorrectly rather than sorting as text.\n\nSizes and generation time: `/vigil/v1/downloads/manifest`. Supports `HEAD`.","operationId":"download_all_vigil_v1_download_all_head","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"File format: sqlite, sqlite.gz","enum":["sqlite","sqlite.gz"],"default":"sqlite","title":"Format"},"description":"File format: sqlite, sqlite.gz"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}}},"/vigil/v1/download/{table_name}":{"head":{"tags":["Vigil - India Red Flag Tracker"],"summary":"Download full table as a file","description":"A whole table as one pre-generated file. The right way to take bulk data.\n\nFiles are rebuilt after each sync and served straight from static storage, so a\ndownload does not queue behind a query. Prefer this over paging\n`/data/{table_name}` for anything larger than a few pages.\n\n## Choosing a format\n\n| Format | Use it for |\n|---|---|\n| `csv` | Universal. Zipped, so a browser handles it |\n| `csv.gz` | The same data, gzipped, for scripts and pipelines |\n| `tsv` | Tab-separated. Cleaner than CSV when values contain commas |\n| `tsv.gz` | Gzipped TSV |\n| `parquet` | Columnar and typed. Best for pandas, Polars and DuckDB |\n| `sqlite` | Query locally with SQL, no import step. Zipped |\n| `sqlite.gz` | The same database, gzipped |\n\nAnything else returns `400` listing the valid formats.\n\n## Column types survive in parquet and sqlite\n\nBoth carry real column types, so numeric comparisons behave:\n\n```sql\nSELECT MAX(no_of_securities) FROM insider_trading;\n```\n\nWorth stating because it was not always true. Until 2026-08-11 the SQLite exports\ndeclared every column `TEXT`, which made `MAX`, `ORDER BY` and `WHERE col > n`\nsort lexicographically and return confident wrong answers with no error. Fixed,\nand verified across every table. `csv` and `tsv` are untyped by nature, so the\nparser at your end decides.\n\n## Sizes and freshness\n\n`/vigil/v1/downloads/manifest` gives the byte size, row count and generation time\nof every file. Supports `HEAD` for a size check without the body.","operationId":"download_table_vigil_v1_download__table_name__head","parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","description":"One of the seven table names from GET /vigil/v1/tables.","title":"Table Name"},"description":"One of the seven table names from GET /vigil/v1/tables.","examples":{"insider_trading":{"summary":"Insider trades, the largest table most callers want","value":"insider_trading"}}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"File format: csv, tsv, parquet, sqlite, csv.gz, tsv.gz, sqlite.gz","enum":["csv","tsv","parquet","sqlite","csv.gz","tsv.gz","sqlite.gz"],"default":"csv","title":"Format"},"description":"File format: csv, tsv, parquet, sqlite, csv.gz, tsv.gz, sqlite.gz","examples":{"parquet":{"summary":"Typed and columnar, best for pandas, Polars or DuckDB","value":"parquet"},"csv":{"summary":"Universal, zipped so a browser handles it","value":"csv"}}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}},"get":{"tags":["Vigil - India Red Flag Tracker"],"summary":"Download full table as a file","description":"A whole table as one pre-generated file. The right way to take bulk data.\n\nFiles are rebuilt after each sync and served straight from static storage, so a\ndownload does not queue behind a query. Prefer this over paging\n`/data/{table_name}` for anything larger than a few pages.\n\n## Choosing a format\n\n| Format | Use it for |\n|---|---|\n| `csv` | Universal. Zipped, so a browser handles it |\n| `csv.gz` | The same data, gzipped, for scripts and pipelines |\n| `tsv` | Tab-separated. Cleaner than CSV when values contain commas |\n| `tsv.gz` | Gzipped TSV |\n| `parquet` | Columnar and typed. Best for pandas, Polars and DuckDB |\n| `sqlite` | Query locally with SQL, no import step. Zipped |\n| `sqlite.gz` | The same database, gzipped |\n\nAnything else returns `400` listing the valid formats.\n\n## Column types survive in parquet and sqlite\n\nBoth carry real column types, so numeric comparisons behave:\n\n```sql\nSELECT MAX(no_of_securities) FROM insider_trading;\n```\n\nWorth stating because it was not always true. Until 2026-08-11 the SQLite exports\ndeclared every column `TEXT`, which made `MAX`, `ORDER BY` and `WHERE col > n`\nsort lexicographically and return confident wrong answers with no error. Fixed,\nand verified across every table. `csv` and `tsv` are untyped by nature, so the\nparser at your end decides.\n\n## Sizes and freshness\n\n`/vigil/v1/downloads/manifest` gives the byte size, row count and generation time\nof every file. Supports `HEAD` for a size check without the body.","operationId":"download_table_vigil_v1_download__table_name__head","parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","description":"One of the seven table names from GET /vigil/v1/tables.","title":"Table Name"},"description":"One of the seven table names from GET /vigil/v1/tables.","examples":{"insider_trading":{"summary":"Insider trades, the largest table most callers want","value":"insider_trading"}}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"File format: csv, tsv, parquet, sqlite, csv.gz, tsv.gz, sqlite.gz","enum":["csv","tsv","parquet","sqlite","csv.gz","tsv.gz","sqlite.gz"],"default":"csv","title":"Format"},"description":"File format: csv, tsv, parquet, sqlite, csv.gz, tsv.gz, sqlite.gz","examples":{"parquet":{"summary":"Typed and columnar, best for pandas, Polars or DuckDB","value":"parquet"},"csv":{"summary":"Universal, zipped so a browser handles it","value":"csv"}}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}}},"/vigil/v1/freshness":{"get":{"tags":["Vigil - India Red Flag Tracker"],"summary":"Data freshness - last sync time per table","description":"Last sync time and record count per table, for checking how current the data is.\n\n## Refresh cadence\n\n- `credit_ratings`, `insider_trading`, `sast_disclosures`, `encumbrance_events`,\n  `pledge_data`, `surveillance_flags` sync **four times a day**\n- `rpt_transactions` syncs **weekly**, because the underlying filings are\n  half-yearly and the scan is expensive\n\n## Reading the result honestly\n\nA recent sync time means the pipeline ran, **not** that new records arrived. NSE\npublishes on trading days only, so an unchanged count over a weekend or a market\nholiday is correct behaviour rather than a stall. Compare `last_sync` against the\nrecord count over several days before concluding anything is stuck.","operationId":"freshness_vigil_v1_freshness_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}}},"/vigil/v1/downloads/manifest":{"get":{"tags":["Vigil - India Red Flag Tracker"],"summary":"Download file manifest with sizes","description":"File sizes, row counts and generation time for every pre-generated download.\n\nRead this before offering a download so you can show a size, and to check how\nfresh the files are without fetching them.\n\n## Fields worth using\n\n- `generated_at` - UTC timestamp of the last regeneration. Files are rebuilt\n  after each data sync, so this trails `/freshness` by a few minutes\n- `files` - keyed by filename, each with `size_bytes`, `size_human`, `format`\n  and `row_count`\n- `tables` - authoritative row count per table at generation time\n- `validation.all_match` - `true` when every generated file's row count agrees\n  with its source table. Treat `false` as a reason not to trust that batch\n\nSupports `HEAD` if you only need to confirm the endpoint is alive.\n\nEvery 200 carries `ETag` and `Last-Modified`, and this path honours\n`If-None-Match` / `If-Modified-Since` with `304 Not Modified` and an empty\nbody. Poll it conditionally: the files regenerate 4 times a day, so an\nunchanged manifest costs almost nothing to check.","operationId":"downloads_manifest_vigil_v1_downloads_manifest_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}},"head":{"tags":["Vigil - India Red Flag Tracker"],"summary":"Download file manifest with sizes","description":"File sizes, row counts and generation time for every pre-generated download.\n\nRead this before offering a download so you can show a size, and to check how\nfresh the files are without fetching them.\n\n## Fields worth using\n\n- `generated_at` - UTC timestamp of the last regeneration. Files are rebuilt\n  after each data sync, so this trails `/freshness` by a few minutes\n- `files` - keyed by filename, each with `size_bytes`, `size_human`, `format`\n  and `row_count`\n- `tables` - authoritative row count per table at generation time\n- `validation.all_match` - `true` when every generated file's row count agrees\n  with its source table. Treat `false` as a reason not to trust that batch\n\nSupports `HEAD` if you only need to confirm the endpoint is alive.\n\nEvery 200 carries `ETag` and `Last-Modified`, and this path honours\n`If-None-Match` / `If-Modified-Since` with `304 Not Modified` and an empty\nbody. Poll it conditionally: the files regenerate 4 times a day, so an\nunchanged manifest costs almost nothing to check.","operationId":"downloads_manifest_vigil_v1_downloads_manifest_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Vigil API page","url":"https://www.tigzig.com/apis/vigil#endpoints"}}},"/mf/v1/terms":{"get":{"tags":["MF NAV -Open Mutual Fund Data"],"summary":"Licence, data source and warranty, as plain text","description":"The same three statements the whole API carries, as plain text you can save\nor diff, rather than JSON you have to unwrap.\n\n**Licence.** To the extent this service holds any rights in the compilation, meaning\nthe assembly, the schema and the derived fields, they are released under CC0 1.0. No\nattribution required, though it is always appreciated.\n\n**Source.** The NAV data is published by AMFI as public records, and this\nservice reformats and republishes it. It is not an authoritative source and is not\naffiliated with, endorsed by, or sponsored by AMFI. The licence above covers this\nservice's compilation of it, never the underlying records themselves. No rights in\nthose are claimed here and none are granted, so check AMFI's own terms before\nrelying on it.\n\n**No warranty.** Provided as is. No guarantee of accuracy, completeness or\navailability, and no support commitment.\n\nThe same three statements also travel with the bulk downloads: in the manifest, and\nin the footer metadata of the parquet files, so they survive being copied onward.\n\nReturns `text/plain`, cached for a day.","operationId":"mf_terms","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Bad input. `error.code` names the problem (INVALID_IDENTIFIER, INVALID_DATE_FORMAT, MISSING_IDENTIFIER, TOO_MANY_SCHEMES, UNRECOGNIZED_PARAMETER, ...). Full list: error_shape.known_codes in the catalog at /mf/v1/.","content":{"application/json":{"example":{"detail":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","code":"MISSING_IDENTIFIER","path":"/mf/v1/details","error":{"code":"MISSING_IDENTIFIER","message":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"404":{"description":"SCHEME_NOT_FOUND (no scheme with that code or ISIN), NO_DETAILS (the scheme exists but we hold no AUM, document or TER for it) or NOT_FOUND.","content":{"application/json":{"example":{"detail":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","code":"NO_DETAILS","path":"/mf/v1/schemes/139585/details","error":{"code":"NO_DETAILS","message":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"422":{"description":"VALIDATION_ERROR - a parameter failed type or length checks. Same envelope as every other error, plus error.field.","content":{"application/json":{"example":{"detail":"Invalid `q`: String should have at least 2 characters","code":"VALIDATION_ERROR","path":"/mf/v1/search","error":{"code":"VALIDATION_ERROR","message":"Invalid `q`: String should have at least 2 characters","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"429":{"description":"TOO_MANY_REQUESTS (rate limit) or BUSY_LARGE_REQUEST (a big request while the server is busy). Same envelope; Retry-After is set and the body carries `reason` naming which limit."},"503":{"description":"BUSY_RETRY, DETAILS_UNAVAILABLE or DOWNLOAD_UNAVAILABLE - briefly unavailable; retry after Retry-After.","content":{"application/json":{"example":{"detail":"Scheme details are temporarily unavailable.","code":"DETAILS_UNAVAILABLE","path":"/mf/v1/details","error":{"code":"DETAILS_UNAVAILABLE","message":"Scheme details are temporarily unavailable.","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}}}}},"/mf/v1/":{"get":{"tags":["MF NAV -Open Mutual Fund Data"],"summary":"API catalog: every endpoint, the data schema, and worked examples","description":"The starting point. One call returns every endpoint, the data schema and\nworked examples, so nothing below has to be guessed.\n\n## What this API serves\n\nDaily NAV history for **38,000+ Indian mutual fund schemes**, published by AMFI\nIndia. April 2006 onward, **including matured and closed schemes** - a fund that\nshut in 2014 still returns its full history.\n\n## Start here\n\n- `GET /mf/v1/search?q=<name>` - find a scheme and its code\n- `GET /mf/v1/nav?scheme=<code or ISIN>` - pull its NAV history\n- `GET /mf/v1/download?format=latest` - the whole scheme master in one file\n\n## What the response contains\n\n- `endpoints` - every path with its parameters and an example URL\n- `schema` - field-by-field meaning, including `latest_snapshot` column semantics\n- `rate_limits` - the per-IP limits actually enforced\n\nNo authentication. No key. No sign-up.","operationId":"catalog_mf_v1__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad input. `error.code` names the problem (INVALID_IDENTIFIER, INVALID_DATE_FORMAT, MISSING_IDENTIFIER, TOO_MANY_SCHEMES, UNRECOGNIZED_PARAMETER, ...). Full list: error_shape.known_codes in the catalog at /mf/v1/.","content":{"application/json":{"example":{"detail":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","code":"MISSING_IDENTIFIER","path":"/mf/v1/details","error":{"code":"MISSING_IDENTIFIER","message":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"404":{"description":"SCHEME_NOT_FOUND (no scheme with that code or ISIN), NO_DETAILS (the scheme exists but we hold no AUM, document or TER for it) or NOT_FOUND.","content":{"application/json":{"example":{"detail":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","code":"NO_DETAILS","path":"/mf/v1/schemes/139585/details","error":{"code":"NO_DETAILS","message":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"422":{"description":"VALIDATION_ERROR - a parameter failed type or length checks. Same envelope as every other error, plus error.field.","content":{"application/json":{"example":{"detail":"Invalid `q`: String should have at least 2 characters","code":"VALIDATION_ERROR","path":"/mf/v1/search","error":{"code":"VALIDATION_ERROR","message":"Invalid `q`: String should have at least 2 characters","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"429":{"description":"TOO_MANY_REQUESTS (rate limit) or BUSY_LARGE_REQUEST (a big request while the server is busy). Same envelope; Retry-After is set and the body carries `reason` naming which limit."},"503":{"description":"BUSY_RETRY, DETAILS_UNAVAILABLE or DOWNLOAD_UNAVAILABLE - briefly unavailable; retry after Retry-After.","content":{"application/json":{"example":{"detail":"Scheme details are temporarily unavailable.","code":"DETAILS_UNAVAILABLE","path":"/mf/v1/details","error":{"code":"DETAILS_UNAVAILABLE","message":"Scheme details are temporarily unavailable.","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}}},"externalDocs":{"description":"Endpoint documentation on the MF NAV API page","url":"https://www.tigzig.com/apis/mf-nav#endpoints"}}},"/mf/v1/search":{"get":{"tags":["MF NAV -Open Mutual Fund Data"],"summary":"Search and browse schemes: name/code search + metadata filters (category, AMC, plan, dates)","description":"Find a scheme by name or code, or browse the whole universe by metadata.\nWorks with a search term, with filters, or with both.\n\n## Searching by name or code\n\n- **Numeric `q`** matches `scheme_code`, exact or prefix.\n- **Text `q`** is multi-word **AND** on the scheme name: every word must appear,\n  in any order, case-insensitive. `q=hdfc cap` matches `HDFC Mid Cap`.\n- `AND` and `OR` are **not operators** here - they are matched as literal words.\n  For OR across fund houses use a comma: `amc=hdfc,icici`.\n- AMC nicknames expand automatically, so `absl` finds `Aditya Birla Sun Life`.\n\n## Browsing without a search term\n\nEvery filter works **with or without** `q`. With no `q` at all this becomes a\nbrowse over the full universe.\n\n- Values are contains-matched and case-insensitive\n- A comma inside one filter means **OR**: `amc=hdfc,icici`\n- Different filters **AND** together: `category=small&plan=direct`\n- `exclude=` removes matches globally\n\n```\n/mf/v1/search?q=absl value\n/mf/v1/search?category=small cap&plan=direct&option=growth\n/mf/v1/search?group=equity&first_date_from=2015-01-01&first_date_to=2020-12-31\n/mf/v1/search?isin=INF174K01LT0&active=all\n```\n\n## Two response shapes\n\n- A **`q`-only** call returns the compact shape: `scheme_code`, `scheme_name`,\n  `isin`, `isin2`, `category_sub`, `is_active`, `relevance`.\n- **Any filter present** returns the enriched shape: every `scheme_meta` field\n  per row, plus `total_matches` and `matched_categories`.\n\n## Two things that surprise callers\n\n**Read `isin2` as well as `isin`.** IDCW-reinvestment unit classes carry their\nidentifier in `isin2` and leave `isin` empty, so about 1,000 schemes look\nidentifier-less if you read `isin` alone.\n\n**Filter-only calls hide matured schemes by default**, so `all ICICI equity funds`\nis not buried under 29,000 closed ones. Add `active=all` to include them, or\n`active=false` for matured only. Calls with `q=` are unaffected. A filter-only\ncall that matches nothing live will tell you how many matured schemes it found.\n\n## Strict by design\n\nAn unknown parameter name fails with `400 UNRECOGNIZED_PARAMETER` and a\ndid-you-mean, rather than silently returning unfiltered results. Repeated\nlist-filters merge as OR; repeated scalars with different values fail loudly.\n\n**Limits:** `limit` 1-100, default 30. For the entire universe in one shot use\n`/mf/v1/download?format=latest` instead of paginating - the universe refreshes\nthree times a day, and a long pagination sweep crossing a sync can skip or\nduplicate a row.","operationId":"mf_search","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","minLength":2,"description":"Search query: scheme name or scheme code (exact or prefix). Name matching is word-AND: each whitespace-separated word must appear somewhere in the name, any order, case-insensitive (q=hdfc cap matches HDFC Mid Cap). AND/OR are NOT operators - they are matched as literal words. For OR across funds use filters with commas (amc=hdfc,icici). Optional when any filter param is present. q does not match ISINs: use isin= for an ISIN.","title":"Q"},"description":"Search query: scheme name or scheme code (exact or prefix). Name matching is word-AND: each whitespace-separated word must appear somewhere in the name, any order, case-insensitive (q=hdfc cap matches HDFC Mid Cap). AND/OR are NOT operators - they are matched as literal words. For OR across funds use filters with commas (amc=hdfc,icici). Optional when any filter param is present. q does not match ISINs: use isin= for an ISIN.","examples":{"find_by_name":{"summary":"Find a fund and its AMFI code by name","value":"parag parikh"}}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Max results per page (1-100). Fetching the whole universe? One GET replaces pagination: /mf/v1/download?format=latest","default":30,"title":"Limit"},"description":"Max results per page (1-100). Fetching the whole universe? One GET replaces pagination: /mf/v1/download?format=latest"},{"name":"amc","in":"query","required":false,"schema":{"type":"string","description":"Filter: AMC name contains (case-insensitive; comma = OR). Example: amc=icici,aditya birla","title":"Amc"},"description":"Filter: AMC name contains (case-insensitive; comma = OR). Example: amc=icici,aditya birla"},{"name":"group","in":"query","required":false,"schema":{"type":"string","description":"Filter: category group contains. 4 values: Equity Scheme, Debt Scheme, Hybrid Scheme, Other Scheme (SEBI 2026 folded Solution Oriented + Fund of Funds into Other Scheme). Example: group=equity","title":"Group"},"description":"Filter: category group contains. 4 values: Equity Scheme, Debt Scheme, Hybrid Scheme, Other Scheme (SEBI 2026 folded Solution Oriented + Fund of Funds into Other Scheme). Example: group=equity"},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter: SEBI sub-category contains (e.g. category=small matches Small Cap Fund). Also matches the raw AMFI category text so pre-2018 old-style schemes (Income, Growth, ELSS) are findable.","title":"Category"},"description":"Filter: SEBI sub-category contains (e.g. category=small matches Small Cap Fund). Also matches the raw AMFI category text so pre-2018 old-style schemes (Income, Growth, ELSS) are findable."},{"name":"type","in":"query","required":false,"schema":{"type":"string","description":"Filter: scheme type contains (open / close / interval).","title":"Type"},"description":"Filter: scheme type contains (open / close / interval)."},{"name":"plan","in":"query","required":false,"schema":{"type":"string","description":"Filter: Direct / Regular / Other (pre-2013 schemes predate the split and classify Other).","title":"Plan"},"description":"Filter: Direct / Regular / Other (pre-2013 schemes predate the split and classify Other)."},{"name":"option","in":"query","required":false,"schema":{"type":"string","description":"Filter: Growth / IDCW / Bonus / Other.","title":"Option"},"description":"Filter: Growth / IDCW / Bonus / Other."},{"name":"txic","in":"query","required":false,"schema":{"type":"string","description":"Filter: TXIC scheme code contains (e.g. txic=AXOMC).","title":"Txic"},"description":"Filter: TXIC scheme code contains (e.g. txic=AXOMC)."},{"name":"isin","in":"query","required":false,"schema":{"type":"string","description":"Filter: exact ISIN (comma = OR). Matches payout/growth (isin) AND reinvestment (isin2) identifiers.","title":"Isin"},"description":"Filter: exact ISIN (comma = OR). Matches payout/growth (isin) AND reinvestment (isin2) identifiers."},{"name":"active","in":"query","required":false,"schema":{"type":"string","description":"Filter: true/false. Pure-browse calls (filters without q) default to active=true; pass active=all or active=false to include matured schemes.","title":"Active"},"description":"Filter: true/false. Pure-browse calls (filters without q) default to active=true; pass active=all or active=false to include matured schemes."},{"name":"stale","in":"query","required":false,"schema":{"type":"string","description":"Filter: true/false. Data-orphan schemes carrying only 1-2 NAV rows in AMFI's records.","title":"Stale"},"description":"Filter: true/false. Data-orphan schemes carrying only 1-2 NAV rows in AMFI's records."},{"name":"first_date_from","in":"query","required":false,"schema":{"type":"string","description":"Filter: first NAV date on or after YYYY-MM-DD (schemes launched from this date).","title":"First Date From"},"description":"Filter: first NAV date on or after YYYY-MM-DD (schemes launched from this date)."},{"name":"first_date_to","in":"query","required":false,"schema":{"type":"string","description":"Filter: first NAV date on or before YYYY-MM-DD.","title":"First Date To"},"description":"Filter: first NAV date on or before YYYY-MM-DD."},{"name":"last_date_from","in":"query","required":false,"schema":{"type":"string","description":"Filter: last NAV date on or after YYYY-MM-DD.","title":"Last Date From"},"description":"Filter: last NAV date on or after YYYY-MM-DD."},{"name":"last_date_to","in":"query","required":false,"schema":{"type":"string","description":"Filter: last NAV date on or before YYYY-MM-DD (with active=false: schemes that matured by this date).","title":"Last Date To"},"description":"Filter: last NAV date on or before YYYY-MM-DD (with active=false: schemes that matured by this date)."},{"name":"exclude","in":"query","required":false,"schema":{"type":"string","description":"NOT filter: drop results whose scheme name or AMC contains any of these comma-separated terms. Example: amc=icici,aditya birla&exclude=jm. SCOPE: matches scheme NAME and AMC text only - never category/plan fields (exclude=value also drops an index fund with Value in its name). To exclude a category, positively select the ones you want instead (closed vocabulary, comma = OR).","title":"Exclude"},"description":"NOT filter: drop results whose scheme name or AMC contains any of these comma-separated terms. Example: amc=icici,aditya birla&exclude=jm. SCOPE: matches scheme NAME and AMC text only - never category/plan fields (exclude=value also drops an index fund with Value in its name). To exclude a category, positively select the ones you want instead (closed vocabulary, comma = OR)."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Pagination offset (>= 0). Filter-mode responses include total_matches so you can page through. NOTE: the universe refreshes 3x daily - a long pagination sweep crossing a sync boundary can skip or duplicate a row; for a consistent full copy use /mf/v1/download?format=latest (one atomic file).","default":0,"title":"Offset"},"description":"Pagination offset (>= 0). Filter-mode responses include total_matches so you can page through. NOTE: the universe refreshes 3x daily - a long pagination sweep crossing a sync boundary can skip or duplicate a row; for a consistent full copy use /mf/v1/download?format=latest (one atomic file)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad input. `error.code` names the problem (INVALID_IDENTIFIER, INVALID_DATE_FORMAT, MISSING_IDENTIFIER, TOO_MANY_SCHEMES, UNRECOGNIZED_PARAMETER, ...). Full list: error_shape.known_codes in the catalog at /mf/v1/.","content":{"application/json":{"example":{"detail":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","code":"MISSING_IDENTIFIER","path":"/mf/v1/details","error":{"code":"MISSING_IDENTIFIER","message":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"404":{"description":"SCHEME_NOT_FOUND (no scheme with that code or ISIN), NO_DETAILS (the scheme exists but we hold no AUM, document or TER for it) or NOT_FOUND.","content":{"application/json":{"example":{"detail":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","code":"NO_DETAILS","path":"/mf/v1/schemes/139585/details","error":{"code":"NO_DETAILS","message":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"422":{"description":"VALIDATION_ERROR - a parameter failed type or length checks. Same envelope as every other error, plus error.field.","content":{"application/json":{"example":{"detail":"Invalid `q`: String should have at least 2 characters","code":"VALIDATION_ERROR","path":"/mf/v1/search","error":{"code":"VALIDATION_ERROR","message":"Invalid `q`: String should have at least 2 characters","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"429":{"description":"TOO_MANY_REQUESTS (rate limit) or BUSY_LARGE_REQUEST (a big request while the server is busy). Same envelope; Retry-After is set and the body carries `reason` naming which limit."},"503":{"description":"BUSY_RETRY, DETAILS_UNAVAILABLE or DOWNLOAD_UNAVAILABLE - briefly unavailable; retry after Retry-After.","content":{"application/json":{"example":{"detail":"Scheme details are temporarily unavailable.","code":"DETAILS_UNAVAILABLE","path":"/mf/v1/details","error":{"code":"DETAILS_UNAVAILABLE","message":"Scheme details are temporarily unavailable.","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}}},"externalDocs":{"description":"Endpoint documentation on the MF NAV API page","url":"https://www.tigzig.com/apis/mf-nav#endpoints"}}},"/mf/v1/nav":{"get":{"tags":["MF NAV -Open Mutual Fund Data"],"summary":"NAV data by AMFI code or ISIN (single or bulk)","description":"NAV history for one or more schemes, by AMFI code or ISIN.\n\n## Basic calls\n\n```\n/mf/v1/nav?scheme=119775                                   one scheme, full history\n/mf/v1/nav?scheme=INF174K01LT0                             same, by ISIN\n/mf/v1/nav?schemes=119775,120468,INF174K01LT0              up to 50 per call\n/mf/v1/nav?scheme=119775&since=2024-01-01&to=2024-12-31    a bounded window\n/mf/v1/nav?scheme=119775&latest=true                       newest row only\n```\n\n`latest=true` composes with `since` / `to`.\n\n## The input is forgiving on purpose\n\nYou should not have to remember exact spellings.\n\n- `isin=` and `isins=` are synonyms of `scheme=` and `schemes=`\n- Parameter **names** are case-insensitive, and so are identifier **values**\n  (`inf174k01lt0` works)\n- A comma list in the singular parameter (`?scheme=A,B`) is treated as bulk\n- Repeated parameters merge: `?schemes=A&schemes=B` is the same as `?schemes=A,B`\n- `/mf/v1/navs` (plural) is accepted too\n\n## Two response shapes, one rule\n\nA singular parameter carrying **exactly one** identifier returns the flat shape.\nEverything else returns the wrapped bulk shape.\n\n- Single: `{scheme_code, scheme_name, isin, isin2, count, data:[{date, nav}]}`\n- Bulk: `{count, schemes:[...], not_found:[...]}`\n\n**A bad entry never fails the batch.** Invalid or unknown identifiers are served back\nin `not_found` while every valid scheme returns normally. Only an entirely invalid\nlist errors. When an entry in `not_found` is a structurally broken ISIN, a\n`not_found_hint` field says so and points at a batch checker - retrying will not\nfix an identifier whose check digit does not add up.\n\n## An empty result explains itself\n\nEvery scheme carries `first_available_date` and `latest_available_date`. If\n`latest_available_date` is older than your `since`, nothing has been published for\nyour window yet - the usual cause is a poller running ahead of AMFI's daily publish.\n`Last-Modified` is set even on an empty window.\n\n## Identifiers worth knowing about\n\n- Read **`isin2`** as well as `isin`: IDCW-reinvestment unit classes carry their\n  identifier there and leave `isin` empty.\n- One ISIN can belong to **more than one scheme code**. When a fund changes manager,\n  AMFI issues a new code and the ISIN survives, so a single code returns only one leg\n  of the history. To find the other legs, search the ISIN with `active=all`.\n- A NAV of `0.00` on a matured scheme is AMFI's terminal marker, published as filed.\n\n## Getting it as a file instead of JSON\n\n`format=csv` returns the same rows as an attachment, one row per scheme per date:\n\n    scheme_code,date,nav,scheme_name,isin\n\nThat is the same header the full-history file at `/mf/v1/download` publishes, so a\nscript written against this CSV keeps working when you graduate to the whole dataset.\nPoint a browser at the URL and it saves a file.\n\nNote the long shape repeats `scheme_name` on every row, so the CSV is larger than the\nsame data as JSON. It is served compressed. `not_found` has no place in a flat file, so\nask for JSON when you need to know which identifiers did not resolve.\n\n**Headers:** `X-RateLimit-*` on success, and `Last-Modified` (weak - derived from the\nlatest NAV date in the response).\n\n**Rate limit:** 300 requests per minute per IP.","operationId":"mf_nav","parameters":[{"name":"scheme","in":"query","required":false,"schema":{"type":"string","description":"Single scheme. AMFI code (e.g. 119775) or ISIN (e.g. INF174K01LT0).","title":"Scheme"},"description":"Single scheme. AMFI code (e.g. 119775) or ISIN (e.g. INF174K01LT0).","examples":{"by_amfi_code":{"summary":"Daily NAV history for one fund, by its AMFI code","value":"119775"}}},{"name":"schemes","in":"query","required":false,"schema":{"type":"string","description":"Bulk lookup. Comma-separated list of AMFI codes and/or ISINs. Max 50 per request.","title":"Schemes"},"description":"Bulk lookup. Comma-separated list of AMFI codes and/or ISINs. Max 50 per request."},{"name":"latest","in":"query","required":false,"schema":{"type":"string","description":"Set latest=true to return only the most recent NAV row per scheme (the newest row within your since/to window, if one is given). Works in single and bulk mode.","title":"Latest"},"description":"Set latest=true to return only the most recent NAV row per scheme (the newest row within your since/to window, if one is given). Works in single and bulk mode."},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format. `json` (default) or `csv`. `csv` returns the same rows as a file attachment, one row per scheme per date, columns scheme_code,date,nav,scheme_name,isin - the same header as /mf/v1/download, so a script written against one works on the other. Intended for handing a caller a direct download link. Any other value is a 400.","title":"Format"},"description":"Response format. `json` (default) or `csv`. `csv` returns the same rows as a file attachment, one row per scheme per date, columns scheme_code,date,nav,scheme_name,isin - the same header as /mf/v1/download, so a script written against one works on the other. Intended for handing a caller a direct download link. Any other value is a 400."},{"name":"since","in":"query","required":false,"schema":{"type":"string","description":"Filter: NAV from this date onward (YYYY-MM-DD, inclusive).","title":"Since"},"description":"Filter: NAV from this date onward (YYYY-MM-DD, inclusive)."},{"name":"to","in":"query","required":false,"schema":{"type":"string","description":"Filter: NAV up to this date (YYYY-MM-DD, inclusive). Blank = up to latest.","title":"To"},"description":"Filter: NAV up to this date (YYYY-MM-DD, inclusive). Blank = up to latest."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad input. `error.code` names the problem (INVALID_IDENTIFIER, INVALID_DATE_FORMAT, MISSING_IDENTIFIER, TOO_MANY_SCHEMES, UNRECOGNIZED_PARAMETER, ...). Full list: error_shape.known_codes in the catalog at /mf/v1/.","content":{"application/json":{"example":{"detail":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","code":"MISSING_IDENTIFIER","path":"/mf/v1/details","error":{"code":"MISSING_IDENTIFIER","message":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"404":{"description":"SCHEME_NOT_FOUND (no scheme with that code or ISIN), NO_DETAILS (the scheme exists but we hold no AUM, document or TER for it) or NOT_FOUND.","content":{"application/json":{"example":{"detail":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","code":"NO_DETAILS","path":"/mf/v1/schemes/139585/details","error":{"code":"NO_DETAILS","message":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"422":{"description":"VALIDATION_ERROR - a parameter failed type or length checks. Same envelope as every other error, plus error.field.","content":{"application/json":{"example":{"detail":"Invalid `q`: String should have at least 2 characters","code":"VALIDATION_ERROR","path":"/mf/v1/search","error":{"code":"VALIDATION_ERROR","message":"Invalid `q`: String should have at least 2 characters","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"429":{"description":"TOO_MANY_REQUESTS (rate limit) or BUSY_LARGE_REQUEST (a big request while the server is busy). Same envelope; Retry-After is set and the body carries `reason` naming which limit."},"503":{"description":"BUSY_RETRY, DETAILS_UNAVAILABLE or DOWNLOAD_UNAVAILABLE - briefly unavailable; retry after Retry-After.","content":{"application/json":{"example":{"detail":"Scheme details are temporarily unavailable.","code":"DETAILS_UNAVAILABLE","path":"/mf/v1/details","error":{"code":"DETAILS_UNAVAILABLE","message":"Scheme details are temporarily unavailable.","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}}},"externalDocs":{"description":"Endpoint documentation on the MF NAV API page","url":"https://www.tigzig.com/apis/mf-nav#endpoints"}}},"/mf/v1/schemes/{code}/nav":{"get":{"tags":["MF NAV -Open Mutual Fund Data"],"summary":"NAV data for a single scheme (REST path form)","description":"REST-canonical form of the single-scheme NAV lookup.\n\n- AMFI code path: `/mf/v1/schemes/119775/nav`\n- ISIN path: `/mf/v1/schemes/INF174K01LT0/nav`\n- Bounded window: add `?since=YYYY-MM-DD&to=YYYY-MM-DD`\n\nSame response shape as `GET /mf/v1/nav?scheme=...`.","operationId":"nav_by_path_mf_v1_schemes__code__nav_get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"AMFI scheme code (e.g. 119775) or ISIN (e.g. INF174K01LT0).","title":"Code"},"description":"AMFI scheme code (e.g. 119775) or ISIN (e.g. INF174K01LT0)."},{"name":"since","in":"query","required":false,"schema":{"type":"string","description":"Filter: NAV from this date onward (YYYY-MM-DD, inclusive).","title":"Since"},"description":"Filter: NAV from this date onward (YYYY-MM-DD, inclusive)."},{"name":"to","in":"query","required":false,"schema":{"type":"string","description":"Filter: NAV up to this date (YYYY-MM-DD, inclusive). Blank = up to latest.","title":"To"},"description":"Filter: NAV up to this date (YYYY-MM-DD, inclusive). Blank = up to latest."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad input. `error.code` names the problem (INVALID_IDENTIFIER, INVALID_DATE_FORMAT, MISSING_IDENTIFIER, TOO_MANY_SCHEMES, UNRECOGNIZED_PARAMETER, ...). Full list: error_shape.known_codes in the catalog at /mf/v1/.","content":{"application/json":{"example":{"detail":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","code":"MISSING_IDENTIFIER","path":"/mf/v1/details","error":{"code":"MISSING_IDENTIFIER","message":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"404":{"description":"SCHEME_NOT_FOUND (no scheme with that code or ISIN), NO_DETAILS (the scheme exists but we hold no AUM, document or TER for it) or NOT_FOUND.","content":{"application/json":{"example":{"detail":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","code":"NO_DETAILS","path":"/mf/v1/schemes/139585/details","error":{"code":"NO_DETAILS","message":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"422":{"description":"VALIDATION_ERROR - a parameter failed type or length checks. Same envelope as every other error, plus error.field.","content":{"application/json":{"example":{"detail":"Invalid `q`: String should have at least 2 characters","code":"VALIDATION_ERROR","path":"/mf/v1/search","error":{"code":"VALIDATION_ERROR","message":"Invalid `q`: String should have at least 2 characters","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"429":{"description":"TOO_MANY_REQUESTS (rate limit) or BUSY_LARGE_REQUEST (a big request while the server is busy). Same envelope; Retry-After is set and the body carries `reason` naming which limit."},"503":{"description":"BUSY_RETRY, DETAILS_UNAVAILABLE or DOWNLOAD_UNAVAILABLE - briefly unavailable; retry after Retry-After.","content":{"application/json":{"example":{"detail":"Scheme details are temporarily unavailable.","code":"DETAILS_UNAVAILABLE","path":"/mf/v1/details","error":{"code":"DETAILS_UNAVAILABLE","message":"Scheme details are temporarily unavailable.","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}}},"externalDocs":{"description":"Endpoint documentation on the MF NAV API page","url":"https://www.tigzig.com/apis/mf-nav#endpoints"}}},"/mf/v1/download":{"get":{"tags":["MF NAV -Open Mutual Fund Data"],"summary":"Download full NAV dataset","description":"Download the complete AMFI NAV dataset as a pre-generated static file.\n\nFormats (zip for browsers, gz for programmatic use):\n- **csv.zip** / **csv.gz** - CSV, universal\n- **tsv.zip** / **tsv.gz** - TSV, ideal for LLM context\n- **parquet** - Columnar compressed, ideal for pandas/DuckDB\n- **sqlite.zip** / **sqlite** - SQLite database, extract then query locally\n- **latest** / **latest.csv.gz** / **latest.csv.zip** / **latest.parquet** - THE FULL\n  SCHEME MASTER + latest NAV + latest quarterly AAUM: one row per scheme (all\n  ~38,000, matured included with final frozen NAVs), 22 columns - identifiers\n  (incl. both ISINs), names, AMC, full category taxonomy (raw + clean group),\n  plan/option, launch + last-NAV dates,\n  is_active/is_stale, TXIC, aaum_cr_quarterly_avg + quarter label + ISO twin. ~1-9 MB by format.\n  THE efficient daily sync AND the local-analysis table: one GET replaces\n  thousands of per-scheme calls; column semantics in the catalog's\n  `schema.latest_snapshot` block. `latest` = plain CSV (opens in Excel).\n\nFiles are regenerated 3x daily after sync. Sizes shown in the catalog endpoint.\n\nRate limits are their own budgets, separate from the 300/min the other MF\nendpoints share, and they are SPLIT BY REQUEST KIND because the two cost\nwildly different amounts of Worker CPU:\n\n- Range reads (HTTP 206) - 3,000/min and 25,000/day per IP. This is what a\n  remote DuckDB or pyarrow query issues; one unfiltered scan of the full\n  parquet is ~300 requests, so the day allows ~83 full scans.\n- Whole-file (GET/HEAD returning 200/304) - 60/min and 500/day per IP.\n\nThe X-RateLimit-* headers report the budget for the kind of request you just\nmade, and carry a -Day pair alongside the per-minute one. Read them rather\nthan hardcoding these numbers, and pace against BOTH: a job watching only the\nper-minute figure can be refused hours later by the daily ceiling.","operationId":"download_dataset_mf_v1_download_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"File format. OMIT IT to get an index of what is available instead of a file. Full history: csv.gz, csv.zip, tsv.gz, tsv.zip, parquet, sqlite.gz (alias: sqlite), sqlite.zip (db.gz / db.zip accepted). Latest-NAV snapshot = the full scheme master + latest NAV + latest quarterly AAUM (one row per scheme; includes matured schemes' final frozen NAVs - filter is_active): latest (plain CSV), latest.csv.gz, latest.csv.zip, latest.parquet.","title":"Format"},"description":"File format. OMIT IT to get an index of what is available instead of a file. Full history: csv.gz, csv.zip, tsv.gz, tsv.zip, parquet, sqlite.gz (alias: sqlite), sqlite.zip (db.gz / db.zip accepted). Latest-NAV snapshot = the full scheme master + latest NAV + latest quarterly AAUM (one row per scheme; includes matured schemes' final frozen NAVs - filter is_active): latest (plain CSV), latest.csv.gz, latest.csv.zip, latest.parquet."},{"name":"dataset","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Other datasets: scheme_details_latest (parquet, csv.gz) or data_quality (csv, json). Same as /mf/v1/download/{dataset}.","title":"Dataset"},"description":"Other datasets: scheme_details_latest (parquet, csv.gz) or data_quality (csv, json). Same as /mf/v1/download/{dataset}."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad input. `error.code` names the problem (INVALID_IDENTIFIER, INVALID_DATE_FORMAT, MISSING_IDENTIFIER, TOO_MANY_SCHEMES, UNRECOGNIZED_PARAMETER, ...). Full list: error_shape.known_codes in the catalog at /mf/v1/.","content":{"application/json":{"example":{"detail":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","code":"MISSING_IDENTIFIER","path":"/mf/v1/details","error":{"code":"MISSING_IDENTIFIER","message":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"404":{"description":"SCHEME_NOT_FOUND (no scheme with that code or ISIN), NO_DETAILS (the scheme exists but we hold no AUM, document or TER for it) or NOT_FOUND.","content":{"application/json":{"example":{"detail":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","code":"NO_DETAILS","path":"/mf/v1/schemes/139585/details","error":{"code":"NO_DETAILS","message":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"422":{"description":"VALIDATION_ERROR - a parameter failed type or length checks. Same envelope as every other error, plus error.field.","content":{"application/json":{"example":{"detail":"Invalid `q`: String should have at least 2 characters","code":"VALIDATION_ERROR","path":"/mf/v1/search","error":{"code":"VALIDATION_ERROR","message":"Invalid `q`: String should have at least 2 characters","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"429":{"description":"TOO_MANY_REQUESTS (rate limit) or BUSY_LARGE_REQUEST (a big request while the server is busy). Same envelope; Retry-After is set and the body carries `reason` naming which limit."},"503":{"description":"BUSY_RETRY, DETAILS_UNAVAILABLE or DOWNLOAD_UNAVAILABLE - briefly unavailable; retry after Retry-After.","content":{"application/json":{"example":{"detail":"Scheme details are temporarily unavailable.","code":"DETAILS_UNAVAILABLE","path":"/mf/v1/details","error":{"code":"DETAILS_UNAVAILABLE","message":"Scheme details are temporarily unavailable.","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}}},"externalDocs":{"description":"Endpoint documentation on the MF NAV API page","url":"https://www.tigzig.com/apis/mf-nav#endpoints"}}},"/mf/v1/download/{dataset}":{"get":{"tags":["MF NAV -Open Mutual Fund Data"],"summary":"Download another MF dataset (scheme details, data quality)","description":"Download a whole MF dataset other than NAV history.\n\n- **scheme_details_latest** - one row per AMFI scheme code, 60 columns: identifiers, AMFI's\n  daily fund AUM (all plans) with riskometers and benchmarks, the scheme summary document\n  (managers, dates, benchmarks, terms), and the latest TER / BER for both plans.\n  Fund-level values repeat on each plan's row: to total AUM, sum only rows where\n  `fund_dedup_flag` is true. parquet or csv.gz.\n- **data_quality** - rows AMFI's daily feed or the scheme documents could not link cleanly,\n  with the reason. csv or json.\n\nSizes, row counts and source dates: /mf/v1/downloads/manifest (key `datasets`).","operationId":"download_named_dataset_mf_v1_download__dataset__get","parameters":[{"name":"dataset","in":"path","required":true,"schema":{"type":"string","title":"Dataset"}},{"name":"format","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"scheme_details_latest: parquet (default) or csv.gz. data_quality: csv (default) or json.","title":"Format"},"description":"scheme_details_latest: parquet (default) or csv.gz. data_quality: csv (default) or json."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad input. `error.code` names the problem (INVALID_IDENTIFIER, INVALID_DATE_FORMAT, MISSING_IDENTIFIER, TOO_MANY_SCHEMES, UNRECOGNIZED_PARAMETER, ...). Full list: error_shape.known_codes in the catalog at /mf/v1/.","content":{"application/json":{"example":{"detail":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","code":"MISSING_IDENTIFIER","path":"/mf/v1/details","error":{"code":"MISSING_IDENTIFIER","message":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"404":{"description":"SCHEME_NOT_FOUND (no scheme with that code or ISIN), NO_DETAILS (the scheme exists but we hold no AUM, document or TER for it) or NOT_FOUND.","content":{"application/json":{"example":{"detail":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","code":"NO_DETAILS","path":"/mf/v1/schemes/139585/details","error":{"code":"NO_DETAILS","message":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"422":{"description":"VALIDATION_ERROR - a parameter failed type or length checks. Same envelope as every other error, plus error.field.","content":{"application/json":{"example":{"detail":"Invalid `q`: String should have at least 2 characters","code":"VALIDATION_ERROR","path":"/mf/v1/search","error":{"code":"VALIDATION_ERROR","message":"Invalid `q`: String should have at least 2 characters","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"429":{"description":"TOO_MANY_REQUESTS (rate limit) or BUSY_LARGE_REQUEST (a big request while the server is busy). Same envelope; Retry-After is set and the body carries `reason` naming which limit."},"503":{"description":"BUSY_RETRY, DETAILS_UNAVAILABLE or DOWNLOAD_UNAVAILABLE - briefly unavailable; retry after Retry-After.","content":{"application/json":{"example":{"detail":"Scheme details are temporarily unavailable.","code":"DETAILS_UNAVAILABLE","path":"/mf/v1/details","error":{"code":"DETAILS_UNAVAILABLE","message":"Scheme details are temporarily unavailable.","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}}},"externalDocs":{"description":"Endpoint documentation on the MF NAV API page","url":"https://www.tigzig.com/apis/mf-nav#endpoints"}}},"/mf/v1/schemes/{code}/details":{"get":{"tags":["MF NAV -Open Mutual Fund Data"],"summary":"Scheme details: AUM, scheme document, TER for one scheme","description":"One scheme's details as JSON, wrapped in `data` (unlike /nav, which puts fields at the top\nlevel). Same values as the scheme_details_latest download, grouped inside `data`:\nidentifiers at the top, then `amfi_daily` (AMFI's daily fund AUM for all plans, riskometers,\nbenchmarks), `ssd` (the scheme summary document: managers as a list, dates, benchmarks, terms)\nand `ter` (latest TER / BER, Regular and Direct). A group is null when we hold nothing for it.\n`code` is an AMFI scheme code or an ISIN. `view=compact` or `fields=...` trims the reply.","operationId":"scheme_details_mf_v1_schemes__code__details_get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"AMFI scheme code (e.g. 118989) or ISIN (e.g. INF179K01XQ0).","title":"Code"},"description":"AMFI scheme code (e.g. 118989) or ISIN (e.g. INF179K01XQ0)."},{"name":"view","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`full` (default) returns every field. `compact` returns the fields checked most often: identifiers, fund AUM and its date, riskometer, benchmark, managers, allotment date, TER and BER (about 660 characters per scheme against about 4,800). Through MCP, mf_details defaults to `compact`. Ignored when `fields` is given.","title":"View"},"description":"`full` (default) returns every field. `compact` returns the fields checked most often: identifiers, fund AUM and its date, riskometer, benchmark, managers, allotment date, TER and BER (about 660 characters per scheme against about 4,800). Through MCP, mf_details defaults to `compact`. Ignored when `fields` is given."},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of the fields you want, e.g. `isin,ter.direct,amfi_daily.fund_aum_cr_all_plans`. Use a group name (`ter`, `amfi_daily`, `ssd`) for the whole group and `group.field` for one field inside it. `scheme_code` is always included. An unknown name returns 400 UNKNOWN_FIELD with the list of valid names.","title":"Fields"},"description":"Comma list of the fields you want, e.g. `isin,ter.direct,amfi_daily.fund_aum_cr_all_plans`. Use a group name (`ter`, `amfi_daily`, `ssd`) for the whole group and `group.field` for one field inside it. `scheme_code` is always included. An unknown name returns 400 UNKNOWN_FIELD with the list of valid names."}],"responses":{"200":{"description":"WRAPPED in `data` - `j[\"data\"][\"scheme_code\"]`, not `j[\"scheme_code\"]` as on /nav. Groups are trimmed here; the full field list is the scheme_details_latest data dictionary. Any group can be null when we hold nothing for it (about a quarter of schemes have `ter: null`), so check before indexing into it. License fields sit beside `data`.","content":{"application/json":{"schema":{},"example":{"data":{"scheme_code":118989,"isin":"INF179K01XQ0","scheme_name":"HDFC Mid Cap Fund - Growth Option - Direct Plan","fund_name_latest":"HDFC Mid Cap Fund","amc":"HDFC Mutual Fund","category_group_clean":"Equity Scheme","category_sub":"Mid Cap Fund","scheme_plan":"Direct","is_active":true,"amfi_ssd_fund_id":"2526","amfi_daily":{"fund_name":"HDFC Mid Cap Fund","fund_aum_cr_all_plans":101856.06,"aum_date":"2026-09-30","riskometer":"Very High"},"ssd":{"doc_date":"2026-09-11T11:54:34","fund_name":"HDFC Mid Cap Fund","sebi_category":"Mid Cap Fund"},"ter":{"date":"2026-09-30","regular":1.31,"direct":0.76,"ber_regular":1.09,"ber_direct":0.61}},"license":"CC0 1.0 - ..."}}}},"400":{"description":"Bad input. `error.code` names the problem (INVALID_IDENTIFIER, INVALID_DATE_FORMAT, MISSING_IDENTIFIER, TOO_MANY_SCHEMES, UNRECOGNIZED_PARAMETER, ...). Full list: error_shape.known_codes in the catalog at /mf/v1/.","content":{"application/json":{"example":{"detail":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","code":"MISSING_IDENTIFIER","path":"/mf/v1/details","error":{"code":"MISSING_IDENTIFIER","message":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"404":{"description":"SCHEME_NOT_FOUND (no scheme with that code or ISIN), NO_DETAILS (the scheme exists but we hold no AUM, document or TER for it) or NOT_FOUND.","content":{"application/json":{"example":{"detail":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","code":"NO_DETAILS","path":"/mf/v1/schemes/139585/details","error":{"code":"NO_DETAILS","message":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"422":{"description":"VALIDATION_ERROR - a parameter failed type or length checks. Same envelope as every other error, plus error.field.","content":{"application/json":{"example":{"detail":"Invalid `q`: String should have at least 2 characters","code":"VALIDATION_ERROR","path":"/mf/v1/search","error":{"code":"VALIDATION_ERROR","message":"Invalid `q`: String should have at least 2 characters","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"429":{"description":"TOO_MANY_REQUESTS (rate limit) or BUSY_LARGE_REQUEST (a big request while the server is busy). Same envelope; Retry-After is set and the body carries `reason` naming which limit."},"503":{"description":"BUSY_RETRY, DETAILS_UNAVAILABLE or DOWNLOAD_UNAVAILABLE - briefly unavailable; retry after Retry-After.","content":{"application/json":{"example":{"detail":"Scheme details are temporarily unavailable.","code":"DETAILS_UNAVAILABLE","path":"/mf/v1/details","error":{"code":"DETAILS_UNAVAILABLE","message":"Scheme details are temporarily unavailable.","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}}},"externalDocs":{"description":"Endpoint documentation on the MF NAV API page","url":"https://www.tigzig.com/apis/mf-nav#endpoints"}}},"/mf/v1/details":{"get":{"tags":["MF NAV -Open Mutual Fund Data"],"summary":"Scheme details for up to 50 schemes","description":"Details for up to 50 schemes in one call: `{count, data, not_found, no_details}`. `data` is a\nLIST of the same objects /schemes/{code}/details returns (there it is a single object), plus\n`not_found` (identifiers that are not schemes) and `no_details` (schemes we hold no details\nfor). `scheme=` takes a single code with the same response shape. `view=compact` returns the\nfields checked most often (about 660 characters per scheme); `fields=` picks exact fields.","operationId":"mf_details","parameters":[{"name":"schemes","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated AMFI codes and/or ISINs. Max 50.","title":"Schemes"},"description":"Comma-separated AMFI codes and/or ISINs. Max 50."},{"name":"scheme","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One AMFI code or ISIN.","title":"Scheme"},"description":"One AMFI code or ISIN."},{"name":"view","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`full` (default) returns every field. `compact` returns the fields checked most often: identifiers, fund AUM and its date, riskometer, benchmark, managers, allotment date, TER and BER (about 660 characters per scheme against about 4,800). Through MCP, mf_details defaults to `compact`. Ignored when `fields` is given.","title":"View"},"description":"`full` (default) returns every field. `compact` returns the fields checked most often: identifiers, fund AUM and its date, riskometer, benchmark, managers, allotment date, TER and BER (about 660 characters per scheme against about 4,800). Through MCP, mf_details defaults to `compact`. Ignored when `fields` is given."},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of the fields you want, e.g. `isin,ter.direct,amfi_daily.fund_aum_cr_all_plans`. Use a group name (`ter`, `amfi_daily`, `ssd`) for the whole group and `group.field` for one field inside it. `scheme_code` is always included. An unknown name returns 400 UNKNOWN_FIELD with the list of valid names.","title":"Fields"},"description":"Comma list of the fields you want, e.g. `isin,ter.direct,amfi_daily.fund_aum_cr_all_plans`. Use a group name (`ter`, `amfi_daily`, `ssd`) for the whole group and `group.field` for one field inside it. `scheme_code` is always included. An unknown name returns 400 UNKNOWN_FIELD with the list of valid names."}],"responses":{"200":{"description":"`data` is a LIST of the same objects /schemes/{code}/details returns. `count` = len(data). `not_found` = identifiers that are not schemes; `no_details` = schemes we hold nothing for (the same codes /schemes/{code}/details answers with 404 NO_DETAILS). Groups can be null.","content":{"application/json":{"schema":{},"example":{"count":1,"data":[{"scheme_code":118989,"isin":"INF179K01XQ0","scheme_name":"HDFC Mid Cap Fund - Growth Option - Direct Plan","fund_name_latest":"HDFC Mid Cap Fund","amc":"HDFC Mutual Fund","category_group_clean":"Equity Scheme","category_sub":"Mid Cap Fund","scheme_plan":"Direct","is_active":true,"amfi_ssd_fund_id":"2526","amfi_daily":{"fund_name":"HDFC Mid Cap Fund","fund_aum_cr_all_plans":101856.06,"aum_date":"2026-09-30","riskometer":"Very High"},"ssd":{"doc_date":"2026-09-11T11:54:34","fund_name":"HDFC Mid Cap Fund","sebi_category":"Mid Cap Fund"},"ter":{"date":"2026-09-30","regular":1.31,"direct":0.76,"ber_regular":1.09,"ber_direct":0.61}}],"not_found":["9999999"],"no_details":["139585"],"license":"CC0 1.0 - ..."}}}},"400":{"description":"Bad input. `error.code` names the problem (INVALID_IDENTIFIER, INVALID_DATE_FORMAT, MISSING_IDENTIFIER, TOO_MANY_SCHEMES, UNRECOGNIZED_PARAMETER, ...). Full list: error_shape.known_codes in the catalog at /mf/v1/.","content":{"application/json":{"example":{"detail":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","code":"MISSING_IDENTIFIER","path":"/mf/v1/details","error":{"code":"MISSING_IDENTIFIER","message":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"404":{"description":"SCHEME_NOT_FOUND (no scheme with that code or ISIN), NO_DETAILS (the scheme exists but we hold no AUM, document or TER for it) or NOT_FOUND.","content":{"application/json":{"example":{"detail":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","code":"NO_DETAILS","path":"/mf/v1/schemes/139585/details","error":{"code":"NO_DETAILS","message":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"422":{"description":"VALIDATION_ERROR - a parameter failed type or length checks. Same envelope as every other error, plus error.field.","content":{"application/json":{"example":{"detail":"Invalid `q`: String should have at least 2 characters","code":"VALIDATION_ERROR","path":"/mf/v1/search","error":{"code":"VALIDATION_ERROR","message":"Invalid `q`: String should have at least 2 characters","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"429":{"description":"TOO_MANY_REQUESTS (rate limit) or BUSY_LARGE_REQUEST (a big request while the server is busy). Same envelope; Retry-After is set and the body carries `reason` naming which limit."},"503":{"description":"BUSY_RETRY, DETAILS_UNAVAILABLE or DOWNLOAD_UNAVAILABLE - briefly unavailable; retry after Retry-After.","content":{"application/json":{"example":{"detail":"Scheme details are temporarily unavailable.","code":"DETAILS_UNAVAILABLE","path":"/mf/v1/details","error":{"code":"DETAILS_UNAVAILABLE","message":"Scheme details are temporarily unavailable.","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}}},"externalDocs":{"description":"Endpoint documentation on the MF NAV API page","url":"https://www.tigzig.com/apis/mf-nav#endpoints"}}},"/mf/v1/downloads/manifest":{"get":{"tags":["MF NAV -Open Mutual Fund Data"],"summary":"Download file sizes and metadata","description":"Returns pre-generated file sizes and row counts.\n\nSupports ETag / If-None-Match for cheap re-polling. If the manifest hasn't\nchanged since the caller's last fetch, returns `304 Not Modified` with an\nempty body (saves bandwidth for daily polls).","operationId":"downloads_manifest_mf_v1_downloads_manifest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad input. `error.code` names the problem (INVALID_IDENTIFIER, INVALID_DATE_FORMAT, MISSING_IDENTIFIER, TOO_MANY_SCHEMES, UNRECOGNIZED_PARAMETER, ...). Full list: error_shape.known_codes in the catalog at /mf/v1/.","content":{"application/json":{"example":{"detail":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","code":"MISSING_IDENTIFIER","path":"/mf/v1/details","error":{"code":"MISSING_IDENTIFIER","message":"Pass schemes=<code or ISIN>,<code or ISIN> (max 50).","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"404":{"description":"SCHEME_NOT_FOUND (no scheme with that code or ISIN), NO_DETAILS (the scheme exists but we hold no AUM, document or TER for it) or NOT_FOUND.","content":{"application/json":{"example":{"detail":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","code":"NO_DETAILS","path":"/mf/v1/schemes/139585/details","error":{"code":"NO_DETAILS","message":"Scheme 139585 exists but we hold no AUM, scheme-document or TER data for it. NAV is at https://api.tigzig.com/mf/v1/schemes/139585/nav","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"422":{"description":"VALIDATION_ERROR - a parameter failed type or length checks. Same envelope as every other error, plus error.field.","content":{"application/json":{"example":{"detail":"Invalid `q`: String should have at least 2 characters","code":"VALIDATION_ERROR","path":"/mf/v1/search","error":{"code":"VALIDATION_ERROR","message":"Invalid `q`: String should have at least 2 characters","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}},"429":{"description":"TOO_MANY_REQUESTS (rate limit) or BUSY_LARGE_REQUEST (a big request while the server is busy). Same envelope; Retry-After is set and the body carries `reason` naming which limit."},"503":{"description":"BUSY_RETRY, DETAILS_UNAVAILABLE or DOWNLOAD_UNAVAILABLE - briefly unavailable; retry after Retry-After.","content":{"application/json":{"example":{"detail":"Scheme details are temporarily unavailable.","code":"DETAILS_UNAVAILABLE","path":"/mf/v1/details","error":{"code":"DETAILS_UNAVAILABLE","message":"Scheme details are temporarily unavailable.","docs_url":"https://api.tigzig.com/mf/v1/docs"}}}}}},"externalDocs":{"description":"Endpoint documentation on the MF NAV API page","url":"https://www.tigzig.com/apis/mf-nav#endpoints"}}},"/tremor/v1/terms":{"get":{"tags":["Tremor - Global Macro Indicators"],"summary":"Licence, data source and warranty, as plain text","description":"The same three statements the whole API carries, as plain text you can save\nor diff, rather than JSON you have to unwrap.\n\n**Licence.** To the extent this service holds any rights in the compilation, meaning\nthe assembly, the schema and the derived fields, they are released under CC0 1.0. No\nattribution required, though it is always appreciated.\n\n**Source.** The underlying series are published by their original\nsources as public records, and this service reformats and republishes them. It is not\nan authoritative source and is not affiliated with or endorsed by any of them. The licence above covers this\nservice's compilation of it, never the underlying records themselves. No rights in\nthose are claimed here and none are granted, so check the original publisher's own terms before\nrelying on it.\n\n**No warranty.** Provided as is. No guarantee of accuracy, completeness or\navailability, and no support commitment.\n\nThe same three statements also travel with the bulk downloads: in the manifest, and\nin the footer metadata of the parquet files, so they survive being copied onward.\n\nReturns `text/plain`, cached for a day.","operationId":"tremor_terms","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}}},"/tremor/v1/":{"get":{"tags":["Tremor - Global Macro Indicators"],"summary":"API catalog - list endpoints and quickstart","description":"Tremor public API entry point.\n\nReturns the list of endpoints, a short usage note, and links to the OpenAPI\nspec, Swagger docs and the data dictionary. Agents should call\n`/tremor/v1/indicators` first to discover what is available, then\n`/tremor/v1/series` to pull data.","operationId":"tremor_catalog","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}}},"/tremor/v1/directory":{"get":{"tags":["Tremor - Global Macro Indicators"],"summary":"Compact indicator directory as plain text (for self-hosted MCP wrappers)","description":"Returns the same compact directory string used as the production MCP tool\ndescription.\n\nIncludes the READ-FIRST preamble, the SUFFIX and DATE conventions, and one line\nper indicator: `indicator_id | name [SA|NSA] | source:source_series_id | unit |\nfreq`.\n\n## When to use this\n\nSelf-hosted MCP wrappers that want to give their agent the production-curated\ncatalog at tool-discovery time - without baking the heavier full `/indicators`\nJSON (which carries per-row notes and methodology) into the tool description.\n\nPlain-text response so it can be used verbatim as a tool description.","operationId":"tremor_directory","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}}},"/tremor/v1/indicators":{"get":{"tags":["Tremor - Global Macro Indicators"],"summary":"Data dictionary of all available macro indicators","description":"Returns metadata for every visible macro indicator: `indicator_id`, `name`, `category`, `country`, `frequency`, `unit`, `source`, `source_series_id`, seasonal-adjustment flag, `first_date`, `last_date`, and `record_count`.\n\n## Directory vs full metadata\n\nThe compact directory embedded below is a **convenience index for tool-discovery**. It carries the five structural facts an agent needs to pick the right indicator: `indicator_id`, `name` (with SA/NSA tag), `source:source_series_id`, `unit`, and `frequency`.\n\nBefore COMPUTING anything (rates, cross-source comparisons, annualisations), call this endpoint with no filters, or by `indicator_id`, to fetch the full per-indicator metadata. That response also includes:\n\n- Exact `first_date` and `last_date`.\n- `record_count`.\n- The `notes` field, which carries methodology detail (NCO annualisation rules, FFIEC delinquency definitions, source-method discontinuities, base-year vintages).\n\nThe directory is sufficient for discovery; the full metadata is required for correct computation.\n\n## Filters\n\nAll filters are optional and case-insensitive (`country=us` matches `US`).\n\n- `category` - comma-separated. e.g. `category=inflation`.\n- `country` - ISO code, comma-separated. e.g. `country=US,IN`.\n- `source` - publisher slug, comma-separated. e.g. `source=FRED`.\n- `frequency` - one of `daily`, `weekly`, `monthly`, `quarterly`, `annual`. Comma-separated.\n\n## Directory format\n\nEvery row: `indicator_id | name [SA|NSA] | source:source_series_id | unit | freq`.\n\n- `[SA]` - seasonally adjusted by the publisher. `[NSA]` - not. No tag means the SA flag is unknown.\n- `freq` values: `D` daily, `W` weekly, `M` monthly, `Q` quarterly, `A` annual.\n- `unit` examples: `percent`, `thousands_usd`, `billions_usd`, `index`, `usd`, `millions`.\n- Rows are grouped by country and category. Id prefixes (`us_`, `in_`, `eu_`, `gl_`, `oecd_`) encode country or scope.\n\n### Period-type suffix convention\n\nThe suffix on an `indicator_id` names the period-type semantic of each value. Getting this wrong is the single most common computation error on this API, so read this before using any `_qtr` or `_ytd` series.\n\n- `_qtr` - per-quarter, in-period only. NOT ytd-cumulative. Example: `us_bank_nco_consumer_qtr`.\n- `_ytd` - year-to-date cumulative within a calendar year, resets at Q1. Currently no `_ytd` indicators are visible in the API (FDIC NCO ytd rows are hidden in favour of their `_qtr` siblings).\n- `_ann` - already annualised.\n- `_12mo` / `_6mo` - rolling window ending at the observation date.\n- No suffix - a stock snapshot (point-in-time balance or rate as of the date) OR a pre-computed rate. Use `frequency` plus name context to disambiguate stock vs rate.\n\nIf an indicator's semantic is unclear from name + unit + freq, call this endpoint by `indicator_id` and read the `notes` field before computing.\n\n### Date-anchor convention\n\nEach row's `date` is the anchor for the period the row represents. The period's length is set by `frequency`. Two rows at the same period may carry different `date` values depending on which end of the period the publisher anchors to.\n\n- END of period (last day): FDIC, NCUA, NY Fed, MoSPI-quarterly. April 2026 monthly value = `2026-04-30`. Q4 2025 = `2025-12-31`.\n- START of period (first day): FRED, OECD, MANHEIM, SHILLER, UMICH, RBI, MoSPI-monthly. April 2026 monthly = `2026-04-01`. Q4 2025 = `2025-10-01`.\n\nTo align two indicators from the same period across different anchors, normalise each `date` and join on the normalised value:\n\n```sql\ndate_trunc('month', date)     -- for monthly series\ndate_trunc('quarter', date)   -- for quarterly series\n```\n\nDo NOT assume two rows with different `date` values represent different periods until you have checked each source's anchor. The failure mode is **looks like missing data**, not wrong values.\n\n## Directory\n\n288 entries, refreshed 2026-06-10.\n\n# CN pmi\noecd_bci_cn | OECD Business Confidence - China [SA] | OECD:OECD_BCICP_CHN | index | M\n\n# DE pmi\noecd_bci_de | OECD Business Confidence - Germany [SA] | OECD:OECD_BCICP_DEU | index | M\n\n# DE sovereign_bonds\nde_bund_10y_yield | Germany 10Y Bund Yield [NSA] | BUNDESBANK:BBSIS_DE10Y_ZC | percent | D\n\n# EU sovereign_bonds\neu_yc_aaa_10y | Euro Area AAA Yield Curve 10Y Spot Rate [NSA] | ECB:YC_B_U2_G_N_A_SR_10Y | percent | D\neu_yc_all_10y | Euro Area All-Issuer Yield Curve 10Y Spot Rate [NSA] | ECB:YC_B_U2_G_N_C_SR_10Y | percent | D\n\n# GB pmi\noecd_bci_gb | OECD Manufacturing Confidence - United Kingdom [SA] | OECD:OECD_BCICP_GBR | index | M\n\n# GB sovereign_bonds\nuk_gilt_10y_yield | UK 10Y Gilt Yield [NSA] | BOE:IUDMNZC | percent | D\n\n# GLOBAL commodity\ngl_brent_spot | Brent Crude Oil Spot Price (FOB) [NSA] | FRED:DCOILBRENTEU | usd_per_barrel | D\ngl_wti_spot | WTI Crude Oil Spot Price (Cushing) [NSA] | FRED:DCOILWTICO | usd_per_barrel | D\n\n# IN external\nin_foreign_currency_assets | Foreign Currency Assets (FCA) [USD] [NSA] | RBI:DBIE_API_FCA_USD | usd_million | W\nin_net_fdi | Net Foreign Direct Investment [NSA] | RBI:DBIE_monthly_in_net_fdi | usd_million | M\nin_net_fpi | Net Portfolio Investment [NSA] | RBI:WSS_RBIB34_2 | usd_million | M\nin_total_forex_reserves | Total Foreign Exchange Reserves [USD] [NSA] | RBI:DBIE_API_TR_USD | usd_million | W\nin_trade_balance | Foreign Trade Balance Total [NSA] | RBI:WSS_RBIB31_3 | usd_million | M\n\n# IN gdp\nin_gdp_constant | GDP at Market Prices (Base 2011-12) [NSA] | MoSPI:MOSPI_NAS_GDP | crore_inr | Q\nin_gdp_constant_2223 | GDP at Market Prices (Base 2022-23) [NSA] | MoSPI:MOSPI_NAS_GDP_2223 | crore_inr | Q\nin_gfcf_constant | Gross Fixed Capital Formation (Base 2011-12) [NSA] | MoSPI:MOSPI_NAS_GFCF | crore_inr | Q\nin_gfcf_constant_2223 | Gross Fixed Capital Formation (Base 2022-23) [NSA] | MoSPI:MOSPI_NAS_GFCF_2223 | crore_inr | Q\n\n# IN inflation\nin_cpi_combined_2024 | CPI Combined (Base 2024=100) [NSA] | MoSPI:MOSPI_CPI_2024_GENERAL | index | M\nin_wpi | Wholesale Price Index (Base: 2011-12=100) [NSA] | MoSPI:MOSPI_WPI_ALL | index | M\n\n# IN monetary\nin_aggregate_deposits | Aggregate Deposits [NSA] | RBI:DBIE_fortnightly_in_aggregate_deposits | inr_crore | ?\nin_aggregate_deposits_yoy_growth | Aggregate Deposits (YoY Growth %) [NSA] | RBI:WSS_RBIB01_11 | yoy_percent | M\nin_bank_credit | Bank Credit [NSA] | RBI:DBIE_fortnightly_in_bank_credit | inr_crore | ?\nin_bank_credit_yoy_growth | Bank Credit (YoY Growth %) [NSA] | RBI:WSS_RBIB01_12 | yoy_percent | M\nin_credit_deposit_ratio_computed | Credit Deposit Ratio [NSA] | COMPUTED:WSS_RBIB01_22 | percent | M\nin_gsec_10y_yield | 10-Year G-Sec Yield (FBIL) [NSA] | RBI:WSS_RBIB01_38 | percent | W\nin_m3 | M3 Money Supply [NSA] | RBI:DBIE_fortnightly_in_m3 | inr_crore | ?\nin_m3_yoy_growth | Broad Money M3 (YoY Growth %) [NSA] | RBI:WSS_RBIB01_17 | yoy_percent | M\nin_nonfood_credit_yoy_growth | Non-food Credit (YoY Growth %) [NSA] | RBI:WSS_RBIB01_13 | yoy_percent | M\nin_repo_rate | Policy Repo Rate [NSA] | RBI:WSS_RBIB01_27 | percent | W\nin_tbill_91d_yield | 91-Day Treasury Bill (Primary) Yield [NSA] | RBI:WSS_RBIB01_35 | percent | W\n\n# IN real_sector\nin_iip | Index of Industrial Production (IIP) [NSA] | MoSPI:MOSPI_IIP_GENERAL | index | M\n\n# IN valuation\nin_nifty50_divyield | Nifty 50 Dividend Yield [NSA] | NSE:NIFTYINDICES_PEPB | percent | D\nin_nifty50_pb | Nifty 50 P/B Ratio [NSA] | NSE:NIFTYINDICES_PEPB | ratio | D\nin_nifty50_pe | Nifty 50 P/E Ratio [NSA] | NSE:NIFTYINDICES_PEPB | ratio | D\n\n# US consumer\nus_consumer_sentiment | University of Michigan Consumer Sentiment [NSA] | UMICH:UMICH_SCA_HOMEPAGE | index | M\nus_disposable_personal_income | Disposable Personal Income (SA Annual Rate) [SA] | FRED:DSPI | billions_usd_saar | M\nus_gasoline_price_unleaded | Average Price: Gasoline, Unleaded Regular (per Gallon) [NSA] | FRED:APU000074714 | usd_per_gallon | M\nus_manheim_used_vehicle_index | Manheim Used Vehicle Value Index (SA) [SA] | MANHEIM:MUVVI | index | M\nus_manheim_used_vehicle_index_nsa | Manheim Used Vehicle Value Index (NSA, $ amount) [NSA] | MANHEIM:MUVVI | usd | M\nus_personal_saving_rate | Personal Saving Rate (% of Disposable Personal Income) [SA] | FRED:PSAVERT | percent | M\nus_retail_sales | Advance Retail Sales: Retail and Food Services [SA] | FRED:RSAFS | millions_usd | M\nus_revolving_consumer_credit | Revolving Consumer Credit Outstanding [SA] | FRED:REVOLSL | billions_usd | M\n\n# US financial\nus_baa_credit_spread | Baa Corporate Bond Spread vs 10Y Treasury [NSA] | FRED:BAA10Y | percent | D\nus_sloos_cc_tightening | SLOOS: Net % Banks Tightening Credit Card Standards [NSA] | FRED:DRTSCLCC | percent | Q\nus_sloos_ci_loan_demand | SLOOS: Net % Banks Reporting Stronger C&I Loan Demand (Large Firms) [NSA] | FRED:DRSDCILM | percent | Q\nus_vix | CBOE Volatility Index (VIX) [NSA] | FRED:VIXCLS | index | D\n\n# US gdp\nus_industrial_production | Industrial Production Index [SA] | FRED:INDPRO | index | M\nus_real_gdp | Real Gross Domestic Product [SA] | FRED:GDPC1 | billions_2017_usd | Q\nus_real_gdp_growth | Real GDP Growth Rate (Annualized QoQ) [SA] | FRED:A191RL1Q225SBEA | percent | Q\n\n# US housing\nus_housing_starts | Housing Starts: Total New Privately Owned [SA] | FRED:HOUST | thousands | M\nus_median_home_sales_price | Median Sales Price of Houses Sold [NSA] | FRED:MSPUS | usd | Q\nus_mortgage_30y_fixed_rate | 30-Year Fixed Mortgage Rate (Freddie Mac PMMS) [NSA] | FRED:MORTGAGE30US | percent | W\n\n# US inflation\nus_core_cpi | Core CPI (All Items Less Food and Energy) [SA] | FRED:CPILFESL | index | M\nus_core_pce | Core PCE (Ex Food and Energy, Fed 2% Target) [SA] | FRED:PCEPILFE | index | M\nus_cpi_used_cars | CPI: Used Cars and Trucks [SA] | FRED:CUSR0000SETA02 | index | M\nus_ppi_core | PPI: Core (Ex Food and Energy) [SA] | FRED:PPICOR | index | M\nus_ppi_final_demand | PPI: Final Demand [SA] | FRED:PPIFID | index | M\n\n# US labor\nus_initial_jobless_claims | Initial Jobless Claims [SA] | FRED:ICSA | number | W\nus_nonfarm_payrolls | Total Nonfarm Payroll Employment [SA] | FRED:PAYEMS | thousands | M\nus_unemployment_rate | Unemployment Rate (U-3) [SA] | FRED:UNRATE | percent | M\nus_unemployment_rate_u1 | U-1 Long-Term Unemployment Rate (15+ Weeks) [SA] | FRED:U1RATE | percent | M\nus_unemployment_rate_u6 | U-6 Unemployment Rate (Underemployment) [SA] | FRED:U6RATE | percent | M\n\n# US monetary\nus_fed_funds_rate | Federal Funds Effective Rate [NSA] | FRED:FEDFUNDS | percent | M\nus_tips_10y_yield | 10-Year TIPS Yield (Real Interest Rate) [NSA] | FRED:DFII10 | percent | D\nus_treasury_10y_yield | 10-Year Treasury Yield [NSA] | FRED:DGS10 | percent | D\nus_treasury_2y_yield | 2-Year Treasury Yield [NSA] | FRED:DGS2 | percent | D\nus_treasury_30y_yield | 30-Year Treasury Yield [NSA] | FRED:DGS30 | percent | D\nus_treasury_3m_yield | 3-Month Treasury Yield (T-Bill) [NSA] | FRED:DGS3MO | percent | D\nus_yield_curve_10y_2y | 10Y-2Y Treasury Spread (Yield Curve) [NSA] | FRED:T10Y2Y | percent | D\n\n# US pmi\noecd_bci_us | OECD Business Confidence - United States [SA] | OECD:OECD_BCICP_USA | index | M\n\n# US us_bank_aggregates\nus_bank_bal_ag | Agricultural Production Loans [NSA] | FDIC:LNAG | thousands_usd | Q\nus_bank_bal_ci | Commercial & Industrial Loans [NSA] | FDIC:LNCI | thousands_usd | Q\nus_bank_bal_consumer | Consumer Loans [NSA] | FDIC:LNCON | thousands_usd | Q\nus_bank_bal_consumer_auto | Consumer: Auto Loans [NSA] | FDIC:LNAUTO | thousands_usd | Q\nus_bank_bal_consumer_cc | Consumer: Credit Cards [NSA] | FDIC:LNCRCD | thousands_usd | Q\nus_bank_bal_consumer_other | Consumer: Other [NSA] | FDIC:LNCONOTH | thousands_usd | Q\nus_bank_bal_dep | Loans to Depository Institutions [NSA] | FDIC:LNDEP | thousands_usd | Q\nus_bank_bal_foreign_govt | Loans to Foreign Governments [NSA] | FDIC:LNFG | thousands_usd | Q\nus_bank_bal_lease | Lease Financing Receivables [NSA] | FDIC:LS | thousands_usd | Q\nus_bank_bal_muni | Obligations of States & Political Subdivisions [NSA] | FDIC:LNMUNI | thousands_usd | Q\nus_bank_bal_other | All Other Loans [NSA] | FDIC:LNOTHER | thousands_usd | Q\nus_bank_bal_re | Real Estate Loans [NSA] | FDIC:LNRE | thousands_usd | Q\nus_bank_bal_re_construction | RE: Construction & Development [NSA] | FDIC:LNRECONS | thousands_usd | Q\nus_bank_bal_re_cre | RE: Nonfarm Nonresidential (CRE) [NSA] | FDIC:LNRENRES | thousands_usd | Q\nus_bank_bal_re_farmland | RE: Farmland [NSA] | FDIC:LNREAG | thousands_usd | Q\nus_bank_bal_re_multifamily | RE: Multifamily Residential [NSA] | FDIC:LNREMULT | thousands_usd | Q\nus_bank_bal_re_residential | RE: 1-4 Family Residential [NSA] | FDIC:LNRERES | thousands_usd | Q\nus_bank_bal_total | Total Loans & Leases [NSA] | FDIC:LNLSGR | thousands_usd | Q\nus_bank_na_ag | Agriculture Nonaccrual [NSA] | FDIC:NAAG | thousands_usd | Q\nus_bank_na_auto | Auto Nonaccrual [NSA] | FDIC:NAAUTO | thousands_usd | Q\nus_bank_na_cc | Credit Card Nonaccrual [NSA] | FDIC:NACRCD | thousands_usd | Q\nus_bank_na_ci | C&I Nonaccrual [NSA] | FDIC:NACI | thousands_usd | Q\nus_bank_na_consumer | Consumer Nonaccrual [NSA] | FDIC:NACON | thousands_usd | Q\nus_bank_na_dep | Depository Inst Nonaccrual [NSA] | FDIC:NADEP | thousands_usd | Q\nus_bank_na_foreign_govt | Foreign Govt Nonaccrual [NSA] | FDIC:NAFG | thousands_usd | Q\nus_bank_na_lease | Lease Financing Nonaccrual [NSA] | FDIC:NALS | thousands_usd | Q\nus_bank_na_other | Other Loans Nonaccrual [NSA] | FDIC:NAOTHLN | thousands_usd | Q\nus_bank_na_re | RE Nonaccrual [NSA] | FDIC:NARE | thousands_usd | Q\nus_bank_na_total | Total Nonaccrual [NSA] | FDIC:NALNLS | thousands_usd | Q\nus_bank_nc_ag | Agriculture Noncurrent [NSA] | FDIC:NCAG | thousands_usd | Q\nus_bank_nc_auto | Auto Noncurrent [NSA] | FDIC:NCAUTO | thousands_usd | Q\nus_bank_nc_cc | Credit Card Noncurrent [NSA] | FDIC:NCCRCD | thousands_usd | Q\nus_bank_nc_ci | C&I Noncurrent [NSA] | FDIC:NCCI | thousands_usd | Q\nus_bank_nc_consumer | Consumer Noncurrent [NSA] | FDIC:NCCON | thousands_usd | Q\nus_bank_nc_dep | Depository Inst Noncurrent [NSA] | FDIC:NCDEP | thousands_usd | Q\nus_bank_nc_foreign_govt | Foreign Govt Noncurrent [NSA] | FDIC:NCFG | thousands_usd | Q\nus_bank_nc_lease | Lease Financing Noncurrent [NSA] | FDIC:NCLS | thousands_usd | Q\nus_bank_nc_other | Other Loans Noncurrent [NSA] | FDIC:NCOTHLN | thousands_usd | Q\nus_bank_nc_re | RE Noncurrent [NSA] | FDIC:NCRE | thousands_usd | Q\nus_bank_nc_total | Total Noncurrent [NSA] | FDIC:NCLNLS | thousands_usd | Q\nus_bank_nco_ag | Agriculture Net Charge-Offs [NSA] | FDIC:NTAG | thousands_usd | Q\nus_bank_nco_ag_qtr | Agriculture Net Charge-Offs (quarterly $, non-cumulative; x4 to annualize) [NSA] | FDIC:NTAG | thousands_usd | Q\nus_bank_nco_auto | Auto Net Charge-Offs [NSA] | FDIC:NTAUTO | thousands_usd | Q\nus_bank_nco_auto_qtr | Auto Net Charge-Offs (quarterly $, non-cumulative; x4 to annualize) [NSA] | FDIC:NTAUTO | thousands_usd | Q\nus_bank_nco_cc | Credit Card Net Charge-Offs [NSA] | FDIC:NTCRCD | thousands_usd | Q\nus_bank_nco_cc_qtr | Credit Card Net Charge-Offs (quarterly $, non-cumulative; x4 to annualize) [NSA] | FDIC:NTCRCD | thousands_usd | Q\nus_bank_nco_ci | C&I Net Charge-Offs [NSA] | FDIC:NTCI | thousands_usd | Q\nus_bank_nco_ci_qtr | C&I Net Charge-Offs (quarterly $, non-cumulative; x4 to annualize) [NSA] | FDIC:NTCI | thousands_usd | Q\nus_bank_nco_consumer | Consumer Net Charge-Offs [NSA] | FDIC:NTCON | thousands_usd | Q\nus_bank_nco_consumer_qtr | Consumer Net Charge-Offs (quarterly $, non-cumulative; x4 to annualize) [NSA] | FDIC:NTCON | thousands_usd | Q\nus_bank_nco_lease | Lease Financing Net Charge-Offs [NSA] | FDIC:NTLS | thousands_usd | Q\nus_bank_nco_lease_qtr | Lease Financing Net Charge-Offs (quarterly $, non-cumulative; x4 to annualize) [NSA] | FDIC:NTLS | thousands_usd | Q\nus_bank_nco_other | Other Loans Net Charge-Offs [NSA] | FDIC:NTOTHER | thousands_usd | Q\nus_bank_nco_other_qtr | Other Loans Net Charge-Offs (quarterly $, non-cumulative; x4 to annualize) [NSA] | FDIC:NTOTHER | thousands_usd | Q\nus_bank_nco_re | RE Net Charge-Offs [NSA] | FDIC:NTRE | thousands_usd | Q\nus_bank_nco_re_qtr | RE Net Charge-Offs (quarterly $, non-cumulative; x4 to annualize) [NSA] | FDIC:NTRE | thousands_usd | Q\nus_bank_nco_total | Total Net Charge-Offs [NSA] | FDIC:NTLNLS | thousands_usd | Q\nus_bank_nco_total_qtr | Total Net Charge-Offs (quarterly $, non-cumulative; x4 to annualize) [NSA] | FDIC:NTLNLS | thousands_usd | Q\nus_bank_p30_ag | Agriculture 30-89 Days Past Due [NSA] | FDIC:P3AG | thousands_usd | Q\nus_bank_p30_auto | Auto 30-89 Days Past Due [NSA] | FDIC:P3AUTO | thousands_usd | Q\nus_bank_p30_cc | Credit Card 30-89 Days Past Due [NSA] | FDIC:P3CRCD | thousands_usd | Q\nus_bank_p30_ci | C&I 30-89 Days Past Due [NSA] | FDIC:P3CI | thousands_usd | Q\nus_bank_p30_consumer | Consumer 30-89 Days Past Due [NSA] | FDIC:P3CON | thousands_usd | Q\nus_bank_p30_dep | Depository Inst 30-89 DPD [NSA] | FDIC:P3DEP | thousands_usd | Q\nus_bank_p30_foreign_govt | Foreign Govt 30-89 DPD [NSA] | FDIC:P3FG | thousands_usd | Q\nus_bank_p30_lease | Lease Financing 30-89 DPD [NSA] | FDIC:P3LS | thousands_usd | Q\nus_bank_p30_other | Other Loans 30-89 DPD [NSA] | FDIC:P3OTHLN | thousands_usd | Q\nus_bank_p30_re | RE 30-89 Days Past Due [NSA] | FDIC:P3RE | thousands_usd | Q\nus_bank_p30_total | Total 30-89 Days Past Due [NSA] | FDIC:P3LNLS | thousands_usd | Q\nus_bank_p90_ag | Agriculture 90+ Days Past Due [NSA] | FDIC:P9AG | thousands_usd | Q\nus_bank_p90_auto | Auto 90+ Days Past Due [NSA] | FDIC:P9AUTO | thousands_usd | Q\nus_bank_p90_cc | Credit Card 90+ Days Past Due [NSA] | FDIC:P9CRCD | thousands_usd | Q\nus_bank_p90_ci | C&I 90+ Days Past Due [NSA] | FDIC:P9CI | thousands_usd | Q\nus_bank_p90_consumer | Consumer 90+ Days Past Due [NSA] | FDIC:P9CON | thousands_usd | Q\nus_bank_p90_dep | Depository Inst 90+ DPD [NSA] | FDIC:P9DEP | thousands_usd | Q\nus_bank_p90_foreign_govt | Foreign Govt 90+ DPD [NSA] | FDIC:P9FG | thousands_usd | Q\nus_bank_p90_lease | Lease Financing 90+ DPD [NSA] | FDIC:P9LS | thousands_usd | Q\nus_bank_p90_other | Other Loans 90+ DPD [NSA] | FDIC:P9OTHLN | thousands_usd | Q\nus_bank_p90_re | RE 90+ Days Past Due [NSA] | FDIC:P9RE | thousands_usd | Q\nus_bank_p90_total | Total 90+ Days Past Due [NSA] | FDIC:P9LNLS | thousands_usd | Q\n\n# US us_cu_aggregates\nus_cu_bal_commercial | Commercial [NSA] | NCUA:bal_commercial | thousands_usd | Q\nus_cu_bal_commercial_nonre | Commercial Nonre [NSA] | NCUA:bal_commercial_nonre | thousands_usd | Q\nus_cu_bal_commercial_re | Commercial Real Estate [NSA] | NCUA:bal_commercial_re | thousands_usd | Q\nus_cu_bal_consumer | Consumer [NSA] | NCUA:bal_consumer | thousands_usd | Q\nus_cu_bal_consumer_auto | Consumer Auto [NSA] | NCUA:bal_consumer_auto | thousands_usd | Q\nus_cu_bal_consumer_auto_new | Consumer Auto New [NSA] | NCUA:bal_new_vehicle | thousands_usd | Q\nus_cu_bal_consumer_auto_used | Consumer Auto Used [NSA] | NCUA:bal_used_vehicle | thousands_usd | Q\nus_cu_bal_consumer_cc | Consumer Credit Cards [NSA] | NCUA:bal_credit_card | thousands_usd | Q\nus_cu_bal_consumer_leases | Consumer Leases [NSA] | NCUA:bal_leases | thousands_usd | Q\nus_cu_bal_consumer_other_sec | Consumer Other Sec [NSA] | NCUA:bal_other_secured_nre | thousands_usd | Q\nus_cu_bal_consumer_other_unsec | Consumer Other Unsec [NSA] | NCUA:bal_other_unsecured | thousands_usd | Q\nus_cu_bal_consumer_pal | Consumer PAL (Payday Alt) [NSA] | NCUA:bal_pal | thousands_usd | Q\nus_cu_bal_consumer_student | Consumer Student [NSA] | NCUA:bal_student | thousands_usd | Q\nus_cu_bal_re | Real Estate [NSA] | NCUA:bal_re | thousands_usd | Q\nus_cu_bal_re_1to4_1st | Real Estate 1To4 1St [NSA] | NCUA:bal_re_1to4_1st | thousands_usd | Q\nus_cu_bal_re_1to4_junior | Real Estate 1To4 Junior [NSA] | NCUA:bal_re_1to4_junior | thousands_usd | Q\nus_cu_bal_re_other | Real Estate Other [NSA] | NCUA:bal_re_other_noncomm | thousands_usd | Q\nus_cu_bal_total | Total [NSA] | NCUA:bal_total_loans | thousands_usd | Q\nus_cu_nco_rate_commercial | Commercial NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_commercial_nonre | Commercial Nonre NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_commercial_re | Commercial Real Estate NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_consumer | Consumer NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_consumer_auto | Consumer Auto NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_consumer_auto_new | Consumer Auto New NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_consumer_auto_used | Consumer Auto Used NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_consumer_cc | Consumer Credit Cards NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_consumer_leases | Consumer Leases NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_consumer_other_sec | Consumer Other Sec NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_consumer_other_unsec | Consumer Other Unsec NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_consumer_pal | Consumer PAL (Payday Alt) NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_consumer_student | Consumer Student NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_re | Real Estate NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_re_1to4_1st | Real Estate 1To4 1St NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_re_1to4_junior | Real Estate 1To4 Junior NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_re_other | Real Estate Other NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_nco_rate_total | Total NCO Rate (quarterly annualized) [NSA] | NCUA | percent | Q\nus_cu_p30_commercial | Commercial 30-59 DPD [NSA] | NCUA:delq30_commercial | thousands_usd | Q\nus_cu_p30_commercial_nonre | Commercial Nonre 30-59 DPD [NSA] | NCUA:delq30_commercial_nonre | thousands_usd | Q\nus_cu_p30_commercial_re | Commercial Real Estate 30-59 DPD [NSA] | NCUA:delq30_commercial_re | thousands_usd | Q\nus_cu_p30_consumer | Consumer 30-59 DPD [NSA] | NCUA:delq30_consumer | thousands_usd | Q\nus_cu_p30_consumer_auto | Consumer Auto 30-59 DPD [NSA] | NCUA:delq30_consumer_auto | thousands_usd | Q\nus_cu_p30_consumer_auto_new | Consumer Auto New 30-59 DPD [NSA] | NCUA:delq30_new_vehicle | thousands_usd | Q\nus_cu_p30_consumer_auto_used | Consumer Auto Used 30-59 DPD [NSA] | NCUA:delq30_used_vehicle | thousands_usd | Q\nus_cu_p30_consumer_cc | Consumer Credit Cards 30-59 DPD [NSA] | NCUA:delq30_credit_card | thousands_usd | Q\nus_cu_p30_consumer_leases | Consumer Leases 30-59 DPD [NSA] | NCUA:delq30_leases | thousands_usd | Q\nus_cu_p30_consumer_other_sec | Consumer Other Sec 30-59 DPD [NSA] | NCUA:delq30_other_secured | thousands_usd | Q\nus_cu_p30_consumer_other_unsec | Consumer Other Unsec 30-59 DPD [NSA] | NCUA:delq30_other_unsecured | thousands_usd | Q\nus_cu_p30_consumer_pal | Consumer PAL (Payday Alt) 30-59 DPD [NSA] | NCUA:delq30_pal | thousands_usd | Q\nus_cu_p30_consumer_student | Consumer Student 30-59 DPD [NSA] | NCUA:delq30_student | thousands_usd | Q\nus_cu_p30_re | Real Estate 30-59 DPD [NSA] | NCUA:delq30_re | thousands_usd | Q\nus_cu_p30_re_1to4_1st | Real Estate 1To4 1St 30-59 DPD [NSA] | NCUA:delq30_re_1to4_1st | thousands_usd | Q\nus_cu_p30_re_1to4_junior | Real Estate 1To4 Junior 30-59 DPD [NSA] | NCUA:delq30_re_1to4_junior | thousands_usd | Q\nus_cu_p30_re_other | Real Estate Other 30-59 DPD [NSA] | NCUA:delq30_re_other_noncomm | thousands_usd | Q\nus_cu_p30_total | Total 30-59 DPD [NSA] | NCUA:delq30_total_all | thousands_usd | Q\nus_cu_p60_commercial | Commercial 60+ DPD [NSA] | NCUA:delq60_commercial | thousands_usd | Q\nus_cu_p60_commercial_nonre | Commercial Nonre 60+ DPD [NSA] | NCUA:delq60_commercial_nonre | thousands_usd | Q\nus_cu_p60_commercial_re | Commercial Real Estate 60+ DPD [NSA] | NCUA:delq60_commercial_re | thousands_usd | Q\nus_cu_p60_consumer | Consumer 60+ DPD [NSA] | NCUA:delq60_consumer | thousands_usd | Q\nus_cu_p60_consumer_auto | Consumer Auto 60+ DPD [NSA] | NCUA:delq60_consumer_auto | thousands_usd | Q\nus_cu_p60_consumer_auto_new | Consumer Auto New 60+ DPD [NSA] | NCUA:delq60_new_vehicle | thousands_usd | Q\nus_cu_p60_consumer_auto_used | Consumer Auto Used 60+ DPD [NSA] | NCUA:delq60_used_vehicle | thousands_usd | Q\nus_cu_p60_consumer_cc | Consumer Credit Cards 60+ DPD [NSA] | NCUA:delq60_credit_card | thousands_usd | Q\nus_cu_p60_consumer_leases | Consumer Leases 60+ DPD [NSA] | NCUA:delq60_leases | thousands_usd | Q\nus_cu_p60_consumer_other_sec | Consumer Other Sec 60+ DPD [NSA] | NCUA:delq60_other_secured | thousands_usd | Q\nus_cu_p60_consumer_other_unsec | Consumer Other Unsec 60+ DPD [NSA] | NCUA:delq60_other_unsecured | thousands_usd | Q\nus_cu_p60_consumer_pal | Consumer PAL (Payday Alt) 60+ DPD [NSA] | NCUA:delq60_pal | thousands_usd | Q\nus_cu_p60_consumer_student | Consumer Student 60+ DPD [NSA] | NCUA:delq60_student | thousands_usd | Q\nus_cu_p60_re | Real Estate 60+ DPD [NSA] | NCUA:delq60_re | thousands_usd | Q\nus_cu_p60_re_1to4_1st | Real Estate 1To4 1St 60+ DPD [NSA] | NCUA:delq60_re_1to4_1st | thousands_usd | Q\nus_cu_p60_re_1to4_junior | Real Estate 1To4 Junior 60+ DPD [NSA] | NCUA:delq60_re_1to4_junior | thousands_usd | Q\nus_cu_p60_re_other | Real Estate Other 60+ DPD [NSA] | NCUA:delq60_re_other_noncomm | thousands_usd | Q\nus_cu_p60_total | Total 60+ DPD [NSA] | NCUA:delq60_total_all | thousands_usd | Q\n\n# US us_nyfed_consumer_credit\nnyfed_90dpd_all | All Consumer Debt: 90+ Days Past Due (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_90dpd_auto | Auto Loans: 90+ Days Past Due (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_90dpd_cc | Credit Cards: 90+ Days Past Due (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_90dpd_heloc | HELOC: 90+ Days Past Due (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_90dpd_mortgage | Mortgage: 90+ Days Past Due (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_90dpd_other | Other Consumer: 90+ Days Past Due (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_90dpd_student_loan | Student Loans: 90+ Days Past Due (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_accts_closed_12mo | Consumers with Account Closed in Last 12 Months (millions) [NSA] | NY_FED | millions | Q\nnyfed_accts_opened_12mo | Consumers with Account Opened in Last 12 Months (millions) [NSA] | NY_FED | millions | Q\nnyfed_auto_orig_f620_659 | Auto Originations: FICO 620-659 [NSA] | NY_FED | billions_usd | Q\nnyfed_auto_orig_f660_719 | Auto Originations: FICO 660-719 [NSA] | NY_FED | billions_usd | Q\nnyfed_auto_orig_f720_759 | Auto Originations: FICO 720-759 [NSA] | NY_FED | billions_usd | Q\nnyfed_auto_orig_f760plus | Auto Originations: FICO 760+ [NSA] | NY_FED | billions_usd | Q\nnyfed_auto_orig_lt620 | Auto Originations: FICO <620 [NSA] | NY_FED | billions_usd | Q\nnyfed_auto_orig_total | Auto Originations: FICO total [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_age_18_29 | Total Debt by Age: 18-29 [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_age_30_39 | Total Debt by Age: 30-39 [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_age_40_49 | Total Debt by Age: 40-49 [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_age_50_59 | Total Debt by Age: 50-59 [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_age_60_69 | Total Debt by Age: 60-69 [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_age_70plus | Total Debt by Age: 70+ [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_auto | Auto Loans: Outstanding Balance [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_credit_card | Credit Cards: Outstanding Balance [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_heloc | HELOC: Outstanding Balance [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_mortgage | Mortgage: Outstanding Balance [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_other | Other Consumer: Outstanding Balance [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_student_loan | Student Loans: Outstanding Balance [NSA] | NY_FED | billions_usd | Q\nnyfed_bal_total | All Consumer Debt: Outstanding Balance [NSA] | NY_FED | billions_usd | Q\nnyfed_bankruptcy_count_k | New Bankruptcies (consumers, thousands) [NSA] | NY_FED | thousands | Q\nnyfed_cc_available_credit | Credit Card Available Credit ($B) [NSA] | NY_FED | billions_usd | Q\nnyfed_cc_balance_p10 | Credit Card Balance: 10th Percentile (per-consumer) [NSA] | NY_FED | usd | Q\nnyfed_cc_limit | Credit Card Limit ($B) [NSA] | NY_FED | billions_usd | Q\nnyfed_collections_avg_amt_usd | Avg Collection Amount per Consumer ($) [NSA] | NY_FED | usd | Q\nnyfed_collections_pct | Consumers with 3rd-Party Collection (%) [NSA] | NY_FED | percent | Q\nnyfed_delinq_30plus_all | All Consumer: 30+ Days Delinquent (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_delinq_90plus_all | All Consumer: 90+ Days Delinquent (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_delinq_sev_derog_all | All Consumer: Severely Derogatory (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow30_auto | Auto Loans: New 30+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow30_cc | Credit Cards: New 30+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow30_heloc | HELOC: New 30+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow30_mortgage | Mortgage: New 30+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow30_other | Other Consumer: New 30+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow30_student_loan | Student Loans: New 30+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow30_total | All Consumer Debt: New 30+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow90_all | All Consumer Debt: New 90+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow90_auto | Auto Loans: New 90+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow90_cc | Credit Cards: New 90+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow90_heloc | HELOC: New 90+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow90_mortgage | Mortgage: New 90+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow90_other | Other Consumer: New 90+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_flow90_student_loan | Student Loans: New 90+ DPD Flow (% of balance) [NSA] | NY_FED | percent | Q\nnyfed_foreclosure_count_k | New Foreclosures (consumers, thousands) [NSA] | NY_FED | thousands | Q\nnyfed_herev_available_credit | HE Revolving Available Credit ($B) [NSA] | NY_FED | billions_usd | Q\nnyfed_herev_balance_p10 | Home Equity Revolving Balance: 10th Percentile (per-consumer) [NSA] | NY_FED | usd | Q\nnyfed_herev_limit | HE Revolving Limit ($B) [NSA] | NY_FED | billions_usd | Q\nnyfed_inquiries_6mo | Consumers with Inquiry in Last 6 Months (millions) [NSA] | NY_FED | millions | Q\nnyfed_mtg_curr_to_30_60 | Mortgage: Transition Rate to 30-60 Days Late [NSA] | NY_FED | percent | Q\nnyfed_mtg_curr_to_90 | Mortgage: Transition Rate to 90+ Days Late [NSA] | NY_FED | percent | Q\nnyfed_mtg_orig_f620_659 | Mortgage Originations: FICO 620-659 [NSA] | NY_FED | billions_usd | Q\nnyfed_mtg_orig_f660_719 | Mortgage Originations: FICO 660-719 [NSA] | NY_FED | billions_usd | Q\nnyfed_mtg_orig_f720_759 | Mortgage Originations: FICO 720-759 [NSA] | NY_FED | billions_usd | Q\nnyfed_mtg_orig_f760plus | Mortgage Originations: FICO 760+ [NSA] | NY_FED | billions_usd | Q\nnyfed_mtg_orig_lt620 | Mortgage Originations: FICO <620 [NSA] | NY_FED | billions_usd | Q\nnyfed_mtg_orig_total | Mortgage Originations: FICO total [NSA] | NY_FED | billions_usd | Q\n\n# US valuation\nus_shiller_cape | Shiller CAPE Ratio (Cyclically Adjusted P/E) [NSA] | SHILLER:SHILLER_CAPE_IE_DATA | ratio | M","operationId":"list_indicators","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category, comma-separated. e.g. `monetary`, `inflation`, `gdp`, `sovereign_bonds`.","title":"Category"},"description":"Filter by category, comma-separated. e.g. `monetary`, `inflation`, `gdp`, `sovereign_bonds`."},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ISO country code, comma-separated. e.g. `US`, `IN`, `EU`, `DE`, `GB`, `CN`, `GLOBAL`.","title":"Country"},"description":"Filter by ISO country code, comma-separated. e.g. `US`, `IN`, `EU`, `DE`, `GB`, `CN`, `GLOBAL`."},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source, comma-separated. e.g. `FRED`, `OECD`, `RBI`, `MoSPI`, `ECB`, `NY_FED`, `NCUA`, `FDIC`.","title":"Source"},"description":"Filter by source, comma-separated. e.g. `FRED`, `OECD`, `RBI`, `MoSPI`, `ECB`, `NY_FED`, `NCUA`, `FDIC`."},{"name":"frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by data frequency, comma-separated. One of `daily`, `weekly`, `monthly`, `quarterly`, `annual`.","title":"Frequency"},"description":"Filter by data frequency, comma-separated. One of `daily`, `weekly`, `monthly`, `quarterly`, `annual`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}}},"/tremor/v1/series":{"get":{"tags":["Tremor - Global Macro Indicators"],"summary":"Time-series data for one or more indicators (wide format)","description":"Returns time-series values for one or more indicators in wide format: one row\nper `date`, one column per indicator, plus a `date` column.\n\n## Sparse alignment\n\nFor mixed frequencies (e.g. a daily series next to a quarterly one) the response\nincludes a row for every date on which ANY of the requested indicators has an\nobservation. Missing cells are `null`. Aligning across publishers with different\nperiod anchors: see the date-anchor section on `list_indicators`.\n\n## Validation\n\n- `ids` must be present in the visible-indicator allowlist. Discover valid ids on\n  `/tremor/v1/indicators`.\n- `from` and `to` must be ISO `YYYY-MM-DD`.\n- Total response rows are capped at **10,000**. If exceeded, narrow the date range\n  or request fewer indicators.\n\n## Attribution\n\nData is aggregated from external publishers. Cite the `source` field of each\nindicator (visible on `/tremor/v1/indicators`) when redistributing.","operationId":"get_series","parameters":[{"name":"ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated indicator ids, max 10. Required - if omitted, a `MISSING_IDS` envelope with working example calls comes back. Discover valid ids on `/tremor/v1/indicators`. e.g. `ids=us_treasury_30y_yield,us_treasury_10y_yield`.","title":"Ids"},"description":"Comma-separated indicator ids, max 10. Required - if omitted, a `MISSING_IDS` envelope with working example calls comes back. Discover valid ids on `/tremor/v1/indicators`. e.g. `ids=us_treasury_30y_yield,us_treasury_10y_yield`.","examples":{"us_yields_recent":{"summary":"US Treasury 2Y and 10Y yields together","value":"us_treasury_2y_yield,us_treasury_10y_yield"},"cross_country_gdp":{"summary":"US real GDP growth alongside India GDP (base 2022-23)","value":"us_real_gdp_growth,in_gdp_constant_2223"},"us_core_inflation":{"summary":"US core CPI and core PCE, monthly","value":"us_core_cpi,us_core_pce"}}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date, ISO `YYYY-MM-DD`. Defaults to series start.","title":"From"},"description":"Start date, ISO `YYYY-MM-DD`. Defaults to series start."},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date, ISO `YYYY-MM-DD`. Defaults to latest observation.","title":"To"},"description":"End date, ISO `YYYY-MM-DD`. Defaults to latest observation."},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: `json` (default) or `tsv`.","enum":["json","tsv"],"default":"json","title":"Format"},"description":"Response format: `json` (default) or `tsv`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}}},"/tremor/v1/markets":{"get":{"tags":["Tremor - Global Macro Indicators"],"summary":"Directory of daily market-price symbols (indices, yields, FX, commodities)","description":"Returns metadata for the daily market-price series available in Tremor: equity indices, bond yields, currency indices, and commodity futures. Every series carries OHLC + `adj_close` + `volume`; `close` is the default field on `get_market_series`.\n\n## Scope\n\nThis is a **separate domain** from `list_indicators` and `get_series`, which carry macro and credit indicators. The market-price catalog is small and stable. Use the directory below to discover symbols, then call `get_market_series` to pull the price time series.\n\n- **Source**: Yahoo Finance.\n- **Refresh**: daily via scheduled cron (UTC).\n\n## Symbol notation\n\nSymbols use Yahoo's notation verbatim. Copy them exactly from the directory - they are case-sensitive and can include `^`, `=`, `.`, `-`. URL-encoding is handled automatically by the API. Multiple symbols can be requested together for side-by-side comparison.\n\n## Cross-reference with macro indicators\n\n`^TNX` (US 10-year Treasury yield) is also exposed as the macro indicator `us_treasury_10y_yield` via `list_indicators` and `get_series`. Same underlying data, different access path.\n\n- Prefer `get_series` if you are already working in the macro-indicator domain.\n- Prefer `get_market_series` if you are comparing it against other market prices.\n\n## Filters\n\nAll filters are optional.\n\n- `asset_class` - one of `equity_index`, `bond_yield`, `currency`, `commodity`.\n- `symbols` - comma-separated Yahoo symbols. e.g. `symbols=^GSPC,^NSEI`.\n\n## Directory\n\nEvery row: `symbol | name | asset_class`.\n\n^GSPC      | S&P 500                       | equity_index\n^NSEI      | Nifty 50                      | equity_index\n^BSESN     | BSE Sensex                    | equity_index\n^CRSLDX    | Nifty 500                     | equity_index\n^NSMIDCP   | Nifty Midcap 100              | equity_index\n^NSEBANK   | Nifty Bank                    | equity_index\n^N225      | Nikkei 225                    | equity_index\n^HSI       | Hang Seng                     | equity_index\n^GDAXI     | DAX                           | equity_index\n000001.SS  | Shanghai Composite            | equity_index\n^TNX       | US 10-Year Treasury Yield     | bond_yield\nDX-Y.NYB   | US Dollar Index (DXY)         | currency\nINR=X      | USD/INR                       | currency\nJPY=X      | USD/JPY                       | currency\nGC=F       | Gold Futures                  | commodity\nSI=F       | Silver Futures                | commodity\nHG=F       | Copper Futures                | commodity\nCL=F       | WTI Crude Oil Futures         | commodity\nBZ=F       | Brent Crude Oil Futures       | commodity\nNG=F       | Natural Gas Futures           | commodity","operationId":"list_markets","parameters":[{"name":"asset_class","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset class. One of `equity_index`, `bond_yield`, `currency`, `commodity`.","title":"Asset Class"},"description":"Filter by asset class. One of `equity_index`, `bond_yield`, `currency`, `commodity`."},{"name":"symbols","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to specific symbols, comma-separated. e.g. `symbols=^GSPC,^NSEI`.","title":"Symbols"},"description":"Filter to specific symbols, comma-separated. e.g. `symbols=^GSPC,^NSEI`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}}},"/tremor/v1/market_series":{"get":{"tags":["Tremor - Global Macro Indicators"],"summary":"Daily market-price time series for one or more symbols (wide format)","description":"Returns daily market-price time series for one or more symbols in wide format: one row per date, one column per symbol (column name is the symbol), plus a `date` column. Use it to pull S&P 500, Nifty 50, Nikkei, Hang Seng, DAX, Shanghai Composite, US 10-year Treasury yield, US Dollar Index, Gold, Copper, WTI crude or Brent crude prices.\n\n- **Source**: Yahoo Finance.\n- **Refresh**: daily via scheduled cron (UTC).\n\n## Parameters\n\n- `symbols` - **required**. Comma-separated, max 10.\n- `from` / `to` - optional. `YYYY-MM-DD`.\n- `field` - optional. One of `close` (default), `adj_close`, `open`, `high`, `low`, `volume`.\n- `format` - optional. `json` (default) or `tsv`.\n\n## Symbol notation\n\nYahoo Finance format, verbatim. Case-sensitive. May include `^` (indices), `=` (futures), `.` and `-` (some exchanges). URL-encoding is automatic.\n\n- `^GSPC` - S&P 500.\n- `^NSEI` - Nifty 50.\n- `GC=F` - Gold futures.\n- `DX-Y.NYB` - US Dollar Index.\n\n## Field semantics\n\n- `close` - unadjusted closing price (the price at session close).\n- `adj_close` - adjusted for dividends and splits. Use it for total-return studies and long-horizon comparisons.\n- `open` / `high` / `low` - intraday OHLC.\n- `volume` - traded volume.\n\nOne field per call. To compare `close` vs `adj_close`, call the endpoint twice.\n\n## Cross-reference with macro indicators\n\n`^TNX` (US 10-year Treasury yield) here is identical to the macro indicator `us_treasury_10y_yield` on `get_series`. Either path returns the same daily Yahoo values.\n\n## Discover first\n\nThe authoritative, always-current symbol list (with metadata and asset-class filters) is `GET /tremor/v1/markets`. Call it rather than guessing a symbol. The directory below is a convenience snapshot baked into this description; the `/markets` endpoint is canonical.\n\n^GSPC      | S&P 500                       | equity_index\n^NSEI      | Nifty 50                      | equity_index\n^BSESN     | BSE Sensex                    | equity_index\n^CRSLDX    | Nifty 500                     | equity_index\n^NSMIDCP   | Nifty Midcap 100              | equity_index\n^NSEBANK   | Nifty Bank                    | equity_index\n^N225      | Nikkei 225                    | equity_index\n^HSI       | Hang Seng                     | equity_index\n^GDAXI     | DAX                           | equity_index\n000001.SS  | Shanghai Composite            | equity_index\n^TNX       | US 10-Year Treasury Yield     | bond_yield\nDX-Y.NYB   | US Dollar Index (DXY)         | currency\nINR=X      | USD/INR                       | currency\nJPY=X      | USD/JPY                       | currency\nGC=F       | Gold Futures                  | commodity\nSI=F       | Silver Futures                | commodity\nHG=F       | Copper Futures                | commodity\nCL=F       | WTI Crude Oil Futures         | commodity\nBZ=F       | Brent Crude Oil Futures       | commodity\nNG=F       | Natural Gas Futures           | commodity","operationId":"get_market_series","parameters":[{"name":"symbols","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated market symbols, max 10. Required - if omitted, a `MISSING_SYMBOLS` envelope with working example calls comes back. Symbols use Yahoo notation verbatim. Discover valid symbols on `/tremor/v1/markets`. e.g. `symbols=^GSPC,^NSEI`.","title":"Symbols"},"description":"Comma-separated market symbols, max 10. Required - if omitted, a `MISSING_SYMBOLS` envelope with working example calls comes back. Symbols use Yahoo notation verbatim. Discover valid symbols on `/tremor/v1/markets`. e.g. `symbols=^GSPC,^NSEI`.","examples":{"sp500_only":{"summary":"S&P 500 daily closes","value":"^GSPC"},"gold_vs_sp500":{"summary":"Gold futures alongside the S&P 500","value":"GC=F,^GSPC"},"global_indices":{"summary":"S&P 500, Nifty 50 and DAX side by side","value":"^GSPC,^NSEI,^GDAXI"}}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date, ISO `YYYY-MM-DD`. Defaults to earliest available.","title":"From"},"description":"Start date, ISO `YYYY-MM-DD`. Defaults to earliest available."},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date, ISO `YYYY-MM-DD`. Defaults to latest observation.","title":"To"},"description":"End date, ISO `YYYY-MM-DD`. Defaults to latest observation."},{"name":"field","in":"query","required":false,"schema":{"type":"string","description":"Which price field to return. One of `close` (default), `adj_close`, `open`, `high`, `low`, `volume`. One field per call - call again to pull a different field for the same symbols.","default":"close","title":"Field"},"description":"Which price field to return. One of `close` (default), `adj_close`, `open`, `high`, `low`, `volume`. One field per call - call again to pull a different field for the same symbols."},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: `json` (default) or `tsv`.","enum":["json","tsv"],"default":"json","title":"Format"},"description":"Response format: `json` (default) or `tsv`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}}},"/tremor/v1/downloads/manifest":{"get":{"tags":["Tremor - Global Macro Indicators"],"summary":"Download file manifest with sizes, row counts, and generated_at timestamp","description":"Returns the manifest of pre-generated bulk download files.\n\nUse it to discover what is downloadable, the file sizes, row counts, and the\n`generated_at` timestamp. The manifest is the source of truth - iterate over it\nrather than hard-coding filenames, so new tables added to Tremor auto-appear\nhere without breaking client code.\n\n## Response\n\n- `generated_at` - ISO timestamp of the last regen.\n- `files` - dict keyed by filename. Each entry carries `table`, `format`,\n  `size_bytes`, `size_human`, `row_count`.\n- `tables` - dict keyed by table name with `row_count` and `description`.\n\n## When to prefer bulk downloads over the API\n\nAny query that would fan out into thousands of `/series` or `/market_series`\ncalls belongs here. One file download replaces tens of thousands of per-row API\ncalls - faster for the caller, kinder to our backend.","operationId":"tremor_downloads_manifest","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}},"head":{"tags":["Tremor - Global Macro Indicators"],"summary":"Download file manifest with sizes, row counts, and generated_at timestamp","description":"Returns the manifest of pre-generated bulk download files.\n\nUse it to discover what is downloadable, the file sizes, row counts, and the\n`generated_at` timestamp. The manifest is the source of truth - iterate over it\nrather than hard-coding filenames, so new tables added to Tremor auto-appear\nhere without breaking client code.\n\n## Response\n\n- `generated_at` - ISO timestamp of the last regen.\n- `files` - dict keyed by filename. Each entry carries `table`, `format`,\n  `size_bytes`, `size_human`, `row_count`.\n- `tables` - dict keyed by table name with `row_count` and `description`.\n\n## When to prefer bulk downloads over the API\n\nAny query that would fan out into thousands of `/series` or `/market_series`\ncalls belongs here. One file download replaces tens of thousands of per-row API\ncalls - faster for the caller, kinder to our backend.","operationId":"tremor_downloads_manifest","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}}},"/tremor/v1/download/all":{"head":{"tags":["Tremor - Global Macro Indicators"],"summary":"Download ALL tables in one file (sqlite or duckdb)","description":"Download a single file containing ALL public Tremor tables.\n\nContains `macro_indicators` (visible-filtered), `stock_prices`, and\n`indicator_config` (the data dictionary). `README.md` is included inside the zip.\n\n## Format choice\n\n- **SQLite** - the most portable single-file format. Any SQLite client can query\n  it, no install needed on most systems. Columns are properly typed (`DOUBLE`,\n  `BIGINT`, `VARCHAR`) so `MAX`, `MIN`, `WHERE` and `ORDER BY` on numeric\n  columns return correct answers.\n- **DuckDB** - faster for analytical queries and columnar scans. Install DuckDB\n  to open it: `duckdb tremor_all_tables.duckdb`.\n\nCSV, TSV and Parquet are per-table only. Use `/download/{table_name}` for those.","operationId":"tremor_download_all","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"One-file-everything format. One of `sqlite` (default, `.db.zip`), `sqlite.gz` (`.db.gz`), `duckdb` (`.duckdb.zip`), `duckdb.gz` (`.duckdb.gz`). CSV, TSV and Parquet are per-table only - use `/download/{table_name}` for those.","enum":["sqlite","sqlite.gz","duckdb","duckdb.gz"],"default":"sqlite","title":"Format"},"description":"One-file-everything format. One of `sqlite` (default, `.db.zip`), `sqlite.gz` (`.db.gz`), `duckdb` (`.duckdb.zip`), `duckdb.gz` (`.duckdb.gz`). CSV, TSV and Parquet are per-table only - use `/download/{table_name}` for those."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}},"get":{"tags":["Tremor - Global Macro Indicators"],"summary":"Download ALL tables in one file (sqlite or duckdb)","description":"Download a single file containing ALL public Tremor tables.\n\nContains `macro_indicators` (visible-filtered), `stock_prices`, and\n`indicator_config` (the data dictionary). `README.md` is included inside the zip.\n\n## Format choice\n\n- **SQLite** - the most portable single-file format. Any SQLite client can query\n  it, no install needed on most systems. Columns are properly typed (`DOUBLE`,\n  `BIGINT`, `VARCHAR`) so `MAX`, `MIN`, `WHERE` and `ORDER BY` on numeric\n  columns return correct answers.\n- **DuckDB** - faster for analytical queries and columnar scans. Install DuckDB\n  to open it: `duckdb tremor_all_tables.duckdb`.\n\nCSV, TSV and Parquet are per-table only. Use `/download/{table_name}` for those.","operationId":"tremor_download_all","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"One-file-everything format. One of `sqlite` (default, `.db.zip`), `sqlite.gz` (`.db.gz`), `duckdb` (`.duckdb.zip`), `duckdb.gz` (`.duckdb.gz`). CSV, TSV and Parquet are per-table only - use `/download/{table_name}` for those.","enum":["sqlite","sqlite.gz","duckdb","duckdb.gz"],"default":"sqlite","title":"Format"},"description":"One-file-everything format. One of `sqlite` (default, `.db.zip`), `sqlite.gz` (`.db.gz`), `duckdb` (`.duckdb.zip`), `duckdb.gz` (`.duckdb.gz`). CSV, TSV and Parquet are per-table only - use `/download/{table_name}` for those."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}}},"/tremor/v1/download/{table_name}":{"head":{"tags":["Tremor - Global Macro Indicators"],"summary":"Download one table as a pre-generated file","description":"Download a specific Tremor table in the format you want.\n\n## Tables\n\nData is filtered to publicly visible rows only.\n\n- `macro_indicators` - long-format time series. ~290 visible indicators.\n- `stock_prices` - daily OHLCV for 16 market symbols.\n- `indicator_config` - the data dictionary. Display name, source, notes per\n  indicator.\n\n## Formats\n\nChoose one of:\n\n- `csv` - CSV inside a zip.\n- `csv.gz` - CSV, gzip-compressed.\n- `tsv` - TSV inside a zip.\n- `tsv.gz` - TSV, gzip-compressed.\n- `parquet` - Parquet (default). Best for analytical tools.\n- `sqlite` - `.db` inside a zip. Type-preserving; columns land as `DOUBLE`,\n  `BIGINT`, `VARCHAR` - not blanket `TEXT` - so `MAX`, `MIN`, `WHERE` and\n  `ORDER BY` on numeric columns return correct answers.\n- `sqlite.gz` - `.db`, gzip-compressed.\n- `duckdb` - native `.duckdb` file inside a zip. Fastest for analytical queries.\n- `duckdb.gz` - native `.duckdb`, gzip-compressed.\n\n## Discover current file sizes and row counts\n\n`GET /tremor/v1/downloads/manifest`.","operationId":"tremor_download_table","parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","description":"One of `macro_indicators`, `stock_prices`, `indicator_config`.","title":"Table Name"},"description":"One of `macro_indicators`, `stock_prices`, `indicator_config`.","examples":{"macro_indicators_parquet":{"summary":"All visible macro indicators as Parquet","value":"macro_indicators"},"stock_prices_sqlite":{"summary":"Daily OHLCV for 16 market symbols as SQLite (properly typed)","value":"stock_prices"},"indicator_config_csv":{"summary":"The data dictionary as CSV.gz","value":"indicator_config"}}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"File format. One of `csv` (zip), `csv.gz`, `tsv` (zip), `tsv.gz`, `parquet` (default), `sqlite` (`.db.zip`), `sqlite.gz`, `duckdb` (`.duckdb.zip`), `duckdb.gz`. See the endpoint description for the full format guide.","enum":["csv","csv.gz","tsv","tsv.gz","parquet","sqlite","sqlite.gz","duckdb","duckdb.gz"],"default":"parquet","title":"Format"},"description":"File format. One of `csv` (zip), `csv.gz`, `tsv` (zip), `tsv.gz`, `parquet` (default), `sqlite` (`.db.zip`), `sqlite.gz`, `duckdb` (`.duckdb.zip`), `duckdb.gz`. See the endpoint description for the full format guide."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}},"get":{"tags":["Tremor - Global Macro Indicators"],"summary":"Download one table as a pre-generated file","description":"Download a specific Tremor table in the format you want.\n\n## Tables\n\nData is filtered to publicly visible rows only.\n\n- `macro_indicators` - long-format time series. ~290 visible indicators.\n- `stock_prices` - daily OHLCV for 16 market symbols.\n- `indicator_config` - the data dictionary. Display name, source, notes per\n  indicator.\n\n## Formats\n\nChoose one of:\n\n- `csv` - CSV inside a zip.\n- `csv.gz` - CSV, gzip-compressed.\n- `tsv` - TSV inside a zip.\n- `tsv.gz` - TSV, gzip-compressed.\n- `parquet` - Parquet (default). Best for analytical tools.\n- `sqlite` - `.db` inside a zip. Type-preserving; columns land as `DOUBLE`,\n  `BIGINT`, `VARCHAR` - not blanket `TEXT` - so `MAX`, `MIN`, `WHERE` and\n  `ORDER BY` on numeric columns return correct answers.\n- `sqlite.gz` - `.db`, gzip-compressed.\n- `duckdb` - native `.duckdb` file inside a zip. Fastest for analytical queries.\n- `duckdb.gz` - native `.duckdb`, gzip-compressed.\n\n## Discover current file sizes and row counts\n\n`GET /tremor/v1/downloads/manifest`.","operationId":"tremor_download_table","parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","description":"One of `macro_indicators`, `stock_prices`, `indicator_config`.","title":"Table Name"},"description":"One of `macro_indicators`, `stock_prices`, `indicator_config`.","examples":{"macro_indicators_parquet":{"summary":"All visible macro indicators as Parquet","value":"macro_indicators"},"stock_prices_sqlite":{"summary":"Daily OHLCV for 16 market symbols as SQLite (properly typed)","value":"stock_prices"},"indicator_config_csv":{"summary":"The data dictionary as CSV.gz","value":"indicator_config"}}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"File format. One of `csv` (zip), `csv.gz`, `tsv` (zip), `tsv.gz`, `parquet` (default), `sqlite` (`.db.zip`), `sqlite.gz`, `duckdb` (`.duckdb.zip`), `duckdb.gz`. See the endpoint description for the full format guide.","enum":["csv","csv.gz","tsv","tsv.gz","parquet","sqlite","sqlite.gz","duckdb","duckdb.gz"],"default":"parquet","title":"Format"},"description":"File format. One of `csv` (zip), `csv.gz`, `tsv` (zip), `tsv.gz`, `parquet` (default), `sqlite` (`.db.zip`), `sqlite.gz`, `duckdb` (`.duckdb.zip`), `duckdb.gz`. See the endpoint description for the full format guide."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tremor API page","url":"https://www.tigzig.com/apis/tremor#endpoints"}}},"/cricket/v1/":{"get":{"tags":["Cricket - ball-by-ball downloads"],"summary":"What this host serves for cricket, and where the query API is","description":"Ball-by-ball data for men's international cricket, as bulk files.\n\n## Two different surfaces, and this is the smaller one\n\nThis host serves **files only** - whole tables and whole-database archives,\nrebuilt twice daily. Nothing here answers a question about the data.\n\nTo QUERY it - filter, aggregate, join, or reach it from an agent over MCP -\nuse `https://db-mcp.tigzig.com/v1/`. That is where the schema, the tools and\nthe worked examples live, and it is the right surface for anything that is\nnot \"give me the whole thing\".\n\n## What you can download\n\n- `GET /cricket/v1/download/{filename}` - the file itself, named exactly as\n  you will receive it, e.g. `match_info.parquet` or\n  `cricket_all_tables.sqlite.zip`. Use this one: `curl -O` and `wget` save\n  it under the right name with no extra flags\n- `GET /cricket/v1/download/{table}` - one table, in `parquet`, `csv.gz` or\n  `csv.zip`. Default `parquet`\n- `GET /cricket/v1/download/all` - every table in one database file, as\n  `duckdb.zip`, `duckdb.gz`, `sqlite.zip` or `sqlite.gz`. Default `duckdb.zip`\n- `GET /cricket/v1/download/readme` - the notice that ships inside the\n  archive, on its own\n- `GET /cricket/v1/downloads/manifest` - sizes, row counts and the last\n  generation time. Read this before offering a download\n- `GET /cricket/v1/terms` - licence, source and the stated coverage gap\n\n## Before you build on this\n\nThe data is Cricsheet's, under the Open Data Commons Attribution License 1.0\n(ODC-BY), https://opendatacommons.org/licenses/by/1-0/.\nCricsheet also withholds every match involving the Afghanistan men's team and\nthe whole Afghanistan Premier League, so this is not a complete record of\nmen's internationals. Both statements travel inside the files as well.\n\n## Which file\n\n**Name the file you want and that is exactly what you receive.** The URL ends\nin the filename, so `/cricket/v1/download/match_info.csv.gz` returns\n`match_info.csv.gz` and `curl -O` or `wget` saves it under the right name with\nno extra flags and nothing to rename afterwards.\n\nThere are no aliases and nothing is inferred. A wrapping we do not publish is\na 404 rather than a guess, and the names are case-sensitive: `README.txt`\nresolves, `readme.txt` does not.\n\n`parquet` for one table you are going to analyse. `duckdb.zip` for the lot in\none file. `sqlite.zip` if you cannot install DuckDB. Both database formats\ncome in `.zip` and `.gz` because Windows only handles `.gz` natively from\nWindows 11 22H2 onward. Row counts differ by orders of magnitude between\ntables - check the manifest rather than guessing.","operationId":"cricket_catalog","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/cricket/v1/terms":{"get":{"tags":["Cricket - ball-by-ball downloads"],"summary":"Licence, data source and warranty, as plain text","description":"The licence, the source and the stated coverage gap, as plain text you can\nsave or diff, rather than JSON you have to unwrap.\n\n**Licence.** The ball-by-ball data is published by Cricsheet under the Open\nData Commons Attribution License 1.0 (ODC-BY),\nhttps://opendatacommons.org/licenses/by/1-0/.\n\n**Coverage.** Cricsheet withholds matches involving the Afghanistan men's team\nand the whole Afghanistan Premier League, so this is not a complete record of\nmen's internationals.\n\n**No warranty.** Provided as is, with no guarantee of accuracy, completeness\nor availability, and no support commitment.\n\nThe same statements travel with the bulk downloads: in the manifest, in the\nfooter metadata of every parquet file, and in the README inside the\nall-tables archive, so they survive being copied onward.\n\nReturns `text/plain`, cached for a day.","operationId":"cricket_terms","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/cricket/v1/downloads/manifest":{"get":{"tags":["Cricket - ball-by-ball downloads"],"summary":"Download file sizes, row counts and generation time","description":"File sizes, row counts and generation time for every pre-generated download.\n\nRead this before offering a download so you can show a size, and to check how\nfresh the files are without fetching a few hundred megabytes.\n\n## Fields worth using\n\n- `generated_at` - UTC timestamp of the last regeneration\n- `files` - keyed by filename, each with `size_bytes`, `size_human`, `format`\n  and `row_count`\n- `tables` - authoritative row count per table at generation time\n- `validation.all_match` - `true` when every generated file's row count agrees\n  with its source table. Treat `false` as a reason not to trust that batch\n- `license`, `license_url`, `data_source`, `coverage_note`, `terms` - the same\n  statements the files carry\n\n## Polling this cheaply\n\nEvery 200 carries `ETag` and `Last-Modified`. Send them back as\n`If-None-Match` or `If-Modified-Since` and an unchanged manifest answers\n`304 Not Modified` with no body. The files rebuild twice a day, so a poller\nthat does this transfers nothing on almost every call.\n\nSupports `HEAD` if you only need to confirm the endpoint is alive.","operationId":"cricket_downloads_manifest","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/cricket/v1/download":{"get":{"tags":["Cricket - ball-by-ball downloads"],"summary":"What can be downloaded, and from where","description":"The bulk files, and the exact URL for each.\n\nEvery file below is a full table or the whole database. There is no query\ninterface on this host - to ask questions of the data rather than download it,\nuse https://db-mcp.tigzig.com/v1/\n\nSizes, row counts and the last generation time: `/cricket/v1/downloads/manifest`.\nLicence, source and the stated coverage gap: `/cricket/v1/terms`.","operationId":"cricket_download_index","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/cricket/v1/download/all":{"get":{"tags":["Cricket - ball-by-ball downloads"],"summary":"Every table in one database file","description":"Every physical table in a single file: `duckdb.zip` (default), `duckdb.gz`,\n`sqlite.zip` or `sqlite.gz`. The DuckDB archive also carries the same views\nthe query API serves; the SQLite archive holds the tables only.\n\nThe format you ask for is exactly the extension you receive - `duckdb.zip`\nreturns a `.duckdb.zip`. There are no aliases; `duckdb` is a 400.\n\nName the file directly: `/cricket/v1/download/cricket_all_tables.duckdb.zip`,\nor `.duckdb.gz`, `.sqlite.zip`, `.sqlite.gz`. `curl -O` and `wget` save it\nunder the right name with no extra flags.\n\nBoth wrappings exist for both database formats because Windows only handles\n`.gz` natively from Windows 11 22H2 onward, and PowerShell's Expand-Archive\nrefuses `.gz` on every version. Both zip formats also contain `README.txt`.\n\nSizes before you pull: `/cricket/v1/downloads/manifest`.","operationId":"cricket_download_all","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/cricket/v1/download/readme":{"get":{"tags":["Cricket - ball-by-ball downloads"],"summary":"The licence and coverage notice, on its own","description":"The notice that ships inside the all-tables archive, downloadable alone.\n\nCarries the ODC-BY licence, the source, the stated coverage gap and the row\ncounts at the last generation.","operationId":"cricket_download_readme","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/cricket/v1/download/{table}":{"get":{"tags":["Cricket - ball-by-ball downloads"],"summary":"One whole table","description":"One whole table as `parquet` (default), `csv.gz` or `csv.zip`.\n\nThe format you ask for is exactly the extension you receive. There are no\naliases; bare `csv` is a 400 and the error names the two real spellings.\n\nName the file directly: `/cricket/v1/download/match_info.parquet`, or\n`.csv.gz`, `.csv.zip`. `curl -O` and `wget` save it under the right name with\nno extra flags.\n\nOne file per table. `ball_by_ball` holds every delivery across every format and\nboth genders, with `match_type` and `gender` columns to filter on; the\n`ball_by_ball_<format>_<gender>` files are exact splits of it, so you can take\nthe whole thing or just the slice you want. `match_info`, `match_players` and\n`people` each hold everything in one file. The authoritative list, the row\ncounts and the sizes are in the manifest - read that rather than this text.\n\nParquet carries the licence and the coverage note in its footer metadata, so\nthose statements survive the file being copied onward. Row counts differ by\norders of magnitude between tables - read the manifest rather than guessing.","operationId":"cricket_download_table","parameters":[{"name":"table","in":"path","required":true,"schema":{"type":"string","title":"Table"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/":{"get":{"tags":["V1 - Unified Data Surface"],"summary":"V2 catalog - lists every category with a one-liner","description":"V2 catalog entry point. Returns the categories list + tool surface\nsummary. Convenient for humans to inspect; MCP agents see the same\ninformation via the server-instructions field at session init.","operationId":"v2_catalog","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Tigzig Unified Data Surface page","url":"https://www.tigzig.com/apis/unified#endpoints"}}},"/v1/categories/{category}/indicators":{"get":{"tags":["V1 - Unified Data Surface"],"summary":"List indicators in a V2 category","description":"Returns metadata for every visible indicator in one Tigzig V2 category.\n\nEach indicator row carries: indicator_id, name, country, frequency, unit, source, source_series_id, seasonally_adjusted, first_date, last_date, record_count, and `notes` (free-text caveats: annualization rules, cumulative-vs-per-period semantics, base-year vintages, source-method discontinuities). READ THE NOTES before computing - they capture the gotchas that the name + unit fields alone don't convey. Pick which ids you need, then call v2_get_series with those ids.\n\nTip: pass compact=true for big categories - returns just {indicator_id, name, frequency, last_date} per row (no notes), saves tokens.\n\nCategories:\n  us_macro       US macro from FRED and the University of Michigan: monetary policy and Treasury yields, labor, inflation, GDP, consumer sentiment, housing, financial conditions.\n  us_credit      US credit stress: delinquency + charge-offs from FRED + FFIEC, NCUA credit-union aggregates, NY Fed Household Debt, FDIC bank aggregates.\n  us_valuation   US equity-market valuation: Shiller CAPE, and the Buffett indicator (market cap / GDP) with its two components. Treasury yields are in us_macro.\n  us_insurance   US insurance industry (Fed Z.1 invested assets, Life and P&C). Not loaded into this API yet, so it returns no indicators; the data is in the web tool at https://tremor.tigzig.com/tools/us-insurance.\n  india_macro    India macro + credit: RBI WSS (rates, FX reserves, money supply), MoSPI (IIP, CPI, WPI, GDP, GFCF), NSE Nifty 50 PE/PB/DivYield.\n  global_macro   Global macro: OECD Business Confidence Indicator for selected countries, and non-US 10-year sovereign yields (Germany, UK, euro area, Japan).\n  markets        Daily market prices from Yahoo Finance: US, Indian, Asian and European equity indices, the US 10Y yield, the dollar index and major FX, and commodities (metals, oil, natural gas).\n  currencies     Daily USD exchange rates against the rupee and other Asian and emerging-market currencies, for INR-vs-peer comparisons.\n\nUnknown category returns HTTP 404 with the valid list, so an agent that skipped list_categories can still recover.","operationId":"list_indicators_in_category","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","description":"Category slug. Discover valid slugs via GET /v1/categories.","title":"Category"},"description":"Category slug. Discover valid slugs via GET /v1/categories.","examples":{"us_macro":{"summary":"US macro indicators: unemployment, GDP, consumer sentiment, yields","value":"us_macro"},"india_macro":{"summary":"India macro indicators: CPI, IIP, WPI, GDP","value":"india_macro"},"markets":{"summary":"Daily market prices: indices, yields, FX, commodities","value":"markets"}}},{"name":"compact","in":"query","required":false,"schema":{"type":"boolean","description":"If true, return {indicator_id, name, frequency, last_date} only. Lighter payload for big categories.","default":false,"title":"Compact"},"description":"If true, return {indicator_id, name, frequency, last_date} only. Lighter payload for big categories."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tigzig Unified Data Surface page","url":"https://www.tigzig.com/apis/unified#endpoints"}}},"/v1/categories":{"get":{"tags":["V1 - Unified Data Surface"],"summary":"List all V2 categories with one-liner descriptions","description":"Returns the full menu of Tigzig V2 categories with a one-line summary of each. Call this first when you don't know which domain a question lives in. Then call list_indicators_in_category to expand any.\n\nCategories:\n  us_macro       US macro from FRED and the University of Michigan: monetary policy and Treasury yields, labor, inflation, GDP, consumer sentiment, housing, financial conditions.\n  us_credit      US credit stress: delinquency + charge-offs from FRED + FFIEC, NCUA credit-union aggregates, NY Fed Household Debt, FDIC bank aggregates.\n  us_valuation   US equity-market valuation: Shiller CAPE, and the Buffett indicator (market cap / GDP) with its two components. Treasury yields are in us_macro.\n  us_insurance   US insurance industry (Fed Z.1 invested assets, Life and P&C). Not loaded into this API yet, so it returns no indicators; the data is in the web tool at https://tremor.tigzig.com/tools/us-insurance.\n  india_macro    India macro + credit: RBI WSS (rates, FX reserves, money supply), MoSPI (IIP, CPI, WPI, GDP, GFCF), NSE Nifty 50 PE/PB/DivYield.\n  global_macro   Global macro: OECD Business Confidence Indicator for selected countries, and non-US 10-year sovereign yields (Germany, UK, euro area, Japan).\n  markets        Daily market prices from Yahoo Finance: US, Indian, Asian and European equity indices, the US 10Y yield, the dollar index and major FX, and commodities (metals, oil, natural gas).\n  currencies     Daily USD exchange rates against the rupee and other Asian and emerging-market currencies, for INR-vs-peer comparisons.","operationId":"list_categories","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Tigzig Unified Data Surface page","url":"https://www.tigzig.com/apis/unified#endpoints"}}},"/v1/find":{"get":{"tags":["V1 - Unified Data Surface"],"summary":"Cross-category indicator search by id substring or name","description":"Substring search over indicator IDs and display names across ALL V2 categories. Use this when you know what you want but not which category it lives in (e.g. 'usdinr', 'shiller', 'cape', 'nominal').\n\nReturns: {indicator_id, name, category, country, frequency, first_date, last_date}. Match is case-insensitive substring on indicator_id OR display name. The `category` field on each hit tells you which V2 category to call list_indicators_in_category or v2_get_series against.","operationId":"find_indicator","parameters":[{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":60},{"type":"null"}],"description":"Substring to match against indicator_id or display name. Alias: `q`.","title":"Query"},"description":"Substring to match against indicator_id or display name. Alias: `q`.","examples":{"yield_series":{"summary":"Find every yield-related indicator across categories","value":"yield"},"usdinr":{"summary":"Find USDINR spot and related INR series","value":"usdinr"},"shiller_cape":{"summary":"Find the Shiller CAPE valuation series","value":"cape"}}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results to return.","default":50,"title":"Limit"},"description":"Max results to return."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tigzig Unified Data Surface page","url":"https://www.tigzig.com/apis/unified#endpoints"}}},"/v1/series":{"get":{"tags":["V1 - Unified Data Surface"],"summary":"Get time-series data for one or more V2 indicators (wide format)","description":"Returns wide-format time series: one row per date, one column per indicator. Works seamlessly across V2 backends - mix macro indicators and market prices in one call.\n\nRequired: ids (comma-separated, max 10). Optional: from + to (YYYY-MM-DD), format (json | tsv).\n\nUse format=tsv for long / daily series to save tokens - much lighter than the default JSON. The TSV body has this shape:\n  # meta: count=N unknown=[id1,...] empty=[id1,...]\n  date<TAB>id1<TAB>id2<TAB>...\n  YYYY-MM-DD<TAB>val<TAB>val<TAB>...\nFirst line is always a '#' meta comment - same unknown/empty signals as the JSON path. Most TSV parsers skip '#' lines (pandas: comment='#'; duckdb read_csv: SKIP). The HTTP headers X-V2-Unknown-Ids / X-V2-Empty-Ids / X-V2-Count also carry this info for REST consumers.\n\nJSON response includes meta.unknown_ids (ids not in any V2 catalog) and meta.empty_ids (ids that exist but returned no rows in the date range). Use these to distinguish 'typo' from 'no data here'.","operationId":"v2_get_series","parameters":[{"name":"ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated indicator ids. Max 10.","title":"Ids"},"description":"Comma-separated indicator ids. Max 10.","examples":{"us_yields_recent":{"summary":"US Treasury 2Y and 10Y yields together","value":"us_treasury_2y_yield,us_treasury_10y_yield"},"cross_country_gdp":{"summary":"US real GDP growth alongside India GDP (base 2022-23)","value":"us_real_gdp_growth,in_gdp_constant_2223"},"us_core_inflation":{"summary":"US core CPI and core PCE, monthly","value":"us_core_cpi,us_core_pce"}}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD","title":"From"},"description":"YYYY-MM-DD"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD","title":"To"},"description":"YYYY-MM-DD"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: 'json' (default, wide-pivot with meta) or 'tsv' (tab-separated; meta goes into response headers).","default":"json","title":"Format"},"description":"Response format: 'json' (default, wide-pivot with meta) or 'tsv' (tab-separated; meta goes into response headers)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tigzig Unified Data Surface page","url":"https://www.tigzig.com/apis/unified#endpoints"}}},"/v1/downloads/manifest":{"get":{"tags":["V1 - Unified Data Surface"],"summary":"Manifest of pre-generated download files (sizes, row counts, generated_at)","description":"Returns the manifest of pre-generated bulk download files. The manifest is the source of truth - iterate over it instead of hard-coding filenames, so future tables auto-appear without breaking client code.\n\nSame files served by V1's /tremor/v1/downloads/manifest - V2 is just a URL alias so V2 consumers don't need to know V1's prefix.","operationId":"v2_downloads_manifest","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Tigzig Unified Data Surface page","url":"https://www.tigzig.com/apis/unified#endpoints"}},"head":{"tags":["V1 - Unified Data Surface"],"summary":"Manifest of pre-generated download files (sizes, row counts, generated_at)","description":"Returns the manifest of pre-generated bulk download files. The manifest is the source of truth - iterate over it instead of hard-coding filenames, so future tables auto-appear without breaking client code.\n\nSame files served by V1's /tremor/v1/downloads/manifest - V2 is just a URL alias so V2 consumers don't need to know V1's prefix.","operationId":"v2_downloads_manifest","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"externalDocs":{"description":"Endpoint documentation on the Tigzig Unified Data Surface page","url":"https://www.tigzig.com/apis/unified#endpoints"}}},"/v1/download/all":{"head":{"tags":["V1 - Unified Data Surface"],"summary":"Download ALL Tremor tables in one file (sqlite or duckdb)","description":"Single file with macro_indicators (visible-filtered), stock_prices, and indicator_config (data dictionary). README.md inside the zip.\n\nFormats: sqlite (default, .db.zip), sqlite.gz, duckdb (.duckdb.zip), duckdb.gz. CSV/TSV/Parquet are per-table only - use /v1/download/{table}.\n\nSame file served by V1's /tremor/v1/download/all.","operationId":"v2_download_all","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"One-file-everything format. Choose: sqlite (default, .db.zip), sqlite.gz, duckdb (.duckdb.zip), duckdb.gz. CSV/TSV/Parquet are per-table only (use /v1/download/{table_name}).","enum":["sqlite","sqlite.gz","duckdb","duckdb.gz"],"default":"sqlite","title":"Format"},"description":"One-file-everything format. Choose: sqlite (default, .db.zip), sqlite.gz, duckdb (.duckdb.zip), duckdb.gz. CSV/TSV/Parquet are per-table only (use /v1/download/{table_name})."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tigzig Unified Data Surface page","url":"https://www.tigzig.com/apis/unified#endpoints"}},"get":{"tags":["V1 - Unified Data Surface"],"summary":"Download ALL Tremor tables in one file (sqlite or duckdb)","description":"Single file with macro_indicators (visible-filtered), stock_prices, and indicator_config (data dictionary). README.md inside the zip.\n\nFormats: sqlite (default, .db.zip), sqlite.gz, duckdb (.duckdb.zip), duckdb.gz. CSV/TSV/Parquet are per-table only - use /v1/download/{table}.\n\nSame file served by V1's /tremor/v1/download/all.","operationId":"v2_download_all","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"One-file-everything format. Choose: sqlite (default, .db.zip), sqlite.gz, duckdb (.duckdb.zip), duckdb.gz. CSV/TSV/Parquet are per-table only (use /v1/download/{table_name}).","enum":["sqlite","sqlite.gz","duckdb","duckdb.gz"],"default":"sqlite","title":"Format"},"description":"One-file-everything format. Choose: sqlite (default, .db.zip), sqlite.gz, duckdb (.duckdb.zip), duckdb.gz. CSV/TSV/Parquet are per-table only (use /v1/download/{table_name})."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tigzig Unified Data Surface page","url":"https://www.tigzig.com/apis/unified#endpoints"}}},"/v1/download/{table_name}":{"head":{"tags":["V1 - Unified Data Surface"],"summary":"Download one Tremor table as a pre-generated file","description":"Available tables (visible-filtered):\n- macro_indicators: long-format time series, ~290 visible indicators\n- stock_prices: daily OHLCV for 16 market symbols\n- indicator_config: data dictionary (display name, source, notes per indicator)\n\nFormats: csv (zip), csv.gz, tsv (zip), tsv.gz, parquet (default), sqlite (.db.zip), sqlite.gz, duckdb (.duckdb.zip), duckdb.gz.\n\nSame files served by V1's /tremor/v1/download/{table_name}.","operationId":"v2_download_table","parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","description":"One of `macro_indicators`, `stock_prices`, `indicator_config`.","title":"Table Name"},"description":"One of `macro_indicators`, `stock_prices`, `indicator_config`.","examples":{"macro_indicators_parquet":{"summary":"All visible macro indicators as Parquet","value":"macro_indicators"},"stock_prices_sqlite":{"summary":"Daily OHLCV for 16 market symbols as SQLite (properly typed)","value":"stock_prices"},"indicator_config_csv":{"summary":"The data dictionary as CSV.gz","value":"indicator_config"}}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"File format. Choose: csv (zip), csv.gz, tsv (zip), tsv.gz, parquet (default), sqlite (.db.zip), sqlite.gz, duckdb (.duckdb.zip), duckdb.gz.","enum":["csv","csv.gz","tsv","tsv.gz","parquet","sqlite","sqlite.gz","duckdb","duckdb.gz"],"default":"parquet","title":"Format"},"description":"File format. Choose: csv (zip), csv.gz, tsv (zip), tsv.gz, parquet (default), sqlite (.db.zip), sqlite.gz, duckdb (.duckdb.zip), duckdb.gz."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tigzig Unified Data Surface page","url":"https://www.tigzig.com/apis/unified#endpoints"}},"get":{"tags":["V1 - Unified Data Surface"],"summary":"Download one Tremor table as a pre-generated file","description":"Available tables (visible-filtered):\n- macro_indicators: long-format time series, ~290 visible indicators\n- stock_prices: daily OHLCV for 16 market symbols\n- indicator_config: data dictionary (display name, source, notes per indicator)\n\nFormats: csv (zip), csv.gz, tsv (zip), tsv.gz, parquet (default), sqlite (.db.zip), sqlite.gz, duckdb (.duckdb.zip), duckdb.gz.\n\nSame files served by V1's /tremor/v1/download/{table_name}.","operationId":"v2_download_table","parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","description":"One of `macro_indicators`, `stock_prices`, `indicator_config`.","title":"Table Name"},"description":"One of `macro_indicators`, `stock_prices`, `indicator_config`.","examples":{"macro_indicators_parquet":{"summary":"All visible macro indicators as Parquet","value":"macro_indicators"},"stock_prices_sqlite":{"summary":"Daily OHLCV for 16 market symbols as SQLite (properly typed)","value":"stock_prices"},"indicator_config_csv":{"summary":"The data dictionary as CSV.gz","value":"indicator_config"}}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"File format. Choose: csv (zip), csv.gz, tsv (zip), tsv.gz, parquet (default), sqlite (.db.zip), sqlite.gz, duckdb (.duckdb.zip), duckdb.gz.","enum":["csv","csv.gz","tsv","tsv.gz","parquet","sqlite","sqlite.gz","duckdb","duckdb.gz"],"default":"parquet","title":"Format"},"description":"File format. Choose: csv (zip), csv.gz, tsv (zip), tsv.gz, parquet (default), sqlite (.db.zip), sqlite.gz, duckdb (.duckdb.zip), duckdb.gz."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"externalDocs":{"description":"Endpoint documentation on the Tigzig Unified Data Surface page","url":"https://www.tigzig.com/apis/unified#endpoints"}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}