Reference

Response contracts for fundamentals, insider activity, and 13F manager holdings.

The API is built for application reads, not raw SEC exploration.

The response surface stays stable while the meta object explains completeness, selection policy, sector-aware caveats, and delayed-disclosure expectations.

Best starting points
/v1/company/:symbol/fundamentals/latest
Use this first for the best available current normalized company fundamentals row.
/v1/company/:symbol/metrics/latest
Use this for ratios, TTM values, and YoY outputs built from the strongest recent period.
/v1/company/:symbol/insiders/transactions
Use this for normalized insider activity from SEC ownership forms 3, 4, and 5.
/v1/institutions/:managerCik/holdings/latest
Use this for the latest quarterly 13F holdings snapshot for one manager CIK.
/v1/institutions/holdings/latest?managerCiks=...
Use this to fetch multiple manager-CIK 13F snapshots in one bulk API call.
/account/me
Use this for the account snapshot covering subscription, usage, and API keys.
Authentication

Public fundamentals endpoints require an API key via x-api-key.

Insider and 13F endpoints use the same API-key model, while website login and billing flows use bearer auth separately.

Fastest path Create an account, mint a key, then use the fundamentals latest endpoint as your first integration target.
OpenAPI

A lightweight machine-readable spec is available at /openapi.json.

It covers the current public fundamentals routes, auth schemes, stable error envelope, and the response meta contract.

Use it in tooling Keep your docs, playground, and future client generation aligned with the same contract file.
Quickstart Examples

Signup, create a bearer token, mint an API key, and call the SEC-derived API surface.

curl
curl -X POST http://localhost:3001/auth/signup \
  -H "content-type: application/json" \
  -d '{"name":"Demo User","email":"demo@example.com","password":"supersecure"}'

curl -X POST http://localhost:3001/auth/login \
  -H "content-type: application/json" \
  -d '{"email":"demo@example.com","password":"supersecure"}'

curl -X POST http://localhost:3001/account/api-keys \
  -H "authorization: Bearer YOUR_JWT" \
  -H "content-type: application/json" \
  -d '{"label":"Local dev"}'

curl http://localhost:3001/v1/company/AAPL/fundamentals/latest \
  -H "x-api-key: YOUR_API_KEY"
Python
import requests

base_url = "http://localhost:3001"

signup = requests.post(
    f"{base_url}/auth/signup",
    json={
        "name": "Demo User",
        "email": "demo@example.com",
        "password": "supersecure"
    }
)

login = requests.post(
    f"{base_url}/auth/login",
    json={
        "email": "demo@example.com",
        "password": "supersecure"
    }
)

jwt_token = login.json()["token"]

api_key_response = requests.post(
    f"{base_url}/account/api-keys",
    headers={"Authorization": f"Bearer {jwt_token}"},
    json={"label": "Local dev"}
)

api_key = api_key_response.json()["apiKey"]

fundamentals = requests.get(
    f"{base_url}/v1/company/AAPL/fundamentals/latest",
    headers={"x-api-key": api_key}
)

print(fundamentals.json())
Fundamentals Latest

GET /v1/company/:symbol/fundamentals/latest

Returns the best available annual or quarterly fundamentals row for the symbol.

Selection prefers recent rows with more populated core statement fields.

{
  "data": {
    "symbol": "AAPL",
    "periodType": "quarterly",
    "fiscalYear": 2026,
    "fiscalPeriod": "Q1",
    "periodEnd": "2025-12-27",
    "revenue": 143756000000,
    "gross_profit": 69231000000,
    "operating_income": 50852000000,
    "net_income": 42097000000,
    "operating_cash_flow": 53925000000,
    "free_cash_flow": 51552000000
  },
  "meta": {
    "coverage_class": "complete",
    "completeness": "6/6",
    "populated_fields": 6,
    "total_fields": 6,
    "missing_fields": [],
    "notes": [
      "Fundamentals are served from stored SEC-derived normalized data, not live SEC requests.",
      "Null values usually mean the issuer did not expose a stable comparable fact for that period."
    ],
    "selected_period_end": "2025-12-27",
    "selected_period_type": "quarterly"
  }
}
Metrics Latest

GET /v1/company/:symbol/metrics/latest

Returns derived metrics from the richest recent period.

