Factor Provenance
Factor responses are designed to be auditable after they leave the API. Use include=trust on compact requests when an agent, workflow, or report needs the provenance and methodology envelope.
SEC API factor data is produced from SecAPI-owned models, public-company data, market-data inputs available to SEC API, and documented proxy or basket definitions. The product goal is FactorsToday-compatible workflows with SecAPI-owned data and methodology, not copying another provider’s datasets.
What To Preserve
Every factor workflow should preserve these fields when they are present:
| Field | Why it matters |
|---|
requestId | Support can trace the exact API request. |
traceparent | Distributed traces can connect API, MCP, SDK, and downstream application work. |
freshness | Tells you whether the response is fresh, stale, degraded, or unknown for the requested clock. |
materialization | Identifies the parser, model, or read-model version that produced the response. |
methodology | Identifies the model family, inputs, and construction notes when included. |
sourceRights | Describes whether the source posture is public-safe, contract-gated, or otherwise restricted. |
degradedState | Explains partial responses without pretending the workflow is complete. |
Compact factor responses optimize for agent and chart payload size. If your workflow needs trust metadata, request it explicitly:
curl -H "x-api-key: $SECAPI_API_KEY" \
-H "secapi-version: 2026-03-19" \
"https://api.secapi.ai/v1/factors/returns?keys=VALUE,MOMENTUM,QUALITY&lookback=6m&response_mode=compact&include=trust"
For MCP, pass the same include intent:
{
"name": "factors.returns",
"arguments": {
"keys": ["VALUE", "MOMENTUM", "QUALITY"],
"lookback": "6m",
"response_mode": "compact",
"include": ["trust"]
}
}
Source Posture
| Factor family | Launch posture |
|---|
| Market factor | Built from SecAPI market-data inputs and benchmark construction metadata. |
| Style factors | Built from point-in-time security returns and public-company characteristics such as SEC-derived fundamentals when used by the factor definition. |
| Sector and industry factors | Built from point-in-time security returns plus public classification mappings such as SIC-derived sector and industry groupings. |
| Portfolio attribution and hedge | Built from the portfolio holdings submitted by the caller plus SecAPI factor exposure and return read models. |
| Thematic, country, and macro tracked definitions | Tracked in the catalog or methodology registry, but not all are part of the launch-read default surface or 2010+ claim set. |
Do not treat a tracked catalog definition as a launch claim by itself. The launch claim boundary is determined by row-level materialization, freshness, model/version metadata, and source-rights posture.
Materialization Versions
Common factor materialization identifiers include:
| Identifier pattern | Meaning |
|---|
factor_returns_clickhouse_v2_stock_basket | Daily factor returns served from the stock-basket ClickHouse read model. |
factor_returns_clickhouse_v2_purified | Daily factor returns served from the purified factor-return read model. |
factor_exposures_latest_v2_stock_basket | Latest security exposure read model for stock-basket factors. |
factor_exposures_latest_v2_purified | Latest security exposure read model for purified factors. |
portfolio_factor_attribution_v1 | Portfolio attribution assembled from holdings, exposures, and realized factor returns. |
portfolio_factor_hedge_v1 | Portfolio hedge suggestions assembled from portfolio factor exposure targets and hedge constraints. |
These identifiers are operational contracts. They let you tell whether a result came from a materialized read model, a computed fallback, or an explicit degraded path.
How Degraded States Work
A degraded response is still a structured response. It should be handled differently from a silent success and differently from a generic error.
Common examples:
- factor returns are unavailable because a required read model is not materialized
- portfolio attribution is partial because some holdings lack sufficient market bars
- hedge suggestions are empty because factor exposures are missing or constraints reject all candidates
- intraday factor state is stale because market-data inputs are not current
Preserve degradedState.code, degradedState.message, degradedState.retryable, degradedState.missingCapabilities, and degradedState.fallbackUsed when present. Some materialization error details may also include operatorAction; preserve it when it appears outside the degraded-state envelope.
Next Pages