Skip to content
FolioFact

API Reference

The FolioFact REST API v1 is a read-only JSON API over the same public research data as the website: tracked funds, their quarterly 13F filings and holdings, the stocks they own, investor portfolios, and the cross-fund insider feed. It is fully documented in /openapi.yaml (OpenAPI 3.1) — the machine contract every agent should read first. This page is the human quick-start.

Authentication

Two ways to call the API:

  • Anonymous — no key needed; public data with the anonymous rate limits (20 req/min, 1,000 req/day per IP).
  • API keyAuthorization: Bearer ff_… (or X-Api-Key: ff_…). Keys are created in Settings → API keys, inherit your account's plan, and are revocable at any time. Pro subscribers unlock the gated endpoints below.

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. Hitting a limit returns 429 with a Retry-After header.

Endpoints

Method Path Access GET /api/v1/meta public GET /api/v1/search?q= public GET /api/v1/funds public GET /api/v1/funds/:fund_slug public GET /api/v1/funds/:fund_slug/holdings public GET /api/v1/funds/:fund_slug/history public GET /api/v1/stocks public GET /api/v1/stocks/:ticker public GET /api/v1/stocks/:ticker/financials Pro GET /api/v1/stocks/:ticker/insiders Pro GET /api/v1/stocks/:ticker/options Pro GET /api/v1/investors public GET /api/v1/investors/:slug public GET /api/v1/insiders (deep pages Pro) public GET /api/v1/insiders?format=csv Pro GET /api/v1/compare?tickers=AAPL,MSFT Pro

Example requests

# Catalog + your tier
curl -H "Accept: application/json" https://foliofact.com/api/v1/meta

# Public search
curl -H "Accept: application/json" "https://foliofact.com/api/v1/search?q=pabrai"

# With a key (Pro example)
curl -H "Accept: application/json" \
     -H "Authorization: Bearer ff_YOUR_KEY" \
     https://foliofact.com/api/v1/stocks/AAPL/financials

Errors

Errors are JSON with a stable shape:

{ "error": { "code": "insufficient_tier", "message": "…", "tier_hint": "…", "docs_url": "…" } }

Common codes: 400 bad request, 401 invalid key, 403 insufficient tier (→ /pricing), 404 not found, 422 unprocessable, 429 rate limited.

Stability promise

v1 is additive-only. New endpoints and fields may be added at any time; breaking changes ship as v2. See docs/api_stability.md.

Send feedback

Optional — only if you'd like a reply.