API documentation
REST and MCP access to SEC 13F holdings, Form 4 insider trades, congressional trades, company financials and macro series. 44 endpoints below; every response is JSON with a data / meta envelope. Base URL https://api.ko.io.
curl "https://api.ko.io/api/v1/holdings/1067983?per_page=1&demo=true"Abridged response captured 2026-09-23 (quarter ending 2026-06-30). Run it for the live response; no key or sign-up needed.
{
"data": [
{
"cik": "1067983",
"quarter_date": "2026-06-30",
"ticker": "AAPL",
"name_of_issuer": "APPLE INC",
"shares_held": "227917808",
"holding_value": "65950296923",
"total_portfolio_value": "299253556246",
"portfolio_weight_pct": 22.04,
"action": "UNCHANGED",
"share_change": "0",
"prev_shares": "227917808"
}
]
}- Filer
- Berkshire Hathaway
- Ticker
- AAPL
- Shares
- 227,917,808
- Lines summed
- 12
The row does not carry its accession. The 13F-HR it was parsed from (quarter ending 2026-06-30, captured 2026-09-23) is listed by GET /api/v1/filings/1067983?form=13F-HR. A newer quarter returns a newer filing.
Next, create a free account and a key in Console → API Keys, then send it as a Bearer token (below). Paginate with page and per_page.
Authorization header. Keys use the format ko_live_*.curl "https://api.ko.io/api/v1/holdings/1067983" \
-H "Authorization: Bearer ko_live_your_key_here"Demo mode
Add?demo=true to any endpoint for keyless access. Rate-limited per IP; meant for testing and prototyping.Auth endpoints (web app)
Used by the ko.io web app; not intended for API consumers.
- POST/api/auth/google · /api/auth/login · /api/auth/register · /api/auth/logout
- GET/api/auth/me · /api/auth/profile
data and meta fields. data is an array for lists and an object for single resources.{
"data": [ ... ],
"meta": {
"page": 1,
"per_page": 50,
"total_count": 1234,
"query_time_ms": 3.1
}
}{
"data": { ... },
"meta": {
"query_time_ms": 2.1
}
}Provenance
Numeric fields often arrive as strings (for example"holding_value": "65950296923"); parse them before arithmetic. Rows derived from SEC filings resolve to their filing through the filings endpoints (/api/v1/filings/:cik, then /api/v1/filings/:cik/:accession), which return the accession and the documents on sec.gov.MCP Integration
24 toolsclaude mcp add ko-sec-data --transport http https://mcp.ko.io/mcpclaude mcp add ko-sec-data -- npx -y @ko-io/mcp-sec-dataKO_API_KEY=ko_live_xxx # Optional: without key, uses demo mode (rate-limited per IP)
KO_API_URL=https://api.ko.ioAvailable tools
24| Tool | Description |
|---|---|
| search | Search across institutions, stocks, and congress members |
| get_institution_holdings | 13F institutional holdings with change analytics |
| list_institutions | List/search institutional investors |
| get_stock_profile | Stock info with ownership summary |
| get_stock_holders | Institutional holders for a stock |
| get_stock_activity | Stock activity and trading metrics |
| get_stock_financials | Company financials from SEC filings |
| get_stock_price | Historical daily OHLCV prices |
| get_insider_trades | Form 4 insider trades with filters |
| list_insider_traders | Top insider traders by volume |
| get_congress_trades | Congressional stock trades from STOCK Act |
| get_congress_member | Trading history for a congress member |
| get_form144_notices | Form 144 proposed sale notices |
| get_treasury_yields | US Treasury yield curve data |
| get_fed_rates | Federal Reserve interest rates |
| get_economic_indicators | BLS CPI, PPI, NFP, unemployment |
| get_ftd_data | SEC Failures to Deliver |
| get_financial_stress | OFR Financial Stress Index |
| get_crypto_exposure | Institutional spot BTC-ETF exposure summary |
| get_crypto_holders | Institutions holding spot crypto ETFs |
| get_crypto_holder | One institution's crypto-ETF positions |
| sec_list_filings | List an entity’s SEC EDGAR filings |
| sec_get_filing_index | Files inside a specific filing |
| sec_get_filing_document | Fetch a filing document + signed link |
Institutions
4 endpointsHoldings
1 endpointStocks & Companies
7 endpointsStock Analysis
2 endpointsInsider Trades
2 endpointsCongress Trades
4 endpointsSEC Extensions
6 endpointsTreasury
3 endpointsFederal Reserve
3 endpointsEconomic
1 endpointMarket Microstructure
2 endpointsEnergy
1 endpointBanking
3 endpointsFinancial Stress
1 endpointBulk Export
1 endpointDashboard
2 endpointsSearch
1 endpoint| Plan | Price | Daily limit | Bulk export |
|---|---|---|---|
| Free | $0 | 200 / day | No |
| Pro | $29 / mo | 20,000 / day | No |
| Team | $99 / mo | 200,000 / day | Yes |
| Enterprise | $499 / mo | 1,000,000 / day | Yes |
Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers.
| Status | Meaning | Resolution |
|---|---|---|
| 400 | Bad Request | Check query parameters and path format |
| 401 | Unauthorized | Include valid API key or use ?demo=true |
| 403 | Forbidden | Upgrade plan for this endpoint or feature |
| 404 | Not Found | Check endpoint path and resource IDs |
| 429 | Rate Limited | Wait for reset or upgrade plan |
| 500 | Server Error | Retry after a few seconds |
{
"error": "Unauthorized",
"message": "Invalid or missing API key. Use ?demo=true for keyless access.",
"status": 401
}