{"openapi":"3.1.0","info":{"title":"ASX Short Position Report API","description":"Daily processed ASIC short-selling data for the Australian market: full snapshot, deterministic risk scores, 60-day percentiles, sector/market-cap enrichment and AI narrative + structured risk assessment.\n\nData source: Official ASIC Short Positions Registry (public data). The API adds processing: risk ranking, anomaly detection, enrichment and AI analysis.","version":"0.1.0","x-source":"Official ASIC Short Positions Registry"},"servers":[{"url":"https://asic-short-position-processor.flare-oracle.workers.dev"}],"tags":[{"name":"Latest","description":"Today's (most recent) processed report"},{"name":"Historical","description":"Archived daily snapshots keyed by ASIC reporting date (YYYY-MM-DD, T+4 lag)"},{"name":"Meta","description":"API metadata"}],"paths":{"/api/v1/openapi.json":{"get":{"tags":["Meta"],"summary":"This OpenAPI document","description":"Machine-readable API contract. Served by the Worker itself.","responses":{"200":{"description":"The OpenAPI 3.1 document","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/asic/latest":{"get":{"tags":["Latest"],"summary":"Latest full short-position report","description":"Full feed: market snapshot, anomaly matrix with risk scores and enrichment, AI narrative and structured assessment.","responses":{"200":{"description":"Latest processed report","headers":{"X-Data-Source":{"$ref":"#/components/headers/XDataSource"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"503":{"description":"No report has been generated yet (system warming up)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"System warming up. Execute trigger manually."}}}}}}},"/api/v1/asic/squeeze-candidates":{"get":{"tags":["Latest"],"summary":"Squeeze candidates (Stories 1-4: short% + price/volume + catalyst + composite signal + holder notices)","description":"In-memory filter over the latest anomaly_matrix by days_to_cover with optional VOLUME_CONFIRMED / CATALYST_PRESENT / HOLDER_NOTICE requirements and Story 3 composite signal (signal, min_conviction), ranked by borrow_pressure then risk_score. Nulls when prices stale.","parameters":[{"name":"min_cover","in":"query","required":false,"schema":{"type":"number","default":3},"description":"Minimum days-to-cover"},{"name":"confirmed","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Only VOLUME_CONFIRMED rows when true"},{"name":"catalyst","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Only CATALYST_PRESENT rows when true"},{"name":"holder","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Only HOLDER_NOTICE rows (substantial-holder/director notices ±3d, Story 4) when true"},{"name":"signal","in":"query","required":false,"schema":{"type":"string","enum":["squeeze_watch","accumulation_watch","event_driven_watch","quiet"]},"description":"Only rows with this Story 3 composite signal"},{"name":"min_conviction","in":"query","required":false,"schema":{"type":"integer","default":0,"minimum":0,"maximum":100},"description":"Minimum signal conviction 0-100"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"minimum":1,"maximum":50}}],"responses":{"200":{"description":"Ranked squeeze candidates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SqueezeCandidatesResponse"}}}},"503":{"description":"No report has been generated yet (system warming up)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/asic/status":{"get":{"tags":["Latest"],"summary":"Service status","description":"Public, free status endpoint: data freshness (last report date), next scheduled cron run, KV readiness and archived report count. No authentication.","responses":{"200":{"description":"Service status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceStatus"}}}}}}},"/api/v1/asic/dates":{"get":{"tags":["Historical"],"summary":"Archived report dates","description":"Public, free endpoint listing all archived daily report dates, newest first, so clients can enumerate what history is available before querying a specific date. No authentication.","responses":{"200":{"description":"List of archived dates","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"dates":{"type":"array","items":{"type":"string","example":"2026-08-12"}}}}}}}}}},"/api/v1/asic/latest/narrative":{"get":{"tags":["Latest"],"summary":"Latest AI narrative (plain text)","description":"2-3 sentence market summary for the most recent report. Returns text/plain.","responses":{"200":{"description":"Narrative text","headers":{"X-Data-Source":{"$ref":"#/components/headers/XDataSource"}},"content":{"text/plain":{"schema":{"type":"string"},"example":"Short interest remains elevated across small-caps, led by XYZ.AX..."}}},"503":{"description":"No report available yet","content":{"text/plain":{"schema":{"type":"string"},"example":"No report available yet."}}}}}},"/api/v1/asic/latest/assessment":{"get":{"tags":["Latest"],"summary":"Latest structured risk assessment","description":"Per-ticker AI risk assessment for the most recent report (severity, direction, status, summary).","responses":{"200":{"description":"Structured assessment","headers":{"X-Data-Source":{"$ref":"#/components/headers/XDataSource"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentResponse"}}}},"503":{"description":"No report available yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"No report available yet."}}}}}}},"/api/v1/asic/report/{date}":{"get":{"tags":["Historical"],"summary":"Archived full report for a date","description":"Full processed snapshot for a specific ASIC reporting date, streamed from R2.","parameters":[{"name":"date","in":"path","required":true,"description":"ASIC reporting date, YYYY-MM-DD (T+4 lag relative to the trading day)","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"example":"2026-08-11"}],"responses":{"200":{"description":"Archived report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"404":{"description":"No archived report for that date","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"No archived report for that date"}}}}}}},"/api/v1/asic/report/{date}/narrative":{"get":{"tags":["Historical"],"summary":"Archived narrative for a date","description":"AI narrative for a specific ASIC reporting date (plain text).","parameters":[{"$ref":"#/components/parameters/ReportDate"}],"responses":{"200":{"description":"Narrative text","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"No archived report for that date","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/asic/report/{date}/assessment":{"get":{"tags":["Historical"],"summary":"Archived structured assessment for a date","description":"Structured risk assessment for a specific ASIC reporting date.","parameters":[{"$ref":"#/components/parameters/ReportDate"}],"responses":{"200":{"description":"Structured assessment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentResponse"}}}},"404":{"description":"No archived report for that date","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/":{"get":{"tags":["Meta"],"summary":"Root index","description":"Human-readable landing page (HTML for browsers, llms.txt content for plain-text/agent clients). Carries RFC 8288 Link headers advertising the whole discovery suite.","responses":{"200":{"description":"Index page","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/llms.txt":{"get":{"tags":["Meta"],"summary":"Agent discovery file (llms.txt)","description":"llms.txt convention: plain-text agent discovery document. Free, unauthenticated.","responses":{"200":{"description":"The llms.txt document","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/agents.json":{"get":{"tags":["Meta"],"summary":"Agent actions manifest (agents.json)","description":"Typed action manifest for web agents. Declares each callable action, its endpoint, parameters and x402 pricing. Free, unauthenticated.","responses":{"200":{"description":"The agents.json manifest","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/.well-known/agent-card.json":{"get":{"tags":["Meta"],"summary":"A2A AgentCard","description":"Google A2A AgentCard: capability advertisement for agent-to-agent discovery. Free, unauthenticated.","responses":{"200":{"description":"The A2A AgentCard","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/.well-known/x402.json":{"get":{"tags":["Meta"],"summary":"x402 discovery file","description":"x402 payment discovery file declaring route pricing, network and schemas for x402-aware agents and directories (x402scan, CDP Bazaar). Also served at the extensionless /.well-known/x402 path. Free, unauthenticated.","responses":{"200":{"description":"The x402 discovery document","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/.well-known/security.txt":{"get":{"tags":["Meta"],"summary":"Security contact (RFC 9116)","description":"Security.txt contact and disclosure policy. Free, unauthenticated.","responses":{"200":{"description":"The security.txt document","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/mcp":{"post":{"tags":["MCP"],"summary":"MCP Streamable HTTP endpoint","description":"Model Context Protocol endpoint (Streamable HTTP, protocol 2025-03-26). Accepts JSON-RPC `initialize`, `tools/list`, `tools/call`, `resources/list`, etc. Tools correspond 1:1 to the REST API plus `get_ticker_history`. Advertised in `/.well-known/agent-card.json` and `Link: rel=mcp-server`. Stateless; GET/DELETE return 405.","responses":{"200":{"description":"MCP JSON-RPC response (or SSE stream)","content":{"application/json":{"schema":{"type":"object"}},"text/event-stream":{"schema":{"type":"string"}}}}}},"get":{"tags":["MCP"],"summary":"MCP not supported via GET (stateless)","description":"Stateless MCP handler rejects GET (405). Use POST with JSON-RPC.","responses":{"405":{"description":"Method not allowed for stateless handler"}}}},"/.well-known/mcp.json":{"get":{"tags":["Meta"],"summary":"MCP discovery file","description":"MCP discovery for WKU probing (Inspector, VS Code). Mirrors `mcp` field in agent-card.json; also served at `/.well-known/mcp`. Free.","responses":{"200":{"description":"MCP discovery document","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/robots.txt":{"get":{"tags":["Meta"],"summary":"Robots + sitemap pointer","description":"Robots.txt with Allow and Sitemap: /sitemap.xml, plus llms.txt/mcp comments. Free.","responses":{"200":{"description":"robots.txt","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/sitemap.xml":{"get":{"tags":["Meta"],"summary":"Sitemap","description":"Sitemap.xml enumerating all discovery URLs + API contract. Free.","responses":{"200":{"description":"sitemap.xml","content":{"application/xml":{"schema":{"type":"string"}}}}}}},"/llms-full.txt":{"get":{"tags":["Meta"],"summary":"Full llms.txt with embedded schemas","description":"Extended llms.txt that embeds the OpenAPI + MCP discovery + AgentCard JSON so crawlers get the full contract without a second fetch. Free.","responses":{"200":{"description":"The llms-full.txt document","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"parameters":{"ReportDate":{"name":"date","in":"path","required":true,"description":"ASIC reporting date, YYYY-MM-DD (T+4 lag relative to the trading day)","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"example":"2026-08-11"}},"headers":{"XDataSource":{"description":"Attribution for the underlying public data","schema":{"type":"string"},"example":"Official ASIC Short Positions Registry"}},"schemas":{"Report":{"type":"object","required":["updated_at","asic_reporting_date","source_content_hash","total_securities_tracked","anomalies_detected","risk_narrative","risk_assessment","anomaly_matrix","perf_metrics","market_data"],"properties":{"updated_at":{"type":"integer","description":"Unix timestamp (seconds) when the report was generated"},"asic_reporting_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"ASIC report date (T+4 lag)"},"source_content_hash":{"type":"string","description":"SHA-256 of the raw ASIC CSV (idempotency/change detection)"},"total_securities_tracked":{"type":"integer","description":"Number of ASX securities in the raw snapshot"},"anomalies_detected":{"type":"integer","description":"Number of securities flagged by the anomaly engine"},"risk_narrative":{"type":["string","null"],"description":"AI market summary, or null on clean days"},"risk_assessment":{"type":["array","null"],"description":"Per-ticker AI assessment (top 10 by risk), or empty array on clean days","items":{"$ref":"#/components/schemas/RiskAssessmentEntry"}},"anomaly_matrix":{"type":"array","description":"Deterministically flagged anomalies with risk scores and enrichment","items":{"$ref":"#/components/schemas/Anomaly"}},"perf_metrics":{"$ref":"#/components/schemas/PerfMetrics"},"market_data":{"type":"array","description":"Raw short-position snapshot for every tracked security","items":{"$ref":"#/components/schemas/MarketDataRecord"}}}},"Anomaly":{"type":"object","required":["asx_code","short_interest_pct","prior_day_pct","delta_pct","consecutive_rising_days","anomaly_type","risk_score","history_percentile_60d","sector","industry","market_cap","price_aud","squeeze_probability","price_close","volume_today","avg_vol_20d","days_to_cover","volume_spike_ratio","price_5d_pct","divergence_flag","borrow_pressure","price_as_of","price_stale","catalyst_count_3d","catalyst_headlines","results_week","cap_raise_overhang","holder_count_3d","holder_headlines","holder_present","holder_custodial","holder_nature","borrowed_pct","offsetting_short_pct","signal","signal_conviction","signal_confidence","signal_drivers"],"properties":{"asx_code":{"type":"string","description":"ASX ticker code"},"short_interest_pct":{"type":"number","description":"Reported short interest as % of issued shares"},"prior_day_pct":{"type":["number","null"],"description":"Previous report short interest % (null on first-ever run)"},"delta_pct":{"type":["number","null"],"description":"Day-over-day change in short interest percentage points"},"consecutive_rising_days":{"type":"integer","description":"Consecutive reports with rising short interest"},"anomaly_type":{"type":"string","description":"Pipe-delimited flags: HIGH_SHORT_SQUEEZE_RISK, RAPID_ACCUMULATION, SUSTAINED_ACCUMULATION, HARD_TO_BORROW, VOLUME_CONFIRMED, SHORTS_UP_PRICE_HOLDING, CATALYST_PRESENT, RESULTS_WEEK, CAP_RAISE_OVERHANG, HOLDER_NOTICE, HOLDER_CUSTODIAL, BORROWED_HOLDING, HOLDER_RETURN"},"risk_score":{"type":"integer","minimum":0,"maximum":100,"description":"Composite risk score: level (50) + delta (30) + momentum (20)"},"history_percentile_60d":{"type":["integer","null"],"minimum":0,"maximum":100,"description":"Percentile of current level vs prior 60 daily snapshots (null with no history)"},"sector":{"type":["string","null"],"description":"Yahoo Finance sector (best-effort; null when enrichment unavailable)"},"industry":{"type":["string","null"],"description":"Yahoo Finance industry (best-effort)"},"market_cap":{"type":["integer","null"],"description":"Market capitalisation in AUD (best-effort; price x issued shares fallback)"},"price_aud":{"type":["number","null"],"description":"Latest price in AUD (best-effort)"},"squeeze_probability":{"type":"integer","minimum":0,"maximum":100,"description":"Deterministic squeeze probability: level (35) + momentum (20) + trend (15) + size (30), +10 when days_to_cover > 5"},"price_close":{"type":["number","null"],"description":"Latest daily close in AUD from Yahoo v8/chart (Story 1; null when price join missed)"},"volume_today":{"type":["integer","null"],"description":"Latest daily share volume (Story 1; null when price join missed)"},"avg_vol_20d":{"type":["integer","null"],"description":"Mean daily volume over up to 20 sessions, null with <10 valid points"},"days_to_cover":{"type":["number","null"],"description":"short_shares / avg_vol_20d in days, 1dp (null without volume)"},"volume_spike_ratio":{"type":["number","null"],"description":"volume_today / avg_vol_20d (null without volume)"},"price_5d_pct":{"type":["number","null"],"description":"5-day price change % from Yahoo closes (Story 3; null with <6 valid closes or pre-Story-3 cache rows)"},"divergence_flag":{"type":["string","null"],"description":"SHORTS_UP_PRICE_HOLDING when shorts accumulate while price holds up"},"borrow_pressure":{"type":"integer","minimum":0,"maximum":100,"description":"Composite borrow pressure: delta (50) + days-to-cover (30) + volume spike (20)"},"price_as_of":{"type":["string","null"],"description":"Trading date of the joined price (YYYY-MM-DD); may differ from asic_reporting_date (T+4 vs T+0)"},"price_stale":{"type":"boolean","description":"True when no fresh price was available for this anomaly"},"catalyst_count_3d":{"type":"integer","description":"ASX announcements within ±3d of the report date (0 is valid data, not missing)"},"catalyst_headlines":{"type":"array","items":{"type":"string"},"description":"Top in-window headlines (metadata only, no PDF parsing)"},"results_week":{"type":"boolean","description":"Earnings/results announcement within ±7d"},"cap_raise_overhang":{"type":"boolean","description":"Placement/capital-raising announcement in the prior 14d (arbitrage overhang, not squeeze setup)"},"holder_count_3d":{"type":"integer","description":"Substantial-holder / director-notice announcements within ±3d of the report date, subset of catalyst_count_3d (0 is valid data, not missing; independent of priceSensitive — Markit never flags holder notices)"},"holder_headlines":{"type":"array","items":{"type":"string"},"description":"Top in-window holder headlines, most-recent-first (metadata only — direction unknown, never infer buy/sell/entry/exit)"},"holder_present":{"type":"boolean","description":"True when ≥1 holder notice in the ±3d window (HOLDER_NOTICE flag set)"},"holder_custodial":{"type":"boolean","description":"True when an in-window holder notice names a known agent-lender/prime broker/custodian (HOLDER_CUSTODIAL flag set) — borrowed/client stock possible, not a beneficial long"},"holder_nature":{"type":["string","null"],"description":"Parsed PDF holdings direction from the latest HOLDING:{CODE} (Story 6 P1c: beneficial|borrowed|custodial|mixed|unknown; null when no parse exists — headline heuristic applies)"},"borrowed_pct":{"type":["number","null"],"description":"Borrowed-shares % stated adjacent to lending language in the parsed notice annexure (best-effort; null when absent)"},"offsetting_short_pct":{"type":["number","null"],"description":"Offsetting-short % from the Dec-2026+ single-notice form field (null before the new form or when unstated; first observed short-flow number)"},"signal":{"type":"string","enum":["squeeze_watch","accumulation_watch","event_driven_watch","quiet"],"description":"Story 3 multi-factor composite watch label (positioning-heavy 40/30/15/15, gated on >=2 active pillars; never buy/sell advice)"},"signal_conviction":{"type":"integer","minimum":0,"maximum":100,"description":"Composite conviction 0-100 (capped at 60 under CAP_RAISE_OVERHANG, at 30 when quiet)"},"signal_confidence":{"type":"string","enum":["high","medium","low"],"description":"Data-completeness confidence (stale prices demote one level)"},"signal_drivers":{"type":"array","items":{"type":"string"},"description":"Human-readable contributing factors behind the signal (cite only these)"}}},"RiskAssessmentEntry":{"type":"object","required":["asx_code","severity","direction","status","summary"],"properties":{"asx_code":{"type":"string"},"severity":{"type":"string","enum":["LOW","MEDIUM","HIGH"]},"direction":{"type":"string","enum":["accumulating","declining","stable"]},"status":{"type":"string","enum":["new","continuing"]},"summary":{"type":"string","description":"<=20 words, no markdown"}}},"MarketDataRecord":{"type":"object","required":["asx_code","company_name","short_shares","total_issued_shares","short_interest_pct"],"properties":{"asx_code":{"type":"string"},"company_name":{"type":"string"},"short_shares":{"type":"integer","description":"Reported short positions (shares)"},"total_issued_shares":{"type":"integer"},"short_interest_pct":{"type":"number"}}},"PerfMetrics":{"type":"object","required":["history_days_loaded","anomalies_flagged","ai_narrative_generated","ai_structured_output","ai_usage","prev_context_loaded","market_caps_fetched","sectors_tagged","prices_fetched","prices_cached","price_fetch_ms","catalysts_fetched","catalysts_cached","catalyst_fetch_ms","holdings_joined","signals_computed","signal_distribution","reco_computed","reco_distribution","reco_v2_computed","reco_v2_distribution"],"properties":{"history_days_loaded":{"type":"integer","description":"Prior daily snapshots used for trend analysis"},"anomalies_flagged":{"type":"integer"},"ai_narrative_generated":{"type":"boolean"},"ai_structured_output":{"type":"boolean","description":"True when the model returned parseable structured JSON"},"ai_usage":{"type":["object","null"],"properties":{"prompt_tokens":{"type":"integer"},"completion_tokens":{"type":"integer"},"total_tokens":{"type":"integer"}}},"prev_context_loaded":{"type":"boolean","description":"Prior narrative + flagged codes fed to the model for continuity"},"market_caps_fetched":{"type":"integer","description":"Enriched market caps (top 25 anomalies)"},"sectors_tagged":{"type":"integer"},"prices_fetched":{"type":"integer","description":"Yahoo chart fetches this run (Story 1, Free cap <=40)"},"prices_cached":{"type":"integer","description":"Anomalies served from PRICE: KV cache without refetch"},"price_fetch_ms":{"type":"integer","description":"Wall time of the price join in milliseconds"},"prices_miss":{"type":"integer","description":"PRICE: cache rows tagged source miss (404 tombstones + fresh transient misses); poison-watch for the tombstone fix"},"catalysts_fetched":{"type":"integer","description":"Markit announcement fetches this run (Story 2, shares the ≤50 Free cap with prices)"},"catalysts_cached":{"type":"integer","description":"Anomalies served from CATALYST: KV cache without refetch"},"catalyst_fetch_ms":{"type":"integer","description":"Wall time of the catalyst join in milliseconds"},"catalysts_miss":{"type":"integer","description":"CATALYST: cache rows tagged source miss (404 tombstones + fresh transient misses); poison-watch for the tombstone fix"},"holdings_joined":{"type":"integer","description":"Anomaly rows with a parsed HOLDING:{CODE} joined (Story 6 P1c; internal KV reads, zero external subrequests)"},"signals_computed":{"type":"integer","description":"Anomaly rows scored by the Story 3 composite signal"},"signal_distribution":{"type":"object","description":"Count of rows per signal label (squeeze_watch, accumulation_watch, event_driven_watch, quiet)"},"reco_computed":{"type":"integer","description":"Internal research reco rows written (research sidecar; labels never served)"},"reco_distribution":{"type":"object","description":"Count of research reco rows per action (buy, sell, hold); aggregates only"},"reco_v2_computed":{"type":"integer","description":"Internal research reco_v2 rows written (holder-aware parallel sidecar; labels never served)"},"reco_v2_distribution":{"type":"object","description":"Count of research reco_v2 rows per action (buy, sell, hold); aggregates only"}}},"AssessmentResponse":{"type":"object","required":["asic_reporting_date","assessment"],"properties":{"asic_reporting_date":{"type":["string","null"]},"assessment":{"type":["array","null"],"items":{"$ref":"#/components/schemas/RiskAssessmentEntry"}}}},"SqueezeCandidatesResponse":{"type":"object","required":["asic_reporting_date","count","candidates"],"properties":{"asic_reporting_date":{"type":["string","null"]},"count":{"type":"integer"},"candidates":{"type":"array","items":{"$ref":"#/components/schemas/Anomaly"}}}},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}},"ServiceStatus":{"type":"object","required":["ok","service","schedule","schedule_description","next_scheduled_run","kv_data_ready","last_asic_reporting_date","last_updated_at","total_securities_tracked","anomalies_detected","archived_report_count"],"properties":{"ok":{"type":"boolean"},"service":{"type":"string"},"schedule":{"type":"string"},"schedule_description":{"type":"string"},"next_scheduled_run":{"type":"string","description":"Next Mon-Fri 02:05 UTC trigger as ISO timestamp"},"kv_data_ready":{"type":"boolean"},"last_asic_reporting_date":{"type":["string","null"]},"last_updated_at":{"type":["integer","null"]},"total_securities_tracked":{"type":["integer","null"]},"anomalies_detected":{"type":["integer","null"]},"archived_report_count":{"type":"integer"},"upstream_fetch_ok":{"type":"boolean","description":"Whether the live ASIC metadata probe succeeded for this call"},"upstream_latest_date":{"type":["string","null"],"description":"Newest file date published upstream by ASIC (YYYY-MM-DD), null when the probe failed"},"dates_behind_upstream":{"type":["integer","null"],"description":"Metadata entries newer than last_asic_reporting_date (backlog gauge), null when unknown"}}}}}}