/insider-module/api/insiders/holdings/by-insider/{cik}Current holdings for a specific insider across all companies.
Current holdings for a specific insider across all companies. Returns ownership_summary with per-company vehicle breakdown including total_beneficial_ownership. Includes sector/industry classification from Sharadar.
Why use this
Common use case
Insider-scoped holdings table — one reporting person's complete current position book across every issuer they file at. Combines non-derivative and derivative positions when include_derivative=true (default).
The meta.ownership_summary block is the killer feature here: a per-issuer roll-up of {total_shares_direct, total_shares_indirect, total_beneficial, ownership_vehicles[]} keyed by issuer_cik, providing the exact data needed to render an insider profile page showing 'AAPL: 3.2M direct + 50K via GRAT Trust 2024 = 3.28M total' tooltips without N+1 round-trips.
Use the ticker query parameter to narrow to a single issuer (e.g. all of Cook's positions at AAPL). Returns HTTP 404 when the CIK cannot be resolved. For transactions (not positions) by the same insider use GET /insider-module/api/insiders/transactions/by-insider/{cik}; for the broader insider profile (roles, 365d stats, recent transactions) use GET /insider-module/api/insiders/insider/{insider_cik}.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| cik | path | required | — | — | Insider CIK number | 0000320193 |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| status | string | no | Always `success` on 2xx. |
| data | array | no | Array of insider holdings rows scoped to ONE reporting person (across all issuers, or a single issuer when `ticker` is set). Sorted by `reported_date DESC` (most recent snapshot first). Empty array when the insider has no holdings on file. Returns HTTP 404 when the CIK cannot be resolved at all. |
| data[].holding_id | string | no | Stable internal UUID, serialized as a string. |
| data[].security_title | string | no | Title of the security (e.g. `Common Stock`, `Stock Option`). |
| data[].amount_owned | number | no | Number of shares (or contract units, for derivatives) currently owned in this vehicle. |
| data[].ownership_nature | string | no | `'direct'` or `'indirect'`. Defaults to `'direct'` when source filing's nature field is missing. |
| data[].reported_date | string | yes | ISO `YYYY-MM-DD` date of the source filing reporting this position. |
| data[].ticker | string | yes | Issuer ticker (varies across rows when the insider holds positions at multiple issuers). |
| data[].company_name | string | yes | Issuer name. |
| data[].sector | string | yes | Sharadar sector classification for the issuer. |
| data[].industry | string | yes | Sharadar industry classification for the issuer. |
| data[].issuer_cik | string | yes | Issuer CIK. |
| data[].is_derivative | boolean | no | `true` for derivative positions; `false` for cash-equity. |
| data[].total_beneficial_ownership | number | yes | Aggregate shares this insider beneficially owns at THIS row's issuer across ALL vehicles. Null when the underlying filings do not report it. |
| data[].accession_number | string | yes | Source filing accession number. |
| data[].filed_at | string | yes | ISO-8601 UTC filing acceptance timestamp. |
| data[].accepted_at | string | yes | ISO-8601 UTC EDGAR acceptance timestamp. |
| data[].published_at | string | yes | ISO-8601 UTC RSS-publication timestamp. |
| data[].rss_updated_at | string | yes | ISO-8601 UTC most-recent RSS update. |
| meta | object | yes | Result metadata block — pagination + insider profile + per-issuer ownership_summary. |
| meta.pagination | object | no | Pagination sub-block. |
| meta.pagination.total | integer | no | Total non-derivative holdings rows for the filter set (note: count is from the non-derivative query only — derivative inclusion is handled at row-emit time). |
| meta.pagination.limit | integer | no | Effective page size. |
| meta.pagination.offset | integer | no | Echo of requested offset. |
| meta.pagination.has_more | boolean | no | `true` when another page is available. |
| meta.insider | object | no | Insider profile block. |
| meta.insider.cik | string | no | Insider CIK. |
| meta.insider.name | string | yes | Insider legal name. |
| meta.insider.is_entity | boolean | yes | `true` for entity reporters. |
| meta.insider.total_companies | integer | no | Distinct count of issuers this insider has holdings at (independent of pagination — full-set count). |
| meta.ownership_summary | object | no | Map keyed by `issuer_cik` → `{total_shares_direct, total_shares_indirect, total_beneficial, ownership_vehicles[]}`. The vehicle-level breakdown the UI uses to render 'AAPL: 3.2M direct + 50K via GRAT Trust 2024' tooltips. |
| meta.ownership_summary.{cik}.total_shares_direct | number | no | Sum of shares across direct-ownership vehicles for this issuer. |
| meta.ownership_summary.{cik}.total_shares_indirect | number | no | Sum of shares across indirect-ownership vehicles for this issuer. |
| meta.ownership_summary.{cik}.total_beneficial | number | no | Aggregate beneficial ownership rolled up across all vehicles. Defaults to `0` when missing. |
| meta.ownership_summary.{cik}.ownership_vehicles | array | no | Array of `{nature, name, shares, as_of}` per vehicle. `nature='direct'|'indirect'`; `name` is the indirect-vehicle label (null for direct); `shares` = current vehicle holdings; `as_of` = ISO date the vehicle was most-recently observed. |
| request_id | string | yes | Per-request UUID for log correlation. |
| timestamp | string | no | ISO-8601 UTC response timestamp. |
Sample response
- "status": "success"
- "data":
- "meta":
- "pagination":
- "insider":
- "ownership_summary":
- "request_id": "ab3c5d7e-9f1a-4b2c-8d6e-7f9a0b1c2d3e"
- "timestamp": "2026-05-02T15:44:33.018Z"
Errors
| Status | Label | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Invalid query, body, or path parameter. |
| 401 | Unauthorized | Missing or invalid Authorization header / api_Token. |
| 402 | Payment Required | Insufficient token balance for this call. Top up |
| 429 | Too Many Requests | Rate limit exceeded for your tier (see /pricing for tier limits). Tier limits |
| 500 | Server Error | Unexpected server-side failure. Retry with backoff; report if persistent. |
Code samples
curl "https://api.finradar.ai/insider-module/api/insiders/holdings/by-insider/{cik}?api_Token=YOUR_API_KEY" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).