For financial institutions, the API stays on the latest period and suppresses ratios that are not meaningfully comparable.

{
  "data": {
    "symbol": "JPM",
    "periodEnd": "2025-12-31",
    "gross_margin": null,
    "operating_margin": null,
    "net_margin": 0.31268259,
    "current_ratio": null,
    "debt_to_equity": null,
    "roa": 0.01289249,
    "roe": 0.15740071,
    "fcf_margin": null,
    "ttm_revenue": null,
    "ttm_net_income": null,
    "revenue_yoy": 0.41766968,
    "eps_yoy": 0.65591398,
    "ocf_yoy": null
  },
  "meta": {
    "coverage_class": "sector_limited",
    "completeness": "5/13",
    "populated_fields": 5,
    "total_fields": 13,
    "missing_fields": ["gross_margin", "operating_margin", "current_ratio", "debt_to_equity", "fcf_margin", "ttm_revenue", "ttm_net_income", "ocf_yoy"],
    "notes": [
      "Metrics may come from the richest recent period instead of the absolute newest row when that produces better TTM and YoY coverage.",
      "Financial-institution issuers omit non-comparable ratios such as debt_to_equity, current_ratio, fcf_margin, and some TTM fields."
    ],
    "selected_period_end": "2025-12-31",
    "selected_period_type": "annual"
  }
}
Insider Transactions

GET /v1/company/:symbol/insiders/transactions

Returns normalized company-level insider activity from SEC ownership forms 3, 4, and 5.

Transaction rows keep the original SEC code while also classifying the action into buy, sell, award, exercise, or other.

{
  "data": [
    {
      "symbol": "AAPL",
      "accessionNo": "0000320193-26-000012",
      "formType": "4",
      "filingDate": "2026-02-03",
      "reportingOwnerName": "Example Executive",
      "transactionDate": "2026-01-31",
      "transactionCode": "S",
      "transactionType": "sell",
      "shares": 12500,
      "pricePerShare": 211.34
    }
  ],
  "meta": {
    "count": 1,
    "notes": [
      "Insider transactions are normalized from SEC forms 3, 4, and 5.",
      "The original SEC transaction code is retained alongside a friendlier transactionType classification."
    ]
  }
}
Institutional Holdings (13F)

GET /v1/institutions/:managerCik/holdings/latest

Returns the latest quarterly 13F snapshot for a tracked institutional manager.

Bulk manager reads are also available with /v1/institutions/holdings/latest?managerCiks=0001067983,0001166559.

{
  "data": [
    {
      "manager": {
        "cik": "0001067983",
        "managerName": "Berkshire Hathaway Inc.",
        "filingCount": 12,
        "latestReportPeriod": "2025-12-31"
      },
      "holdings": [
        {
          "managerCik": "0001067983",
          "managerName": "Berkshire Hathaway Inc.",
          "accessionNo": "0000950123-26-001234",
          "filingDate": "2026-02-14",
          "reportPeriod": "2025-12-31",
          "issuerName": "APPLE INC",
          "issuerSymbol": "AAPL",
          "valueThousands": 71234567,
          "shares": 300000000,
          "sharesType": "SH"
        }
      ]
    }
  ],
  "meta": {
    "count": 1,
    "notes": [
      "13F holdings are quarterly institutional disclosures and should be treated as delayed snapshots.",
      "Bulk 13F reads are grouped by manager CIK and should be queried by manager identity, not company symbol."
    ]
  }
}
Meta fields

coverage_class is a fast classification: complete, partial, or sector_limited.

completeness is a quick populated-field score for the relevant response category.

missing_fields lists null fields so clients can branch without hardcoding assumptions.

notes explains null semantics and sector-aware suppression behavior.

Auth and limits

x-api-key is required on public API routes.

Free plan limits are currently 5 requests per minute and 100 per day.

Paid plan limits are currently 120 requests per minute and 10,000 per day.

Null semantics

Null does not usually mean the API failed.

It usually means the issuer did not expose a stable comparable SEC fact for that field and period.

Error format

Errors are returned as a stable JSON envelope.

{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using the x-api-key header."
  }
}

Common codes include missing_api_key, invalid_api_key, inactive_subscription, rate_limit_exceeded, symbol_not_found, fundamentals_unavailable, and validation_error.