API Reference

Holdings (by investor)

Retrieve one institutional manager's 13F positions by SEC CIK. With no report_period filter, the response contains only the manager's latest reported quarter; pass any report_period filter to reach earlier quarters, and increase limit for large portfolios.

GET/v1/institutional-holdings?filer_cik={cik}

Pass filer_cik to read the manager view. Use Owners (by ticker) for the ticker view; exactly one of filer_cik or ticker is accepted. The response is { filer_cik, institutional_holdings }.

13F coverage
Coverage is roughly 500 large US institutional managers, up to the last 8 quarters. 13F data is quarterly and can lag quarter-end by up to 45 days. It covers long US equity and listed-option positions, not shorts, cash, or the full shareholder base.

Query parameters#

filer_cikstringrequired
SEC Central Index Key of the manager, e.g. 1067983 for Berkshire Hathaway. Zero-padding is optional.
report_periodstringoptional
Exact 13F report period to return (YYYY-MM-DD, usually a quarter-end). Use this when you want one quarter’s portfolio.
report_period_gtestringoptional
Only positions with a report period on or after this date (YYYY-MM-DD). Also available: report_period_lte, report_period_gt, report_period_lt.
limitnumberoptional
Maximum rows to return. Defaults to 1000 (minimum 1). Increase it for large managers.

Example request#

curlbash
curl "https://api.focusalpha.ai/v1/institutional-holdings?filer_cik=1067983&report_period=2024-06-30&limit=1000" \
  -H "Authorization: Bearer $FOCUSALPHA_API_KEY"

Response#

Without a report_period filter, the response contains only the manager’s latest reported quarter (sorted newest-first within it). To retrieve earlier quarters — up to the last 8 retained — pass any report-period filter (report_period, report_period_gte, report_period_lte, report_period_gt, or report_period_lt). Matching rows are sorted by report_period descending before limit is applied. Each row is one aggregated 13F position for one security in one filing. Subsidiary manager blocks are summed; option rows and PRN rows stay separate.

institutional_holding#

tickerstring | nullrequired
Ticker resolved from the reported CUSIP. null when no ticker is mapped.
name_of_issuerstring | nullrequired
Issuer name as reported on the 13F.
cusipstringrequired
CUSIP reported by the manager.
title_of_classstring | nullrequired
Security class as reported, e.g. COM.
sharesnumber | nullrequired
Share count for SH rows, or principal amount for PRN rows.
share_type"SH" | "PRN"required
Whether shares is a share count (SH) or principal amount (PRN).
value_usdnumber | nullrequired
Reported market value in US dollars.
reported_pricenumber | nullrequired
value_usd / shares for ordinary share rows. null for PRN rows or zero-share rows.
put_call"Put" | "Call" | nullrequired
null for ordinary long positions; Put or Call for listed options.
report_periodstringrequired
13F report period (YYYY-MM-DD).
filing_datestring | nullrequired
Date the filing was submitted to the SEC (YYYY-MM-DD).
form_type"13F-HR" | "13F-HR/A" | nullrequired
Filing type: 13F-HR or amendment 13F-HR/A.
accession_numberstring | nullrequired
SEC accession number for the source filing, e.g. 0000950123-24-008740.
filer_cikstringrequired
Zero-padded manager CIK.
filer_namestring | nullrequired
Manager name as registered with the SEC.

Example response#

institutional-holdings.jsonjson
{
  "filer_cik": "0001067983",
  "institutional_holdings": [
    {
      "ticker": "AAPL",
      "name_of_issuer": "APPLE INC",
      "cusip": "037833100",
      "title_of_class": "COM",
      "shares": 400000000,
      "share_type": "SH",
      "value_usd": 84248000000,
      "reported_price": 210.62,
      "put_call": null,
      "report_period": "2024-06-30",
      "filing_date": "2024-08-14",
      "form_type": "13F-HR",
      "accession_number": "0000950123-24-008740",
      "filer_cik": "0001067983",
      "filer_name": "BERKSHIRE HATHAWAY INC"
    }
  ]
}

Errors#

Statuses: 400 for invalid parameters, 401 for a bad or missing API key, 402 for rate-limit or quota failures, 404 for an unusable CIK or disabled route, 500 for an unexpected internal error, and 503 when the holdings store is temporarily unavailable. A valid filer with no matching rows returns 200 with an empty institutional_holdings array. See Errors.