API ReferenceQuant Signals
Feature panel
/api/v3/features/{dataset}- Plan
- Starter and up
- Price
- 3 credits per call
- MCP tool
features_dataset
READ ONE DERIVED FEATURE PANEL — the model-ready research features this platform computes for itself: price/return and liquidity features, monthly fundamentals, analyst-estimate dynamics, options and volatility-surface features, insider and institutional-ownership features, news-sentiment features, betas, regime and macro features. Discover the slugs via /api/v3/features/datasets — they are product names, not table names. With ?ticker= you get that symbol's observations newest first; without it you get the LATEST cross-section (every symbol on the most recent observation date), which is bounded by construction rather than by sorting the whole panel. observation_date is the date the row describes; a panel that carries a vintage serves it beside it (ratio_vintage on the monthly fundamentals: when the valuation ratios were published; returns_data_through on the betas: where the return history behind the estimate ends), and rows dated after today, or monthly rows written before their month ended, are not served. Symbols resolve through the shared security resolver first and identity.identity_verified states whether the read was keyed on an authoritative identifier or on the resolved security's symbol; an ambiguous symbol is refused, never guessed. Every response carries the dataset's measured coverage (rows_total, symbols_total, observation_dates, history window) and its freshness, so an empty rows array arrives beside the count of symbols that DO have rows and can never be read as a dead upstream — result is the machine-readable outcome (rows, no_rows_for_symbol, no_rows_in_window). An archival dataset (producer stopped, or data behind its own rhythm) is served for its history, and every response says so rather than implying currency. An unknown or withheld slug — including one whose measured freshness is withheld (404 dataset_withheld, with reason and freshness) — is a 404 and an unreadable store is a 503 — both refunded, because a billed 200 over an empty array is the defect this endpoint exists to remove.
Parameters
Path
datasetstringRequiredQuery
tickerstringOptionalSymbol to read the time series for; omit for the latest cross-section.
limitintegerOptional5001 to 5000sincestringOptionalInclusive lower bound, YYYY-MM-DD.
untilstringOptionalInclusive upper bound, YYYY-MM-DD.
Response
A 200 is a JSON envelope: ok: true and this endpoint's own fields (see Research Datasets). It carries X-Request-ID, the credit headers (X-Credits-Cost, X-Credits-Remaining, X-Credits-Receipt, X-Credits-Settlement) and the rate-limit headers.
A 200 is billed even when it holds no data (an empty list, null, found: false), so check those fields. Pricing & credits explains the credit headers.
Errors
No error is billed. The body is { "ok": false, "error", "detail", "request_; read the code from error.
| Error | Meaning |
|---|---|
400 invalid_ticker | The request is malformed, for example a ticker that is not a symbol: invalid_ticker, refused before any credit is reserved, with param naming the parameter. Not billed. |
401 unauthorized | Missing or invalid API key. |
402 plan_required | Your plan does not include this tool, you are out of credits, or your workspace's spend cap paused its keys. plan_required names the plan that unlocks the tool; usage_exceeded means the credit balance is spent; spend_cap_reached means the key is paused until the cap resets or is raised: detail names the cap and the reset, cap_usd and resets_at (ISO 8601) carry them, and doc_url links pricing and credits. Not billed. |
403 scope_denied | This API key is limited to some products and this tool is not one of them. product names the tool's product and scopes the key's products. An upgrade does not change it: use a key whose scopes include the product, or change this key's scopes. Not billed. |
404 not_found | No such resource. Not billed. |
422 validation | A parameter is missing, out of range or the wrong type; param names it. Not billed. |
429 rate_limited | Your plan's rate limit is spent for this window. Retry after Retry-After seconds. Not billed. |
503 paid_ | The data could not be served completely right now; retry later. Not billed. |
504 request_timeout | The request ran past the server's time budget; retry. Not billed. |
This table lists what the spec declares for this route. Error responses lists every code FIRM sends, with when to retry.
Guides
Read the Research Datasets guide for this endpoint's fields and examples.