{"openapi":"3.1.0","info":{"title":"bubblegauge","description":"Self-hosted AI bubble regime monitor. Three-leg composite (valuation, credit, breadth, GSADF, LPPLS) with Monte Carlo bands, Faber trend trigger, and API. Research, not advice.\n\n**bubblegauge is a research instrument, not investment advice.** The headline is a 0–100 regime heuristic produced by structured expert judgment; it is **uncalibrated and is not a probability**. The reference class of comparable US equity manias is roughly four events {1929, 2000, 2007, 2021}, so no honest probability calibration is possible. The current episode may be rational general-purpose-technology repricing rather than a bubble. Nothing here is a recommendation to buy, sell, or hold any security. Any de-risking rule may destroy value net of costs. Use at your own risk.","version":"3.1.0"},"paths":{"/api/v1/score":{"get":{"tags":["score"],"summary":"Headline regime score","description":"The Monte Carlo MEDIAN of the 0-100 regime heuristic with IQR and 5-95 band, both blocks with per-indicator objects, red flags, action band, trend states, fast alarm, and the judgment call. The headline is NOT a probability.","operationId":"get_score_api_v1_score_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Latest snapshot (golden-fixture-shaped example).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Score Api V1 Score Get"},"example":{"data":{"headline_median":40,"iqr":[34,47],"band_5_95":[28,55],"point_score":40.35,"action_band":"hold","override_fired":false,"red_flag_count":0,"red_flag_detail":{"gsadf_explosive_noncontested":false,"semi_runup_ge_150pp":false,"hy_oas_widen_gt_100bps":false,"breadth_lt_50_near_ath":false},"block_S":{"value":0.711,"indicators":{"s1":{"value":41.6,"sub_score":0.92,"weight":0.33,"grounding":"literature-grounded","stale":false}}},"block_D":{"value":0.229,"indicators":{"d1":{"value":56.0,"sub_score":0.543,"weight":0.35,"grounding":"judgmental","note":"path=B_constituent_compute"}}},"V":{"state":"contango","multiplier":1.0,"label":"lagging confirmation"},"trend_states":{"SPY":{"faber_10mo":"IN","sma200":"IN"},"QQQ":{"faber_10mo":"IN","sma200":"IN"}},"fast_alarm":{"term_structure":"contango","vrp":12.4,"vrp_flag":false,"skew":128,"skew_label":"coincident context only"},"judgment_call":{"text":"Rich valuation (CAPE ~42) is the dominant driver; broad breadth near 56% above the 200-day is the biggest counter-signal.","stale":false}},"meta":{"computed_at":"2026-07-11T06:00:03+00:00","service_version":"3.1.0","coverage":{"S":{"coverage":1.0,"degraded":false},"D":{"coverage":1.0,"degraded":false},"degraded":false},"disclaimer":"Research, not advice.","epistemic_caveats":["NOT-A-PROBABILITY: 0-100 regime heuristic = structured expert judgment; uncalibrated.","... (5 verbatim guardrails)"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/score/history":{"get":{"tags":["score"],"summary":"Historical scores","description":"Snapshot history between `from` and `to`, at raw/daily/monthly granularity.","operationId":"get_history_api_v1_score_history_get","parameters":[{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO date lower bound (inclusive)","title":"From"},"description":"ISO date lower bound (inclusive)"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO date upper bound (inclusive)","title":"To"},"description":"ISO date upper bound (inclusive)"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","pattern":"^(raw|daily|monthly)$","description":"raw = every snapshot; daily/monthly = last snapshot per period","default":"raw","title":"Granularity"},"description":"raw = every snapshot; daily/monthly = last snapshot per period"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Maximum rows returned (most recent kept)","default":1000,"title":"Limit"},"description":"Maximum rows returned (most recent kept)"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get History Api V1 Score History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indicators":{"get":{"tags":["indicators"],"summary":"List all indicators with weights and grounding","operationId":"list_indicators_api_v1_indicators_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Indicators Api V1 Indicators Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indicators/{indicator_id}":{"get":{"tags":["indicators"],"summary":"Full WHAT/HOW/WHY methodology for one indicator","operationId":"get_indicator_api_v1_indicators__indicator_id__get","parameters":[{"name":"indicator_id","in":"path","required":true,"schema":{"type":"string","title":"Indicator Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Indicator Api V1 Indicators  Indicator Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/legs/trend":{"get":{"tags":["legs"],"summary":"Leg 2: Faber trend states (SPY, QQQ; 10-mo + 200-day)","operationId":"get_trend_api_v1_legs_trend_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Trend Api V1 Legs Trend Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/legs/fast-alarm":{"get":{"tags":["legs"],"summary":"Leg 3: VIX term structure, VRP, SKEW","operationId":"get_fast_alarm_api_v1_legs_fast_alarm_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Fast Alarm Api V1 Legs Fast Alarm Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meta/methodology":{"get":{"tags":["meta"],"summary":"Full framework methodology, falsification criteria, changelog","operationId":"get_methodology_api_v1_meta_methodology_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Methodology Api V1 Meta Methodology Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/healthz":{"get":{"tags":["health"],"summary":"Liveness probe","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Healthz Healthz Get"}}}}}}},"/readyz":{"get":{"tags":["health"],"summary":"Per-source health matrix from the latest gather","operationId":"readyz_readyz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Readyz Readyz Get"}}}}}}},"/api/v1/admin/refresh":{"post":{"tags":["admin"],"summary":"Start a full recompute in the background (X-API-Key required)","description":"Returns immediately with 202. The recompute takes minutes (breadth sweep, GSADF simulation, LPPLS). Poll GET /api/v1/admin/refresh/status or GET /api/v1/score for the result. At most one recompute runs at a time.","operationId":"refresh_api_v1_admin_refresh_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Refresh Api V1 Admin Refresh Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/refresh/status":{"get":{"tags":["admin"],"summary":"State of the current/last recompute (X-API-Key required)","operationId":"refresh_status_api_v1_admin_refresh_status_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Refresh Status Api V1 Admin Refresh Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/send-sms":{"post":{"tags":["admin"],"summary":"Send the daily SMS digest now (X-API-Key required)","description":"Builds the tiny LLM report from the latest snapshot and sends it via sipgate. Bypasses the SMS_ENABLED schedule gate but still requires sipgate credentials + a recipient.","operationId":"send_sms_now_api_v1_admin_send_sms_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Send Sms Now Api V1 Admin Send Sms Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/status":{"get":{"tags":["status","status"],"summary":"Live service + science-audit status","description":"Full status: service info, latest snapshot, per-source live pull results,\nprice-provider health, coverage, and the science audit (severity-ranked\nflags for everything currently unclear/incomplete/contested/deviating).","operationId":"get_status_api_v1_status_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Status Api V1 Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}