---
title: "Returns 13F holdings — quarterly snapshots of equity positions held by institutional investment managers with $100M+ AUM, filed with the SEC"
method: GET
path: "/v1/institutional-holdings"
---

# Returns 13F holdings — quarterly snapshots of equity positions held by institutional investment managers with $100M+ AUM, filed with the SEC

`GET /v1/institutional-holdings`

## Request

- Base URL: `https://api.keyvex.com`
- URL: `https://api.keyvex.com/v1/institutional-holdings`
- Auth: API key in header `x-api-key`

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.

## Query parameters

- `ticker` string
- `cusip` string
- `fund_name` string
- `fund_cik` string
- `quarter` string
- `position_change` 'new' | 'increased' | 'decreased' | 'closed' | 'unchanged' | 'INSUFFICIENT_DATA'
- `min_value` number
- `sort_by` 'market_value' | 'shares_held' | 'shares_change_pct'
- `sort_order` 'desc' | 'asc'
- `limit` integer
- `cursor` string

## Response `200`

JSON envelope: { results: [...], count, has_more }.

## Other responses

- `400`: Invalid parameter.
- `401`: Missing or invalid API key.
- `402`: This tool requires a higher plan (upgrade_required). Retrying will not help.
- `429`: Tier rate/quota limit reached (rate_limited). Retry-After points at the reset.

---

[API](https://skmtc.dev/keyvex/apis/keyvex-api.md) · [All operations](https://skmtc.dev/keyvex/apis/keyvex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/keyvex/apis/keyvex-api/revisions/01c0210c19cd?raw)
