{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"SGG Research Factor API","version":"1.2.0","summary":"Versioned ECPND and ECQDI research data.","description":"One complete US research score universe per factor. Use a customer Bearer key and an active subscription for the selected factor. Access and snapshots are factor-specific. Examples are illustrative. This data analytics and research service is not financial or investment advice. Unknown query parameters and repeated scalar parameters are rejected. GET and HEAD requests must not have a body.","termsOfService":"https://sggresearch.com/terms","contact":{"name":"SGG Research integration support","url":"https://sggresearch.com/terms#contact"}},"servers":[{"url":"https://sggresearch.com","description":"Environment serving this specification. Development and production keys are not interchangeable."}],"externalDocs":{"description":"Integration guide and endpoint reference","url":"https://sggresearch.com/api-docs"},"tags":[{"name":"Factors","description":"Factors currently licensed to your account."},{"name":"Scores","description":"Current and previously published complete snapshots."},{"name":"History","description":"Frozen historical releases and downloads."}],"security":[{"bearerAuth":[]}],"x-service-limits":{"scope":"customer","requests_per_minute":120,"requests_per_utc_day":10000,"concurrent_requests":5,"downloads_per_utc_day":10,"concurrent_downloads":1,"request_timeout_seconds":15,"download_timeout_seconds":120,"download_idle_timeout_seconds":30,"url_bytes":2048,"header_bytes":16384,"body_bytes":65536,"active_keys":10},"paths":{"/v1/factors":{"get":{"tags":["Factors"],"operationId":"getLicensedFactors","summary":"List your licensed factors","description":"Only factors currently licensed to the key’s account. If no subscription is active, returns 403. Use the version on a saved snapshot when reproducing past data.","responses":{"200":{"description":"Licensed factors and relative API paths.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Factors"},"example":{"factors":[{"factor":"ecpnd","score_name":"ecpnd_score","factor_version":"ecpnd-v1","scores":"/v1/scores?factor=ecpnd","history":"/v1/scores/history?factor=ecpnd"},{"factor":"ecqdi","score_name":"ecqdi_score","factor_version":"ecqdi-v1","scores":"/v1/scores?factor=ecqdi","history":"/v1/scores/history?factor=ecqdi"}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"405":{"$ref":"#/components/responses/MethodNotAllowed"},"408":{"$ref":"#/components/responses/RequestTimeout"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"414":{"$ref":"#/components/responses/UriTooLong"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"429":{"$ref":"#/components/responses/TooManyRequests"},"431":{"$ref":"#/components/responses/HeadersTooLarge"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/scores":{"get":{"tags":["Scores"],"operationId":"getScores","summary":"Retrieve a complete score snapshot","description":"Alphabetical rows, one per ticker, without pagination. Null is unavailable, not zero. HTTP 200 can contain delayed inputs: inspect status and data_through. Hourly checks can advance last_checked_at without changing snapshot_id or calculated_at. ECPND updates eligible participation history; ECQDI retains the latest qualified call value for at most 90 calendar days. Live sets may include same-day observations; save your response before the research decision. at and snapshot_id select published live records, not reconstructed historical dates. Explicit snapshot IDs return original publication metadata. Coverage counts always describe the full set.","parameters":[{"$ref":"#/components/parameters/Factor"},{"$ref":"#/components/parameters/Ticker"},{"$ref":"#/components/parameters/Format"},{"$ref":"#/components/parameters/At"},{"$ref":"#/components/parameters/SnapshotId"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Published set. Example universes contain three synthetic rows for clarity.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"ETag":{"$ref":"#/components/headers/ETag"},"X-Factor-Name":{"$ref":"#/components/headers/FactorName"},"X-Factor-Status":{"$ref":"#/components/headers/FactorStatus"},"X-Factor-Snapshot":{"$ref":"#/components/headers/FactorSnapshot"},"X-Factor-Calculated-At":{"$ref":"#/components/headers/FactorCalculatedAt"},"X-Factor-Last-Checked-At":{"$ref":"#/components/headers/FactorLastCheckedAt"},"X-Factor-Data-Through":{"$ref":"#/components/headers/FactorDataThrough"},"X-ECPND-Status":{"$ref":"#/components/headers/FactorStatus","description":"Compatibility alias supplied only when ecpnd is selected. Prefer X-Factor-* headers."},"X-ECPND-Snapshot":{"$ref":"#/components/headers/FactorSnapshot","description":"Compatibility alias supplied only when ecpnd is selected. Prefer X-Factor-* headers."},"X-ECPND-Calculated-At":{"$ref":"#/components/headers/FactorCalculatedAt","description":"Compatibility alias supplied only when ecpnd is selected. Prefer X-Factor-* headers."},"X-ECPND-Last-Checked-At":{"$ref":"#/components/headers/FactorLastCheckedAt","description":"Compatibility alias supplied only when ecpnd is selected. Prefer X-Factor-* headers."},"X-ECPND-Data-Through":{"$ref":"#/components/headers/FactorDataThrough","description":"Compatibility alias supplied only when ecpnd is selected. Prefer X-Factor-* headers."},"X-ECQDI-Status":{"$ref":"#/components/headers/FactorStatus","description":"Compatibility alias supplied only when ecqdi is selected. Prefer X-Factor-* headers."},"X-ECQDI-Snapshot":{"$ref":"#/components/headers/FactorSnapshot","description":"Compatibility alias supplied only when ecqdi is selected. Prefer X-Factor-* headers."},"X-ECQDI-Calculated-At":{"$ref":"#/components/headers/FactorCalculatedAt","description":"Compatibility alias supplied only when ecqdi is selected. Prefer X-Factor-* headers."},"X-ECQDI-Last-Checked-At":{"$ref":"#/components/headers/FactorLastCheckedAt","description":"Compatibility alias supplied only when ecqdi is selected. Prefer X-Factor-* headers."},"X-ECQDI-Data-Through":{"$ref":"#/components/headers/FactorDataThrough","description":"Compatibility alias supplied only when ecqdi is selected. Prefer X-Factor-* headers."},"Content-Disposition":{"$ref":"#/components/headers/ContentDisposition"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Scores"},"examples":{"ecpnd":{"summary":"Illustrative ECPND snapshot","value":{"factor":"ecpnd","score_name":"ecpnd_score","universe":"US research universe","factor_version":"ecpnd-v1","snapshot_id":"d5c7355c-2b9f-4421-8a13-538e70c2f6cd","calculated_at":"2026-09-28T11:00:08.000Z","last_checked_at":"2026-09-28T12:00:06.000Z","data_through":"2026-09-28T12:00:00.000Z","status":"current","prices_through":"2026-09-25","coverage":{"tickers":3,"price_tickers_current":3,"price_tickers_tracked":3,"pending_calls":0,"failed_calls":0},"scores":[{"ticker":"AAPL","ecpnd_score":0.64},{"ticker":"MSFT","ecpnd_score":null},{"ticker":"NVDA","ecpnd_score":0.51}]}},"ecqdi":{"summary":"Illustrative ECQDI snapshot","value":{"factor":"ecqdi","score_name":"ecqdi_score","universe":"US research universe","factor_version":"ecqdi-v1","snapshot_id":"ebc36730-686f-43bc-a494-1f59f07d6005","calculated_at":"2026-09-28T11:00:08.000Z","last_checked_at":"2026-09-28T12:00:06.000Z","data_through":"2026-09-28T12:00:00.000Z","status":"current","prices_through":"2026-09-25","coverage":{"tickers":3,"price_tickers_current":3,"price_tickers_tracked":3,"pending_calls":0,"failed_calls":0,"scored_tickers":2,"pending_factor_calls":0},"scores":[{"ticker":"AAPL","ecqdi_score":0.64},{"ticker":"MSFT","ecqdi_score":null},{"ticker":"NVDA","ecqdi_score":0.51}]}}}},"text/csv":{"schema":{"type":"string"},"examples":{"ecpnd":{"value":"ticker,ecpnd_score\n\"AAPL\",\"0.64\"\n\"MSFT\",\n\"NVDA\",\"0.51\"\n"},"ecqdi":{"value":"ticker,ecqdi_score\n\"AAPL\",\"0.64\"\n\"MSFT\",\n\"NVDA\",\"0.51\"\n"}}}}},"304":{"description":"Unchanged representation. No body. Retain cached data and read freshness headers. Authentication and request budgets apply.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"ETag":{"$ref":"#/components/headers/ETag"},"X-Factor-Name":{"$ref":"#/components/headers/FactorName"},"X-Factor-Status":{"$ref":"#/components/headers/FactorStatus"},"X-Factor-Snapshot":{"$ref":"#/components/headers/FactorSnapshot"},"X-Factor-Calculated-At":{"$ref":"#/components/headers/FactorCalculatedAt"},"X-Factor-Last-Checked-At":{"$ref":"#/components/headers/FactorLastCheckedAt"},"X-Factor-Data-Through":{"$ref":"#/components/headers/FactorDataThrough"},"X-ECPND-Status":{"$ref":"#/components/headers/FactorStatus","description":"Compatibility alias supplied only when ecpnd is selected. Prefer X-Factor-* headers."},"X-ECPND-Snapshot":{"$ref":"#/components/headers/FactorSnapshot","description":"Compatibility alias supplied only when ecpnd is selected. Prefer X-Factor-* headers."},"X-ECPND-Calculated-At":{"$ref":"#/components/headers/FactorCalculatedAt","description":"Compatibility alias supplied only when ecpnd is selected. Prefer X-Factor-* headers."},"X-ECPND-Last-Checked-At":{"$ref":"#/components/headers/FactorLastCheckedAt","description":"Compatibility alias supplied only when ecpnd is selected. Prefer X-Factor-* headers."},"X-ECPND-Data-Through":{"$ref":"#/components/headers/FactorDataThrough","description":"Compatibility alias supplied only when ecpnd is selected. Prefer X-Factor-* headers."},"X-ECQDI-Status":{"$ref":"#/components/headers/FactorStatus","description":"Compatibility alias supplied only when ecqdi is selected. Prefer X-Factor-* headers."},"X-ECQDI-Snapshot":{"$ref":"#/components/headers/FactorSnapshot","description":"Compatibility alias supplied only when ecqdi is selected. Prefer X-Factor-* headers."},"X-ECQDI-Calculated-At":{"$ref":"#/components/headers/FactorCalculatedAt","description":"Compatibility alias supplied only when ecqdi is selected. Prefer X-Factor-* headers."},"X-ECQDI-Last-Checked-At":{"$ref":"#/components/headers/FactorLastCheckedAt","description":"Compatibility alias supplied only when ecqdi is selected. Prefer X-Factor-* headers."},"X-ECQDI-Data-Through":{"$ref":"#/components/headers/FactorDataThrough","description":"Compatibility alias supplied only when ecqdi is selected. Prefer X-Factor-* headers."}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"405":{"$ref":"#/components/responses/MethodNotAllowed"},"408":{"$ref":"#/components/responses/RequestTimeout"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"414":{"$ref":"#/components/responses/UriTooLong"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"429":{"$ref":"#/components/responses/TooManyRequests"},"431":{"$ref":"#/components/responses/HeadersTooLarge"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/scores/history":{"get":{"tags":["History"],"operationId":"getHistoricalRelease","summary":"Inspect the historical release","parameters":[{"$ref":"#/components/parameters/Factor"}],"description":"Read coverage, version and compressed-file checksum before downloading. Dates can differ by factor and are independent of live hourly updates. Use the returned relative download URL on this origin with the same Bearer key.","responses":{"200":{"description":"Frozen release metadata. Additional provenance fields may be present.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoricalRelease"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"405":{"$ref":"#/components/responses/MethodNotAllowed"},"408":{"$ref":"#/components/responses/RequestTimeout"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"414":{"$ref":"#/components/responses/UriTooLong"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"429":{"$ref":"#/components/responses/TooManyRequests"},"431":{"$ref":"#/components/responses/HeadersTooLarge"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/scores/history.csv.gz":{"get":{"tags":["History"],"operationId":"downloadHistory","summary":"Download historical scores","parameters":[{"$ref":"#/components/parameters/Factor"},{"$ref":"#/components/parameters/IfNoneMatch"}],"description":"Gzip CSV: date,ticker,ecpnd_score or date,ticker,ecqdi_score. Blank scores are missing. Date is a historical decision session, not a live publication timestamp. Verify compressed bytes against download_sha256 before decompressing. Started GETs, including 304 and interrupted transfers, consume the download allowance. Maximum 120 seconds total and 30 seconds without socket activity. No byte-range resume; discard incomplete files.","responses":{"200":{"description":"Compressed historical score CSV.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"ETag":{"$ref":"#/components/headers/ETag"},"Content-Disposition":{"$ref":"#/components/headers/ContentDisposition"},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"Content-Length":{"$ref":"#/components/headers/ContentLength"}},"content":{"application/gzip":{"schema":{"type":"string","format":"binary"}}}},"304":{"description":"Unchanged release. No body; this GET still spends a download allowance.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"ETag":{"$ref":"#/components/headers/ETag"},"Content-Disposition":{"$ref":"#/components/headers/ContentDisposition"},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"405":{"$ref":"#/components/responses/MethodNotAllowed"},"408":{"$ref":"#/components/responses/RequestTimeout"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"414":{"$ref":"#/components/responses/UriTooLong"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"429":{"$ref":"#/components/responses/TooManyRequests"},"431":{"$ref":"#/components/responses/HeadersTooLarge"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}},"head":{"tags":["History"],"operationId":"headHistory","summary":"Inspect file headers without downloading","parameters":[{"$ref":"#/components/parameters/Factor"},{"$ref":"#/components/parameters/IfNoneMatch"}],"description":"Returns size, ETag and attachment headers without a body. Ordinary request limits apply, but no download allowance is spent. Error responses also have no body; use status, Retry-After and X-Request-Id.","responses":{"200":{"description":"File headers only.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"ETag":{"$ref":"#/components/headers/ETag"},"Content-Disposition":{"$ref":"#/components/headers/ContentDisposition"},"Content-Length":{"$ref":"#/components/headers/ContentLength"}}},"304":{"description":"Unchanged release. No body or download charge.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"ETag":{"$ref":"#/components/headers/ETag"},"Content-Disposition":{"$ref":"#/components/headers/ContentDisposition"}}},"400":{"description":"Invalid request. Correct parameters before retrying.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}}},"401":{"description":"Missing, invalid, expired or revoked Bearer key.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"WWW-Authenticate":{"$ref":"#/components/headers/Authenticate"}}},"403":{"description":"The key is valid but the requested access is not allowed.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}}},"404":{"description":"No matching published snapshot, ticker or route.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}}},"405":{"description":"Unsupported method. Inspect Allow.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"Allow":{"$ref":"#/components/headers/Allow"}}},"408":{"description":"The HTTP request was not received in time.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}}},"413":{"description":"Request body exceeds the transport limit. GET and HEAD must not have a body.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}}},"414":{"description":"Request URL exceeds 2,048 bytes.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}}},"415":{"description":"Unsupported request media type.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}}},"429":{"description":"Request, download, concurrency or abuse-protection limit. Follow Retry-After.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"431":{"description":"Request headers exceed 16 KiB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}}},"500":{"description":"Unexpected service error. Keep the request ID; contact support if it persists.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}}},"503":{"description":"Temporary dependency failure, deadline, restart or unavailable initial data. Follow Retry-After.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"opaque customer API key","description":"Create a key in your account. Production: sgg_live_; sandbox: sgg_test_. Use Authorization: Bearer <key>. Query-string credentials, website sessions and Google tokens are not API credentials."}},"parameters":{"Factor":{"name":"factor","in":"query","required":false,"description":"A factor licensed to your account. Omitted means ecpnd, including for ECQDI-only customers; set it explicitly.","schema":{"type":"string","enum":["ecpnd","ecqdi"],"default":"ecpnd"},"example":"ecpnd"},"Ticker":{"name":"ticker","in":"query","required":false,"description":"Exact uppercase ticker from the selected factor. Omit for all rows. Coverage still describes the full snapshot.","schema":{"type":"string","maxLength":16,"pattern":"^[A-Z0-9.\\-]+$"},"example":"AAPL"},"Format":{"name":"format","in":"query","required":false,"description":"Selects the representation; the Accept header does not override this parameter.","schema":{"type":"string","enum":["json","csv"],"default":"json"}},"At":{"name":"at","in":"query","required":false,"description":"Latest completed check with a recorded check time at or before this RFC 3339 timestamp. Use UTC (Z) or URL-encode a timezone offset. Must not be future-dated. Mutually exclusive with snapshot_id. Selects live publication history, not historical CSV dates.","schema":{"type":"string","format":"date-time"},"example":"2026-09-28T12:15:00Z"},"SnapshotId":{"name":"snapshot_id","in":"query","required":false,"description":"Published numerical score set belonging to this factor. Original publication metadata is returned without later checks. Mutually exclusive with at.","schema":{"type":"string","format":"uuid"},"example":"d5c7355c-2b9f-4421-8a13-538e70c2f6cd"},"IfNoneMatch":{"name":"If-None-Match","in":"header","required":false,"description":"ETag for this same URL and account. A 304 response has no body; retain cached data and inspect returned headers.","schema":{"type":"string"},"example":"W/\"example-validator\""}},"headers":{"RequestId":{"description":"Service-generated request ID. Include it in support requests; never send your key.","schema":{"type":"string","format":"uuid"}},"CacheControl":{"description":"Private caching only. Revalidate snapshots and files; factor access and release metadata are not stored.","schema":{"type":"string"}},"Vary":{"description":"Authentication context affecting this representation.","schema":{"type":"string"}},"ETag":{"description":"Opaque weak representation validator, not a checksum. Return it unchanged in If-None-Match for the same URL and account.","schema":{"type":"string"},"example":"W/\"example-validator\""},"RetryAfter":{"description":"Minimum seconds before retrying. Daily limits can require waiting until the next UTC day.","schema":{"type":"integer","minimum":1},"example":23},"Authenticate":{"description":"Bearer authentication challenge on a 401 response.","schema":{"type":"string"},"example":"Bearer realm=\"SGG Research\""},"Allow":{"description":"Supported methods for this route.","schema":{"type":"string"},"example":"GET, HEAD"},"ContentLength":{"description":"Compressed file size in bytes on a successful historical-file response.","schema":{"type":"integer","minimum":0}},"ContentDisposition":{"description":"Suggested attachment filename. Score responses supply this for CSV only.","schema":{"type":"string"}},"FactorName":{"description":"Selected, authorized factor.","schema":{"$ref":"#/components/schemas/FactorId"}},"FactorStatus":{"description":"Health of the saved inputs; latest requests also apply the 75-minute staleness check.","schema":{"$ref":"#/components/schemas/DataStatus"}},"FactorSnapshot":{"description":"Published score-set ID. Ticker filtering does not change this ID.","schema":{"type":"string","format":"uuid"}},"FactorCalculatedAt":{"description":"UTC publication time of the score set, not the call time or request time.","schema":{"type":"string","format":"date-time"}},"FactorLastCheckedAt":{"description":"Recorded completion time of the selected check. With snapshot_id, the original publication time is used.","schema":{"type":"string","format":"date-time"}},"FactorDataThrough":{"description":"Input observation cutoff examined by the selected check, not a guarantee that all source data arrived.","schema":{"type":"string","format":"date-time"}}},"responses":{"BadRequest":{"description":"Invalid request. Correct parameters before retrying.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}},"x-error-codes":["invalid_request","invalid_factor","use_at_or_snapshot_id","future_observation_requested"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"invalid_request":{"summary":"invalid_request","value":{"error":"invalid_request","message":"The request does not match the documented format.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}},"invalid_factor":{"summary":"invalid_factor","value":{"error":"invalid_factor","message":"Choose factor=ecpnd or factor=ecqdi.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}},"use_at_or_snapshot_id":{"summary":"use_at_or_snapshot_id","value":{"error":"use_at_or_snapshot_id","message":"Use either at or snapshot_id, not both.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}},"future_observation_requested":{"summary":"future_observation_requested","value":{"error":"future_observation_requested","message":"The at timestamp must not be in the future.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}}}}}},"Unauthorized":{"description":"Missing, invalid, expired or revoked Bearer key.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"WWW-Authenticate":{"$ref":"#/components/headers/Authenticate"}},"x-error-codes":["unauthorized"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"unauthorized":{"summary":"unauthorized","value":{"error":"unauthorized","message":"A valid Bearer API key is required.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}}}}}},"Forbidden":{"description":"The key is valid but the requested access is not allowed.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}},"x-error-codes":["factor_subscription_required","subscription_required","insufficient_scope","research_admin_only"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"factor_subscription_required":{"summary":"factor_subscription_required","value":{"error":"factor_subscription_required","message":"Your subscription does not include this factor for the current access period.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false,"factor":"ecqdi"}},"subscription_required":{"summary":"subscription_required","value":{"error":"subscription_required","message":"An active subscription is required.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}},"insufficient_scope":{"summary":"insufficient_scope","value":{"error":"insufficient_scope","message":"This API key cannot access this endpoint.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}},"research_admin_only":{"summary":"research_admin_only","value":{"error":"research_admin_only","message":"Historical research parameters require administrative access.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}}}}}},"NotFound":{"description":"No matching published snapshot, ticker or route.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}},"x-error-codes":["score_snapshot_not_available","ticker_not_found","not_found"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"score_snapshot_not_available":{"summary":"score_snapshot_not_available","value":{"error":"score_snapshot_not_available","message":"No score snapshot exists for the requested time or identifier.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}},"ticker_not_found":{"summary":"ticker_not_found","value":{"error":"ticker_not_found","message":"The ticker is not present in this score snapshot.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}},"not_found":{"summary":"not_found","value":{"error":"not_found","message":"The requested endpoint does not exist.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}}}}}},"MethodNotAllowed":{"description":"Unsupported method. Inspect Allow.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"Allow":{"$ref":"#/components/headers/Allow"}},"x-error-codes":["method_not_allowed"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"method_not_allowed":{"summary":"method_not_allowed","value":{"error":"method_not_allowed","message":"This HTTP method is not supported. See the Allow header.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}}}}}},"RequestTimeout":{"description":"The HTTP request was not received in time.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}},"x-error-codes":["request_timeout"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"request_timeout":{"summary":"request_timeout","value":{"error":"request_timeout","message":"The request was not received in time.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}}}}}},"PayloadTooLarge":{"description":"Request body exceeds the transport limit. GET and HEAD must not have a body.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}},"x-error-codes":["body_too_large"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"body_too_large":{"summary":"body_too_large","value":{"error":"body_too_large","message":"The request body exceeds 64 KiB.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}}}}}},"UriTooLong":{"description":"Request URL exceeds 2,048 bytes.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}},"x-error-codes":["uri_too_long"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"uri_too_long":{"summary":"uri_too_long","value":{"error":"uri_too_long","message":"The request URL exceeds 2,048 bytes.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}}}}}},"UnsupportedMediaType":{"description":"Unsupported request media type.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}},"x-error-codes":["unsupported_media_type"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"unsupported_media_type":{"summary":"unsupported_media_type","value":{"error":"unsupported_media_type","message":"Use Content-Type: application/json for a JSON request.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}}}}}},"TooManyRequests":{"description":"Request, download, concurrency or abuse-protection limit. Follow Retry-After.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"x-error-codes":["rate_limit_exceeded","daily_limit_exceeded","download_limit_exceeded","concurrent_request_limit","too_many_attempts"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"rate_limit_exceeded":{"summary":"rate_limit_exceeded","value":{"error":"rate_limit_exceeded","message":"The request limit has been reached. Wait before retrying.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":true,"retry_after_seconds":23}},"daily_limit_exceeded":{"summary":"daily_limit_exceeded","value":{"error":"daily_limit_exceeded","message":"The daily request limit has been reached.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":true,"retry_after_seconds":23}},"download_limit_exceeded":{"summary":"download_limit_exceeded","value":{"error":"download_limit_exceeded","message":"The daily historical-download limit has been reached.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":true,"retry_after_seconds":23}},"concurrent_request_limit":{"summary":"concurrent_request_limit","value":{"error":"concurrent_request_limit","message":"Too many requests are in progress for this account.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":true,"retry_after_seconds":23}},"too_many_attempts":{"summary":"too_many_attempts","value":{"error":"too_many_attempts","message":"Too many authentication attempts. Wait before retrying.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":true,"retry_after_seconds":23}}}}}},"HeadersTooLarge":{"description":"Request headers exceed 16 KiB.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}},"x-error-codes":["headers_too_large"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"headers_too_large":{"summary":"headers_too_large","value":{"error":"headers_too_large","message":"The request headers exceed 16 KiB.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}}}}}},"InternalError":{"description":"Unexpected service error. Keep the request ID; contact support if it persists.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}}},"x-error-codes":["internal_error"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"internal_error":{"summary":"internal_error","value":{"error":"internal_error","message":"The request could not be completed. Contact support with the request ID.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":false}}}}}},"ServiceUnavailable":{"description":"Temporary dependency failure, deadline, restart or unavailable initial data. Follow Retry-After.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"},"Vary":{"$ref":"#/components/headers/Vary"},"X-RateLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DailyLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Limit":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Remaining":{"description":"Account-wide budget shared across keys and factors. Present when this quota has been checked.","schema":{"type":"integer","minimum":0}},"X-DownloadLimit-Reset":{"description":"End of this fixed UTC budget window, as Unix seconds.","schema":{"type":"integer","minimum":0}},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"x-error-codes":["service_unavailable","request_timeout","service_busy","service_restarting","score_snapshot_preparing","historical_export_preparing"],"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"service_unavailable":{"summary":"service_unavailable","value":{"error":"service_unavailable","message":"The service is temporarily unavailable.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":true,"retry_after_seconds":23}},"request_timeout":{"summary":"request_timeout","value":{"error":"request_timeout","message":"The request exceeded its processing deadline.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":true,"retry_after_seconds":23}},"service_busy":{"summary":"service_busy","value":{"error":"service_busy","message":"The service is busy. Please retry after the indicated delay.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":true,"retry_after_seconds":23}},"service_restarting":{"summary":"service_restarting","value":{"error":"service_restarting","message":"The service is restarting. Please retry shortly.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":true,"retry_after_seconds":23}},"score_snapshot_preparing":{"summary":"score_snapshot_preparing","value":{"error":"score_snapshot_preparing","message":"The first complete score snapshot is not yet available.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":true,"retry_after_seconds":23}},"historical_export_preparing":{"summary":"historical_export_preparing","value":{"error":"historical_export_preparing","message":"The historical export is temporarily unavailable.","request_id":"21c8a620-6710-48c0-a814-743a8eac8f7b","retryable":true,"retry_after_seconds":23}}}}}}},"schemas":{"FactorId":{"type":"string","enum":["ecpnd","ecqdi"]},"ScoreValue":{"type":["number","null"],"minimum":0,"maximum":1,"description":"Bounded research value. Higher is more favourable under the definition; not a probability or return forecast. Null is unavailable; zero is valid."},"DataStatus":{"type":"string","enum":["current","partial_market_data","call_source_delayed","call_updates_pending","stale"],"description":"One status, in priority order: stale, call_source_delayed, call_updates_pending, partial_market_data, current. Current describes tracked inputs, not complete score coverage or investment suitability."},"Coverage":{"type":"object","required":["tickers","price_tickers_current","price_tickers_tracked","pending_calls","failed_calls"],"properties":{"tickers":{"type":"integer","minimum":0,"description":"Total rows in the full snapshot, even when ticker filters the returned array."},"price_tickers_current":{"type":["integer","null"],"minimum":0,"description":"Tracked market-data tickers current at this check. Null means not recorded."},"price_tickers_tracked":{"type":["integer","null"],"minimum":0,"description":"Tickers tracked by the market-data pipeline, not necessarily the selected score universe."},"pending_calls":{"type":["integer","null"],"minimum":0,"description":"Pending source-update queue records, not missing score rows."},"failed_calls":{"type":["integer","null"],"minimum":0,"description":"Failed source-update queue records, not a count of unscored tickers."}},"additionalProperties":true},"EcqdiCoverage":{"allOf":[{"$ref":"#/components/schemas/Coverage"},{"type":"object","required":["scored_tickers","pending_factor_calls"],"properties":{"scored_tickers":{"type":["integer","null"],"minimum":0,"description":"Non-null ECQDI rows in the full snapshot, before filtering."},"pending_factor_calls":{"type":["integer","null"],"minimum":0,"description":"Call records awaiting capture by the ECQDI process."}}}]},"ScoreSnapshot":{"type":"object","required":["factor","score_name","universe","factor_version","snapshot_id","calculated_at","last_checked_at","data_through","status","prices_through","coverage","scores"],"properties":{"factor":{"$ref":"#/components/schemas/FactorId"},"score_name":{"type":"string","enum":["ecpnd_score","ecqdi_score"]},"universe":{"type":"string","const":"US research universe","description":"Research coverage label, not a historical index constituent guarantee."},"factor_version":{"type":"string","description":"Calculation-definition version, independent of /v1 and the OpenAPI document version."},"snapshot_id":{"type":"string","format":"uuid","description":"Immutable numerical score-set identifier. A new check can reuse this set."},"calculated_at":{"type":"string","format":"date-time","description":"UTC publication time of the score set, not the call time or request time."},"last_checked_at":{"type":"string","format":"date-time","description":"Recorded completion time of the selected check. With snapshot_id, the original publication time is used."},"data_through":{"type":"string","format":"date-time","description":"Input observation cutoff examined by the selected check, not a guarantee that all source data arrived."},"status":{"$ref":"#/components/schemas/DataStatus"},"prices_through":{"type":["string","null"],"format":"date","description":"Latest stored benchmark price session; does not imply complete ticker coverage."},"coverage":{"$ref":"#/components/schemas/Coverage"},"scores":{"type":"array","description":"Alphabetical by ticker, one row per ticker. A ticker filter returns one row. No pagination."}},"additionalProperties":true},"Scores":{"oneOf":[{"$ref":"#/components/schemas/EcpndScores"},{"$ref":"#/components/schemas/EcqdiScores"}],"discriminator":{"propertyName":"factor","mapping":{"ecpnd":"#/components/schemas/EcpndScores","ecqdi":"#/components/schemas/EcqdiScores"}}},"Factor":{"type":"object","required":["factor","score_name","factor_version","scores","history"],"properties":{"factor":{"$ref":"#/components/schemas/FactorId"},"score_name":{"type":"string"},"factor_version":{"type":"string"},"scores":{"type":"string","format":"uri-reference","description":"Relative score URL on this origin."},"history":{"type":"string","format":"uri-reference","description":"Relative historical metadata URL on this origin."}},"additionalProperties":true},"Factors":{"type":"object","required":["factors"],"properties":{"factors":{"type":"array","items":{"$ref":"#/components/schemas/Factor"}}},"additionalProperties":true},"HistoricalRelease":{"type":"object","required":["factor","score_name","factor_version","window_years","window_start","window_end","first_session","last_session","sessions","tickers","rows","scored_rows","missing_rows","availability","universe","source_sha256","download_sha256","download"],"properties":{"factor":{"$ref":"#/components/schemas/FactorId"},"score_name":{"type":"string","enum":["ecpnd_score","ecqdi_score"]},"factor_version":{"type":"string"},"window_years":{"type":"integer","minimum":1,"description":"Nominal historical window length."},"window_start":{"type":"string","format":"date"},"window_end":{"type":"string","format":"date"},"first_session":{"type":"string","format":"date","description":"First included score date."},"last_session":{"type":"string","format":"date","description":"Last included score date. Frozen release dates do not advance with the live API."},"sessions":{"type":"integer","minimum":0,"description":"Distinct included dates."},"tickers":{"type":"integer","minimum":0,"description":"Distinct included tickers; membership varies by date."},"rows":{"type":"integer","minimum":0},"scored_rows":{"type":"integer","minimum":0},"missing_rows":{"type":"integer","minimum":0},"availability":{"type":"string","description":"Historical timing and reconstruction convention."},"universe":{"type":"string","description":"Coverage and membership definition for this release."},"source_preparation":{"type":"string","description":"Optional source-preparation explanation."},"preserved_study_rows":{"type":"integer","minimum":0,"description":"Optional count of preserved study-panel rows."},"source_sha256":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"Source provenance hash; not the download checksum."},"download_sha256":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"SHA-256 of compressed .csv.gz bytes, before decompression."},"download":{"type":"string","format":"uri-reference","description":"Relative authenticated URL. Use the complete returned path on this origin, including its query."}},"additionalProperties":true},"Error":{"type":"object","required":["error","message","request_id","retryable"],"properties":{"error":{"type":"string","description":"Machine-readable code. Handle unknown codes by HTTP status."},"message":{"type":"string","description":"Human-readable explanation; do not branch on this text."},"request_id":{"type":"string","format":"uuid"},"retryable":{"type":"boolean","description":"GET/HEAD 429 and 503 are retryable; respect Retry-After. Does not mean retry indefinitely."},"factor":{"$ref":"#/components/schemas/FactorId"},"retry_after_seconds":{"type":"integer","minimum":1},"details":{"type":"array","maxItems":3,"items":{"type":"object","required":["field","rule"],"properties":{"field":{"type":"string"},"rule":{"type":"string"}},"additionalProperties":true}}},"additionalProperties":true},"EcpndScore":{"type":"object","required":["ticker","ecpnd_score"],"properties":{"ticker":{"type":"string","minLength":1},"ecpnd_score":{"$ref":"#/components/schemas/ScoreValue"}},"additionalProperties":false},"EcpndScores":{"allOf":[{"$ref":"#/components/schemas/ScoreSnapshot"},{"type":"object","properties":{"factor":{"const":"ecpnd"},"score_name":{"const":"ecpnd_score"},"scores":{"type":"array","items":{"$ref":"#/components/schemas/EcpndScore"}}}}]},"EcqdiScore":{"type":"object","required":["ticker","ecqdi_score"],"properties":{"ticker":{"type":"string","minLength":1},"ecqdi_score":{"$ref":"#/components/schemas/ScoreValue"}},"additionalProperties":false},"EcqdiScores":{"allOf":[{"$ref":"#/components/schemas/ScoreSnapshot"},{"type":"object","properties":{"factor":{"const":"ecqdi"},"score_name":{"const":"ecqdi_score"},"scores":{"type":"array","items":{"$ref":"#/components/schemas/EcqdiScore"}},"coverage":{"$ref":"#/components/schemas/EcqdiCoverage"}}}]}}}}