FinData OS audit for WP46 (Phase 0)
Audited 2026-11-09T17:38:35.835958+00:00 against https://findata.spboucher.ai/api/v1 by scripts/audit_findata.py. Machine-readable evidence: results/manifests/findata_audit.json; call log: results/logs/findata_audit_provenance.jsonl. The hostname findata.spboucher.ai (not indata.) is the one configured in the owner's FinData repository and its docs/CLAUDE-API-USAGE.md; the API contract is the live OpenAPI document (/api/v1/openapi.json) — no endpoint below was guessed.
1. Service and contract
- Health status:
degraded; alerts: ['dead_jobs']; components:{'postgres': 'ok', 'backup': '…', 'ingest_worker': 'running', 'lake': '…', 'ssd_smart': 'Verified'}. - OpenAPI 3.1.0, 41 paths. Used by WP46:
/catalog/datasets,/catalog/datasets/{id},/catalog/schema/bars,/instruments/{symbol},/market/bars,/query(DuckDB SQL over the lake views),/exports(+/exports/{id},/download),/health. - Bars schema:
{"schema_version": 1, "timestamp_convention": "bar_open", "timezone_storage": "UTC", "fields": [{"name": "instrument_id", "type": "string", "nullable": false}, {"name": "symbol_as_reported", "type": "string", "nullable": false}, {"name": "venue", "type": "string", "nullable": true}, {"name": "asset_class", "type": "string", "nullable": false}, {"name": "interval", "type": "string", "nullable": false}, {"name": "timestamp_utc", "type": "timestamp[us, tz=UTC]", "nullable": false}, {"name": "session_date", "type": "date32[day]", "nullable": false}, {"name": "open", "type": "double", "nullable": f - Response headers observed:
{'x-content-type-options': 'nosniff', 'x-frame-options': 'DENY', 'x-request-id': 'a269afe07a8a4356'}. Rate limit (documented): 600 requests/min per key; the client uses a 5 req/s token bucket with Retry-After/backoff. - Authentication: bearer API key read from the owner's secret file; key scopes used: read:market, query, export. Never logged.
2. Datasets (catalog)
| dataset | status | rows | first session | last session | version |
|---|---|---|---|---|---|
corporate_actions.stock |
active | 0 | 0 | ||
market_bars.stock.5m.raw |
active | 2,062,205,350 | 2000-01-03 | 2026-11-06 | 43 |
market_bars.crypto.1d.raw |
active | 181,957 | 75 | ||
market_bars.crypto.1h.raw |
active | 4,098,204 | 5 | ||
market_bars.crypto.1m.raw |
active | 177,377,622 | 83 | ||
market_bars.crypto.30m.raw |
active | 7,970,148 | 5 | ||
market_bars.crypto.5m.raw |
active | 42,849,352 | 5 | ||
market_bars.etf.1d.raw |
active | 9,073,895 | 2000-01-03 | 2026-11-06 | 5167 |
market_bars.etf.1d.split |
active | 9,051,347 | 270 | ||
market_bars.etf.1d.split_div |
active | 9,051,347 | 270 | ||
market_bars.etf.1h.split |
active | 55,703,678 | 270 | ||
market_bars.etf.1h.split_div |
active | 55,703,678 | 270 | ||
market_bars.etf.1m.raw |
active | 910,257,088 | 2000-01-03 | 2026-11-06 | 5167 |
market_bars.etf.1m.split |
active | 907,197,376 | 5161 | ||
market_bars.etf.1m.split_div |
active | 907,197,376 | 5161 | ||
market_bars.etf.30m.split |
active | 91,337,816 | 270 | ||
market_bars.etf.30m.split_div |
active | 91,337,816 | 270 | ||
market_bars.etf.5m.split |
active | 330,637,732 | 270 | ||
market_bars.etf.5m.split_div |
active | 330,637,732 | 270 | ||
market_bars.futures_contracts.1d.raw |
active | 8,430,644 | 20967 | ||
market_bars.futures_contracts.1h.raw |
active | 30,077,653 | 997 | ||
market_bars.futures_contracts.1m.raw |
active | 615,553,277 | 19699 | ||
market_bars.futures_contracts.30m.raw |
active | 51,126,242 | 997 | ||
market_bars.futures_contracts.5m.raw |
active | 199,339,369 | 997 | ||
market_bars.futures.1d.continuous_absolute |
active | 526,324 | 133 | ||
market_bars.futures.1d.continuous_ratio |
active | 526,324 | 133 | ||
market_bars.futures.1d.continuous_raw |
active | 526,324 | 133 | ||
market_bars.futures.1h.continuous_absolute |
active | 8,317,926 | 8 | ||
market_bars.futures.1h.continuous_ratio |
active | 8,317,926 | 8 | ||
market_bars.futures.1h.continuous_raw |
active | 8,317,926 | 8 | ||
market_bars.futures.1m.continuous_absolute |
active | 302,853,229 | 132 | ||
market_bars.futures.1m.continuous_ratio |
active | 302,853,229 | 132 | ||
market_bars.futures.1m.continuous_raw |
active | 302,853,229 | 132 | ||
market_bars.futures.30m.continuous_absolute |
active | 15,617,848 | 8 | ||
market_bars.futures.30m.continuous_ratio |
active | 15,617,848 | 8 | ||
market_bars.futures.30m.continuous_raw |
active | 15,617,848 | 8 | ||
market_bars.futures.5m.continuous_absolute |
active | 78,211,693 | 8 | ||
market_bars.futures.5m.continuous_ratio |
active | 78,211,693 | 8 | ||
market_bars.futures.5m.continuous_raw |
active | 78,211,693 | 8 | ||
market_bars.fx.1d.raw |
planned | 0 | 0 | ||
market_bars.fx.1h.raw |
active | 7,635,724 | 5 | ||
market_bars.fx.1m.raw |
active | 407,864,391 | 85 | ||
market_bars.fx.30m.raw |
active | 15,141,666 | 5 | ||
market_bars.fx.5m.raw |
active | 87,304,277 | 5 | ||
market_bars.index.1d.raw |
active | 556,868 | 124 | ||
market_bars.index.1h.raw |
active | 3,963,294 | 8 | ||
market_bars.index.1m.raw |
active | 203,832,449 | 2008-01-02 | 2026-11-06 | 128 |
market_bars.index.30m.raw |
active | 7,206,595 | 8 | ||
market_bars.index.5m.raw |
active | 41,215,377 | 8 | ||
market_bars.stock.1d.raw |
active | 21,088,134 | 2000-01-03 | 2026-11-06 | 7757 |
market_bars.stock.1d.split |
active | 38,316,176 | 827 | ||
market_bars.stock.1d.split_div |
active | 38,103,477 | 828 | ||
market_bars.stock.1h.split |
active | 286,709,713 | 840 | ||
market_bars.stock.1h.split_div |
active | 285,019,420 | 831 | ||
market_bars.stock.1m.raw |
active | 6,702,645,689 | 2000-01-03 | 2026-11-06 | 17382 |
market_bars.stock.1m.split |
active | 6,657,098,101 | 14008 | ||
market_bars.stock.1m.split_div |
active | 6,578,579,087 | 13811 | ||
market_bars.stock.30m.split |
active | 485,858,160 | 840 | ||
market_bars.stock.30m.split_div |
active | 482,672,255 | 831 | ||
market_bars.stock.5m.split |
active | 2,069,201,312 | 840 | ||
market_bars.stock.5m.split_div |
active | 2,053,780,780 | 831 | ||
options.eod |
active | 4,232,091,733 | 361 |
Dataset conventions (descriptor text)
market_bars.etf.1m.raw: {'name': 'US ETFs — 1-minute bars (unadjusted)', 'description': 'Same contract as stocks.', 'timestamp_convention': 'bar_open', 'timezone': 'America/New_York', 'notes': None, 'license_class': 'frd-private', 'license_text': 'FirstRate Data license: private use by the subscriber only. Raw bars/tables may not be redistributed to third parties (no public API, CSV or tables). Derived results and charts may be published with attribution to FirstRate Data.', 'current_version': 5167, 'status': 'active'}market_bars.etf.1d.split_div: {'name': 'US ETFs — daily bars (split- and dividend-adjusted (vendor adj_splitdiv))', 'description': 'Vendor daily OHLCV bars, split- and dividend-adjusted (vendor adj_splitdiv). Includes delisted tickers (suffix -DELISTED) when their archives are ingested. Vendor-adjusted history is rewritten after corporate actions; refreshed weekly via full_update.', 'timestamp_convention': 'session', 'timezone': 'America/New_York', 'notes': None, 'license_class': 'frd-private', 'license_text': 'FirstRate Data license: private use by the subscriber only. Raw bars/tables may not be redistributed to third parties (no public API, CSV or tables). Derived results and charts may be published with attribution to FirstRate Data.', 'current_version': 270, 'status': 'active'}market_bars.stock.1m.raw: {'name': 'US stocks — 1-minute bars (unadjusted)', 'description': 'Raw (unadjusted) 1-minute OHLCV bars for US-listed stocks, extended hours 04:00–20:00 ET, zero-volume bars absent at source. Includes delisted tickers (suffix -DELISTED).', 'timestamp_convention': 'bar_open', 'timezone': 'America/New_York', 'notes': 'Canonical dataset; adjustments are applied at query time from corporate_actions.', 'license_class': 'frd-private', 'license_text': 'FirstRate Data license: private use by the subscriber only. Raw bars/tables may not be redistributed to third parties (no public API, CSV or tables). Derived results and charts may be published with attribution to FirstRate Data.', 'current_version': 17382, 'status': 'active'}market_bars.stock.1d.split_div: {'name': 'US stocks — daily bars (split- and dividend-adjusted (vendor adj_splitdiv))', 'description': 'Vendor daily OHLCV bars, split- and dividend-adjusted (vendor adj_splitdiv). Includes delisted tickers (suffix -DELISTED) when their archives are ingested. Vendor-adjusted history is rewritten after corporate actions; refreshed weekly via full_update.', 'timestamp_convention': 'session', 'timezone': 'America/New_York', 'notes': None, 'license_class': 'frd-private', 'license_text': 'FirstRate Data license: private use by the subscriber only. Raw bars/tables may not be redistributed to third parties (no public API, CSV or tables). Derived results and charts may be published with attribution to FirstRate Data.', 'current_version': 828, 'status': 'active'}market_bars.futures.1m.continuous_ratio: {'name': 'Futures — 1-minute continuous, ratio back-adjusted', 'description': 'Vendor continuous series per root (continuous, ratio back-adjusted); roll dates fixed by vendor.', 'timestamp_convention': 'bar_open', 'timezone': 'America/New_York', 'notes': 'Daily bars follow the contract trading day; absolute-adjusted series may be negative.', 'license_class': 'frd-private', 'license_text': 'FirstRate Data license: private use by the subscriber only. Raw bars/tables may not be redistributed to third parties (no public API, CSV or tables). Derived results and charts may be published with attribution to FirstRate Data.', 'current_version': 132, 'status': 'active'}market_bars.futures.1d.continuous_ratio: {'name': 'Futures — daily continuous, ratio back-adjusted', 'description': 'Vendor continuous series per root (continuous, ratio back-adjusted); roll dates fixed by vendor.', 'timestamp_convention': 'session', 'timezone': 'America/New_York', 'notes': 'Daily bars follow the contract trading day; absolute-adjusted series may be negative.', 'license_class': 'frd-private', 'license_text': 'FirstRate Data license: private use by the subscriber only. Raw bars/tables may not be redistributed to third parties (no public API, CSV or tables). Derived results and charts may be published with attribution to FirstRate Data.', 'current_version': 133, 'status': 'active'}market_bars.futures.1d.continuous_absolute: {'name': 'Futures — daily continuous, absolute back-adjusted', 'description': 'Vendor continuous series per root (continuous, absolute back-adjusted); roll dates fixed by vendor.', 'timestamp_convention': 'session', 'timezone': 'America/New_York', 'notes': 'Daily bars follow the contract trading day; absolute-adjusted series may be negative.', 'license_class': 'frd-private', 'license_text': 'FirstRate Data license: private use by the subscriber only. Raw bars/tables may not be redistributed to third parties (no public API, CSV or tables). Derived results and charts may be published with attribution to FirstRate Data.', 'current_version': 133, 'status': 'active'}market_bars.fx.1m.raw: {'name': 'FX majors — 1-minute bars', 'description': 'Aggregated from four money-center banks.', 'timestamp_convention': 'bar_open', 'timezone': 'America/New_York', 'notes': 'Two-field datetime in source files.', 'license_class': 'frd-private', 'license_text': 'FirstRate Data license: private use by the subscriber only. Raw bars/tables may not be redistributed to third parties (no public API, CSV or tables). Derived results and charts may be published with attribution to FirstRate Data.', 'current_version': 85, 'status': 'active'}market_bars.crypto.1m.raw: {'name': 'Crypto — 1-minute bars', 'description': 'UTC timestamps, 7 days a week.', 'timestamp_convention': 'bar_open', 'timezone': 'UTC', 'notes': None, 'license_class': 'frd-private', 'license_text': 'FirstRate Data license: private use by the subscriber only. Raw bars/tables may not be redistributed to third parties (no public API, CSV or tables). Derived results and charts may be published with attribution to FirstRate Data.', 'current_version': 83, 'status': 'active'}market_bars.index.1d.raw: {'name': 'Indices — daily bars', 'description': 'Vendor daily bars for indices. No volume (stored as 0).', 'timestamp_convention': 'session', 'timezone': 'America/New_York', 'notes': None, 'license_class': 'frd-private', 'license_text': 'FirstRate Data license: private use by the subscriber only. Raw bars/tables may not be redistributed to third parties (no public API, CSV or tables). Derived results and charts may be published with attribution to FirstRate Data.', 'current_version': 124, 'status': 'active'}corporate_actions.stock: {'name': 'Splits and cash dividends', 'description': 'From vendor meta files; mergers/spin-offs not covered.', 'timestamp_convention': None, 'timezone': None, 'notes': None, 'license_class': 'frd-private', 'license_text': 'FirstRate Data license: private use by the subscriber only. Raw bars/tables may not be redistributed to third parties (no public API, CSV or tables). Derived results and charts may be published with attribution to FirstRate Data.', 'current_version': 0, 'status': 'active'}
3. Candidate universe coverage
| class | symbol | name | daily sessions | daily first | daily last | bad close | 1-min sessions | 1-min first | 1-min last | 1-min bars |
|---|---|---|---|---|---|---|---|---|---|---|
| etf | SPY | SPDR S&P 500 | 6748 | 2000-01-03 | 2026-10-30 | 0 | 6753 | 2000-01-03 | 2026-11-06 | 4675764 |
| etf | QQQ | PowerShares Qqq | 6711 | 2000-02-28 | 2026-10-30 | 0 | 6753 | 2000-01-03 | 2026-11-06 | 4293565 |
| etf | IWM | iShares Russell 2000 Index | 6646 | 2000-05-30 | 2026-10-30 | 0 | 6652 | 2000-05-26 | 2026-11-06 | 3475724 |
| etf | DIA | SPDR Dow Jones Industrial Average | 6748 | 2000-01-03 | 2026-10-30 | 0 | 6753 | 2000-01-03 | 2026-11-06 | 3043772 |
| etf | EEM | iShares MSCI Emerging Markets Index | 5926 | 2003-04-14 | 2026-10-30 | 0 | 5931 | 2003-04-14 | 2026-11-06 | 2514085 |
| etf | EFA | iShares MSCI Eafe Index | 6332 | 2001-08-27 | 2026-10-30 | 0 | 6337 | 2001-08-27 | 2026-11-06 | 2377628 |
| etf | XLF | Financial Select Sector SPDR | 6748 | 2000-01-03 | 2026-10-30 | 0 | 6753 | 2000-01-03 | 2026-11-06 | 2748952 |
| etf | XLE | Energy Select Sector SPDR | 6748 | 2000-01-03 | 2026-10-30 | 0 | 6753 | 2000-01-03 | 2026-11-06 | 2665653 |
| etf | TLT | iShares Barclays 20+ Year Treas Bond | 6104 | 2002-07-30 | 2026-10-30 | 0 | 6109 | 2002-07-30 | 2026-11-06 | 2660987 |
| etf | IEF | iShares Lehman 7-10 Year Treasu | 6104 | 2002-07-30 | 2026-10-30 | 0 | 6109 | 2002-07-30 | 2026-11-06 | 1883934 |
| etf | HYG | iShares Iboxx $ High Yield Corporate Bd | 4922 | 2007-04-11 | 2026-10-30 | 0 | 4926 | 2007-04-11 | 2026-11-06 | 1812239 |
| etf | LQD | iShares Iboxx $ Invest Grade Bond | 6104 | 2002-07-30 | 2026-10-30 | 0 | 6109 | 2002-07-30 | 2026-11-06 | 1947361 |
| etf | GLD | SPDR Gold Shares | 5522 | 2004-11-18 | 2026-10-30 | 0 | 5527 | 2004-11-18 | 2026-11-06 | 2878048 |
| etf | SLV | iShares Silver Trust | 5160 | 2006-04-28 | 2026-10-30 | 0 | 5165 | 2006-04-28 | 2026-11-06 | 2641783 |
| etf | USO | United States Oil | 5173 | 2006-04-10 | 2026-10-30 | 0 | 5178 | 2006-04-10 | 2026-11-06 | 2542011 |
| stock | AAPL | Apple | 6747 | 2000-01-04 | 2026-10-30 | 0 | 6752 | 2000-01-04 | 2026-11-06 | 4184674 |
| stock | MSFT | Microsoft | 6747 | 2000-01-04 | 2026-10-30 | 0 | 6752 | 2000-01-04 | 2026-11-06 | 3568310 |
| stock | AMZN | Amazon.com | 6747 | 2000-01-04 | 2026-10-30 | 0 | 6752 | 2000-01-04 | 2026-11-06 | 3435049 |
| stock | NVDA | Nvidia Corporation | 6747 | 2000-01-04 | 2026-10-30 | 0 | 6752 | 2000-01-04 | 2026-11-06 | 3609152 |
| stock | JPM | JP Morgan Chase & Co. | 6637 | 2000-06-12 | 2026-10-30 | 0 | 6642 | 2000-06-12 | 2026-11-06 | 2983348 |
| stock | XOM | Exxon Mobil | 6747 | 2000-01-04 | 2026-10-30 | 0 | 6752 | 2000-01-04 | 2026-11-06 | 3031298 |
| stock | JNJ | Johnson & Johnson | 6747 | 2000-01-04 | 2026-10-30 | 0 | 6752 | 2000-01-04 | 2026-11-06 | 2764519 |
| stock | PG | Procter & Gamble | 6747 | 2000-01-04 | 2026-10-30 | 0 | 6752 | 2000-01-04 | 2026-11-06 | 2744358 |
| stock | KO | Coca-Cola Company | 6747 | 2000-01-04 | 2026-10-30 | 0 | 6752 | 2000-01-04 | 2026-11-06 | 2839222 |
| stock | WMT | Walmart | 6747 | 2000-01-04 | 2026-10-30 | 0 | 6752 | 2000-01-04 | 2026-11-06 | 2885451 |
| futures | ES | Eversource Energy | 4754 | 2008-01-02 | 2026-11-06 | 0 | 5861 | 2008-01-02 | 2026-11-06 | 6596585 |
| futures | NQ | 4754 | 2008-01-02 | 2026-11-06 | 0 | 5861 | 2008-01-02 | 2026-11-06 | 6262856 | |
| futures | CL | Colgate-Palmolive | 4749 | 2008-01-02 | 2026-11-06 | 0 | 5863 | 2008-01-02 | 2026-11-06 | 6478865 |
| futures | NG | Novagold Resources | 4709 | 2008-02-25 | 2026-11-06 | 0 | 5818 | 2008-02-24 | 2026-11-06 | 5186395 |
| futures | GC | 4732 | 2008-01-28 | 2026-11-06 | 0 | 5840 | 2008-01-27 | 2026-11-06 | 6571988 | |
| futures | SI | Shoulder Innovations | 4749 | 2008-01-02 | 2026-11-06 | 0 | 5863 | 2008-01-02 | 2026-11-06 | 5981619 |
| futures | HG | Hamilton Insurance | 4749 | 2008-01-02 | 2026-11-06 | 0 | 5863 | 2008-01-02 | 2026-11-06 | 5795513 |
| futures | ZN | 4754 | 2008-01-02 | 2026-11-06 | 0 | 5860 | 2008-01-02 | 2026-11-06 | 5688309 | |
| futures | ZC | 4724 | 2008-02-19 | 2026-11-06 | 0 | 5684 | 2008-02-19 | 2026-11-06 | 3300107 | |
| fx | EURUSD | 5257 | 2010-01-03 | 2026-11-06 | 6251085 | |||||
| fx | USDJPY | 5255 | 2010-01-03 | 2026-11-06 | 6244770 | |||||
| fx | GBPUSD | 5255 | 2010-01-03 | 2026-11-06 | 6243077 | |||||
| fx | AUDUSD | 5255 | 2010-01-03 | 2026-11-06 | 6239239 | |||||
| fx | USDCAD | 5254 | 2010-01-03 | 2026-11-06 | 6211934 | |||||
| fx | USDCHF | 5257 | 2010-01-03 | 2026-11-06 | 6212109 | |||||
| crypto | BTC | Grayscale Bitcoin Mini Trust | 4967 | 2013-04-01 | 2026-11-06 | 0 | 4970 | 2013-04-01 | 2026-11-08 | 6402725 |
| crypto | ETH | Ethan Allen Interiors | 3885 | 2016-03-11 | 2026-11-06 | 0 | 3888 | 2016-03-11 | 2026-11-08 | 5270106 |
FX has no daily dataset in the lake (market_bars.fx.1d.raw is planned, 0 rows): daily FX returns are built from the 1-minute bars (last bar of each vendor session). Futures daily rows come from the vendor continuous series.
4. Session structure (2024, one representative symbol per class)
- etf / SPY: {'n_sessions': 252, 'min_bars': 537, 'med_bars': 782, 'max_bars': 948, 'first_bar_utc_min': '2024-01-02T09:00:00+00:00', 'last_bar_utc_max': '2025-01-01T00:59:00+00:00'}; sample days: [{'session_date': '2024-03-08', 'n': 794, 't0': '2024-03-08T09:00:00+00:00', 't1': '2024-03-09T00:59:00+00:00'}, {'session_date': '2024-03-11', 'n': 805, 't0': '2024-03-11T08:00:00+00:00', 't1': '2024-03-11T23:59:00+00:00'}, {'session_date': '2024-07-03', 'n': 575, 't0': '2024-07-03T08:00:00+00:00', 't1': '2024-07-03T20:55:00+00:00'}, {'session_date': '2024-11-29', 'n': 579, 't0': '2024-11-29T09:00:00+00:00', 't1': '2024-11-29T21:59:00+00:00'}]
- stock / AAPL: {'n_sessions': 252, 'min_bars': 448, 'med_bars': 743, 'max_bars': 926, 'first_bar_utc_min': '2024-01-02T09:00:00+00:00', 'last_bar_utc_max': '2025-01-01T00:58:00+00:00'}; sample days: [{'session_date': '2024-03-08', 'n': 835, 't0': '2024-03-08T09:00:00+00:00', 't1': '2024-03-09T00:59:00+00:00'}, {'session_date': '2024-03-11', 'n': 821, 't0': '2024-03-11T08:00:00+00:00', 't1': '2024-03-11T23:59:00+00:00'}, {'session_date': '2024-07-03', 'n': 591, 't0': '2024-07-03T08:00:00+00:00', 't1': '2024-07-03T20:59:00+00:00'}, {'session_date': '2024-11-29', 'n': 467, 't0': '2024-11-29T09:00:00+00:00', 't1': '2024-11-29T21:59:00+00:00'}]
- futures / ES: {'n_sessions': 313, 'min_bars': 354, 'med_bars': 1379, 'max_bars': 1380, 'first_bar_utc_min': '2024-01-01T23:00:00+00:00', 'last_bar_utc_max': '2024-12-31T21:59:00+00:00'}; sample days: [{'session_date': '2024-03-08', 'n': 1019, 't0': '2024-03-08T05:00:00+00:00', 't1': '2024-03-08T21:59:00+00:00'}, {'session_date': '2024-03-11', 'n': 1374, 't0': '2024-03-11T04:00:00+00:00', 't1': '2024-03-12T03:59:00+00:00'}, {'session_date': '2024-07-03', 'n': 1151, 't0': '2024-07-03T04:00:00+00:00', 't1': '2024-07-04T03:59:00+00:00'}, {'session_date': '2024-07-07', 'n': 360, 't0': '2024-07-07T22:00:00+00:00', 't1': '2024-07-08T03:59:00+00:00'}, {'session_date': '2024-11-29', 'n': 795, 't0': '2024-11-29T05:00:00+00:00', 't1': '2024-11-29T18:14:00+00:00'}]
- fx / EURUSD: {'n_sessions': 312, 'min_bars': 393, 'med_bars': 1433, 'max_bars': 1440, 'first_bar_utc_min': '2024-01-02T05:01:00+00:00', 'last_bar_utc_max': '2024-12-31T20:00:00+00:00'}; sample days: [{'session_date': '2024-03-08', 'n': 1020, 't0': '2024-03-08T05:00:00+00:00', 't1': '2024-03-08T21:59:00+00:00'}, {'session_date': '2024-03-11', 'n': 1437, 't0': '2024-03-11T04:00:00+00:00', 't1': '2024-03-12T03:59:00+00:00'}, {'session_date': '2024-07-03', 'n': 1434, 't0': '2024-07-03T04:00:00+00:00', 't1': '2024-07-04T03:59:00+00:00'}, {'session_date': '2024-07-07', 'n': 419, 't0': '2024-07-07T21:00:00+00:00', 't1': '2024-07-08T03:59:00+00:00'}, {'session_date': '2024-11-29', 'n': 1019, 't0': '2024-11-29T05:00:00+00:00', 't1': '2024-11-29T21:58:00+00:00'}]
- crypto / BTC: {'n_sessions': 366, 'min_bars': 1010, 'med_bars': 1440, 'max_bars': 1440, 'first_bar_utc_min': '2024-01-01T00:00:00+00:00', 'last_bar_utc_max': '2024-12-31T23:58:00+00:00'}; sample days: [{'session_date': '2024-03-08', 'n': 1440, 't0': '2024-03-08T00:00:00+00:00', 't1': '2024-03-08T23:59:00+00:00'}, {'session_date': '2024-03-11', 'n': 1440, 't0': '2024-03-11T00:00:00+00:00', 't1': '2024-03-11T23:59:00+00:00'}, {'session_date': '2024-07-03', 'n': 1440, 't0': '2024-07-03T00:00:00+00:00', 't1': '2024-07-03T23:59:00+00:00'}, {'session_date': '2024-07-07', 'n': 1440, 't0': '2024-07-07T00:00:00+00:00', 't1': '2024-07-07T23:59:00+00:00'}, {'session_date': '2024-11-29', 'n': 1440, 't0': '2024-11-29T00:00:00+00:00', 't1': '2024-11-29T23:59:00+00:00'}]
- SPY regular hours 09:30–16:00 ET (incl. the 16:00 closing print) 2024: {'n_sessions': 252, 'min_bars': 319, 'med_bars': 391, 'max_bars': 391}
5. Calendar reconciliation
- SPY daily sessions vs
exchange_calendarsXNYS: {'vendor_sessions': 6748, 'xnys_sessions': 6748, 'missing_in_vendor': [], 'n_missing': 0, 'extra_in_vendor': [], 'n_extra': 0, 'exchange_calendars_version': '4.13.2'}
6. Adjustment conventions (ratios, no price levels disclosed)
- aapl_split_2020_08_31: [{'session_date': '2020-08-28', 'ratio_raw_over_split': 4.0}, {'session_date': '2020-08-31', 'ratio_raw_over_split': 1.0}]
- spy_exdiv_2024_03_15: [{'session_date': '2024-03-14', 'ratio_split_over_splitdiv': 1.0327383781585309}, {'session_date': '2024-03-15', 'ratio_split_over_splitdiv': 1.0295496480088433}, {'session_date': '2024-03-18', 'ratio_split_over_splitdiv': 1.0295497190449032}]
- es_roll_march_2024: [{'session_date': '2024-03-11', 'ratio_ratioadj_over_raw': 1.1122799141128246, 'diff_absadj_minus_raw': 660.5}, {'session_date': '2024-03-12', 'ratio_ratioadj_over_raw': 1.112279685161041, 'diff_absadj_minus_raw': 660.5}, {'session_date': '2024-03-13', 'ratio_ratioadj_over_raw': 1.112279411764706, 'diff_absadj_minus_raw': 660.5}, {'session_date': '2024-03-14', 'ratio_ratioadj_over_raw': 1.0985684170180146, 'diff_absadj_minus_raw': 596.0}, {'session_date': '2024-03-15', 'ratio_ratioadj_over_raw': 1.0985692923640924, 'diff_absadj_minus_raw': 596.0}, {'session_date': '2024-03-18', 'ratio_ratioadj_over_raw': 1.0985684836281702, 'diff_absadj_minus_raw': 596.0}, {'session_date': '2024-03-19', 'ratio_ratioadj_over_raw': 1.0985701340201268, 'diff_absadj_minus_raw': 596.0}]
- es_latest_ratio_vs_raw_equal: [{'d': '2026-11-06', 'ratio_close_over_raw_close': 1.0}, {'d': '2026-11-05', 'ratio_close_over_raw_close': 1.0}, {'d': '2026-11-04', 'ratio_close_over_raw_close': 1.0}]
7. Quality flags and revisions (daily ETF/stock candidates)
- flags: [{'flag': 'off_interval', 'n': 91696}]; revision ids: [{'revision_id': 1, 'n': 91696}]
8. Export smoke test
- {'export_id': '63a3f115-e934-4660-b688-a370e20e77ea', 'dataset_id': 'market_bars.etf.1d.split_div', 'dataset_version': 270, 'row_count': 252, 'bytes': 18126, 'sha256': 'cbb37f1924e4a6bebc80c84e2559ac62f13c591b300c6ae488a0be217158af5e'}
9. Errors during the audit
- none
10. Facts, consequences and unresolved questions
- Timestamps are bar OPEN in UTC; stocks/ETFs/futures/FX carry an ET
session_date, crypto a UTC date. Stocks/ETFs: extended hours 04:00–20:00 ET are present in the 1-minute data; regular session 09:30–16:00 ET (391 bars on a full day, 211 on a 13:00 early close). Zero-volume minutes are absent (missingness is a mask, never filled). - Futures continuous series: vendor-fixed roll dates (not documented per contract by the vendor); three variants (raw = unadjusted splice, ratio = ratio back-adjusted, absolute = difference back-adjusted). WP46 uses the ratio-adjusted series, whose log returns are free of roll jumps, and the vendor
session_date(a calendar day in ET, 00:00–23:59 ET), not the CME trading day (18:00–17:00 ET). This is disclosed in the data section; daily futures returns are therefore 'ET-day close-to-close'. - FX: 1-minute mid bars aggregated from four money-center banks (vendor description), ET session_date, 24h except the weekend gap (Friday ~17:00 ET → Sunday 17:00 ET); Sunday partial sessions exist and are dropped by the preprocessing rule (session must have ≥ 60 % of the modal bar count).
- Crypto: UTC days, 7 days a week, 1,440 bars per day.
- Adjustments: stocks/ETFs daily returns use the vendor split- and dividend-adjusted closes (
split_div, price-return convention with dividends reinvested at the ex-date = total-return approximation); intraday returns within a session are unaffected by adjustments except on split days (handled by using thesplit1-minute view for RV). - Licence: FirstRate Data private use; raw bars are never redistributed; aggregate forecasts/losses and derived statistics are publishable with attribution.
- Survivorship: the universe is fixed ex ante to instruments alive on 2026-11-06; all candidates have been continuously listed over their sample, so there is no within-sample delisting, but the selection of liquid, surviving instruments is a documented selection bias (results describe liquid benchmarks, not the cross-section).
- Unresolved: (i) exact vendor roll rule for continuous futures (vendor does not expose it in the API; the ratio series preserves returns, so forecasts are unaffected, but RV on roll days mixes two contracts' intraday paths); (ii) corporate-actions table is empty in the lake (adjustments come from vendor-adjusted series only); (iii) 1-minute FX/crypto bars are not consolidated trade data — RV from them is a mid-quote/aggregate measure and is documented as such.