Home / API
API
The same figures as the pages, readable by a program. Answers are JSON, addresses and field names are English.
Access is open today: no key, no account, no quota. The regulators publish this data, this site gathers it and republishes it in the same form for everyone. The whole file answers in one request what would otherwise take thousands of pages, which is easier on the server and on whoever is asking.
| Address | What it returns |
|---|---|
/api/positions.jsonl.gz /api/positions.jsonl.gz | Every open position, one per line, compressed. Rebuilt after each collection. |
/api/company/<slug> /api/company/klab-inc | One company: who is short of it now, and every disclosure it has ever carried. |
/api/fund/<slug> /api/fund/citadel-advisors-llc | One fund: all its open positions, across every register. |
/api/moves /api/moves | What moved over thirty days, qualified: opening, increase, reduction, below_threshold. |
/api/isins /api/isins | One line per declared company: its ISIN and the address of its page. |
/api/openapi.json /api/openapi.json | The contract as an OpenAPI document, to generate a client rather than read this page. |
/action/<slug>/positions.csv /action/klab-inc/positions.csv | A company or a fund: its whole disclosure history, as a spreadsheet. Columns in the language of the domain, separator and encoding a spreadsheet reads. |
/action/<slug>/movements.xml /action/klab-inc/movements.xml | A company or a fund: its moves, as an RSS feed. |
/mcp https://www.quivad.com/mcp | The MCP server: an assistant connects to it and reads the registers itself. POST only. |
Any assistant that speaks the Model Context Protocol can read these registers itself: add https://www.quivad.com/mcp to it. Five tools, which find a company or a fund, read either one, rank a market and list what moved, answering in English like the rest of this surface, with no key and under the same rate bound. The current revision of the protocol and the three before it are served at that one address; it takes POST alone, so opening it in a browser answers 405 and says so.
A long answer is cut by limit (1,000 rows by default, 12,000 at most) and offset. The page block of the answer carries the total and the addresses of the next and previous pages: nothing is dropped, everything is reachable, and an unreadable value falls back to the default rather than refusing.
Past 120 requests a minute, an address gets a 429 and the delay to wait. An answer served by the cache does not count: the bound stops a sweep, never a use.
No version in the addresses, because nothing will break: a field may appear, none disappears or changes meaning, and an address does not move.
Refusals
A refusal is JSON like an answer, never a page: type, title, status and detail, in the shape RFC 9457 gives every HTTP API. The type field points at one of the anchors below.
company-not-found- No company answers at this address. The list lives at /api/isins.
fund-not-found- No fund answers at this address.
no-such-endpoint- No API address answers here.
method-not-allowed- These addresses are read-only: GET, HEAD and OPTIONS.
rate-limit-exceeded- Too many requests within the minute. retry-after says how long to wait.
not-ready- The day file is still being built, with the delay to wait.
The data comes from the official publications of the regulators and remains subject to the conditions each of them sets. The known licence of each register is given on the sources page. See the state of the sources