Skip to content
/insider-module/api/insiders/holdings/snapshot/{snapshot_date}

Point-in-time holdings snapshot as of a specific date.

Point-in-time holdings snapshot as of a specific date. Each row includes total_beneficial_ownership and sector/industry classification from Sharadar.

Why use this

View insider holdings as of a specific date.

Common use case

Reconstructing insider ownership on a specific date for regulatory or research purposes.

Time-machine view of insider holdings — reconstructs the position table AS OF a specific historical date passed as the REQUIRED {snapshot_date} path segment (ISO YYYY-MM-DD). Filter to one issuer with ticker (recommended for performance) and/or one insider with insider_cik.

Use cases: regulatory reconstructions ('what did insiders hold on 2025-09-15?'), backtesting ('compare insider conviction at quarter-ends'), audit trails for compliance teams. The implementation walks reported_date <= snapshot_date with per-vehicle MAX-date dedup, so a filing accepted AFTER snapshot_date but reporting an earlier transaction_date does NOT bleed into the snapshot — the snapshot reflects what was KNOWABLE on that date, not the post-amendment ground truth.

For live current holdings use GET /insider-module/api/insiders/holdings/by-ticker/{ticker}.

Parameters

NameInRequiredDefaultAllowedDescriptionExample
snapshot_datepathrequiredThe as-of date in ISO `YYYY-MM-DD` format (REQUIRED path segment). Server walks `reported_date <= snapshot_date` with per-vehicle MAX-date dedup. Returns HTTP 400 on malformed dates.2026-04-01
tickerqueryoptionalFilter to a single issuer (recommended for performance — full-market snapshots can return many rows). When unset, scans every issuer with holdings on file.AAPL
insider_cikqueryoptionalFilter to a single insider (10-character zero-padded; shorter forms auto-padded).0001214156
limitqueryoptional100Maximum rows returned per page (1–1000).100
offsetqueryoptional0Zero-based pagination offset.0

Response schema

FieldTypeNullableDescription
statusstringnoAlways `success` on 2xx.
dataarraynoArray of insider holding rows reflecting the position table AS-OF the requested `snapshot_date`. One row per `(insider, security_title, ownership_nature, indirect_owner_name)` combination. Returns the most-recent reported holdings on or before `snapshot_date` per vehicle. Empty when the issuer has no holdings on file as of the snapshot date.
data[].holding_idstringnoStable internal UUID (serialized as a string).
data[].security_titlestringnoTitle of the security.
data[].amount_ownednumbernoNumber of shares (or contract units) held in this vehicle as of `snapshot_date`.
data[].ownership_naturestringno`'direct'` or `'indirect'`.
data[].reported_datestringyesISO `YYYY-MM-DD` date of the source filing reporting this position. Always ≤ `snapshot_date`.
data[].indirect_owner_namestringyesIndirect-vehicle name when `ownership_nature='indirect'`.
data[].is_derivativebooleanno`true` for derivative positions; `false` for cash-equity.
data[].total_beneficial_ownershipnumberyesAggregate shares this insider beneficially owned at this issuer across ALL vehicles AS OF `snapshot_date`. Null when the underlying filings do not report it.
data[].sectorstringyesSharadar sector classification.
data[].industrystringyesSharadar industry classification.
data[].insider_namestringyesReporting-person legal name.
data[].insider_cikstringyesReporting-person CIK.
data[].is_entitybooleanyes`true` for entity reporters.
data[].is_directorbooleannoDirector relationship.
data[].is_officerbooleannoOfficer relationship.
data[].is_ten_percent_ownerbooleanno10%-owner relationship.
data[].insider_titlestringyesOfficer title raw text.
data[].is_c_suitebooleannoC-suite indicator.
data[].tickerstringyesIssuer ticker.
data[].company_namestringyesIssuer name.
data[].issuer_cikstringyesIssuer CIK.
data[].accession_numberstringyesSource filing accession number.
data[].filed_atstringyesISO-8601 UTC filing acceptance timestamp.
metaobjectyesResult metadata.
meta.snapshot_datestringnoISO `YYYY-MM-DD` echo of the path-parameter `snapshot_date` (verbatim — server doesn't re-format). Source of truth for the snapshot's as-of date.
meta.paginationobjectyesPagination sub-block: `{ total, limit, offset, has_more }`.
request_idstringyesPer-request UUID for log correlation.
timestampstringnoISO-8601 UTC response timestamp.

Sample response

·
  • "status": "success"
  • "data":
    ]
  • "meta":
    • "snapshot_date": "2026-04-01"
    }
  • "request_id": "c6e8b9a0-1d2e-4f3a-9b8a-2c4d5e6f7a8b"
  • "timestamp": "2026-05-02T15:46:18.094Z"
}

Errors

StatusLabelDescription
200OKRequest succeeded.
400Bad RequestInvalid query, body, or path parameter.
401UnauthorizedMissing or invalid Authorization header / api_Token.
402Payment RequiredInsufficient token balance for this call. Top up
429Too Many RequestsRate limit exceeded for your tier (see /pricing for tier limits). Tier limits
500Server ErrorUnexpected server-side failure. Retry with backoff; report if persistent.

Code samples

curl "https://api.finradar.ai/insider-module/api/insiders/holdings/snapshot/{snapshot_date}" \
  -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).