Skip to content
/api/v1/form-13f/latest

Get the most recently parsed 13F filings across all funds, sorted by filing date descending.

Get the most recently parsed 13F filings across all funds, sorted by filing date descending.

free

Why use this

Returns the N latest completed 13F filings with fund metadata, portfolio value, holdings count, and quarter-over-quarter position change counts. Both `analysis` (raw counts) and `statistics` (frontend-friendly names) are included for compatibility. Values are in SEC thousands (multiply by 1000 for actual dollars).

Common use case

Building a live-updating '13F Activity Feed' showing the most recent institutional filings as they are parsed. Each entry includes statistics counts so you can immediately see portfolio changes without fetching the full fund report. The `statistics` field uses the same schema as WebSocket 13f_summary events for consistent frontend rendering.

Returns the most-recently parsed 13F filings as a live activity feed — sorted by parsed_at DESC (NOT filed_at, since SEC EDGAR occasionally accepts filings out of order). Each entry carries the fund identity, portfolio value, holdings count, AND QoQ position-change statistics — so a single GET call surfaces enough information to render an 'institutional activity feed' tile WITHOUT additional drill-downs.

Both analysis (legacy raw count names) AND statistics (frontend-friendly names + prior_quarter_available flag) are returned for backwards compatibility. The statistics field's schema is INTENTIONALLY identical to the WebSocket new_13f_filing event payload — so frontends can render REST and WebSocket events with the same component code (Phase 47-era WebSocket normalization).

Live updates: for true real-time consumption (filings as they're parsed), prefer the WebSocket /13f namespace — subscribe to new_13f_filing for push-based updates. This REST endpoint is the polling fallback (typical poll cadence: 30s during filing season, 5min between seasons).

For full-portfolio drill-down on any row, pass cik + period_of_report to GET /api/v1/form-13f/fund/{cik}. For the raw filing artifact, pass accession_no to GET /api/v1/sec/filings/{accession_number}. All monetary values in USD (post-Plan-51 thousands correction — note utility text is legacy and pre-dates the correction).

Parameters

NameInRequiredDefaultAllowedDescriptionExample
limitqueryoptional20Number of filings to return (max 100)20

Response schema

FieldTypeNullableDescription
dataarraynoArray of the N most-recently parsed 13F filings, sorted by `parsed_at DESC` (most-recently ingested first — NOT filed-at-DESC, since SEC EDGAR sometimes accepts filings out of order). Page size capped by `limit` (default 20, max 100). The 'live activity feed' shape.
data[].accession_nostringnoSEC accession number in canonical 18-char dashed format `XXXXXXXXXX-YY-NNNNNN` (e.g. `0001012975-25-000452`). Pass to `POST /api/v1/form-13f/holdings` (via `accessionNo:...` query) or [GET /api/v1/sec/filings/{accession_number}](/docs/sec-filings/sec-filings-api/get-sec-filings-accession-number) for the raw filing artifact.
data[].fund_namestringnoRegistrant name AS FILED on the 13F-HR cover page. Casing preserved verbatim (sometimes Title Case, sometimes ALL CAPS depending on the filer's submission style).
data[].cikstringnoFiler CIK as a 10-character zero-padded string. Stable join key against the rest of the 13F surface.
data[].period_of_reportstringnoISO `YYYY-MM-DD` reporting quarter end (always a calendar quarter end: 03-31, 06-30, 09-30, 12-31). 13F-HR is filed within 45 days of this date.
data[].filed_atstringnoISO `YYYY-MM-DD` filing acceptance date — the date the SEC stamped the filing as accepted. Use for filing-cadence analysis (which managers file early vs late).
data[].table_value_totalnumbernoTotal reported portfolio value across all positions in the filing, in USD (post-Plan-51 thousands-vs-actual-dollars normalization). NOTE: pre-Plan-51 the field was in SEC thousands (multiply by 1000 for actual dollars); the older `utility` text on this endpoint reflects that legacy semantics. Current values are USD direct — Knighthead Capital's $2.05B portfolio is `2053758064` USD, NOT `2.05M × 1000`.
data[].holdings_countintegernoNumber of position rows in the filing's information table. Knighthead-shaped boutique funds: 5-50; mid-tier hedge funds: 50-500; index-fund books (Vanguard, BlackRock): 3000-9000+. 13F-NT filings have 0 holdings (and are skipped by the parser, so they don't surface here).
data[].form_typestringnoSEC form type — `13F-HR` (original) or `13F-HR/A` (amendment). 13F-NT (notice-of-no-information) filings are skipped by the parser. Reference [SEC EDGAR form types](https://www.sec.gov/forms).
data[].is_amendmentbooleannoTrue when `form_type` ends with `/A`. Amendments often arrive months after the original — useful for surfacing 'late corrections' in the activity feed (e.g. a fund discovered they had under-reported a position).
data[].analysisobjectnoQoQ position-change counts (raw): `{ new, closed, increased, decreased, unchanged }`. Computed against the prior-quarter `(cik, period - 3M)` baseline. All zero when no prior-quarter row exists (initial filing). Preserved for backwards compatibility — prefer `statistics` for new code.
data[].statisticsobjectnoQoQ position-change counts (frontend-friendly names): `{ new_positions, increased, decreased, closed, unchanged, prior_quarter_available }`. Same data as `analysis` with renamed fields PLUS the `prior_quarter_available` flag (false → all counts are zero, render the row as 'Initial filing'). Schema matches the WebSocket `new_13f_filing` event so frontends can render REST + WS payloads identically.
data[].parsed_atstringnoISO-8601 UTC timestamp of when FinRadar's parser ingested the filing. May be 5min-2hours after `filed_at` depending on parser queue depth. Use as the sort key for 'most-recently ingested' feeds (not `filed_at`, which can be backdated by SEC EDGAR).
meta.totalintegernoTotal number of filings returned (echoes back `data.length`). Capped by `limit`.

Sample response

·
  • "data":
    ]
  • "meta":
    • "total": 1
    }
}

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/api/v1/form-13f/latest" \
  -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).