---
title: "Api Holders"
method: GET
path: "/api/holders"
---

# Api Holders

`GET /api/holders`

## Request

- Base URL: `https://www.oxfordledge.com` (the document declares no server; this is the origin it was published from)
- URL: `https://www.oxfordledge.com/api/holders`
- Auth: none declared

Institutional and insider holders from EDGAR SC 13D/G filings.

Returns holders who own ≥5% of shares as reported in SC 13D/SC 13G filings
submitted to the SEC in the past 12 months.

## Query parameters

- `ticker` string, nullable

## Response `200`

Successful Response

- HoldersResponse: `/api/holders` — institutional + insider holders from SC 13D/G + 13F. F4 boundary backfill 2026-05-08 (Initiative 6). Public (no auth). FE ticker-renderer reads `data.holders[]` (gates on `.length > 0`), `data.error` (with `&& !data.holders?.length` short-circuit), plus `data.ticker / sharesOutstanding / marketCap` for the totals box. Holders[] item shape pinned by HolderEntry above. The error path returns `{ticker, holders: [], error}` so the FE always has `data.holders` to call `?.length` on without NPE — that invariant is exactly what HoldersResponse pins.
  - `ticker` string, required: The query ticker, uppercased.
  - `holders` HolderEntry[], required: Top-30 holders list. Empty list on error or no SC 13D/G + no 13F fallback hit.
    - `holder` string, nullable: Filer name. Per handler dedup logic, may be empty when SC parse missed name.
    - `type` string, nullable: One of 'Insider/Trust', 'Large Holder', '13F Filer'.
    - `shares` integer, nullable: Shares owned. None if SC parse couldn't extract.
    - `pctHeld` number, nullable: Percent of float, 0-100. None when float data unavailable.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api.md) · [All operations](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/llms.txt) · [OpenAPI document](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/revisions/e832a1260f0b?raw)
