/api/v1/form-13f/fund/{cik}/daily-returnsDaily time-weighted 13F return index with SPY benchmark
Daily 13F-tracked return index time series for a fund, with SPY benchmark alongside. Rows failing the engine's integrity gate are quarantined and never served (2026-08-18).
Why use this
Common use case
Daily mark-to-market of the fund's disclosed 13F long book: the most recent quarterly composition is held fixed between filings, valued at each day's closes (split-adjusted share counts, unadjusted closes), and chained into a cumulative time-weighted index. On the first trading day a new filing governs, the daily return is computed from the OLD basket at the new day's prices — isolating price moves from the manager's buys/sells — and the identity of the exact filing that priced each day is tracked internally so amendments and late filings can never masquerade as performance.
Data-quality contract (2026-08-18): every computed day passes a write-time integrity gate; a stored day that fails it and cannot be repaired by recomputation is QUARANTINED — withdrawn from this endpoint (and from the /fund-performance rollups) rather than served. A daily reconciliation sweep detects and repairs series gaps and defective days through the same recompute pipeline; while a repair is pending, the affected dates are simply absent. Consequence for consumers: derive window returns from the return_index ratio at the endpoints you receive; absent dates are a repair-in-flight signal, not zeros.
This series measures the disclosed LONG book only — 13F does not reveal shorts, options hedges (excluded from the basket), cash, or intra-quarter trading. It is a tracking estimate, not fund NAV. For quarterly rollups (1y/3y/5y/10y/inception returns, S&P benchmark, alpha) see GET /api/v1/form-13f/fund-performance.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| cik | path | required | — | — | Fund CIK (6/7/10-char accepted; normalized to 10-char zero-padded) | 0001067983 |
| period | query | optional | all | — | Window: '1y', '3y', '5y', '10y', or 'all' (calendar-day cutoffs: 365/1095/1825/3650 days back from today) | 1y |
| format | query | optional | chart | — | 'chart' = parallel arrays for charting libs; 'table' = one object per day incl. portfolio_value, holdings_count, price_coverage_pct | table |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| cik | string | no | Echoed 10-char zero-padded CIK. |
| period | string | no | Echoed window selector. |
| data_points | integer | no | Number of daily rows returned. |
| date_range.from / date_range.to | string | no | ISO dates of the first and last returned rows. |
| data.dates[] | array | no | (format=chart) ISO trading dates. The day grid is the engine's pricing calendar; a date can be legitimately absent while a repair of a detected gap is pending — compute window returns from the index ratio of the endpoints you receive, never by counting rows. |
| data.return_index[] | array | no | (format=chart) Cumulative time-weighted return index, 1.0 at inception. Window return between any two dates = index_b / index_a − 1. Cash flows (position changes disclosed by new filings) are stripped by construction — this tracks price performance of the disclosed book, NOT the fund's actual NAV. |
| data.sp500_return_index[] | array | yes | (format=chart) SPY benchmark index chained on the same day grid, same normalization. |
| data.daily_return_pct[] | array | yes | (format=chart) Day-over-day percent move. Null on a day whose prior-basket value could not be established (e.g. first day after an unreconstructable amendment replacement — the index carries unchanged rather than fabricating a move). |
| data[] (format=table) | array | no | One object per day: date, portfolio_value (USD mark-to-market of the disclosed book), return_index, daily_return_pct, sp500_return_index, holdings_count (priced names that day), price_coverage_pct (priced names / basket names × 100). |
Sample response
- "cik": "0001067983"
- "period": "1y"
- "data_points": 2
- "date_range":
- "from": "2026-08-14"
- "to": "2026-08-17"
- "data":
- "dates":
- "return_index":
- "sp500_return_index":
- "daily_return_pct":
Errors
| Status | Label | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Invalid query, body, or path parameter. |
| 401 | Unauthorized | Missing or invalid Authorization header / api_Token. |
| 402 | Payment Required | Insufficient token balance for this call. Top up |
| 429 | Too Many Requests | Rate limit exceeded for your tier (see /pricing for tier limits). Tier limits |
| 500 | Server Error | Unexpected server-side failure. Retry with backoff; report if persistent. |
Code samples
curl "https://api.finradar.ai/api/v1/form-13f/fund/0001067983/daily-returns?period=1y&format=table" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).