Returns 13F holdings — quarterly snapshots of equity positions held by institutional investment managers with $100M+ AUM, filed with the SEC
Returns 13F holdings — quarterly snapshots of equity positions held by institutional investment managers with $100M+ AUM, filed with the SEC. Each record is one (fund, security, quarter) tuple. Use this when the user asks about: which institutions hold a stock, a fund's portfolio, position changes quarter-over-quarter, or 'whale' activity in a specific name. Reporting lag: up to 45 days after quarter end. A 2026-Q1 filing typically appears in mid-May 2026. The most recent quarter visible always lags real time. Important: 13F covers institutional managers ≥ $100M AUM but does NOT include short positions, cash, options (with rare exceptions), or non-US-listed equities. It's a snapshot of long equity positions only. For 'did the fund increase its AAPL stake?' questions, check the position_change field — values are 'new', 'increased', 'decreased', 'closed', or 'unchanged' relative to the same fund's prior quarter. form: the filing a row comes from, '13F-HR' (the quarter's report) or '13F-HR/A' (an amendment). amendment_type: on an amendment, 'RESTATEMENT' (it replaces the report) or 'NEW HOLDINGS' (it adds positions); null on a 13F-HR. Both are absent on rows stored before they were recorded. Values are US dollars. 13F filings before 2023 report thousands and are multiplied by 1000; a filing that used the other unit is corrected once market prices confirm it: a 2023+ filing in thousands ×1000, a pre-2023 filing already in dollars ÷1000 (units_corrected true; value_as_filed holds the filed number, summed across a security's lines). A few filings whose units could not be confirmed are left as stored: a 2023+ one may read 1000x too low, a pre-2023 one 1000x too high. verification_status: VERIFIED means the filing matches its own totals (its rows add up to the row count and total value it declares). It is not a check against market prices: a filer's own consistent but wrong numbers still read VERIFIED, and so do a few filings stored before the thousands check began. INSUFFICIENT_DATA means that check failed or could not run, or the values look filed in the wrong unit (a 2023+ filing in thousands, or a pre-2023 filing in dollars) but could not be confirmed.
Request
- Base URL: https://api.keyvex.com
- URL: https://api.keyvex.com/v1/institutional-holdings
- Auth: API key in header x-api-key
Query parameters
Filter to holdings of one stock by US ticker, e.g. 'AAPL'. Case-insensitive.
Alternative to ticker — 9-character SEC CUSIP identifier. Useful when a security has multiple share classes with different tickers.
Full or partial fund name; case-insensitive substring match. Examples: 'Berkshire', 'Bridgewater', 'Citadel'. A name of 1-2 characters matches as a whole word within the newest 20,000 holdings by filing date only, and the answer says so; fund_cik searches the full history.
SEC CIK of the fund (10-digit, padded). Preferred over fund_name when known. Berkshire Hathaway = '0001067983'.
Period ending date in YYYY-MM-DD form (e.g. '2026-03-31'). Defaults to all quarters available in the database.
Filter to position-change type. Common queries: 'increased' for funds adding to a position, 'closed' for funds that exited.
Filter to positions with market_value >= this amount (USD). Use to focus on large positions.
Field used for ordering. Default: market_value (largest positions first).
Default: desc (largest first).
Maximum records to return. Default 50, max 500.
Pass the next_cursor from the previous response VERBATIM to fetch the next page. Keep every other filter and the sort identical while paging. Omit to start from the top. A quarter of 13F filings runs to far more than 500 rows, so a complete picture requires paging.
Response
JSON envelope: { results: [...], count, has_more }.
Changes
No recorded changes to this operation across all 1 revision of this API.