INSTITUTIONAL · FORM 13F

The 13F holdings API, position by position.

Every institutional manager over $100M files a Form 13F listing their U.S.-equity positions. Filingrail’s 13F endpoint turns those filings into one clean JSON row per position — issuer, CUSIP, market value, shares, and voting authority — with a link to the source filing on every response.

Free tier: 50 requests/day, no credit card. Endpoint: GET /v1/institutions/{cik}/13f-holdings

The fields

What every record carries.

Filingrail parses the underlying SEC filing into a flat, typed JSON object. These are the fields you get on each record:

Fields returned by the 13F Holdings API
Field What it is
institution_name The reporting manager (e.g. BERKSHIRE HATHAWAY INC).
institution_cik SEC CIK of the filing institution.
issuer_name Name of the held security’s issuer.
issuer_cusip CUSIP of the held security — the primary join key for 13F data.
title_of_class Class of security held (e.g. COM).
value_usd Market value of the position in whole USD (SEC moved off thousands-reporting in 2022).
shares Share or principal amount held.
investment_discretion SOLE, SHARED, or DEFINED investment discretion, per the filing.
voting_authority_sole Shares over which the manager has sole voting authority.
voting_authority_shared Shares with shared voting authority.

SAMPLE

A real-shaped response.

One GET returns the data array plus a meta block. The values below are an illustrative example of the response shape.

The field that matters most for trust is the link to the source filing on sec.govfiling_url on each record where the rows come from many filings, and meta.source_filing_url where one filing backs the whole response. Either way, any value you surface traces back to its source.

GET /v1/institutions/1067983/13f-holdings · 200 OK
{
  "data": [
    {
      "institution_name": "BERKSHIRE HATHAWAY INC",
      "institution_cik": 1067983,
      "issuer_name": "APPLE INC",
      "issuer_cusip": "037833100",
      "title_of_class": "COM",
      "value_usd": 69900000000,
      "shares": 300000000,
      "investment_discretion": "DFND",
      "accession_number": "0001193125-26-226661",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/1067983/000119312526226661/0001193125-26-226661-index.htm"
    }
  ],
  "meta": {
    "cik": "0001067983",
    "as_of": "2026-08-13T08:00:00Z"
  }
}

Illustrative example. Every record links to its source filing.

HOW-TO

How to pull an institution's 13F holdings with Filingrail

Subscribe on RapidAPI, find the institution CIK, call the 13F endpoint, and read every position with its market value and voting authority.

  1. 1

    Subscribe on RapidAPI

    Subscribe to the free Basic tier (50 requests/day) on the Filingrail RapidAPI listing and copy your X-RapidAPI-Key.

  2. 2

    Find the institution CIK

    Use /v1/search/companies to resolve a manager name to its SEC CIK (e.g. Berkshire Hathaway → 1067983).

  3. 3

    Call the 13F endpoint

    Request GET /v1/institutions/{cik}/13f-holdings for the newest quarter of positions.

  4. 4

    Trace any position to its filing

    Open the filing_url on any holding to verify it against the original 13F on sec.gov.

curl · 13F Holdings API
curl --request GET \
  --url 'https://filingrail.p.rapidapi.com/v1/institutions/1067983/13f-holdings' \
  --header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  --header 'X-RapidAPI-Host: filingrail.p.rapidapi.com'
Python · top_positions.py
import os, requests

API = "https://filingrail.p.rapidapi.com"
HEADERS = {
    "X-RapidAPI-Key": os.environ["RAPIDAPI_KEY"],
    "X-RapidAPI-Host": "filingrail.p.rapidapi.com",
}

# Berkshire Hathaway's CIK is 1067983
r = requests.get(f"{API}/v1/institutions/1067983/13f-holdings",
                 headers=HEADERS, timeout=10)
r.raise_for_status()
payload = r.json()

top = sorted(payload["data"], key=lambda h: h["value_usd"], reverse=True)[:10]
for h in top:
    print(f'{h["issuer_name"]:<28} ${h["value_usd"]:>15,}  '
          f'{h["shares"]:>13,} sh')
print("source:", top[0]["filing_url"])

FAQ

Common questions

Still wondering something? Email support@hudsonenterprisesllc.com — same business day response.

What is a 13F holdings API?
It returns the contents of SEC Form 13F filings — the quarterly disclosure institutional managers over $100M must file listing their U.S.-equity positions — as structured JSON. Filingrail serves one row per position with the issuer, CUSIP, whole-dollar market value, share count, and voting authority.
What is the endpoint and what does it return?
GET /v1/institutions/{cik}/13f-holdings. It returns an array of positions for the institution’s newest reported quarter, plus a meta block with the source filing URL. Values are in whole USD — the SEC moved off thousands-reporting in October 2022.
How do I find an institution&rsquo;s CIK?
Use the company-search endpoint (/v1/search/companies) to resolve a manager name to its SEC CIK. For example, Berkshire Hathaway is CIK 1067983. You pass that CIK to the 13F endpoint.
How current are the holdings?
13F positions are reported quarterly, 45 days after quarter-end, and Filingrail refreshes from SEC EDGAR daily so new filings appear as managers report. The response covers the newest quarter on file; meta.as_of gives the exact ingest timestamp.
Is there a free tier?
Yes — Basic is $0 with a hard cap of 50 requests/day, no credit card. Pro is $9/mo for 5,000 requests, Ultra $49/mo for 50,000, Mega $199/mo for 500,000. RapidAPI handles billing and keys.
Why does every record include a source filing URL?
So any position you surface traces back to the exact 13F it came from. Each holding carries filing_url, which opens that filing on sec.gov — the provenance that audit-conscious and research workflows need.

Start on the free tier.

50 requests/day, no credit card. Query the endpoint and read the source filing behind every record.