{"openapi":"3.1.0","info":{"title":"Income Simulator API","version":"0.1.0"},"paths":{"/api/configs":{"get":{"tags":["configs"],"summary":"List Configs","operationId":"list_configs_api_configs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ConfigSummary"},"type":"array","title":"Response List Configs Api Configs Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["configs"],"summary":"Create Config","operationId":"create_config_api_configs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/configs/{name}":{"get":{"tags":["configs"],"summary":"Get Config","operationId":"get_config_api_configs__name__get","parameters":[{"required":true,"schema":{"type":"string","title":"Name"},"name":"name","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["configs"],"summary":"Replace Config","operationId":"replace_config_api_configs__name__put","parameters":[{"required":true,"schema":{"type":"string","title":"Name"},"name":"name","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigReplaceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigReplaceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["configs"],"summary":"Delete Config","operationId":"delete_config_api_configs__name__delete","parameters":[{"required":true,"schema":{"type":"string","title":"Name"},"name":"name","in":"path"},{"required":false,"schema":{"type":"boolean","title":"Revoke Share","default":false},"name":"revoke_share","in":"query"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/configs/{name}/explore":{"post":{"tags":["configs"],"summary":"Explore Config","operationId":"explore_config_api_configs__name__explore_post","parameters":[{"required":true,"schema":{"type":"string","title":"Name"},"name":"name","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigExploreRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/configs/{name}/duplicate":{"post":{"tags":["configs"],"summary":"Duplicate Config","operationId":"duplicate_config_api_configs__name__duplicate_post","parameters":[{"required":true,"schema":{"type":"string","title":"Name"},"name":"name","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigDuplicateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/configs/{name}/promote":{"post":{"tags":["configs"],"summary":"Promote Config","operationId":"promote_config_api_configs__name__promote_post","parameters":[{"required":true,"schema":{"type":"string","title":"Name"},"name":"name","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/configs/{name}/move":{"post":{"tags":["configs"],"summary":"Move Config","operationId":"move_config_api_configs__name__move_post","parameters":[{"required":true,"schema":{"type":"string","title":"Name"},"name":"name","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigMoveRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs":{"get":{"tags":["runs"],"summary":"List Run History","operationId":"list_run_history_api_runs_get","parameters":[{"required":false,"schema":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":25},"name":"limit","in":"query"},{"required":false,"schema":{"type":"string","title":"Before"},"name":"before","in":"query"},{"required":false,"schema":{"type":"integer","title":"Config Id"},"name":"config_id","in":"query"},{"required":false,"schema":{"type":"string","title":"Source"},"name":"source","in":"query"},{"required":false,"schema":{"type":"string","enum":["queued","running","succeeded","failed"],"title":"Status"},"name":"status","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["runs"],"summary":"Enqueue Simulation Run","operationId":"enqueue_simulation_run_api_runs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs/sweep":{"post":{"tags":["runs"],"summary":"Run Sweep","operationId":"run_sweep_api_runs_sweep_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SweepRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs/sweeps/latest":{"get":{"tags":["runs"],"summary":"Get Latest Sweep Run","operationId":"get_latest_sweep_run_api_runs_sweeps_latest_get","parameters":[{"required":true,"schema":{"type":"string","title":"Config Name"},"name":"config_name","in":"query"},{"required":true,"schema":{"type":"string","enum":["retirement_year","annual_savings","portfolio_preset","baseline_annual_expenses","initial_net_worth","country","claim_age","bond_tilt_pp"],"title":"Sweep Variable"},"name":"sweep_variable","in":"query"},{"required":false,"schema":{"type":"string","title":"Sweep Target Income Id"},"name":"sweep_target_income_id","in":"query"},{"required":false,"schema":{"type":"boolean","title":"Include Failed","default":false},"name":"include_failed","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs/roth-conversion-explorer":{"post":{"tags":["runs"],"summary":"Run Roth Conversion Explorer","operationId":"run_roth_conversion_explorer_api_runs_roth_conversion_explorer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RothConversionExplorerRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs/what-would-it-take":{"post":{"tags":["runs"],"summary":"What Would It Take","description":"Compute (or return cached) exploration grid for linked-slider UI.","operationId":"what_would_it_take_api_runs_what_would_it_take_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatWouldItTakeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs/latest":{"get":{"tags":["runs"],"summary":"Get Latest Config Run","operationId":"get_latest_config_run_api_runs_latest_get","parameters":[{"required":true,"schema":{"type":"string","title":"Config Name"},"name":"config_name","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs/{run_id}/scenario-detail":{"post":{"tags":["runs"],"summary":"Get Scenario Detail","operationId":"get_scenario_detail_api_runs__run_id__scenario_detail_post","parameters":[{"required":true,"schema":{"type":"integer","title":"Run Id"},"name":"run_id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenarioDetailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenarioDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs/{run_id}/ledger.csv":{"get":{"tags":["runs"],"summary":"Download Ledger Csv","operationId":"download_ledger_csv_api_runs__run_id__ledger_csv_get","parameters":[{"required":true,"schema":{"type":"integer","title":"Run Id"},"name":"run_id","in":"path"},{"required":false,"schema":{"type":"string","pattern":"^(median|p10|p25|p75|p90|cohort_[0-9]{4}|scenario_[0-9]+)$","title":"View","default":"median"},"name":"view","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs/{run_id}/export":{"get":{"tags":["runs"],"summary":"Export Run","operationId":"export_run_api_runs__run_id__export_get","parameters":[{"required":true,"schema":{"type":"integer","title":"Run Id"},"name":"run_id","in":"path"},{"required":true,"schema":{"type":"string","pattern":"^(pdf|csv)$","title":"Format"},"name":"format","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs/{run_id}/keep":{"post":{"tags":["runs"],"summary":"Keep Run","operationId":"keep_run_api_runs__run_id__keep_post","parameters":[{"required":true,"schema":{"type":"integer","title":"Run Id"},"name":"run_id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeepRunRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs/{run_id}":{"get":{"tags":["runs"],"summary":"Get Simulation Run","operationId":"get_simulation_run_api_runs__run_id__get","parameters":[{"required":true,"schema":{"type":"integer","title":"Run Id"},"name":"run_id","in":"path"},{"required":false,"schema":{"type":"boolean","title":"Include Simulation","default":false},"name":"include_simulation","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs/{run_id}/cohort/{year}":{"get":{"tags":["runs"],"summary":"Get Run Cohort","description":"Owner-side per-cohort ledger materialization.\n\nMirrors GET /api/shares/{token}/cohort/{year} but is keyed by run_id and\nrequires the caller to own the underlying run. Used by the in-app cohort\ndrill-down route ``/scenario/:id/cohort/:year``.","operationId":"get_run_cohort_api_runs__run_id__cohort__year__get","parameters":[{"required":true,"schema":{"type":"integer","title":"Run Id"},"name":"run_id","in":"path"},{"required":true,"schema":{"type":"integer","title":"Year"},"name":"year","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/runs/{run_id}/cancel":{"post":{"tags":["runs"],"summary":"Cancel Run","description":"Cancel a queued or running run owned by the caller.","operationId":"cancel_run_api_runs__run_id__cancel_post","parameters":[{"required":true,"schema":{"type":"integer","title":"Run Id"},"name":"run_id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelRunRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelRunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/session":{"get":{"tags":["auth"],"summary":"Get Or Create Session","operationId":"get_or_create_session_api_auth_session_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSessionResponse"}}}}}}},"/api/auth/session/advertising-choice":{"post":{"tags":["auth"],"summary":"Bootstrap With Advertising Choice","operationId":"bootstrap_with_advertising_choice_api_auth_session_advertising_choice_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvertisingChoice"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/me":{"get":{"tags":["auth"],"summary":"Get Me","operationId":"get_me_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSessionResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/google-login-state":{"post":{"tags":["auth"],"summary":"Create Google Login State","operationId":"create_google_login_state_api_auth_google_login_state_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleLoginStateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleLoginStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/google-redirect":{"post":{"tags":["auth"],"summary":"Google Redirect Callback","description":"Step 1 of the Google Sign-In redirect flow.\n\nGoogle posts a form with ``credential`` and ``g_csrf_token`` fields.\nWe verify CSRF and the JWT, then 303-redirect to a same-origin GET\nthat completes the login.  The two-step approach is required because\n``SameSite=Lax`` does not send the existing ``sim_session`` cookie on\nthe cross-site POST from Google, but *does* send it on the subsequent\nsame-origin GET — allowing anonymous-session promotion to work.\n\nThe verified credential is passed to step 2 via a short-lived\n``SameSite=Lax; Secure; HttpOnly`` cookie so it never appears in URLs.\n\nEmits ``auth_flow_event`` with stage=``google_redirect``.","operationId":"google_redirect_callback_api_auth_google_redirect_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/complete-login":{"get":{"tags":["auth"],"summary":"Complete Login","description":"Step 2 of the Google Sign-In redirect flow.\n\nThis is a same-origin GET, so the browser sends both the\n``sim_session`` cookie (anonymous session) and the ``grl_credential``\ncookie (verified JWT from step 1).  We delegate to the existing\n``login()`` handler for full attribution, analytics, and anonymous\nsession promotion.","operationId":"complete_login_api_auth_complete_login_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","operationId":"logout_api_auth_logout_post","responses":{"204":{"description":"Successful Response"}}}},"/api/auth/token/exchange":{"post":{"tags":["auth"],"summary":"Exchange Handoff Code","description":"Exchange a one-time OAuth handoff code for a bearer token.\n\nThe mobile app receives the handoff code via deep link and POSTs it here\nover HTTPS.  The code is single-use and short-TTL; a reused or expired code\nis rejected.  On success a fresh opaque session token is issued — the same\nserver-side revocable credential as the web cookie.","operationId":"exchange_handoff_code_api_auth_token_exchange_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenExchangeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/token/refresh":{"post":{"tags":["auth"],"summary":"Refresh Token","description":"Renew a mobile bearer token (rotating refresh exchange).\n\nPresent the current valid bearer token; receive a fresh token with extended\nexpiry while the old token is revoked.  An expired or revoked token is\nrejected and the client must sign in again.","operationId":"refresh_token_api_auth_token_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}}}}},"/api/auth/account":{"delete":{"tags":["auth"],"summary":"Delete Account","operationId":"delete_account_api_auth_account_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountDeleteRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/account/export":{"get":{"tags":["auth"],"summary":"Export Account Data","operationId":"export_account_data_api_auth_account_export_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/email/enabled":{"get":{"tags":["auth"],"summary":"Email Auth Enabled","operationId":"email_auth_enabled_api_auth_email_enabled_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailAuthEnabledResponse"}}}}}}},"/api/auth/email/password-login":{"post":{"tags":["auth"],"summary":"Reviewer Password Login","description":"Password auth for the single pre-provisioned, non-admin reviewer only.","operationId":"reviewer_password_login_api_auth_email_password_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailPasswordLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/email/send-code":{"post":{"tags":["auth"],"summary":"Email Send Code","description":"Send a verification code via email.\n\nAlways returns 200 regardless of whether email exists — anti-enumeration.\nPasswordless auth means every valid request follows the same code path\n(generate, store, send), so timing does not leak account existence.\n\nEmail delivery is synchronous so that runtime failures (SES credential\nissues, transient AWS errors) surface as a 503 to the caller instead of\nsilently succeeding while the code never arrives.","operationId":"email_send_code_api_auth_email_send_code_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSendCodeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"anyOf":[{"type":"boolean"},{"type":"string"}]},"type":"object","title":"Response Email Send Code Api Auth Email Send Code Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/email/verify-and-login":{"post":{"tags":["auth"],"summary":"Email Verify And Login","description":"Passwordless login: verify OTP code, then log in or create account.\n\nSingle endpoint — no password involved. Returns AuthSessionResponse.\nUses constant-time behavior whether the account is new or existing.","operationId":"email_verify_and_login_api_auth_email_verify_and_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailVerifyAndLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tax/countries":{"get":{"tags":["tax"],"summary":"List Supported Countries","operationId":"list_supported_countries_api_tax_countries_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Response List Supported Countries Api Tax Countries Get"}}}}}}},"/api/tax/col-index":{"get":{"tags":["tax"],"summary":"Get Col Index Endpoint","description":"Return the default cost-of-living index for all supported countries.","operationId":"get_col_index_endpoint_api_tax_col_index_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"additionalProperties":{"type":"number"},"type":"object"},"type":"object","title":"Response Get Col Index Endpoint Api Tax Col Index Get"}}}}}}},"/api/tax/policies/{country}":{"get":{"tags":["tax"],"summary":"Get Tax Policy Metadata","operationId":"get_tax_policy_metadata_api_tax_policies__country__get","parameters":[{"required":true,"schema":{"type":"string","title":"Country"},"name":"country","in":"path"},{"required":false,"schema":{"type":"string","title":"Citizenship"},"name":"citizenship","in":"query"},{"required":false,"schema":{"type":"string","title":"Tax Regime"},"name":"tax_regime","in":"query"},{"required":false,"schema":{"type":"string","title":"Wealth Tax Region"},"name":"wealth_tax_region","in":"query"},{"required":false,"schema":{"type":"string","title":"Tax Filing Status"},"name":"tax_filing_status","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxPolicyMetadataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/tax/exit-taxes":{"get":{"tags":["tax"],"summary":"List Exit Tax Rules","operationId":"list_exit_tax_rules_api_tax_exit_taxes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExitTaxRuleListResponse"}}}}}}},"/api/tax/exit-taxes/{country}":{"get":{"tags":["tax"],"summary":"Get Exit Tax Rule","operationId":"get_exit_tax_rule_api_tax_exit_taxes__country__get","parameters":[{"required":true,"schema":{"type":"string","title":"Country"},"name":"country","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExitTaxRuleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tax/aca-medicare":{"get":{"tags":["tax"],"summary":"Get Aca Medicare Metadata","description":"Return the ACA and Medicare/IRMAA data provenance and values.\n\nExposes the CMS/HHS source URLs, ``last_verified`` date, and the\npublished 2026 figures (FPL, benchmark premium, Part B/D premiums,\nIRMAA brackets) so the frontend can surface data vintage.","operationId":"get_aca_medicare_metadata_api_tax_aca_medicare_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Aca Medicare Metadata Api Tax Aca Medicare Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/tax/wrappers":{"get":{"tags":["tax"],"summary":"Get Tax Wrappers","operationId":"get_tax_wrappers_api_tax_wrappers_get","parameters":[{"required":true,"schema":{"type":"string","title":"Country"},"name":"country","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxWrapperListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/tax/cross-border-assumptions":{"get":{"tags":["tax"],"summary":"Get Cross Border Assumptions","description":"Return active cross-border tax assumptions for a citizenship/residency pair.\n\nThe payload powers the scenario-results disclosure and the methodology\npage's cross-border section. Wrapper-treatment rows come from the\ncross-border assumption registry; the treaty-allocation field comes from\nthe TreatyProvisions metadata.","operationId":"get_cross_border_assumptions_api_tax_cross_border_assumptions_get","parameters":[{"required":true,"schema":{"type":"string","minLength":1,"title":"Citizenship"},"name":"citizenship","in":"query"},{"required":true,"schema":{"type":"string","minLength":1,"title":"Residency"},"name":"residency","in":"query"},{"required":false,"schema":{"type":"string","title":"Tax Regime"},"name":"tax_regime","in":"query"},{"required":false,"schema":{"type":"string","title":"Wealth Tax Region"},"name":"wealth_tax_region","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActiveCrossBorderAssumptionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tax/inheritance":{"get":{"tags":["tax"],"summary":"List Inheritance Tax Countries","description":"Countries with an inheritance / estate tax handler implemented.","operationId":"list_inheritance_tax_countries_api_tax_inheritance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InheritanceTaxCountryListResponse"}}}}}}},"/api/tax/inheritance/{country}":{"get":{"tags":["tax"],"summary":"Get Inheritance Tax Country Metadata","description":"Per-country inheritance / estate tax assumptions and citations.","operationId":"get_inheritance_tax_country_metadata_api_tax_inheritance__country__get","parameters":[{"required":true,"schema":{"type":"string","title":"Country"},"name":"country","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InheritanceTaxMetadataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/content-funnel":{"get":{"tags":["admin"],"summary":"Get Content Funnel","operationId":"get_content_funnel_api_admin_content_funnel_get","parameters":[{"required":true,"schema":{"type":"string","format":"date","title":"Start Date"},"name":"start_date","in":"query"},{"required":true,"schema":{"type":"string","format":"date","title":"End Date"},"name":"end_date","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentFunnelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/ops":{"get":{"tags":["admin"],"summary":"Get Ops Stats","operationId":"get_ops_stats_api_admin_ops_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpsStatsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/auth-diagnostics":{"get":{"tags":["admin"],"summary":"Get Auth Diagnostics","description":"Admin-only summary of recent auth_flow events with reason-code rollups.\n\nFilters are validated against the documented taxonomy so the surface\ncannot accidentally widen into a free-text search of analytics props.\nThe affected-users list joins to ``users.email`` for display, but\nemails are never copied into ``analytics_events.props``.","operationId":"get_auth_diagnostics_api_admin_auth_diagnostics_get","parameters":[{"required":false,"schema":{"type":"integer","maximum":2160.0,"minimum":1.0,"title":"Since Hours","default":24},"name":"since_hours","in":"query"},{"required":false,"schema":{"type":"string","title":"Provider"},"name":"provider","in":"query"},{"required":false,"schema":{"type":"string","title":"Intent"},"name":"intent","in":"query"},{"required":false,"schema":{"type":"string","title":"Outcome"},"name":"outcome","in":"query"},{"required":false,"schema":{"type":"string","title":"Reason Code"},"name":"reason_code","in":"query"},{"required":false,"schema":{"type":"string","title":"Stage"},"name":"stage","in":"query"},{"required":false,"schema":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Affected User Limit","default":50},"name":"affected_user_limit","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthDiagnosticsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/auth-diagnostics/flow/{auth_flow_id}":{"get":{"tags":["admin"],"summary":"Get Auth Diagnostics Flow","description":"Return the ordered stage/outcome/reason timeline for a single auth attempt.\n\nThis is the spec's primary diagnostic path: when an admin has an\n``auth_flow_id`` from a user report or alert, this endpoint shows\nexactly which auth stages ran and how each ended.","operationId":"get_auth_diagnostics_flow_api_admin_auth_diagnostics_flow__auth_flow_id__get","parameters":[{"required":true,"schema":{"type":"string","title":"Auth Flow Id"},"name":"auth_flow_id","in":"path"},{"required":false,"schema":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Limit","default":200},"name":"limit","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthFlowTimelineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/business":{"get":{"tags":["admin"],"summary":"Get Business Stats","operationId":"get_business_stats_api_admin_business_get","parameters":[{"description":"Reporting window, in days, for the Pro-gate funnel and breakdowns.","required":false,"schema":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Gate Window Days","description":"Reporting window, in days, for the Pro-gate funnel and breakdowns.","default":30},"name":"gate_window_days","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/exchange-rates":{"get":{"tags":["exchange-rates"],"summary":"Exchange Rates","description":"Return current exchange rates relative to USD.","operationId":"exchange_rates_api_exchange_rates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Exchange Rates Api Exchange Rates Get"}}}}}}},"/api/feedback":{"post":{"tags":["feedback"],"summary":"Submit Feedback","operationId":"submit_feedback_api_feedback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackSubmitRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/shares":{"post":{"tags":["shares"],"summary":"Create Share","operationId":"create_share_api_shares_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/shares/by-config/{config_name}":{"get":{"tags":["shares"],"summary":"Get Share Status","operationId":"get_share_status_api_shares_by_config__config_name__get","parameters":[{"required":true,"schema":{"type":"string","title":"Config Name"},"name":"config_name","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/shares/{token}":{"get":{"tags":["shares"],"summary":"Get Share","operationId":"get_share_api_shares__token__get","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["shares"],"summary":"Delete Share","operationId":"delete_share_api_shares__token__delete","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/shares/{token}/scenario-detail":{"post":{"tags":["shares"],"summary":"Get Share Scenario Detail","description":"Replay a single sampled scenario for a shared snapshot.\n\nMirrors POST /api/runs/{run_id}/scenario-detail but resolves the snapshot\nby share token so anonymous viewers (e.g. the compare view) can render\nthe year-by-year ledger without going through an authenticated run id.","operationId":"get_share_scenario_detail_api_shares__token__scenario_detail_post","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenarioDetailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenarioDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shares/{token}/cohort/{year}":{"get":{"tags":["shares"],"summary":"Get Share Cohort","description":"Materialize a single historical cohort for a shared scenario on demand.\n\nPer-cohort year-by-year ledgers are not persisted (see\n`historical-sampling-engine`). The handler re-runs the deterministic\nhistorical backtest from the share's stored config snapshot and returns\nthe ledger for the requested cohort start year.\n\n410 Gone is returned when the year is no longer in the cohort window —\ntypically after the owner's edits shrank the historical range.","operationId":"get_share_cohort_api_shares__token__cohort__year__get","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"},{"required":true,"schema":{"type":"integer","title":"Year"},"name":"year","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shares/{token}/claim":{"post":{"tags":["shares"],"summary":"Claim Share","description":"Clone a shared scenario into the current user's session.\n\nDeduplicates: if the user already claimed this token, returns the existing clone.","operationId":"claim_share_api_shares__token__claim_post","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareClaimResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/shares/{token}/fork":{"post":{"tags":["shares"],"summary":"Fork Share","description":"Fork a shared scenario into a fresh entry in the visitor's account.\n\nUnlike ``/claim`` (which deduplicates per token to support a \"save this\nplan\" intent), fork is a \"try with my numbers\" intent: every call creates a\nnew editable entry, available to anonymous and authenticated visitors\nalike.  The visitor lands on the new scenario with the author's last\nsuccessful run already populated as the initial result.","operationId":"fork_share_api_shares__token__fork_post","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareForkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portfolio/presets":{"get":{"summary":"List Portfolio Presets","description":"Return all portfolio presets with labels, descriptions, and blended parameters.\n\nNo authentication required.","operationId":"list_portfolio_presets_api_portfolio_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PortfolioPresetResponse"},"type":"array","title":"Response List Portfolio Presets Api Portfolio Presets Get"}}}}}}},"/api/portfolio/asset-classes":{"get":{"summary":"List Asset Classes","description":"Return the full asset class registry with parameters and correlations.\n\nWhen *preset* is provided, expected returns reflect that preset's values.\nNo authentication required (reference data).","operationId":"list_asset_classes_api_portfolio_asset_classes_get","parameters":[{"description":"Return assumption preset","required":false,"schema":{"type":"string","title":"Preset","description":"Return assumption preset","default":"historical"},"name":"preset","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetClassRegistryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/catalog":{"get":{"tags":["billing"],"summary":"Billing Catalog","operationId":"billing_catalog_api_billing_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingCatalogResponse"}}}}}}},"/api/billing/checkout":{"post":{"tags":["billing"],"summary":"Create Checkout","operationId":"create_checkout_api_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/billing/portal":{"post":{"tags":["billing"],"summary":"Create Portal","operationId":"create_portal_api_billing_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/billing/sync":{"post":{"tags":["billing"],"summary":"Sync Subscription","description":"Reconcile the caller's subscription tier from Stripe and return the refreshed session.\n\nFallback path after the Stripe Checkout redirect: if the webhook hasn't\ndelivered (or has been broken), the frontend calls this to force the backend\nto look up the user's subscription directly from Stripe and update the DB.","operationId":"sync_subscription_api_billing_sync_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingSyncRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/billing/webhook":{"post":{"tags":["billing"],"summary":"Stripe Webhook","operationId":"stripe_webhook_api_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Stripe Webhook Api Billing Webhook Post"}}}}}}},"/api/billing/store/app-store-notifications":{"post":{"tags":["billing"],"summary":"App Store Server Notification","description":"Consume Apple App Store Server Notifications v2.\n\nThe notification envelope and nested transaction JWS must verify before any\nstate changes. We then re-verify the transaction through the store verifier\nand only update an already-linked subscription row.","operationId":"app_store_server_notification_api_billing_store_app_store_notifications_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppStoreNotificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response App Store Server Notification Api Billing Store App Store Notifications Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/store/play-rtdn":{"post":{"tags":["billing"],"summary":"Play Real Time Developer Notification","description":"Consume Google Play RTDN Pub/Sub push notifications.","operationId":"play_real_time_developer_notification_api_billing_store_play_rtdn_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Play Real Time Developer Notification Api Billing Store Play Rtdn Post"}}}}}}},"/api/billing/store/verify":{"post":{"tags":["billing"],"summary":"Verify Store Purchase","description":"Verify a native purchase server-side and provision store-channel entitlement.\n\nNever trusts the client-reported purchase: the transaction is re-verified\nagainst Apple/Google before any entitlement is recorded. Blocks the purchase\nwhen an active Stripe subscription already provides Pro access (double-billing\nguard) and when the transaction belongs to another account.","operationId":"verify_store_purchase_api_billing_store_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/billing/store/restore":{"post":{"tags":["billing"],"summary":"Restore Store Purchases","description":"Re-verify the caller's prior store purchases and re-link them to the account.\n\nReinstall / new-device flow: the client gathers its current store entitlements\n(StoreKit ``currentEntitlements`` / Play ``queryPurchases``) and sends them\nhere; the server re-verifies each against the store and provisions the active\nones. Idempotent — restoring an already-linked purchase does not duplicate it.","operationId":"restore_store_purchases_api_billing_store_restore_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreRestoreRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreRestoreResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/analytics/event":{"post":{"tags":["analytics"],"summary":"Track Event","operationId":"track_event_api_analytics_event_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/analytics/track":{"post":{"tags":["analytics"],"summary":"Track Events","operationId":"track_events_api_analytics_track_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackEventsRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/healthcare/countries":{"get":{"tags":["healthcare"],"summary":"List Supported Healthcare Countries","operationId":"list_supported_healthcare_countries_api_healthcare_countries_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Response List Supported Healthcare Countries Api Healthcare Countries Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/healthcare/profile":{"get":{"tags":["healthcare"],"summary":"Get Healthcare Profile","operationId":"get_healthcare_profile_api_healthcare_profile_get","parameters":[{"description":"Country code, e.g. 'US' or 'Portugal'","required":true,"schema":{"type":"string","title":"Country","description":"Country code, e.g. 'US' or 'Portugal'"},"name":"country","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Healthcare Profile Api Healthcare Profile Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/legal/acceptances":{"post":{"tags":["legal"],"summary":"Accept Current Terms","operationId":"accept_current_terms_api_legal_acceptances_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegalAcceptanceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegalAcceptanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/email-preferences":{"get":{"tags":["email-preferences"],"summary":"Get Email Preferences","operationId":"get_email_preferences_api_email_preferences_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailPreferencesResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/email-preferences/{topic}":{"put":{"tags":["email-preferences"],"summary":"Update Email Preference","operationId":"update_email_preference_api_email_preferences__topic__put","parameters":[{"required":true,"schema":{"type":"string","title":"Topic"},"name":"topic","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailPreferenceUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailPreferenceUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/email-preferences/unsubscribe/{token}":{"post":{"tags":["email-preferences"],"summary":"Unsubscribe Via Token","description":"Public, no-login one-click unsubscribe for product-email links.\n\nDeliberately has no authentication dependency: the token itself (an\nunguessable 32-byte value, never logged or exposed in plaintext) is the\nonly credential, matching how session and service-key tokens are\nverified elsewhere in this module.","operationId":"unsubscribe_via_token_api_email_preferences_unsubscribe__token__post","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsubscribeResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/mcp-keys":{"get":{"tags":["mcp-user-keys"],"summary":"List Mcp Keys","operationId":"list_mcp_keys_api_account_mcp_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpUserKeyListResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["mcp-user-keys"],"summary":"Issue Mcp Key","operationId":"issue_mcp_key_api_account_mcp_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpUserKeyIssueRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpUserKeyIssueResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/account/mcp-keys/{key_id}/rotate":{"post":{"tags":["mcp-user-keys"],"summary":"Rotate Mcp Key","operationId":"rotate_mcp_key_api_account_mcp_keys__key_id__rotate_post","parameters":[{"required":true,"schema":{"type":"integer","title":"Key Id"},"name":"key_id","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpUserKeyIssueResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/account/mcp-keys/{key_id}":{"delete":{"tags":["mcp-user-keys"],"summary":"Revoke Mcp Key","operationId":"revoke_mcp_key_api_account_mcp_keys__key_id__delete","parameters":[{"required":true,"schema":{"type":"integer","title":"Key Id"},"name":"key_id","in":"path"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/account/mcp-grants":{"get":{"tags":["mcp-oauth-grants"],"summary":"List Mcp Grants","operationId":"list_mcp_grants_api_account_mcp_grants_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpGrantListResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/account/mcp-grants/{grant_id}":{"delete":{"tags":["mcp-oauth-grants"],"summary":"Revoke Mcp Grant","operationId":"revoke_mcp_grant_api_account_mcp_grants__grant_id__delete","parameters":[{"required":true,"schema":{"type":"integer","title":"Grant Id"},"name":"grant_id","in":"path"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/.well-known/oauth-authorization-server":{"get":{"tags":["mcp-oauth"],"summary":"Authorization Metadata","operationId":"authorization_metadata__well_known_oauth_authorization_server_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Authorization Metadata  Well Known Oauth Authorization Server Get"}}}}}}},"/.well-known/oauth-protected-resource/{suffix}":{"get":{"tags":["mcp-oauth"],"summary":"Protected Metadata","operationId":"protected_metadata__well_known_oauth_protected_resource__suffix__get","parameters":[{"required":true,"schema":{"type":"string","title":"Suffix"},"name":"suffix","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Protected Metadata  Well Known Oauth Protected Resource  Suffix  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/register":{"post":{"tags":["mcp-oauth"],"summary":"Register","operationId":"register_oauth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Registration"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/authorize":{"get":{"tags":["mcp-oauth"],"summary":"Authorize","operationId":"authorize_oauth_authorize_get","parameters":[{"required":true,"schema":{"type":"string","title":"Client Id"},"name":"client_id","in":"query"},{"required":true,"schema":{"type":"string","title":"Redirect Uri"},"name":"redirect_uri","in":"query"},{"required":false,"schema":{"type":"string","title":"Response Type","default":""},"name":"response_type","in":"query"},{"required":false,"schema":{"type":"string","title":"Code Challenge","default":""},"name":"code_challenge","in":"query"},{"required":false,"schema":{"type":"string","title":"Code Challenge Method","default":""},"name":"code_challenge_method","in":"query"},{"required":false,"schema":{"type":"string","title":"State","default":""},"name":"state","in":"query"},{"required":false,"schema":{"type":"string","title":"Scope","default":"mcp"},"name":"scope","in":"query"},{"required":false,"schema":{"type":"string","title":"Resource"},"name":"resource","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/oauth/requests/{request_id}":{"get":{"tags":["mcp-oauth"],"summary":"Request Detail","operationId":"request_detail_api_oauth_requests__request_id__get","parameters":[{"required":true,"schema":{"type":"string","title":"Request Id"},"name":"request_id","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Request Detail Api Oauth Requests  Request Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/oauth/requests/{request_id}/approve":{"post":{"tags":["mcp-oauth"],"summary":"Approve","operationId":"approve_api_oauth_requests__request_id__approve_post","parameters":[{"required":true,"schema":{"type":"string","title":"Request Id"},"name":"request_id","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Approve Api Oauth Requests  Request Id  Approve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/oauth/requests/{request_id}/deny":{"post":{"tags":["mcp-oauth"],"summary":"Deny","operationId":"deny_api_oauth_requests__request_id__deny_post","parameters":[{"required":true,"schema":{"type":"string","title":"Request Id"},"name":"request_id","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Deny Api Oauth Requests  Request Id  Deny Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/oauth/token":{"post":{"tags":["mcp-oauth"],"summary":"Token","operationId":"token_oauth_token_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_token_oauth_token_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notifications/devices":{"post":{"tags":["notifications"],"summary":"Register Device","operationId":"register_device_api_notifications_devices_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushDeviceRegisterRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushDeviceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/notifications/devices/{token}":{"delete":{"tags":["notifications"],"summary":"Unregister Device","operationId":"unregister_device_api_notifications_devices__token__delete","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/notifications/preferences/{topic}":{"put":{"tags":["notifications"],"summary":"Update Notification Preference","operationId":"update_notification_preference_api_notifications_preferences__topic__put","parameters":[{"required":true,"schema":{"type":"string","title":"Topic"},"name":"topic","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationPreferenceUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationPreferenceUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/notifications/send":{"post":{"tags":["notifications"],"summary":"Send Notification","operationId":"send_notification_api_notifications_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushSendRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushSendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/notifications/triggers/plan-revisit":{"post":{"tags":["notifications"],"summary":"Trigger Plan Revisit","operationId":"trigger_plan_revisit_api_notifications_triggers_plan_revisit_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushSendResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/notifications/internal/triggers/plan-revisit/{user_id}":{"post":{"tags":["notifications"],"summary":"Trigger Plan Revisit For User","description":"Server-owned re-engagement trigger for an arbitrary user.\n\nUnlike ``/triggers/plan-revisit`` above (self-service, current user only),\nthis lets backend/internal scheduling code re-engage any eligible user —\nopt-out and device-availability enforcement still happen inside\n``send_notification_to_user``, so callers don't need to duplicate that logic.","operationId":"trigger_plan_revisit_for_user_api_notifications_internal_triggers_plan_revisit__user_id__post","parameters":[{"required":true,"schema":{"type":"integer","title":"User Id"},"name":"user_id","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushSendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/scenarios/preview-conversion-tax":{"post":{"tags":["scenarios"],"summary":"Preview Conversion Tax","description":"Single-year tax preview for a Roth conversion event.\n\nComputes the marginal tax cost of adding ``amount`` to the conversion\nyear's taxable ordinary income, using the residency/regime that applies\nin that year (honoring any relocation events). The baseline reflects the\nscenario's projected ordinary income (wages, pensions, savings during\naccumulation) so the preview captures the conversion's marginal bracket\nimpact rather than a stand-alone calculation. The conversion amount is\nrouted as residual ordinary income (matching the engine's\n``tax_deferred_withdrawal`` lane), which carries the foreign-source tag\nthat the Portugal NHR exemption requires for US citizens abroad.","operationId":"preview_conversion_tax_api_scenarios_preview_conversion_tax_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversionTaxPreviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversionTaxPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scenarios/preview-exit-tax":{"post":{"tags":["scenarios"],"summary":"Preview Exit Tax","description":"Estimate the exit tax for a proposed relocation event.\n\nThin wrapper over ``tax_engine.exit_taxes.compute_exit_tax``. Resolves\nthe residency country at the proposed year (honoring any earlier\nrelocation events on the scenario) and runs the destination handler.\nCached per (scenario-hash + proposed-relocation) tuple so the editor's\nlive preview stays under the 200ms budget on repeat keystrokes.","operationId":"preview_exit_tax_api_scenarios_preview_exit_tax_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExitTaxPreviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExitTaxPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/integrations/reddit/simulation-requests":{"post":{"tags":["reddit-app"],"summary":"Create Simulation Request","operationId":"create_simulation_request_api_integrations_reddit_simulation_requests_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditSimulationRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditSimulationCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/integrations/reddit/simulation-requests/{request_id}":{"get":{"tags":["reddit-app"],"summary":"Poll Simulation Request","operationId":"poll_simulation_request_api_integrations_reddit_simulation_requests__request_id__get","parameters":[{"required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"},"name":"request_id","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditSimulationPollResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/integrations/reddit/simulation-requests/{request_id}/result-comment":{"post":{"tags":["reddit-app"],"summary":"Record Result Comment","operationId":"record_result_comment_api_integrations_reddit_simulation_requests__request_id__result_comment_post","parameters":[{"required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"},"name":"request_id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResultCommentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedditResultCommentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/mcp":{"get":{"tags":["mcp"],"summary":"Mcp Get","operationId":"mcp_get_api_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["mcp"],"summary":"Mcp Endpoint","operationId":"mcp_endpoint_api_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/mcp/public-info":{"get":{"summary":"Mcp Public Info","description":"Public, non-secret connector facts sourced from runtime registries.","operationId":"mcp_public_info_api_mcp_public_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Mcp Public Info Api Mcp Public Info Get"}}}}}}},"/api/blog":{"get":{"summary":"Blog Index Api","description":"Public blog index sourced from the checked-in post manifests.","operationId":"blog_index_api_api_blog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Blog Index Api Api Blog Get"}}}}}}},"/api/blog/{slug}":{"get":{"summary":"Blog Post Api","description":"Return one trusted, server-rendered Markdown article to the SPA.","operationId":"blog_post_api_api_blog__slug__get","parameters":[{"required":true,"schema":{"type":"string","title":"Slug"},"name":"slug","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Blog Post Api Api Blog  Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/healthz":{"get":{"summary":"Healthz","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Healthz Healthz Get"}}}}}}},"/app":{"get":{"summary":"App Shell","description":"Canonical app-shell route — scenario list and nested client-side routes.","operationId":"app_shell_app_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/app/{path}":{"get":{"summary":"Legacy App Redirect","description":"Legacy `/app/*` URLs — redirect to the prefix-stripped canonical path.\n\nBefore the routing-foundation refactor, the frontend was served under\n`/app/`. Old bookmarks, search-engine results, and emailed links still\npoint at `/app/scenario/...`, `/app/pricing`, etc. React Router only\ndefines the exact `/app` shell route, so those subpaths would otherwise\nrender the default home view. Strip the prefix and 301 to the real path.","operationId":"legacy_app_redirect_app__path__get","parameters":[{"required":true,"schema":{"type":"string","title":"Path"},"name":"path","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stats/public":{"get":{"summary":"Public Stats","description":"Unauthenticated endpoint returning aggregate usage stats for the landing page.","operationId":"public_stats_api_stats_public_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Public Stats Api Stats Public Get"}}}}}}},"/api/public/google-ads-config":{"get":{"summary":"Public Google Ads Config","description":"Runtime Google Ads config exposed to the browser.\n\nAds IDs and conversion labels are already public once rendered into the\nfrontend bundle. Serving them at runtime lets us adjust campaign\nconversion labels without rebuilding the SPA assets.","operationId":"public_google_ads_config_api_public_google_ads_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Public Google Ads Config Api Public Google Ads Config Get"}}}}}}},"/api/public/reddit-pixel-config":{"get":{"summary":"Public Reddit Pixel Config","description":"Runtime Reddit Pixel config exposed to the browser.\n\nMirrors `/api/public/google-ads-config` so the pixel ID can be flipped\nwithout rebuilding the SPA bundle.","operationId":"public_reddit_pixel_config_api_public_reddit_pixel_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Public Reddit Pixel Config Api Public Reddit Pixel Config Get"}}}}}}},"/api/public/openai-ads-config":{"get":{"summary":"Public Openai Ads Config","description":"Runtime OpenAI Ads pixel config exposed to the browser.","operationId":"public_openai_ads_config_api_public_openai_ads_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Public Openai Ads Config Api Public Openai Ads Config Get"}}}}}}},"/s/{token}/{subpath}":{"get":{"summary":"Share Page","operationId":"share_page_s__token___subpath__get","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"},{"required":true,"schema":{"type":"string","title":"Subpath"},"name":"subpath","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/s/{token}":{"get":{"summary":"Share Page","operationId":"share_page_s__token__get","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"},{"required":false,"schema":{"type":"string","title":"Subpath","default":""},"name":"subpath","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/og/share/{token}.png":{"get":{"summary":"Og Share Image","description":"OG image for a shared scenario — 1200x630 PNG per the route contract.","operationId":"og_share_image_og_share__token__png_get","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/og/cohort/{token}/{year}.png":{"get":{"summary":"Og Cohort Image","description":"OG image for a single cohort under a shared scenario.","operationId":"og_cohort_image_og_cohort__token___year__png_get","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"},{"required":true,"schema":{"type":"integer","title":"Year"},"name":"year","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/embed/{token}.png":{"get":{"summary":"Embed Image","operationId":"embed_image_embed__token__png_get","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"},{"required":false,"schema":{"type":"string","title":"Theme","default":"light"},"name":"theme","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/embed/{token}":{"get":{"summary":"Embed Page","operationId":"embed_page_embed__token__get","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"},{"required":false,"schema":{"type":"string","title":"Theme","default":"light"},"name":"theme","in":"query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap","description":"Sitemap covering indexable marketing routes and published research.","operationId":"sitemap_sitemap_xml_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Sitemap","description":"Sitemap covering indexable marketing routes and published research.","operationId":"sitemap_sitemap_xml_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/robots.txt":{"get":{"summary":"Robots Txt","operationId":"robots_txt_robots_txt_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Robots Txt","operationId":"robots_txt_robots_txt_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/blog/feed.xml":{"get":{"summary":"Blog Feed","operationId":"blog_feed_blog_feed_xml_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Blog Feed","operationId":"blog_feed_blog_feed_xml_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/blog":{"get":{"summary":"Blog Index Page","operationId":"blog_index_page_blog_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Blog Index Page","operationId":"blog_index_page_blog_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/blog/{slug}":{"get":{"summary":"Blog Article Page","operationId":"blog_article_page_blog__slug__head","parameters":[{"required":true,"schema":{"type":"string","title":"Slug"},"name":"slug","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Blog Article Page","operationId":"blog_article_page_blog__slug__head","parameters":[{"required":true,"schema":{"type":"string","title":"Slug"},"name":"slug","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/updates/2026-07-simulation-depletion-incident":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_updates_2026_07_simulation_depletion_incident_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_updates_2026_07_simulation_depletion_incident_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/us-retirement-calculator":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_us_retirement_calculator_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_us_retirement_calculator_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/compare-retirement-calculators":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_compare_retirement_calculators_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_compare_retirement_calculators_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/coast-fire-calculator":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_coast_fire_calculator_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_coast_fire_calculator_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/monte-carlo-retirement":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_monte_carlo_retirement_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_monte_carlo_retirement_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp/docs":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_mcp_docs_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_mcp_docs_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_mcp_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_mcp_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/faq":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_faq_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_faq_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/pricing":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_pricing_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_pricing_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/about":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_about_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_about_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/terms":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_terms_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_terms_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/support":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_support_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_support_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/privacy":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_privacy_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_privacy_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/methodology":{"get":{"summary":"Spa Client Route","operationId":"spa_client_route_methodology_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Spa Client Route","operationId":"spa_client_route_methodology_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/unsubscribe/{token}":{"get":{"summary":"Unsubscribe Page","operationId":"unsubscribe_page_unsubscribe__token__head","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"summary":"Unsubscribe Page","operationId":"unsubscribe_page_unsubscribe__token__head","parameters":[{"required":true,"schema":{"type":"string","title":"Token"},"name":"token","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fire-calculator":{"get":{"summary":"Fire Calculator Redirect","operationId":"fire_calculator_redirect_fire_calculator_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"summary":"Fire Calculator Redirect","operationId":"fire_calculator_redirect_fire_calculator_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AccountAccessRulePayload":{"properties":{"mode":{"type":"string","enum":["default","available_now","penalty_free_from","locked_until"],"title":"Mode","default":"default"},"age":{"type":"integer","minimum":0.0,"title":"Age"},"year":{"type":"integer","title":"Year"},"rule_of_55_eligible":{"type":"boolean","title":"Rule Of 55 Eligible"}},"additionalProperties":false,"type":"object","title":"AccountAccessRulePayload"},"AccountDeleteRequest":{"properties":{"confirm":{"type":"string","title":"Confirm"}},"type":"object","title":"AccountDeleteRequest"},"AcquisitionDailyBySegment":{"properties":{"date":{"type":"string","title":"Date"},"segments":{"additionalProperties":{"$ref":"#/components/schemas/AcquisitionDailyMetrics"},"type":"object","title":"Segments"}},"type":"object","required":["date","segments"],"title":"AcquisitionDailyBySegment"},"AcquisitionDailyMetrics":{"properties":{"sessions":{"type":"integer","title":"Sessions"},"activations":{"type":"integer","title":"Activations"},"sign_ups":{"type":"integer","title":"Sign Ups"}},"type":"object","required":["sessions","activations","sign_ups"],"title":"AcquisitionDailyMetrics"},"AcquisitionDailyMetricsResponse":{"properties":{"by_traffic_type":{"items":{"$ref":"#/components/schemas/AcquisitionDailyBySegment"},"type":"array","title":"By Traffic Type"},"by_source":{"items":{"$ref":"#/components/schemas/AcquisitionDailyBySegment"},"type":"array","title":"By Source"},"top_sources":{"items":{"type":"string"},"type":"array","title":"Top Sources"}},"type":"object","required":["by_traffic_type","by_source","top_sources"],"title":"AcquisitionDailyMetricsResponse"},"AcquisitionMetrics":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/AcquisitionSourceMetrics"},"type":"array","title":"Sources"},"quality":{"$ref":"#/components/schemas/AcquisitionQualityMetrics"},"daily":{"$ref":"#/components/schemas/AcquisitionDailyMetricsResponse"}},"type":"object","required":["sources"],"title":"AcquisitionMetrics"},"AcquisitionQualityCohort":{"properties":{"window_days":{"type":"integer","title":"Window Days"},"cohort_start_at":{"type":"string","title":"Cohort Start At"},"cohort_end_at":{"type":"string","title":"Cohort End At"},"users":{"type":"integer","title":"Users"},"open_window_users":{"type":"integer","title":"Open Window Users"},"campaign_attribution_users":{"type":"integer","title":"Campaign Attribution Users"},"landing_page_attribution_users":{"type":"integer","title":"Landing Page Attribution Users"},"rows_by_dimension":{"additionalProperties":{"items":{"$ref":"#/components/schemas/AcquisitionQualityRow"},"type":"array"},"type":"object","title":"Rows By Dimension"}},"type":"object","required":["window_days","cohort_start_at","cohort_end_at","users","open_window_users","campaign_attribution_users","landing_page_attribution_users","rows_by_dimension"],"title":"AcquisitionQualityCohort"},"AcquisitionQualityMetrics":{"properties":{"trailing_7d":{"$ref":"#/components/schemas/AcquisitionQualityCohort"},"trailing_30d":{"$ref":"#/components/schemas/AcquisitionQualityCohort"}},"type":"object","required":["trailing_7d","trailing_30d"],"title":"AcquisitionQualityMetrics"},"AcquisitionQualityRow":{"properties":{"dimension":{"type":"string","title":"Dimension"},"source":{"type":"string","title":"Source"},"traffic_type":{"type":"string","enum":["paid","organic","unknown"],"title":"Traffic Type"},"campaign":{"type":"string","title":"Campaign"},"landing_page":{"type":"string","title":"Landing Page"},"visitors":{"type":"integer","title":"Visitors"},"complete_window_users":{"type":"integer","title":"Complete Window Users"},"open_window_users":{"type":"integer","title":"Open Window Users"},"cta_users":{"type":"integer","title":"Cta Users"},"cta_rate":{"type":"number","title":"Cta Rate"},"first_result_users":{"type":"integer","title":"First Result Users"},"result_rate":{"type":"number","title":"Result Rate"},"meaningful_exploration_users":{"type":"integer","title":"Meaningful Exploration Users"},"meaningful_exploration_rate":{"type":"number","title":"Meaningful Exploration Rate"},"pro_gate_users":{"type":"integer","title":"Pro Gate Users"},"pro_gate_rate":{"type":"number","title":"Pro Gate Rate"},"signup_users":{"type":"integer","title":"Signup Users"},"signup_rate":{"type":"number","title":"Signup Rate"},"median_time_to_first_result_hours":{"type":"number","title":"Median Time To First Result Hours"}},"type":"object","required":["dimension","source","traffic_type","visitors","complete_window_users","open_window_users","cta_users","cta_rate","first_result_users","result_rate","meaningful_exploration_users","meaningful_exploration_rate","pro_gate_users","pro_gate_rate","signup_users","signup_rate"],"title":"AcquisitionQualityRow"},"AcquisitionSourceMetrics":{"properties":{"source":{"type":"string","title":"Source"},"traffic_type":{"type":"string","enum":["paid","organic","unknown"],"title":"Traffic Type"},"sessions":{"type":"integer","title":"Sessions"},"activations":{"type":"integer","title":"Activations"},"sign_ups":{"type":"integer","title":"Sign Ups"},"activation_rate":{"type":"number","title":"Activation Rate"}},"type":"object","required":["source","traffic_type","sessions","activations","sign_ups","activation_rate"],"title":"AcquisitionSourceMetrics"},"ActivationFunnel":{"properties":{"visited":{"type":"integer","title":"Visited"},"created_config":{"type":"integer","title":"Created Config"},"first_successful_run":{"type":"integer","title":"First Successful Run"},"signed_up":{"type":"integer","title":"Signed Up"}},"type":"object","required":["visited","created_config","first_successful_run","signed_up"],"title":"ActivationFunnel"},"ActivationMetrics":{"properties":{"activation_rate_30d":{"type":"number","title":"Activation Rate 30D"},"median_time_to_first_value_hours":{"type":"number","title":"Median Time To First Value Hours"},"signup_conversion_rate_30d":{"type":"number","title":"Signup Conversion Rate 30D"},"funnel":{"$ref":"#/components/schemas/ActivationFunnel"}},"type":"object","required":["activation_rate_30d","signup_conversion_rate_30d","funnel"],"title":"ActivationMetrics"},"ActiveCrossBorderAssumptionsResponse":{"properties":{"citizenship_country":{"type":"string","title":"Citizenship Country"},"residency_country":{"type":"string","title":"Residency Country"},"active":{"type":"boolean","title":"Active"},"wrapper_assumptions":{"items":{"$ref":"#/components/schemas/CrossBorderTaxAssumptionResponse"},"type":"array","title":"Wrapper Assumptions"},"treaty_provisions":{"$ref":"#/components/schemas/TreatyProvisionsResponse"},"fallback_assumption":{"$ref":"#/components/schemas/CrossBorderTaxAssumptionResponse"},"dual_tax_fallback":{"$ref":"#/components/schemas/DualTaxFallbackMetadataResponse"}},"type":"object","required":["citizenship_country","residency_country","active"],"title":"ActiveCrossBorderAssumptionsResponse","description":"Active cross-border tax assumptions for a citizenship/residency pair.\n\n``active`` indicates whether the disclosure should render at all — false when\nthe pair does not produce a cross-border tax year (e.g. citizenship matches\nresidency, or non-US citizenship which is out of scope for v1)."},"AdvertisingChoice":{"properties":{"permission":{"type":"string","enum":["granted","denied"],"title":"Permission"},"version":{"type":"string","enum":["2026-09-24.v1"],"title":"Version"}},"additionalProperties":false,"type":"object","required":["permission","version"],"title":"AdvertisingChoice"},"AllocationResponse":{"properties":{"asset_class":{"type":"string","title":"Asset Class"},"weight":{"type":"number","title":"Weight"}},"type":"object","required":["asset_class","weight"],"title":"AllocationResponse"},"AppStoreNotificationRequest":{"properties":{"signedPayload":{"type":"string","title":"Signedpayload"}},"type":"object","required":["signedPayload"],"title":"AppStoreNotificationRequest"},"Article24ReliefFactsPayload":{"properties":{"schema_version":{"type":"integer","title":"Schema Version","default":1},"eligibility_status":{"type":"string","enum":["unknown","eligible","ineligible"],"title":"Eligibility Status","default":"unknown"},"qualifying_investment_income_fraction":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Qualifying Investment Income Fraction"},"qualifying_capital_gains_fraction":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Qualifying Capital Gains Fraction"},"us_source_or_asset_qualification_confirmed":{"type":"boolean","title":"Us Source Or Asset Qualification Confirmed"},"beneficial_ownership_confirmed":{"type":"boolean","title":"Beneficial Ownership Confirmed"},"us_reporting_compliance_confirmed":{"type":"boolean","title":"Us Reporting Compliance Confirmed"}},"additionalProperties":false,"type":"object","title":"Article24ReliefFactsPayload","description":"France-US tax treaty Article 24 portfolio relief facts.\n\nThese are user-confirmed simulation facts, not a determination of legal\neligibility — user-facing copy referencing this block must say \"based on\nyour inputs\" and avoid advisory terms. ``eligibility_status`` defaults to\n``\"unknown\"``, which must never silently activate relief downstream. A\nglobally diversified portfolio can contain both qualifying and\nnon-qualifying assets, so eligibility is recorded as fractions rather\nthan a single domestic/foreign flag."},"AssetClassRegistryResponse":{"properties":{"asset_classes":{"items":{"$ref":"#/components/schemas/AssetClassResponse"},"type":"array","title":"Asset Classes"},"correlations":{"additionalProperties":{"additionalProperties":{"type":"number"},"type":"object"},"type":"object","title":"Correlations"}},"type":"object","required":["asset_classes","correlations"],"title":"AssetClassRegistryResponse"},"AssetClassResponse":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"expected_return":{"type":"number","title":"Expected Return"},"volatility":{"type":"number","title":"Volatility"},"regime_aware_calibrated":{"type":"boolean","title":"Regime Aware Calibrated"}},"type":"object","required":["id","label","expected_return","volatility","regime_aware_calibrated"],"title":"AssetClassResponse"},"AssetReturnItemSchema":{"properties":{"asset_class_id":{"type":"string","title":"Asset Class Id"},"label":{"type":"string","title":"Label"},"weight":{"type":"number","title":"Weight"},"return_rate":{"type":"number","title":"Return Rate"},"return_amount":{"type":"number","title":"Return Amount"}},"type":"object","required":["asset_class_id","label","weight","return_rate","return_amount"],"title":"AssetReturnItemSchema"},"AuthAffectedUser":{"properties":{"user_id":{"type":"integer","title":"User Id"},"authenticated_user_id":{"type":"integer","title":"Authenticated User Id"},"anonymous_user_id":{"type":"integer","title":"Anonymous User Id"},"provider":{"type":"string","title":"Provider"},"email":{"type":"string","title":"Email"},"event_count":{"type":"integer","title":"Event Count"},"last_event_at":{"type":"string","title":"Last Event At"},"reason_codes":{"items":{"type":"string"},"type":"array","title":"Reason Codes"},"stages":{"items":{"type":"string"},"type":"array","title":"Stages"}},"type":"object","required":["user_id","event_count","reason_codes","stages"],"title":"AuthAffectedUser"},"AuthDiagnosticsResponse":{"properties":{"generated_at":{"type":"string","title":"Generated At"},"summary":{"$ref":"#/components/schemas/AuthDiagnosticsSummary"},"affected_users":{"items":{"$ref":"#/components/schemas/AuthAffectedUser"},"type":"array","title":"Affected Users"}},"type":"object","required":["generated_at","summary","affected_users"],"title":"AuthDiagnosticsResponse"},"AuthDiagnosticsSummary":{"properties":{"since_hours":{"type":"integer","title":"Since Hours"},"total":{"type":"integer","title":"Total"},"by_outcome":{"items":{"$ref":"#/components/schemas/AuthOutcomeCount"},"type":"array","title":"By Outcome"},"by_stage":{"items":{"$ref":"#/components/schemas/AuthStageOutcomeCount"},"type":"array","title":"By Stage"},"by_reason_code":{"items":{"$ref":"#/components/schemas/AuthReasonCount"},"type":"array","title":"By Reason Code"},"by_provider":{"items":{"$ref":"#/components/schemas/AuthProviderOutcomeCount"},"type":"array","title":"By Provider"},"timeline":{"items":{"$ref":"#/components/schemas/AuthTimelinePoint"},"type":"array","title":"Timeline"}},"type":"object","required":["since_hours","total","by_outcome","by_stage","by_reason_code","by_provider","timeline"],"title":"AuthDiagnosticsSummary"},"AuthFlowTimelineEvent":{"properties":{"occurred_at":{"type":"string","title":"Occurred At"},"stage":{"type":"string","title":"Stage"},"outcome":{"type":"string","title":"Outcome"},"reason_code":{"type":"string","title":"Reason Code"},"provider":{"type":"string","title":"Provider"},"intent":{"type":"string","title":"Intent"},"route":{"type":"string","title":"Route"},"method":{"type":"string","title":"Method"},"status_class":{"type":"string","title":"Status Class"},"status_code":{"type":"integer","title":"Status Code"},"deploy_sha":{"type":"string","title":"Deploy Sha"},"user_id":{"type":"integer","title":"User Id"},"anonymous_user_id":{"type":"integer","title":"Anonymous User Id"},"request_id":{"type":"string","title":"Request Id"}},"type":"object","title":"AuthFlowTimelineEvent"},"AuthFlowTimelineResponse":{"properties":{"generated_at":{"type":"string","title":"Generated At"},"auth_flow_id":{"type":"string","title":"Auth Flow Id"},"event_count":{"type":"integer","title":"Event Count"},"first_event_at":{"type":"string","title":"First Event At"},"last_event_at":{"type":"string","title":"Last Event At"},"providers":{"items":{"type":"string"},"type":"array","title":"Providers"},"intents":{"items":{"type":"string"},"type":"array","title":"Intents"},"outcomes":{"items":{"type":"string"},"type":"array","title":"Outcomes"},"reason_codes":{"items":{"type":"string"},"type":"array","title":"Reason Codes"},"stages":{"items":{"type":"string"},"type":"array","title":"Stages"},"user_ids":{"items":{"type":"integer"},"type":"array","title":"User Ids"},"anonymous_user_ids":{"items":{"type":"integer"},"type":"array","title":"Anonymous User Ids"},"events":{"items":{"$ref":"#/components/schemas/AuthFlowTimelineEvent"},"type":"array","title":"Events"}},"type":"object","required":["generated_at","auth_flow_id","event_count","providers","intents","outcomes","reason_codes","stages","user_ids","anonymous_user_ids","events"],"title":"AuthFlowTimelineResponse"},"AuthLoginRequest":{"properties":{"credential":{"type":"string","title":"Credential"},"terms_accepted":{"type":"boolean","title":"Terms Accepted","default":false},"marketing_email_opt_in":{"type":"boolean","title":"Marketing Email Opt In","default":false}},"type":"object","required":["credential"],"title":"AuthLoginRequest"},"AuthOutcomeCount":{"properties":{"outcome":{"type":"string","title":"Outcome"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["outcome","count"],"title":"AuthOutcomeCount"},"AuthProviderOutcomeCount":{"properties":{"provider":{"type":"string","title":"Provider"},"outcome":{"type":"string","title":"Outcome"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["provider","outcome","count"],"title":"AuthProviderOutcomeCount"},"AuthReasonCount":{"properties":{"reason_code":{"type":"string","title":"Reason Code"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["reason_code","count"],"title":"AuthReasonCount"},"AuthSessionResponse":{"properties":{"user":{"$ref":"#/components/schemas/AuthUser"},"anonymous":{"type":"boolean","title":"Anonymous","default":false},"account_tier":{"type":"string","title":"Account Tier","default":"free"},"scenario_cap":{"type":"integer","title":"Scenario Cap"},"run_cap":{"type":"integer","title":"Run Cap"},"runs_remaining":{"type":"integer","title":"Runs Remaining"},"run_limit":{"$ref":"#/components/schemas/RunLimit"},"billing_enabled":{"type":"boolean","title":"Billing Enabled","default":false},"has_stripe_customer":{"type":"boolean","title":"Has Stripe Customer","default":false},"paid_access_expires_at":{"type":"string","format":"date-time","title":"Paid Access Expires At"},"billing_plan":{"type":"string","title":"Billing Plan"},"has_active_subscription":{"type":"boolean","title":"Has Active Subscription","default":false},"can_start_stripe_checkout":{"type":"boolean","title":"Can Start Stripe Checkout","default":true},"can_start_store_purchase":{"type":"boolean","title":"Can Start Store Purchase","default":true},"trial_eligible":{"type":"boolean","title":"Trial Eligible","default":false},"pro_plan_price_usd":{"type":"integer","title":"Pro Plan Price Usd","default":10},"free_n_scenarios":{"type":"integer","title":"Free N Scenarios"},"signup_conversion":{"type":"boolean","title":"Signup Conversion","default":false},"missing_terms_acceptance":{"type":"boolean","title":"Missing Terms Acceptance","default":false},"auth_token":{"type":"string","title":"Auth Token"},"auth_token_expires_at":{"type":"string","format":"date-time","title":"Auth Token Expires At"}},"type":"object","required":["user"],"title":"AuthSessionResponse"},"AuthStageOutcomeCount":{"properties":{"stage":{"type":"string","title":"Stage"},"outcome":{"type":"string","title":"Outcome"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["stage","outcome","count"],"title":"AuthStageOutcomeCount"},"AuthTimelinePoint":{"properties":{"bucket":{"type":"string","title":"Bucket"},"outcome":{"type":"string","title":"Outcome"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["outcome","count"],"title":"AuthTimelinePoint"},"AuthUser":{"properties":{"id":{"type":"integer","title":"Id"},"provider":{"type":"string","title":"Provider"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"picture":{"type":"string","title":"Picture"}},"type":"object","required":["id","provider","name"],"title":"AuthUser"},"BaselineAdjustmentPayload":{"properties":{"year":{"type":"integer","title":"Year"},"new_baseline":{"type":"number","minimum":0.0,"title":"New Baseline"},"reason":{"type":"string","title":"Reason"},"item_id":{"type":"string","format":"uuid","title":"Item Id"},"derived_from":{"type":"string","title":"Derived From"}},"additionalProperties":false,"type":"object","required":["year","new_baseline"],"title":"BaselineAdjustmentPayload"},"BillingCatalogResponse":{"properties":{"plans":{"items":{"type":"object"},"type":"array","title":"Plans"}},"type":"object","required":["plans"],"title":"BillingCatalogResponse"},"BillingSyncRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"}},"type":"object","title":"BillingSyncRequest"},"Body_token_oauth_token_post":{"properties":{"grant_type":{"type":"string","title":"Grant Type"},"client_id":{"type":"string","title":"Client Id"},"code":{"type":"string","title":"Code"},"redirect_uri":{"type":"string","title":"Redirect Uri"},"code_verifier":{"type":"string","title":"Code Verifier"},"refresh_token":{"type":"string","title":"Refresh Token"},"resource":{"type":"string","title":"Resource"}},"type":"object","required":["grant_type","client_id"],"title":"Body_token_oauth_token_post"},"BusinessStatsResponse":{"properties":{"generated_at":{"type":"string","title":"Generated At"},"users":{"$ref":"#/components/schemas/UserMetrics"},"activation":{"$ref":"#/components/schemas/ActivationMetrics"},"acquisition":{"$ref":"#/components/schemas/AcquisitionMetrics"},"engagement":{"$ref":"#/components/schemas/EngagementMetrics"},"feature_adoption":{"$ref":"#/components/schemas/FeatureAdoptionMetrics"},"feature_usage":{"$ref":"#/components/schemas/FeatureUsageMetrics"},"retention":{"$ref":"#/components/schemas/RetentionMetrics"},"device_mix":{"items":{"$ref":"#/components/schemas/DeviceMixEntry"},"type":"array","title":"Device Mix","default":[]},"geo_distribution":{"items":{"$ref":"#/components/schemas/UserGeoCount"},"type":"array","title":"Geo Distribution","default":[]},"feedback":{"$ref":"#/components/schemas/FeedbackMetrics"},"monetization":{"$ref":"#/components/schemas/MonetizationMetrics"},"exploration_depth":{"$ref":"#/components/schemas/ExplorationDepthMetrics"},"mcp_funnel":{"$ref":"#/components/schemas/McpFunnelMetrics"}},"type":"object","required":["generated_at","users","activation","acquisition","engagement","feature_usage","retention"],"title":"BusinessStatsResponse"},"CancelRunRequest":{"properties":{"idempotency_key":{"type":"string","maxLength":200,"title":"Idempotency Key"}},"type":"object","title":"CancelRunRequest"},"CancelRunResponse":{"properties":{"run_id":{"type":"integer","title":"Run Id"},"status":{"type":"string","enum":["cancelled"],"title":"Status"},"idempotency_key":{"type":"string","title":"Idempotency Key"},"assumptions_version":{"type":"string","title":"Assumptions Version"},"assumptions_version_state":{"type":"string","enum":["declared","legacy_unverified"],"title":"Assumptions Version State","default":"legacy_unverified"}},"type":"object","required":["run_id","status"],"title":"CancelRunResponse"},"ChatGPTPluginGrowthCounts":{"properties":{"new_connections":{"type":"integer","title":"New Connections"},"new_account_connections":{"type":"integer","title":"New Account Connections"},"signups_during_oauth":{"type":"integer","title":"Signups During Oauth"},"called_tool":{"type":"integer","title":"Called Tool"},"no_tool_after_24h":{"type":"integer","title":"No Tool After 24H"},"got_result":{"type":"integer","title":"Got Result"},"eligible_24h_connections":{"type":"integer","title":"Eligible 24H Connections"},"activated_24h_connections":{"type":"integer","title":"Activated 24H Connections"},"opened_web_link":{"type":"integer","title":"Opened Web Link"},"paid":{"type":"integer","title":"Paid"}},"type":"object","required":["new_connections","new_account_connections","signups_during_oauth","called_tool","no_tool_after_24h","got_result","eligible_24h_connections","activated_24h_connections","opened_web_link","paid"],"title":"ChatGPTPluginGrowthCounts"},"ChatGPTPluginGrowthWindows":{"properties":{"last_24h":{"$ref":"#/components/schemas/ChatGPTPluginGrowthCounts"},"last_7d":{"$ref":"#/components/schemas/ChatGPTPluginGrowthCounts"},"last_30d":{"$ref":"#/components/schemas/ChatGPTPluginGrowthCounts"}},"type":"object","required":["last_24h","last_7d","last_30d"],"title":"ChatGPTPluginGrowthWindows"},"CheckoutRequest":{"properties":{"plan":{"type":"string","enum":["pass_30d","monthly","yearly"],"title":"Plan","default":"monthly"},"return_path":{"type":"string","maxLength":2048,"title":"Return Path"}},"type":"object","title":"CheckoutRequest"},"CheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"CheckoutResponse"},"CohortIndexEntry":{"properties":{"start_year":{"type":"integer","title":"Start Year"},"scenario_index":{"type":"integer","title":"Scenario Index"},"is_failure":{"type":"boolean","title":"Is Failure"},"depletion_year_index":{"type":"integer","title":"Depletion Year Index"},"yearly_ending_balances":{"items":{"type":"number"},"type":"array","title":"Yearly Ending Balances"}},"type":"object","required":["start_year","is_failure"],"title":"CohortIndexEntry","description":"Lightweight per-cohort summary loaded from the historical cohort index\nartifact. Lets the UI enumerate every cohort start year (for selector\noptions and overview headlines) without pulling each cohort's full\nyear-by-year ledger. Full ledger data is loaded on demand from the\n``/runs/{run_id}/cohort/{year}`` or ``/shares/{token}/cohort/{year}``\nartifact-backed endpoints.\n\n``yearly_ending_balances`` carries the per-year ending-balance summary\nused by the overview chart so 141 cohort lines can render from the\nindex alone (one float per plan year, ~15 entries per cohort) without\nembedding the rest of the per-year ledger (taxes, withdrawals, etc.).\nDrill-down ledgers still fetch the full ``CohortResult`` from the\nartifact-backed cohort endpoint."},"CohortResult":{"properties":{"start_year":{"type":"integer","title":"Start Year"},"is_failure":{"type":"boolean","title":"Is Failure"},"depletion_year_index":{"type":"integer","title":"Depletion Year Index"},"yearly":{"items":{"$ref":"#/components/schemas/YearDetailSchema"},"type":"array","title":"Yearly"}},"type":"object","required":["start_year","is_failure"],"title":"CohortResult"},"ComponentSourceTagPayload":{"properties":{"source":{"type":"string","enum":["domestic","foreign"],"title":"Source","default":"domestic"},"remitted":{"type":"boolean","title":"Remitted","default":true}},"additionalProperties":false,"type":"object","title":"ComponentSourceTagPayload"},"ComputeProvenanceResponse":{"properties":{"contract_version":{"type":"integer","title":"Contract Version"},"available":{"type":"boolean","title":"Available"},"state":{"type":"string","enum":["legacy"],"title":"State"},"result_origin":{"type":"string","enum":["computed","copied"],"title":"Result Origin"},"api_deploy_sha":{"type":"string","title":"Api Deploy Sha"},"worker_deploy_sha":{"type":"string","title":"Worker Deploy Sha"},"engine_contract_version":{"type":"string","title":"Engine Contract Version"},"aggregate_result_schema_version":{"type":"integer","title":"Aggregate Result Schema Version"},"artifact_materializer_version":{"type":"string","title":"Artifact Materializer Version"},"artifact_schema_versions":{"additionalProperties":{"type":"integer"},"type":"object","title":"Artifact Schema Versions"},"python_version":{"type":"string","title":"Python Version"},"numpy_version":{"type":"string","title":"Numpy Version"},"platform":{"type":"string","title":"Platform"},"architecture":{"type":"string","title":"Architecture"},"run_kind":{"type":"string","title":"Run Kind"},"worker_attempt_number":{"type":"integer","title":"Worker Attempt Number"}},"type":"object","required":["contract_version","available"],"title":"ComputeProvenanceResponse"},"ConfigCreateRequest":{"properties":{"name":{"type":"string","title":"Name"},"label":{"type":"string","title":"Label"},"notes":{"type":"string","title":"Notes"},"simulation":{"$ref":"#/components/schemas/SimulationConfigPayload"}},"type":"object","required":["simulation"],"title":"ConfigCreateRequest"},"ConfigDetail":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"label":{"type":"string","title":"Label"},"auto_label":{"type":"string","title":"Auto Label"},"notes":{"type":"string","title":"Notes"},"baseline_id":{"type":"integer","title":"Baseline Id"},"last_failure_probability":{"type":"number","title":"Last Failure Probability"},"display_order":{"type":"integer","title":"Display Order"},"simulation":{"$ref":"#/components/schemas/SimulationConfigPayload"},"inherited_pro_inputs":{"items":{"$ref":"#/components/schemas/InheritedProInput"},"type":"array","title":"Inherited Pro Inputs"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","display_order","simulation"],"title":"ConfigDetail"},"ConfigDuplicateRequest":{"properties":{"new_name":{"type":"string","title":"New Name"},"label":{"type":"string","title":"Label"},"notes":{"type":"string","title":"Notes"}},"type":"object","title":"ConfigDuplicateRequest"},"ConfigExploreRequest":{"properties":{"name":{"type":"string","title":"Name"},"label":{"type":"string","title":"Label"},"notes":{"type":"string","title":"Notes"},"simulation":{"type":"object","title":"Simulation"},"apply_country_relocation":{"type":"boolean","title":"Apply Country Relocation","default":false},"auto_label":{"type":"string","title":"Auto Label"}},"additionalProperties":false,"type":"object","title":"ConfigExploreRequest"},"ConfigMoveRequest":{"properties":{"direction":{"type":"string","title":"Direction"}},"type":"object","required":["direction"],"title":"ConfigMoveRequest"},"ConfigReplaceRequest":{"properties":{"label":{"type":"string","title":"Label"},"notes":{"type":"string","title":"Notes"},"simulation":{"$ref":"#/components/schemas/SimulationConfigPayload"}},"type":"object","required":["simulation"],"title":"ConfigReplaceRequest"},"ConfigReplaceResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"label":{"type":"string","title":"Label"},"auto_label":{"type":"string","title":"Auto Label"},"notes":{"type":"string","title":"Notes"},"baseline_id":{"type":"integer","title":"Baseline Id"},"last_failure_probability":{"type":"number","title":"Last Failure Probability"},"display_order":{"type":"integer","title":"Display Order"},"simulation":{"$ref":"#/components/schemas/SimulationConfigPayload"},"inherited_pro_inputs":{"items":{"$ref":"#/components/schemas/InheritedProInput"},"type":"array","title":"Inherited Pro Inputs"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"propagated_runs":{"items":{"$ref":"#/components/schemas/PropagatedRun"},"type":"array","title":"Propagated Runs"}},"type":"object","required":["id","name","display_order","simulation"],"title":"ConfigReplaceResponse"},"ConfigSummary":{"properties":{"name":{"type":"string","title":"Name"},"label":{"type":"string","title":"Label"},"auto_label":{"type":"string","title":"Auto Label"},"baseline_id":{"type":"integer","title":"Baseline Id"},"country":{"type":"string","title":"Country"},"initial_year":{"type":"integer","title":"Initial Year"},"avg_return":{"type":"number","title":"Avg Return"},"volatility":{"type":"number","title":"Volatility"},"initial_net_worth":{"type":"number","title":"Initial Net Worth"},"baseline_annual_expenses":{"type":"number","title":"Baseline Annual Expenses"},"retirement_year":{"type":"integer","title":"Retirement Year"},"age":{"type":"integer","title":"Age"},"portfolio_preset":{"type":"string","title":"Portfolio Preset"},"has_custom_portfolio":{"type":"boolean","title":"Has Custom Portfolio","default":false},"last_failure_probability":{"type":"number","title":"Last Failure Probability"},"display_order":{"type":"integer","title":"Display Order"},"explorations":{"items":{"$ref":"#/components/schemas/ExplorationSummary"},"type":"array","title":"Explorations"}},"type":"object","required":["name","country","initial_net_worth","baseline_annual_expenses","display_order"],"title":"ConfigSummary"},"ContentFunnelResponse":{"properties":{"generated_at":{"type":"string","title":"Generated At"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"type":"string","title":"End Date"},"gate_attempts_available":{"type":"boolean","title":"Gate Attempts Available"},"exclusions_applied":{"items":{"type":"string"},"type":"array","title":"Exclusions Applied"},"rows":{"items":{"$ref":"#/components/schemas/ContentFunnelRow"},"type":"array","title":"Rows"}},"type":"object","required":["generated_at","start_date","end_date","gate_attempts_available","exclusions_applied","rows"],"title":"ContentFunnelResponse"},"ContentFunnelRow":{"properties":{"source":{"type":"string","title":"Source"},"medium":{"type":"string","title":"Medium"},"campaign":{"type":"string","title":"Campaign"},"content_slug":{"type":"string","title":"Content Slug"},"unique_readers":{"type":"integer","title":"Unique Readers"},"product_clicks":{"type":"integer","title":"Product Clicks"},"scenario_starts":{"type":"integer","title":"Scenario Starts"},"successful_runs":{"type":"integer","title":"Successful Runs"},"signups":{"type":"integer","title":"Signups"},"pro_gate_attempts":{"type":"integer","title":"Pro Gate Attempts"},"upgrade_clicks":{"type":"integer","title":"Upgrade Clicks"},"checkout_starts":{"type":"integer","title":"Checkout Starts"},"paid_conversions":{"type":"integer","title":"Paid Conversions"},"view_to_click_rate":{"type":"number","title":"View To Click Rate"},"click_to_successful_run_rate":{"type":"number","title":"Click To Successful Run Rate"},"run_to_signup_rate":{"type":"number","title":"Run To Signup Rate"},"signup_to_upgrade_rate":{"type":"number","title":"Signup To Upgrade Rate"},"reader_to_purchase_rate":{"type":"number","title":"Reader To Purchase Rate"}},"type":"object","required":["source","medium","campaign","content_slug","unique_readers","product_clicks","scenario_starts","successful_runs","signups","upgrade_clicks","checkout_starts","paid_conversions","view_to_click_rate","click_to_successful_run_rate","run_to_signup_rate","signup_to_upgrade_rate","reader_to_purchase_rate"],"title":"ContentFunnelRow"},"ConversionTaxPreviewRequest":{"properties":{"simulation":{"$ref":"#/components/schemas/SimulationConfigPayload"},"year":{"type":"integer","title":"Year"},"amount":{"type":"number","minimum":0.0,"title":"Amount"}},"type":"object","required":["simulation","year","amount"],"title":"ConversionTaxPreviewRequest"},"ConversionTaxPreviewResponse":{"properties":{"year":{"type":"integer","title":"Year"},"amount":{"type":"number","title":"Amount"},"residency_country":{"type":"string","title":"Residency Country"},"residency_regime":{"type":"string","title":"Residency Regime"},"citizenship_country":{"type":"string","title":"Citizenship Country"},"overlay_active":{"type":"boolean","title":"Overlay Active"},"residency_tax_impact":{"type":"number","title":"Residency Tax Impact"},"citizenship_tax_impact":{"type":"number","title":"Citizenship Tax Impact"},"ftc_applied":{"type":"number","title":"Ftc Applied"},"total_tax_impact":{"type":"number","title":"Total Tax Impact"}},"type":"object","required":["year","amount","residency_country","citizenship_country","overlay_active","residency_tax_impact","citizenship_tax_impact","ftc_applied","total_tax_impact"],"title":"ConversionTaxPreviewResponse"},"CountryCount":{"properties":{"country":{"type":"string","title":"Country"},"config_count":{"type":"integer","title":"Config Count"}},"type":"object","required":["country","config_count"],"title":"CountryCount"},"CrossBorderTaxAssumptionResponse":{"properties":{"assumption_id":{"type":"string","title":"Assumption Id"},"label":{"type":"string","title":"Label"},"citizenship_country":{"type":"string","title":"Citizenship Country"},"residency_country":{"type":"string","title":"Residency Country"},"wrapper_or_income_category":{"type":"string","title":"Wrapper Or Income Category"},"taxable_component_basis":{"type":"string","enum":["full_distribution","earnings_only","exempt"],"title":"Taxable Component Basis"},"local_tax_category":{"type":"string","title":"Local Tax Category"},"confidence":{"type":"string","enum":["high","medium","low"],"title":"Confidence"},"source_urls":{"items":{"type":"string"},"type":"array","title":"Source Urls"},"last_verified":{"type":"string","title":"Last Verified","default":""},"caveat":{"type":"string","title":"Caveat"},"is_fallback":{"type":"boolean","title":"Is Fallback","default":false}},"type":"object","required":["assumption_id","label","citizenship_country","residency_country","wrapper_or_income_category","taxable_component_basis","local_tax_category","confidence","caveat"],"title":"CrossBorderTaxAssumptionResponse","description":"One active cross-border tax assumption disclosed in scenario results."},"CrossBorderTaxFactsPayload":{"properties":{"roth_contribution_basis":{"type":"number","minimum":0.0,"title":"Roth Contribution Basis"},"qualified_roth_distribution":{"type":"boolean","title":"Qualified Roth Distribution"},"canada_roth_election":{"type":"boolean","title":"Canada Roth Election"},"post_residency_contribution":{"type":"boolean","title":"Post Residency Contribution"},"payment_form":{"type":"string","enum":["lump_sum","periodic"],"title":"Payment Form"}},"additionalProperties":false,"type":"object","title":"CrossBorderTaxFactsPayload","description":"Wrapper-tax facts the simulator cannot infer from a balance.\n\nEvery field is optional: ``None`` (or absent) means the user has not\nasserted the fact yet. Empty payloads round-trip as ``None`` on the\nparent ``SimulationAccountPayload`` so existing scenarios stay\nbackwards compatible."},"DailySignup":{"properties":{"date":{"type":"string","title":"Date"},"count":{"type":"integer","title":"Count"},"activated":{"type":"integer","title":"Activated"}},"type":"object","required":["date","count","activated"],"title":"DailySignup"},"DepletionMetadata":{"properties":{"p10_depleted":{"type":"boolean","title":"P10 Depleted","default":false},"p50_depleted":{"type":"boolean","title":"P50 Depleted","default":false},"p90_depleted":{"type":"boolean","title":"P90 Depleted","default":false}},"type":"object","title":"DepletionMetadata"},"DeviceMixEntry":{"properties":{"device_type":{"type":"string","title":"Device Type"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["device_type","count"],"title":"DeviceMixEntry"},"DualTaxFallbackMetadataResponse":{"properties":{"country":{"type":"string","title":"Country"},"treaty_status":{"type":"string","enum":["explicit_treaty_matrix","treaty_exists_not_encoded","no_income_tax_treaty"],"title":"Treaty Status"},"residence_tax_model":{"type":"string","enum":["worldwide","territorial","remittance","no_personal_income_tax","special_regime_dependent","unknown_or_conservative"],"title":"Residence Tax Model"},"fallback_posture":{"type":"string","enum":["standard_both_ftc","conservative_both_ftc","domestic_policy_primary","conservative_assumption_only"],"title":"Fallback Posture"},"summary":{"type":"string","title":"Summary"},"source_citation":{"type":"string","title":"Source Citation"},"last_verified":{"type":"string","title":"Last Verified"}},"type":"object","required":["country","treaty_status","residence_tax_model","fallback_posture","summary","source_citation","last_verified"],"title":"DualTaxFallbackMetadataResponse","description":"Classification metadata for the dual-tax overlay's fallback posture\non a US-citizen residency pair. ``treaty_status`` reflects whether the\nsimulator's treaty matrix has an entry for the pair, ``residence_tax_model``\nreflects the residency country's domestic tax model, and\n``fallback_posture`` summarizes the simulator's simulation methodology\ngiven those facts."},"EmailAuthEnabledResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"EmailAuthEnabledResponse"},"EmailPasswordLoginRequest":{"properties":{"email":{"type":"string","maxLength":320,"title":"Email"},"password":{"type":"string","maxLength":72,"minLength":1,"title":"Password"},"terms_accepted":{"type":"boolean","title":"Terms Accepted","default":false},"marketing_email_opt_in":{"type":"boolean","title":"Marketing Email Opt In","default":false}},"type":"object","required":["email","password"],"title":"EmailPasswordLoginRequest"},"EmailPreferenceTopicResponse":{"properties":{"topic":{"type":"string","title":"Topic"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description"},"email_supported":{"type":"boolean","title":"Email Supported","default":true},"opted_in":{"type":"boolean","title":"Opted In"},"can_change":{"type":"boolean","title":"Can Change"},"last_updated_at":{"type":"string","format":"date-time","title":"Last Updated At"},"push_opted_in":{"type":"boolean","title":"Push Opted In","default":false},"push_can_change":{"type":"boolean","title":"Push Can Change","default":false},"push_last_updated_at":{"type":"string","format":"date-time","title":"Push Last Updated At"}},"type":"object","required":["topic","label","description","opted_in","can_change"],"title":"EmailPreferenceTopicResponse"},"EmailPreferenceUpdateRequest":{"properties":{"opted_in":{"type":"boolean","title":"Opted In"},"source":{"type":"string","maxLength":80,"title":"Source","default":"account_settings"}},"type":"object","required":["opted_in"],"title":"EmailPreferenceUpdateRequest"},"EmailPreferenceUpdateResponse":{"properties":{"topic":{"type":"string","title":"Topic"},"opted_in":{"type":"boolean","title":"Opted In"},"last_updated_at":{"type":"string","format":"date-time","title":"Last Updated At"}},"type":"object","required":["topic","opted_in","last_updated_at"],"title":"EmailPreferenceUpdateResponse"},"EmailPreferencesResponse":{"properties":{"email":{"type":"string","title":"Email"},"email_present":{"type":"boolean","title":"Email Present"},"service_email_note":{"type":"string","title":"Service Email Note"},"no_email_note":{"type":"string","title":"No Email Note"},"preferences":{"items":{"$ref":"#/components/schemas/EmailPreferenceTopicResponse"},"type":"array","title":"Preferences"}},"type":"object","required":["email_present","service_email_note","no_email_note","preferences"],"title":"EmailPreferencesResponse"},"EmailSendCodeRequest":{"properties":{"email":{"type":"string","title":"Email"},"purpose":{"type":"string","enum":["auth"],"title":"Purpose","default":"auth"}},"type":"object","required":["email"],"title":"EmailSendCodeRequest"},"EmailVerifyAndLoginRequest":{"properties":{"email":{"type":"string","title":"Email"},"code":{"type":"string","title":"Code"},"terms_accepted":{"type":"boolean","title":"Terms Accepted","default":false},"marketing_email_opt_in":{"type":"boolean","title":"Marketing Email Opt In","default":false}},"type":"object","required":["email","code"],"title":"EmailVerifyAndLoginRequest"},"EngagementHistogramBucket":{"properties":{"bucket":{"type":"string","title":"Bucket"},"user_count":{"type":"integer","title":"User Count"}},"type":"object","required":["bucket","user_count"],"title":"EngagementHistogramBucket"},"EngagementMetrics":{"properties":{"runs_per_user_7d":{"items":{"$ref":"#/components/schemas/UserEngagement"},"type":"array","title":"Runs Per User 7D"},"configs_per_user":{"items":{"$ref":"#/components/schemas/UserConfigCount"},"type":"array","title":"Configs Per User"},"runs_histogram":{"items":{"$ref":"#/components/schemas/EngagementHistogramBucket"},"type":"array","title":"Runs Histogram"},"configs_histogram":{"items":{"$ref":"#/components/schemas/EngagementHistogramBucket"},"type":"array","title":"Configs Histogram"},"avg_runs_per_active_user_7d":{"type":"number","title":"Avg Runs Per Active User 7D"},"repeat_run_rate_7d":{"type":"number","title":"Repeat Run Rate 7D"},"edit_rerun_rate_7d":{"type":"number","title":"Edit Rerun Rate 7D"}},"type":"object","required":["runs_per_user_7d","configs_per_user","runs_histogram","configs_histogram","avg_runs_per_active_user_7d","repeat_run_rate_7d","edit_rerun_rate_7d"],"title":"EngagementMetrics"},"ErrorSummary":{"properties":{"error_type":{"type":"string","title":"Error Type"},"count":{"type":"integer","title":"Count"},"last_seen":{"type":"string","title":"Last Seen"},"sample_message":{"type":"string","title":"Sample Message"}},"type":"object","required":["error_type","count"],"title":"ErrorSummary"},"EventRequest":{"properties":{"event_name":{"type":"string","maxLength":100,"title":"Event Name"},"props":{"type":"object","title":"Props"}},"type":"object","required":["event_name"],"title":"EventRequest"},"ExitTaxPreviewProposedRelocation":{"properties":{"year":{"type":"integer","title":"Year"},"to_country":{"type":"string","title":"To Country"},"regime":{"type":"string","title":"Regime"}},"additionalProperties":false,"type":"object","required":["year","to_country"],"title":"ExitTaxPreviewProposedRelocation"},"ExitTaxPreviewRequest":{"properties":{"simulation":{"$ref":"#/components/schemas/SimulationConfigPayload"},"proposed_relocation":{"$ref":"#/components/schemas/ExitTaxPreviewProposedRelocation"}},"additionalProperties":false,"type":"object","required":["simulation","proposed_relocation"],"title":"ExitTaxPreviewRequest"},"ExitTaxPreviewResponse":{"properties":{"applies":{"type":"boolean","title":"Applies"},"amount":{"type":"number","title":"Amount"},"rule_name":{"type":"string","title":"Rule Name"},"from_country":{"type":"string","title":"From Country"},"to_country":{"type":"string","title":"To Country"},"year":{"type":"integer","title":"Year"},"tax_component":{"type":"string","title":"Tax Component"},"caveat":{"type":"string","title":"Caveat"},"basis_available":{"type":"boolean","title":"Basis Available","default":true}},"type":"object","required":["applies","amount","rule_name","from_country","to_country","year","tax_component"],"title":"ExitTaxPreviewResponse"},"ExitTaxRuleListResponse":{"properties":{"rules":{"items":{"$ref":"#/components/schemas/ExitTaxRuleResponse"},"type":"array","title":"Rules"}},"type":"object","required":["rules"],"title":"ExitTaxRuleListResponse"},"ExitTaxRuleResponse":{"properties":{"country":{"type":"string","title":"Country"},"rule_name":{"type":"string","title":"Rule Name"},"summary":{"type":"string","title":"Summary"},"sources":{"items":{"type":"string"},"type":"array","title":"Sources"},"known_simplifications":{"items":{"type":"string"},"type":"array","title":"Known Simplifications"},"caveat":{"type":"string","title":"Caveat"},"applies_in_model":{"type":"boolean","title":"Applies In Model","default":true},"last_verified":{"type":"string","title":"Last Verified","default":""}},"type":"object","required":["country","rule_name","summary","sources"],"title":"ExitTaxRuleResponse"},"ExplorationDepthCohort":{"properties":{"window_days":{"type":"integer","title":"Window Days"},"cohort_start_at":{"type":"string","title":"Cohort Start At"},"cohort_end_at":{"type":"string","title":"Cohort End At"},"users":{"type":"integer","title":"Users"},"complete_window_users":{"type":"integer","title":"Complete Window Users"},"open_window_users":{"type":"integer","title":"Open Window Users"},"journey_stages":{"additionalProperties":{"type":"integer"},"type":"object","title":"Journey Stages"},"exploration_buckets":{"additionalProperties":{"type":"integer"},"type":"object","title":"Exploration Buckets"},"median_time_to_first_result_hours":{"type":"number","title":"Median Time To First Result Hours"},"median_active_first_session_duration_minutes":{"type":"number","title":"Median Active First Session Duration Minutes"},"first_result_users":{"type":"integer","title":"First Result Users"},"meaningful_exploration_users":{"type":"integer","title":"Meaningful Exploration Users"},"meaningful_exploration_rate":{"type":"number","title":"Meaningful Exploration Rate"},"top_depth_drivers":{"items":{"$ref":"#/components/schemas/ExplorationDepthDriver"},"type":"array","title":"Top Depth Drivers"},"segments":{"additionalProperties":{"items":{"$ref":"#/components/schemas/ExplorationDepthSegment"},"type":"array"},"type":"object","title":"Segments"}},"type":"object","required":["window_days","cohort_start_at","cohort_end_at","users","complete_window_users","open_window_users","journey_stages","exploration_buckets","first_result_users","meaningful_exploration_users","meaningful_exploration_rate","top_depth_drivers","segments"],"title":"ExplorationDepthCohort"},"ExplorationDepthDriver":{"properties":{"driver":{"type":"string","title":"Driver"},"users":{"type":"integer","title":"Users"}},"type":"object","required":["driver","users"],"title":"ExplorationDepthDriver"},"ExplorationDepthMetrics":{"properties":{"trailing_7d":{"$ref":"#/components/schemas/ExplorationDepthCohort"},"trailing_30d":{"$ref":"#/components/schemas/ExplorationDepthCohort"}},"type":"object","required":["trailing_7d","trailing_30d"],"title":"ExplorationDepthMetrics"},"ExplorationDepthSegment":{"properties":{"segment":{"type":"string","title":"Segment"},"users":{"type":"integer","title":"Users"},"complete_window_users":{"type":"integer","title":"Complete Window Users"},"open_window_users":{"type":"integer","title":"Open Window Users"},"journey_stages":{"additionalProperties":{"type":"integer"},"type":"object","title":"Journey Stages"},"exploration_buckets":{"additionalProperties":{"type":"integer"},"type":"object","title":"Exploration Buckets"},"first_result_users":{"type":"integer","title":"First Result Users"},"meaningful_exploration_users":{"type":"integer","title":"Meaningful Exploration Users"},"meaningful_exploration_rate":{"type":"number","title":"Meaningful Exploration Rate"}},"type":"object","required":["segment","users","complete_window_users","open_window_users","journey_stages","exploration_buckets","first_result_users","meaningful_exploration_users","meaningful_exploration_rate"],"title":"ExplorationDepthSegment"},"ExplorationSummary":{"properties":{"name":{"type":"string","title":"Name"},"label":{"type":"string","title":"Label"},"auto_label":{"type":"string","title":"Auto Label"},"baseline_id":{"type":"integer","title":"Baseline Id"},"country":{"type":"string","title":"Country"},"initial_year":{"type":"integer","title":"Initial Year"},"avg_return":{"type":"number","title":"Avg Return"},"volatility":{"type":"number","title":"Volatility"},"initial_net_worth":{"type":"number","title":"Initial Net Worth"},"baseline_annual_expenses":{"type":"number","title":"Baseline Annual Expenses"},"retirement_year":{"type":"integer","title":"Retirement Year"},"age":{"type":"integer","title":"Age"},"portfolio_preset":{"type":"string","title":"Portfolio Preset"},"has_custom_portfolio":{"type":"boolean","title":"Has Custom Portfolio","default":false},"last_failure_probability":{"type":"number","title":"Last Failure Probability"},"display_order":{"type":"integer","title":"Display Order"}},"type":"object","required":["name","country","initial_net_worth","baseline_annual_expenses","display_order"],"title":"ExplorationSummary"},"FailedRunStats":{"properties":{"returns":{"$ref":"#/components/schemas/PercentileStatsWithMax"},"ages":{"$ref":"#/components/schemas/PercentileStats"},"failure_years":{"$ref":"#/components/schemas/PercentileStats"},"failure_calendar_years":{"$ref":"#/components/schemas/PercentileStats"},"first_bad_index":{"type":"integer","title":"First Bad Index"}},"type":"object","required":["returns","ages","first_bad_index"],"title":"FailedRunStats"},"FeatureAdoptionEntry":{"properties":{"feature":{"type":"string","title":"Feature"},"anonymous":{"type":"integer","title":"Anonymous","default":0},"free":{"type":"integer","title":"Free","default":0},"pro":{"type":"integer","title":"Pro","default":0},"total":{"type":"integer","title":"Total","default":0}},"type":"object","required":["feature"],"title":"FeatureAdoptionEntry"},"FeatureAdoptionMetrics":{"properties":{"entries_7d":{"items":{"$ref":"#/components/schemas/FeatureAdoptionEntry"},"type":"array","title":"Entries 7D"},"entries_30d":{"items":{"$ref":"#/components/schemas/FeatureAdoptionEntry"},"type":"array","title":"Entries 30D"}},"type":"object","required":["entries_7d","entries_30d"],"title":"FeatureAdoptionMetrics"},"FeatureUsageMetrics":{"properties":{"run_type_breakdown":{"additionalProperties":{"type":"integer"},"type":"object","title":"Run Type Breakdown"},"country_distribution":{"items":{"$ref":"#/components/schemas/CountryCount"},"type":"array","title":"Country Distribution"},"sweep_variable_distribution":{"items":{"$ref":"#/components/schemas/SweepVariableCount"},"type":"array","title":"Sweep Variable Distribution"}},"type":"object","required":["run_type_breakdown","country_distribution","sweep_variable_distribution"],"title":"FeatureUsageMetrics"},"FeedbackEntry":{"properties":{"text":{"type":"string","title":"Text"},"email":{"type":"string","title":"Email"},"page":{"type":"string","title":"Page"},"user_type":{"type":"string","title":"User Type"},"submitted_at":{"type":"string","title":"Submitted At"}},"type":"object","required":["text","user_type","submitted_at"],"title":"FeedbackEntry"},"FeedbackMetrics":{"properties":{"recent_submissions":{"items":{"$ref":"#/components/schemas/FeedbackEntry"},"type":"array","title":"Recent Submissions"}},"type":"object","required":["recent_submissions"],"title":"FeedbackMetrics"},"FeedbackSubmitRequest":{"properties":{"text":{"type":"string","maxLength":2000,"minLength":1,"title":"Text"},"email":{"type":"string","maxLength":200,"title":"Email"},"page":{"type":"string","title":"Page"}},"type":"object","required":["text"],"title":"FeedbackSubmitRequest"},"FeedbackSubmitResponse":{"properties":{"ok":{"type":"boolean","title":"Ok","default":true}},"type":"object","title":"FeedbackSubmitResponse"},"FirstYearTaxSummary":{"properties":{"median_total":{"type":"number","title":"Median Total"},"display_basis":{"type":"string","enum":["median_first_year"],"title":"Display Basis","default":"median_first_year"},"breakdown":{"items":{"$ref":"#/components/schemas/FirstYearTaxSummaryLine"},"type":"array","title":"Breakdown"}},"type":"object","required":["median_total"],"title":"FirstYearTaxSummary"},"FirstYearTaxSummaryLine":{"properties":{"component":{"type":"string","title":"Component"},"label":{"type":"string","title":"Label"},"median_amount":{"type":"number","title":"Median Amount"}},"type":"object","required":["component","label","median_amount"],"title":"FirstYearTaxSummaryLine"},"FranceAssumptionResolution":{"properties":{"context":{"type":"string","enum":["personal_scenario","country_sweep","published_benchmark"],"title":"Context"},"resolver_version":{"type":"string","title":"Resolver Version"},"benchmark_pack_id":{"type":"string","title":"Benchmark Pack Id"},"benchmark_pack_version":{"type":"integer","title":"Benchmark Pack Version"},"primary":{"$ref":"#/components/schemas/FranceVariantReceipt"},"sensitivities":{"items":{"$ref":"#/components/schemas/FranceVariantReceipt"},"type":"array","title":"Sensitivities"}},"type":"object","required":["context","resolver_version","primary"],"title":"FranceAssumptionResolution"},"FranceEffectiveAssumption":{"properties":{"name":{"type":"string","title":"Name"},"value":{"title":"Value"},"provenance":{"type":"string","enum":["user_confirmed","unresolved","modeled_estimate","benchmark_pack","benchmark_sensitivity"],"title":"Provenance"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["name","provenance","reason"],"title":"FranceEffectiveAssumption"},"FranceSensitivityOutcome":{"properties":{"variant":{"type":"string","title":"Variant"},"label":{"type":"string","title":"Label"},"probability_of_success":{"type":"number","title":"Probability Of Success"},"stats":{"$ref":"#/components/schemas/FranceSensitivityStats"},"assumptions":{"$ref":"#/components/schemas/FranceVariantReceipt"}},"type":"object","required":["variant","label"],"title":"FranceSensitivityOutcome"},"FranceSensitivityStats":{"properties":{"probability_of_failure":{"type":"number","title":"Probability Of Failure"},"success_probability":{"type":"number","title":"Success Probability"},"net_worth":{"$ref":"#/components/schemas/PercentileStats"},"ending_portfolio":{"$ref":"#/components/schemas/PercentileStats"},"tax_rates":{"$ref":"#/components/schemas/PercentileStats"}},"type":"object","title":"FranceSensitivityStats","description":"Compact slice of a sensitivity variant's run stats.\n\nThe worker stores the sensitivity's *full* stats blob; only the handful of\naggregate figures the UI renders side by side are re-serialized here so a\nFrance run response does not carry a second copy of every sampled\ntimeline."},"FranceVariantReceipt":{"properties":{"resolver_version":{"type":"string","title":"Resolver Version"},"context":{"type":"string","enum":["personal_scenario","country_sweep","published_benchmark"],"title":"Context"},"variant":{"type":"string","title":"Variant"},"label":{"type":"string","title":"Label"},"benchmark_pack_id":{"type":"string","title":"Benchmark Pack Id"},"benchmark_pack_version":{"type":"integer","title":"Benchmark Pack Version"},"effective_assumptions":{"items":{"$ref":"#/components/schemas/FranceEffectiveAssumption"},"type":"array","title":"Effective Assumptions"},"tax_policy_version":{"type":"string","title":"Tax Policy Version"},"tax_policy_sources":{"items":{"type":"string"},"type":"array","title":"Tax Policy Sources"}},"type":"object","required":["resolver_version","context","variant","label"],"title":"FranceVariantReceipt","description":"One resolved France run variant (primary or sensitivity)."},"GateBreakdownRow":{"properties":{"key":{"type":"string","title":"Key"},"scope":{"type":"string","title":"Scope"},"origin":{"type":"string","title":"Origin"},"impression_users":{"type":"integer","title":"Impression Users"},"intent_users":{"type":"integer","title":"Intent Users"},"blocked_users":{"type":"integer","title":"Blocked Users"},"attempt_users":{"type":"integer","title":"Attempt Users"}},"type":"object","required":["key","scope","impression_users","intent_users","blocked_users","attempt_users"],"title":"GateBreakdownRow","description":"Gate counts for one group of a breakdown dimension.\n\n``scope`` is ``feature`` for the feature dimension; the surface dimension\nuses ``client`` for displayed surfaces and ``server`` for blocked events,\nwhich carry an action (and optional origin) instead of a surface."},"GateBreakdowns":{"properties":{"feature":{"items":{"$ref":"#/components/schemas/GateBreakdownRow"},"type":"array","title":"Feature"},"surface":{"items":{"$ref":"#/components/schemas/GateBreakdownRow"},"type":"array","title":"Surface"}},"type":"object","required":["feature","surface"],"title":"GateBreakdowns"},"GateFunnel":{"properties":{"window_days":{"type":"integer","title":"Window Days"},"window_start_at":{"type":"string","title":"Window Start At"},"window_end_at":{"type":"string","title":"Window End At"},"cohort_users":{"type":"integer","title":"Cohort Users"},"cohort_label":{"type":"string","title":"Cohort Label"},"cohort_description":{"type":"string","title":"Cohort Description"},"stages":{"items":{"$ref":"#/components/schemas/GateFunnelStage"},"type":"array","title":"Stages"}},"type":"object","required":["window_days","window_start_at","window_end_at","cohort_users","cohort_label","cohort_description","stages"],"title":"GateFunnel"},"GateFunnelStage":{"properties":{"stage":{"type":"string","title":"Stage"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description"},"users":{"type":"integer","title":"Users"},"denominator_stage":{"type":"string","title":"Denominator Stage"},"denominator_label":{"type":"string","title":"Denominator Label"},"denominator_users":{"type":"integer","title":"Denominator Users"},"converted_users":{"type":"integer","title":"Converted Users"},"rate":{"type":"number","title":"Rate"}},"type":"object","required":["stage","label","description","users","denominator_label","denominator_users","converted_users","rate"],"title":"GateFunnelStage","description":"One ordered Pro-gate stage with the denominator its rate is taken against.\n\n``users`` is every cohort user who reached the stage; ``converted_users`` is\nthe subset of them who also reached the stage the rate is measured against.\nThe two differ because the stages are not nested — the server can block a\nvisitor who never triggered a client gate — so ``rate`` is always\n``converted_users / denominator_users`` and never exceeds 100%."},"GatedFeature":{"properties":{"feature":{"type":"string","title":"Feature"},"users":{"type":"integer","title":"Users"}},"type":"object","required":["feature","users"],"title":"GatedFeature"},"GlidePathWaypointPayload":{"properties":{"age":{"type":"integer","minimum":0.0,"title":"Age"},"allocation":{"items":{"type":"object"},"type":"array","title":"Allocation"},"item_id":{"type":"string","format":"uuid","title":"Item Id"}},"additionalProperties":false,"type":"object","required":["age","allocation"],"title":"GlidePathWaypointPayload"},"GoogleLoginStateRequest":{"properties":{"terms_accepted":{"type":"boolean","title":"Terms Accepted","default":false},"marketing_email_opt_in":{"type":"boolean","title":"Marketing Email Opt In","default":false},"attribution":{"additionalProperties":{"type":"string"},"type":"object","title":"Attribution"},"auth_flow_id":{"type":"string","title":"Auth Flow Id"},"auth_intent":{"type":"string","title":"Auth Intent"}},"type":"object","title":"GoogleLoginStateRequest"},"GoogleLoginStateResponse":{"properties":{"state":{"type":"string","title":"State"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["state","expires_at"],"title":"GoogleLoginStateResponse"},"GridBounds":{"properties":{"retirement_year":{"items":{"type":"number"},"type":"array","title":"Retirement Year"},"spending":{"items":{"type":"number"},"type":"array","title":"Spending"},"savings":{"items":{"type":"number"},"type":"array","title":"Savings"}},"type":"object","required":["retirement_year","spending","savings"],"title":"GridBounds"},"GridPoint":{"properties":{"retirement_year":{"type":"integer","title":"Retirement Year"},"spending":{"type":"number","title":"Spending"},"savings":{"type":"number","title":"Savings"},"success_rate":{"type":"number","title":"Success Rate"}},"type":"object","required":["retirement_year","spending","savings","success_rate"],"title":"GridPoint"},"GridResult":{"properties":{"grid_points":{"items":{"$ref":"#/components/schemas/GridPoint"},"type":"array","title":"Grid Points"},"bounds":{"$ref":"#/components/schemas/GridBounds"},"base_config_hash":{"type":"string","title":"Base Config Hash"},"computed_at":{"type":"string","title":"Computed At"}},"type":"object","required":["grid_points","bounds","base_config_hash","computed_at"],"title":"GridResult"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthMetrics":{"properties":{"db_connected":{"type":"boolean","title":"Db Connected"},"queue_depth":{"type":"integer","title":"Queue Depth"},"oldest_queued_seconds":{"type":"number","title":"Oldest Queued Seconds"},"stale_running_count":{"type":"integer","title":"Stale Running Count"},"active_workers":{"type":"integer","title":"Active Workers"},"total_workers":{"type":"integer","title":"Total Workers"},"last_completed_at":{"type":"string","title":"Last Completed At"}},"type":"object","required":["db_connected","queue_depth","stale_running_count","active_workers","total_workers"],"title":"HealthMetrics"},"HistoricalWarning":{"properties":{"type":{"type":"string","enum":["historical_data_limited"],"title":"Type"},"message":{"type":"string","title":"Message"},"earliest_start_year":{"type":"integer","title":"Earliest Start Year"},"latest_year":{"type":"integer","title":"Latest Year"},"limiting_asset_class_ids":{"items":{"type":"string"},"type":"array","title":"Limiting Asset Class Ids"},"limiting_asset_labels":{"items":{"type":"string"},"type":"array","title":"Limiting Asset Labels"}},"type":"object","required":["type","message","earliest_start_year","latest_year"],"title":"HistoricalWarning"},"HourlyThroughput":{"properties":{"hour":{"type":"string","title":"Hour"},"completed":{"type":"integer","title":"Completed"},"failed":{"type":"integer","title":"Failed"}},"type":"object","required":["hour","completed","failed"],"title":"HourlyThroughput"},"InheritanceTaxCountryListResponse":{"properties":{"countries":{"items":{"type":"string"},"type":"array","title":"Countries"}},"type":"object","required":["countries"],"title":"InheritanceTaxCountryListResponse"},"InheritanceTaxMetadataResponse":{"properties":{"country":{"type":"string","title":"Country"},"summary":{"type":"string","title":"Summary"},"sources":{"items":{"type":"string"},"type":"array","title":"Sources"},"known_simplifications":{"items":{"type":"string"},"type":"array","title":"Known Simplifications"},"last_verified":{"type":"string","title":"Last Verified","default":""}},"type":"object","required":["country","summary","sources"],"title":"InheritanceTaxMetadataResponse"},"InheritedProInput":{"properties":{"field":{"type":"string","title":"Field"},"feature":{"type":"string","enum":["country_sweep_3plus","custom_portfolio_allocation","custom_return_assumptions","custom_withdrawal_access","export_report","glide_path","historical_simulation","member_daily_run_cap","precision_tax_inputs","rebalancing_options","regime_aware","roth_conversion_explorer","scenario_cap","simulation_resolution","tax_loss_harvesting","what_would_it_take","withdrawal_order","withdrawal_strategy"],"title":"Feature"},"display_value":{"type":"string","title":"Display Value"}},"type":"object","required":["field","feature","display_value"],"title":"InheritedProInput","description":"One Pro assumption a share fork inherited from the shared scenario.\n\nRead-only by construction: the editor needs stable identifiers to find the\ncontrol and the exact baseline value to disclose, and nothing else. The\nshare token, source id, and the exemption state itself stay server-side —\nauthorization is re-derived from the stored config on every write."},"KeepRunRequest":{"properties":{"name":{"type":"string","minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"KeepRunRequest"},"LegacyGateSignal":{"properties":{"event_name":{"type":"string","title":"Event Name"},"label":{"type":"string","title":"Label"},"users":{"type":"integer","title":"Users"},"events":{"type":"integer","title":"Events"},"first_seen_at":{"type":"string","title":"First Seen At"},"last_seen_at":{"type":"string","title":"Last Seen At"},"contract_cutover_at":{"type":"string","title":"Contract Cutover At"},"window_contract_period":{"type":"string","enum":["undeclared","pre_cutover","crosses_cutover","post_cutover"],"title":"Window Contract Period"}},"type":"object","required":["event_name","label","users","events","window_contract_period"],"title":"LegacyGateSignal","description":"Pre-cutover ``pro_gate_hit`` rows, reported as their own series."},"LegacySummary":{"properties":{"heir_country":{"type":"string","title":"Heir Country"},"median_pre_tax":{"type":"number","title":"Median Pre Tax"},"median_tax":{"type":"number","title":"Median Tax"},"median_post_tax":{"type":"number","title":"Median Post Tax"},"average_pre_tax":{"type":"number","title":"Average Pre Tax"},"average_tax":{"type":"number","title":"Average Tax"},"average_post_tax":{"type":"number","title":"Average Post Tax"},"pre_tax":{"$ref":"#/components/schemas/PercentileStats"},"tax":{"$ref":"#/components/schemas/PercentileStats"},"post_tax":{"$ref":"#/components/schemas/PercentileStats"}},"type":"object","title":"LegacySummary"},"LegalAcceptanceRequest":{"properties":{"source":{"type":"string","maxLength":80,"title":"Source","default":"explicit_acceptance"},"metadata":{"type":"object","title":"Metadata"}},"type":"object","title":"LegalAcceptanceRequest"},"LegalAcceptanceResponse":{"properties":{"id":{"type":"integer","title":"Id"},"document_type":{"type":"string","title":"Document Type"},"document_version":{"type":"string","title":"Document Version"},"document_sha256":{"type":"string","title":"Document Sha256"},"document_path":{"type":"string","title":"Document Path"},"source":{"type":"string","title":"Source"},"accepted_at":{"type":"string","format":"date-time","title":"Accepted At"},"accepted_current":{"type":"boolean","title":"Accepted Current"}},"type":"object","required":["id","document_type","document_version","document_sha256","document_path","source","accepted_at","accepted_current"],"title":"LegalAcceptanceResponse"},"McpActiveUserWindows":{"properties":{"last_24h":{"type":"integer","title":"Last 24H"},"last_7d":{"type":"integer","title":"Last 7D"},"last_30d":{"type":"integer","title":"Last 30D"}},"type":"object","required":["last_24h","last_7d","last_30d"],"title":"McpActiveUserWindows","description":"Distinct non-test MCP users in rolling activity windows."},"McpFunnelMetrics":{"properties":{"tool_calls_by_tier":{"additionalProperties":{"type":"integer"},"type":"object","title":"Tool Calls By Tier"},"active_users":{"$ref":"#/components/schemas/McpActiveUserWindows"},"active_users_by_auth":{"additionalProperties":{"$ref":"#/components/schemas/McpActiveUserWindows"},"type":"object","title":"Active Users By Auth"},"share_opens":{"type":"integer","title":"Share Opens"},"signups":{"type":"integer","title":"Signups"},"chatgpt_plugin_growth":{"$ref":"#/components/schemas/ChatGPTPluginGrowthWindows"},"checkout_starts":{"type":"integer","title":"Checkout Starts"},"paid_conversions":{"type":"integer","title":"Paid Conversions"},"measurement_availability":{"type":"string","enum":["available","not_enabled","invalid_configuration"],"title":"Measurement Availability"},"measurement_cutover_at":{"type":"string","title":"Measurement Cutover At"},"surface_windows":{"items":{"$ref":"#/components/schemas/McpSurfaceMetrics"},"type":"array","title":"Surface Windows"},"recipient_windows":{"items":{"$ref":"#/components/schemas/McpRecipientWindow"},"type":"array","title":"Recipient Windows"}},"type":"object","required":["tool_calls_by_tier","active_users","active_users_by_auth","share_opens","signups","chatgpt_plugin_growth","checkout_starts","paid_conversions","measurement_availability","surface_windows","recipient_windows"],"title":"McpFunnelMetrics","description":"MCP-originated funnel counts — see storage.repository.get_mcp_funnel_metrics."},"McpGrantListResponse":{"properties":{"grants":{"items":{"$ref":"#/components/schemas/McpGrantSummary"},"type":"array","title":"Grants"}},"type":"object","required":["grants"],"title":"McpGrantListResponse"},"McpGrantSummary":{"properties":{"id":{"type":"integer","title":"Id"},"client_name":{"type":"string","title":"Client Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"type":"string","format":"date-time","title":"Last Used At"},"is_chatgpt":{"type":"boolean","title":"Is Chatgpt","default":false}},"type":"object","required":["id","client_name","created_at"],"title":"McpGrantSummary","description":"A connected OAuth app. Deliberately carries no token material — the\ngrant id is an opaque handle the dashboard uses to revoke."},"McpRecipientWindow":{"properties":{"window":{"type":"string","enum":["last_24h","last_7d"],"title":"Window"},"share_opens":{"type":"integer","title":"Share Opens"},"cta_landings":{"type":"integer","title":"Cta Landings"},"scenario_starts":{"type":"integer","title":"Scenario Starts"},"signups":{"type":"integer","title":"Signups"},"checkout_starts":{"type":"integer","title":"Checkout Starts"},"paid_conversions":{"type":"integer","title":"Paid Conversions"}},"type":"object","required":["window","share_opens","cta_landings","scenario_starts","signups","checkout_starts","paid_conversions"],"title":"McpRecipientWindow"},"McpSurfaceMetrics":{"properties":{"surface":{"type":"string","enum":["run_result","funnel_attribution","run_export","share_link"],"title":"Surface"},"windows":{"items":{"$ref":"#/components/schemas/McpSurfaceWindow"},"type":"array","title":"Windows"}},"type":"object","required":["surface","windows"],"title":"McpSurfaceMetrics"},"McpSurfaceWindow":{"properties":{"window":{"type":"string","enum":["last_24h","last_7d"],"title":"Window"},"emissions":{"type":"integer","title":"Emissions"},"opens":{"type":"integer","title":"Opens"},"emission_to_open_proxy_ratio":{"type":"number","title":"Emission To Open Proxy Ratio"}},"type":"object","required":["window","emissions","opens"],"title":"McpSurfaceWindow"},"McpUserKeyIssueRequest":{"properties":{"label":{"type":"string","maxLength":200,"minLength":1,"title":"Label"}},"type":"object","required":["label"],"title":"McpUserKeyIssueRequest"},"McpUserKeyIssueResponse":{"properties":{"key":{"$ref":"#/components/schemas/McpUserKeySummary"},"token":{"type":"string","title":"Token"},"client_config_snippet":{"type":"string","title":"Client Config Snippet"}},"type":"object","required":["key","token","client_config_snippet"],"title":"McpUserKeyIssueResponse"},"McpUserKeyListResponse":{"properties":{"keys":{"items":{"$ref":"#/components/schemas/McpUserKeySummary"},"type":"array","title":"Keys"},"active_count":{"type":"integer","title":"Active Count"},"max_active_keys":{"type":"integer","title":"Max Active Keys"}},"type":"object","required":["keys","active_count","max_active_keys"],"title":"McpUserKeyListResponse"},"McpUserKeySummary":{"properties":{"id":{"type":"integer","title":"Id"},"label":{"type":"string","title":"Label"},"masked_token":{"type":"string","title":"Masked Token"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"type":"string","format":"date-time","title":"Last Used At"},"rotated_at":{"type":"string","format":"date-time","title":"Rotated At"},"revoked_at":{"type":"string","format":"date-time","title":"Revoked At"}},"type":"object","required":["id","label","masked_token","created_at"],"title":"McpUserKeySummary"},"MonetizationDepthSlice":{"properties":{"bucket":{"type":"string","title":"Bucket"},"users":{"type":"integer","title":"Users"},"complete_window_users":{"type":"integer","title":"Complete Window Users"},"open_window_users":{"type":"integer","title":"Open Window Users"},"pro_gate_users":{"type":"integer","title":"Pro Gate Users"},"pro_gate_rate":{"type":"number","title":"Pro Gate Rate"},"upgrade_click_users":{"type":"integer","title":"Upgrade Click Users"},"upgrade_click_rate":{"type":"number","title":"Upgrade Click Rate"},"signup_users":{"type":"integer","title":"Signup Users"},"signup_rate":{"type":"number","title":"Signup Rate"}},"type":"object","required":["bucket","users","complete_window_users","open_window_users","pro_gate_users","pro_gate_rate","upgrade_click_users","upgrade_click_rate","signup_users","signup_rate"],"title":"MonetizationDepthSlice"},"MonetizationDepthSliceMetrics":{"properties":{"cohort_window_days":{"type":"integer","title":"Cohort Window Days"},"cohort_start_at":{"type":"string","title":"Cohort Start At"},"cohort_end_at":{"type":"string","title":"Cohort End At"},"slices":{"items":{"$ref":"#/components/schemas/MonetizationDepthSlice"},"type":"array","title":"Slices"}},"type":"object","required":["cohort_window_days","cohort_start_at","cohort_end_at","slices"],"title":"MonetizationDepthSliceMetrics"},"MonetizationMetrics":{"properties":{"gate_funnel":{"$ref":"#/components/schemas/GateFunnel"},"most_seen_features":{"items":{"$ref":"#/components/schemas/GatedFeature"},"type":"array","title":"Most Seen Features"},"most_attempted_features":{"items":{"$ref":"#/components/schemas/GatedFeature"},"type":"array","title":"Most Attempted Features"},"gate_breakdowns":{"$ref":"#/components/schemas/GateBreakdowns"},"legacy_gate_signal":{"$ref":"#/components/schemas/LegacyGateSignal"},"subscriber_health":{"$ref":"#/components/schemas/SubscriberHealth"},"depth_slices":{"$ref":"#/components/schemas/MonetizationDepthSliceMetrics"}},"type":"object","required":["gate_funnel","most_seen_features","most_attempted_features","gate_breakdowns","legacy_gate_signal","subscriber_health"],"title":"MonetizationMetrics"},"NotificationPreferenceUpdateRequest":{"properties":{"push_opted_in":{"type":"boolean","title":"Push Opted In"}},"type":"object","required":["push_opted_in"],"title":"NotificationPreferenceUpdateRequest"},"NotificationPreferenceUpdateResponse":{"properties":{"topic":{"type":"string","title":"Topic"},"push_opted_in":{"type":"boolean","title":"Push Opted In"},"last_updated_at":{"type":"string","format":"date-time","title":"Last Updated At"}},"type":"object","required":["topic","push_opted_in","last_updated_at"],"title":"NotificationPreferenceUpdateResponse"},"OpsStatsResponse":{"properties":{"generated_at":{"type":"string","title":"Generated At"},"health":{"$ref":"#/components/schemas/HealthMetrics"},"pipeline":{"$ref":"#/components/schemas/PipelineMetrics"},"throughput":{"items":{"$ref":"#/components/schemas/HourlyThroughput"},"type":"array","title":"Throughput"},"workers":{"items":{"$ref":"#/components/schemas/WorkerStatus"},"type":"array","title":"Workers"},"errors":{"items":{"$ref":"#/components/schemas/ErrorSummary"},"type":"array","title":"Errors"},"recent_failures":{"items":{"$ref":"#/components/schemas/RecentFailure"},"type":"array","title":"Recent Failures"},"stale_runs":{"items":{"$ref":"#/components/schemas/StaleRun"},"type":"array","title":"Stale Runs"}},"type":"object","required":["generated_at","health","pipeline","throughput","workers","errors","recent_failures","stale_runs"],"title":"OpsStatsResponse"},"OrdinaryBracketCeilingResponse":{"properties":{"rate":{"type":"number","title":"Rate"},"ceiling":{"type":"number","title":"Ceiling"}},"type":"object","required":["rate","ceiling"],"title":"OrdinaryBracketCeilingResponse","description":"Upper edge of an ordinary-income marginal-rate bracket."},"PercentileScenarios":{"properties":{"p10":{"type":"integer","title":"P10"},"p25":{"type":"integer","title":"P25"},"p50":{"type":"integer","title":"P50"},"p75":{"type":"integer","title":"P75"},"p90":{"type":"integer","title":"P90"},"p10_depletion_year_index":{"type":"integer","title":"P10 Depletion Year Index"},"p25_depletion_year_index":{"type":"integer","title":"P25 Depletion Year Index"},"p50_depletion_year_index":{"type":"integer","title":"P50 Depletion Year Index"},"p75_depletion_year_index":{"type":"integer","title":"P75 Depletion Year Index"},"p90_depletion_year_index":{"type":"integer","title":"P90 Depletion Year Index"}},"type":"object","title":"PercentileScenarios","description":"Scenario indices anchored to each percentile across the full run population.\n\nThe year-by-year selector uses these to switch the ledger to the actual\nP10/P25/P50/P75/P90 path, rather than approximating from the capped\n``sampled_timelines`` subset."},"PercentileStats":{"properties":{"average":{"type":"number","title":"Average"},"p10":{"type":"number","title":"P10"},"p50":{"type":"number","title":"P50"},"p90":{"type":"number","title":"P90"}},"type":"object","title":"PercentileStats"},"PercentileStatsWithMax":{"properties":{"average":{"type":"number","title":"Average"},"p10":{"type":"number","title":"P10"},"p50":{"type":"number","title":"P50"},"p90":{"type":"number","title":"P90"},"max":{"type":"number","title":"Max"}},"type":"object","title":"PercentileStatsWithMax"},"PercentileTimeseriesRow":{"properties":{"year":{"type":"integer","title":"Year"},"p10":{"type":"number","title":"P10"},"p25":{"type":"number","title":"P25"},"p50":{"type":"number","title":"P50"},"p75":{"type":"number","title":"P75"},"p90":{"type":"number","title":"P90"}},"type":"object","required":["year","p10","p25","p50","p75","p90"],"title":"PercentileTimeseriesRow","description":"One year's full-population P10/P25/P50/P75/P90 net worth."},"PipelineMetrics":{"properties":{"total_runs":{"type":"integer","title":"Total Runs"},"succeeded":{"type":"integer","title":"Succeeded"},"failed":{"type":"integer","title":"Failed"},"queued":{"type":"integer","title":"Queued"},"running":{"type":"integer","title":"Running"},"reclaims_24h":{"type":"integer","title":"Reclaims 24H"},"avg_runtime_ms":{"type":"number","title":"Avg Runtime Ms"},"p50_runtime_ms":{"type":"number","title":"P50 Runtime Ms"},"p95_runtime_ms":{"type":"number","title":"P95 Runtime Ms"},"queue_wait_p50_ms":{"type":"number","title":"Queue Wait P50 Ms"},"queue_wait_p95_ms":{"type":"number","title":"Queue Wait P95 Ms"},"failure_rate_24h":{"type":"number","title":"Failure Rate 24H"}},"type":"object","required":["total_runs","succeeded","failed","queued","running","reclaims_24h","failure_rate_24h"],"title":"PipelineMetrics"},"PortalResponse":{"properties":{"portal_url":{"type":"string","title":"Portal Url"}},"type":"object","required":["portal_url"],"title":"PortalResponse"},"PortfolioPresetResponse":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description"},"allocations":{"items":{"$ref":"#/components/schemas/AllocationResponse"},"type":"array","title":"Allocations"},"blended_return":{"type":"number","title":"Blended Return"},"blended_volatility":{"type":"number","title":"Blended Volatility"}},"type":"object","required":["id","label","description","allocations","blended_return","blended_volatility"],"title":"PortfolioPresetResponse"},"PropagatedRun":{"properties":{"name":{"type":"string","title":"Name"},"run_id":{"type":"integer","title":"Run Id"}},"type":"object","required":["name","run_id"],"title":"PropagatedRun"},"PumaCsmAssumptionPayload":{"properties":{"eligibility_status":{"type":"string","enum":["unknown","eligible","ineligible"],"title":"Eligibility Status","default":"unknown"}},"additionalProperties":false,"type":"object","title":"PumaCsmAssumptionPayload","description":"France PUMa cotisation subsidiaire maladie (CSM) eligibility assumption.\n\nA scenario-level state, separate from the per-adult\n``puma_household_adults`` entries. ``\"unknown\"`` (the default) must never\nsilently activate CSM liability downstream."},"PumaHouseholdAdultPayload":{"properties":{"household_relationship":{"type":"string","enum":["self","spouse","pacs_partner","other_adult"],"title":"Household Relationship","default":"self"},"income_attribution":{"type":"string","enum":["per_adult","equal_household"],"title":"Income Attribution","default":"per_adult"},"person":{"type":"string","enum":["A","B"],"title":"Person"},"coverage_start_date":{"type":"string","format":"date","title":"Coverage Start Date"},"coverage_end_date":{"type":"string","format":"date","title":"Coverage End Date"},"item_id":{"type":"string","format":"uuid","title":"Item Id"}},"additionalProperties":false,"type":"object","title":"PumaHouseholdAdultPayload","description":"One durable per-adult record for France PUMa/CSM liability facts.\n\n``person`` links this entry back to the existing ``person`` tag (\"A\"/\"B\")\nused on income/account rows so the CSM statutory-formula income inputs\ncan reuse already-modeled professional-income and pension facts instead\nof duplicating them here."},"PushDeviceRegisterRequest":{"properties":{"token":{"type":"string","minLength":1,"title":"Token"},"platform":{"type":"string","enum":["ios","android"],"title":"Platform"},"app_version":{"type":"string","maxLength":80,"title":"App Version"},"device_model":{"type":"string","maxLength":120,"title":"Device Model"}},"type":"object","required":["token","platform"],"title":"PushDeviceRegisterRequest"},"PushDeviceResponse":{"properties":{"id":{"type":"integer","title":"Id"},"platform":{"type":"string","enum":["ios","android"],"title":"Platform"},"app_version":{"type":"string","title":"App Version"},"device_model":{"type":"string","title":"Device Model"},"last_registered_at":{"type":"string","format":"date-time","title":"Last Registered At"}},"type":"object","required":["id","platform","last_registered_at"],"title":"PushDeviceResponse"},"PushSendRequest":{"properties":{"topic":{"type":"string","enum":["plan_revisit","scenario_update"],"title":"Topic"},"deep_link_path":{"type":"string","title":"Deep Link Path","default":"/"},"title":{"type":"string","maxLength":80,"title":"Title"},"body":{"type":"string","maxLength":180,"title":"Body"},"metadata":{"type":"object","title":"Metadata"}},"type":"object","required":["topic"],"title":"PushSendRequest"},"PushSendResponse":{"properties":{"topic":{"type":"string","title":"Topic"},"attempted":{"type":"integer","title":"Attempted"},"sent":{"type":"integer","title":"Sent"},"failed":{"type":"integer","title":"Failed"},"skipped":{"type":"boolean","title":"Skipped","default":false}},"type":"object","required":["topic","attempted","sent","failed"],"title":"PushSendResponse"},"RebalancingTradeSchema":{"properties":{"asset_class_id":{"type":"string","title":"Asset Class Id"},"name":{"type":"string","title":"Name"},"pre_weight":{"type":"number","title":"Pre Weight"},"target_weight":{"type":"number","title":"Target Weight"},"trade_amount":{"type":"number","title":"Trade Amount"}},"type":"object","required":["asset_class_id","name","pre_weight","target_weight","trade_amount"],"title":"RebalancingTradeSchema"},"RecentFailure":{"properties":{"run_id":{"type":"integer","title":"Run Id"},"requested_at":{"type":"string","title":"Requested At"},"config_name":{"type":"string","title":"Config Name"},"error_type":{"type":"string","title":"Error Type"},"error_message":{"type":"string","title":"Error Message"},"request_id":{"type":"string","title":"Request Id"}},"type":"object","required":["run_id"],"title":"RecentFailure"},"RedditResultCommentRequest":{"properties":{"result_comment_id":{"type":"string","title":"Result Comment Id"}},"additionalProperties":false,"type":"object","required":["result_comment_id"],"title":"RedditResultCommentRequest"},"RedditResultCommentResponse":{"properties":{"request_id":{"type":"string","format":"uuid","title":"Request Id"},"result_comment_id":{"type":"string","title":"Result Comment Id"}},"type":"object","required":["request_id","result_comment_id"],"title":"RedditResultCommentResponse"},"RedditSimulationCreateResponse":{"properties":{"request_id":{"type":"string","format":"uuid","title":"Request Id"},"run_id":{"type":"integer","title":"Run Id"},"status":{"type":"string","enum":["queued","running","succeeded","failed"],"title":"Status"},"poll_after_ms":{"type":"integer","title":"Poll After Ms"}},"type":"object","required":["request_id","status","poll_after_ms"],"title":"RedditSimulationCreateResponse"},"RedditSimulationPollResponse":{"properties":{"request_id":{"type":"string","format":"uuid","title":"Request Id"},"run_id":{"type":"integer","title":"Run Id"},"status":{"type":"string","enum":["queued","running","succeeded","failed"],"title":"Status"},"poll_after_ms":{"type":"integer","title":"Poll After Ms"},"summary":{"type":"object","title":"Summary"},"share_url":{"type":"string","title":"Share Url"},"error":{"additionalProperties":{"type":"string"},"type":"object","title":"Error"}},"type":"object","required":["request_id","status"],"title":"RedditSimulationPollResponse"},"RedditSimulationRequest":{"properties":{"subreddit":{"type":"string","title":"Subreddit"},"post_id":{"type":"string","title":"Post Id"},"comment_id":{"type":"string","title":"Comment Id"},"requester_id":{"type":"string","title":"Requester Id"},"simulation":{"$ref":"#/components/schemas/SimulationConfigPayload"},"public_result":{"type":"boolean","title":"Public Result","default":false},"idempotency_key":{"type":"string","maxLength":200,"title":"Idempotency Key"}},"additionalProperties":false,"type":"object","required":["subreddit","post_id","comment_id","requester_id","simulation"],"title":"RedditSimulationRequest"},"Registration":{"properties":{"client_name":{"type":"string","maxLength":200,"minLength":1,"title":"Client Name"},"redirect_uris":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Redirect Uris"},"token_endpoint_auth_method":{"type":"string","title":"Token Endpoint Auth Method","default":"none"}},"type":"object","required":["client_name","redirect_uris"],"title":"Registration"},"RelocationEventPayload":{"properties":{"year":{"type":"integer","title":"Year"},"to_country":{"type":"string","title":"To Country"},"regime":{"type":"string","title":"Regime"},"item_id":{"type":"string","format":"uuid","title":"Item Id"},"sell_primary":{"type":"boolean","title":"Sell Primary","default":false},"buy_primary_value":{"type":"number","minimum":0.0,"title":"Buy Primary Value"},"buy_primary_mortgage":{"type":"number","minimum":0.0,"title":"Buy Primary Mortgage"},"fx_rate":{"type":"number","title":"Fx Rate"},"fx_source_currency":{"type":"string","title":"Fx Source Currency"},"fx_destination_currency":{"type":"string","title":"Fx Destination Currency"},"fx_assumption_source":{"type":"string","enum":["caller_supplied_fixed_rate"],"title":"Fx Assumption Source"}},"additionalProperties":false,"type":"object","required":["year","to_country"],"title":"RelocationEventPayload","description":"Residency change at an absolute calendar year.\n\nHousing fields are captured for the relocation editor's \"Housing\"\nsub-section. They are stored but engine-unused in v1."},"RetentionDepthSlice":{"properties":{"bucket":{"type":"string","title":"Bucket"},"users":{"type":"integer","title":"Users"},"complete_window_users":{"type":"integer","title":"Complete Window Users"},"open_window_users":{"type":"integer","title":"Open Window Users"},"d1_eligible":{"type":"integer","title":"D1 Eligible"},"d1_returned":{"type":"integer","title":"D1 Returned"},"d1_pct":{"type":"number","title":"D1 Pct"},"d7_eligible":{"type":"integer","title":"D7 Eligible"},"d7_returned":{"type":"integer","title":"D7 Returned"},"d7_pct":{"type":"number","title":"D7 Pct"},"converted_users":{"type":"integer","title":"Converted Users","default":0},"conversion_rate":{"type":"number","title":"Conversion Rate","default":0.0},"d1_returned_or_converted_pct":{"type":"number","title":"D1 Returned Or Converted Pct","default":0.0},"d7_returned_or_converted_pct":{"type":"number","title":"D7 Returned Or Converted Pct","default":0.0}},"type":"object","required":["bucket","users","complete_window_users","open_window_users","d1_eligible","d1_returned","d1_pct","d7_eligible","d7_returned","d7_pct"],"title":"RetentionDepthSlice"},"RetentionDepthSliceMetrics":{"properties":{"cohort_window_days":{"type":"integer","title":"Cohort Window Days"},"cohort_start_at":{"type":"string","title":"Cohort Start At"},"cohort_end_at":{"type":"string","title":"Cohort End At"},"slices":{"items":{"$ref":"#/components/schemas/RetentionDepthSlice"},"type":"array","title":"Slices"},"anonymous_slices":{"items":{"$ref":"#/components/schemas/RetentionDepthSlice"},"type":"array","title":"Anonymous Slices"},"anonymous_conversion_rate":{"type":"number","title":"Anonymous Conversion Rate","default":0.0}},"type":"object","required":["cohort_window_days","cohort_start_at","cohort_end_at","slices"],"title":"RetentionDepthSliceMetrics"},"RetentionMetrics":{"properties":{"weekly_cohorts":{"items":{"$ref":"#/components/schemas/WeeklyCohort"},"type":"array","title":"Weekly Cohorts"},"return_rates":{"$ref":"#/components/schemas/ReturnRateMetrics"},"depth_slices":{"$ref":"#/components/schemas/RetentionDepthSliceMetrics"}},"type":"object","required":["weekly_cohorts"],"title":"RetentionMetrics"},"ReturnRateMetrics":{"properties":{"d1_eligible":{"type":"integer","title":"D1 Eligible"},"d1_returned":{"type":"integer","title":"D1 Returned"},"d1_pct":{"type":"number","title":"D1 Pct"},"d7_eligible":{"type":"integer","title":"D7 Eligible"},"d7_returned":{"type":"integer","title":"D7 Returned"},"d7_pct":{"type":"number","title":"D7 Pct"},"d14_eligible":{"type":"integer","title":"D14 Eligible"},"d14_returned":{"type":"integer","title":"D14 Returned"},"d14_pct":{"type":"number","title":"D14 Pct"}},"type":"object","required":["d1_eligible","d1_returned","d1_pct","d7_eligible","d7_returned","d7_pct","d14_eligible","d14_returned","d14_pct"],"title":"ReturnRateMetrics"},"RothConversionExplorerRequest":{"properties":{"config_name":{"type":"string","title":"Config Name"},"simulation":{"$ref":"#/components/schemas/SimulationConfigPayload"},"candidate_requests":{"items":{"$ref":"#/components/schemas/RothExplorerCandidateRequest"},"type":"array","maxItems":3,"minItems":1,"title":"Candidate Requests"}},"type":"object","required":["candidate_requests"],"title":"RothConversionExplorerRequest"},"RothConversionExplorerResponse":{"properties":{"baseline":{"$ref":"#/components/schemas/RothExplorerScenarioResult"},"candidates":{"items":{"$ref":"#/components/schemas/RothExplorerCandidate"},"type":"array","title":"Candidates"},"assumptions":{"items":{"type":"string"},"type":"array","title":"Assumptions"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"}},"type":"object","required":["baseline","candidates"],"title":"RothConversionExplorerResponse"},"RothConversionPayload":{"properties":{"year":{"type":"integer","title":"Year"},"amount":{"type":"number","minimum":0.0,"title":"Amount"},"from_wrapper_id":{"type":"string","title":"From Wrapper Id"},"to_wrapper_id":{"type":"string","title":"To Wrapper Id"},"item_id":{"type":"string","format":"uuid","title":"Item Id"},"derived_from":{"type":"string","title":"Derived From"}},"additionalProperties":false,"type":"object","required":["year","amount","from_wrapper_id","to_wrapper_id"],"title":"RothConversionPayload","description":"Roth conversion event scheduled for a specific calendar year.\n\nMoves ``amount`` (real dollars at sc.initial_year) from a tax-deferred\nwrapper to a tax-free wrapper at the start of ``year``. The wrapper-bucket\nvalidation is enforced at the SimulationConfigPayload root validator so\ncross-field error messages can list the offending wrapper id."},"RothExplorerCandidate":{"properties":{"id":{"type":"string","title":"Id"},"request_id":{"type":"string","title":"Request Id"},"label":{"type":"string","title":"Label"},"strategy":{"type":"string","enum":["stay_below_income_cap","fill_tax_bracket"],"title":"Strategy"},"from_wrapper_id":{"type":"string","title":"From Wrapper Id"},"to_wrapper_id":{"type":"string","title":"To Wrapper Id"},"roth_conversions":{"items":{"$ref":"#/components/schemas/RothConversionPayload"},"type":"array","title":"Roth Conversions"},"total_converted":{"type":"number","title":"Total Converted"},"tax_delta":{"type":"number","title":"Tax Delta"},"ending_balance_delta":{"type":"number","title":"Ending Balance Delta"},"probability_of_success_delta":{"type":"number","title":"Probability Of Success Delta"},"per_year":{"items":{"$ref":"#/components/schemas/RothExplorerYearDetail"},"type":"array","title":"Per Year"}},"type":"object","required":["id","request_id","label","strategy","from_wrapper_id","to_wrapper_id","roth_conversions","total_converted","probability_of_success_delta"],"title":"RothExplorerCandidate"},"RothExplorerCandidateRequest":{"properties":{"request_id":{"type":"string","maxLength":100,"minLength":1,"title":"Request Id"},"label":{"type":"string","maxLength":120,"minLength":1,"title":"Label"},"start_year":{"type":"integer","title":"Start Year"},"end_year":{"type":"integer","title":"End Year"},"annual_conversion_limit":{"type":"number","exclusiveMinimum":0.0,"title":"Annual Conversion Limit"},"from_wrapper_id":{"type":"string","title":"From Wrapper Id"},"to_wrapper_id":{"type":"string","title":"To Wrapper Id"},"strategy":{"type":"string","enum":["stay_below_income_cap","fill_tax_bracket"],"title":"Strategy"},"target_taxable_income_cap":{"type":"number","exclusiveMinimum":0.0,"title":"Target Taxable Income Cap"},"target_bracket_ceiling":{"type":"number","exclusiveMinimum":0.0,"title":"Target Bracket Ceiling"}},"additionalProperties":false,"type":"object","required":["request_id","label","start_year","end_year","annual_conversion_limit","strategy"],"title":"RothExplorerCandidateRequest"},"RothExplorerScenarioResult":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"probability_of_success":{"type":"number","title":"Probability Of Success"},"ending_balance":{"type":"number","title":"Ending Balance"},"total_tax":{"type":"number","title":"Total Tax"},"per_year":{"items":{"$ref":"#/components/schemas/RothExplorerYearDetail"},"type":"array","title":"Per Year"}},"type":"object","required":["id","label","probability_of_success"],"title":"RothExplorerScenarioResult"},"RothExplorerYearDetail":{"properties":{"year":{"type":"integer","title":"Year"},"roth_conversion":{"type":"number","title":"Roth Conversion"},"cumulative_converted":{"type":"number","title":"Cumulative Converted"},"ending_balance_delta":{"type":"number","title":"Ending Balance Delta"},"tax_delta":{"type":"number","title":"Tax Delta"}},"type":"object","required":["year","roth_conversion","cumulative_converted"],"title":"RothExplorerYearDetail"},"RunError":{"properties":{"type":{"type":"string","title":"Type"},"message":{"type":"string","title":"Message"},"details":{"type":"object","title":"Details"}},"type":"object","required":["message"],"title":"RunError"},"RunLimit":{"properties":{"scope":{"type":"string","enum":["anonymous_lifetime","member_daily","unlimited"],"title":"Scope"},"limit":{"type":"integer","title":"Limit"},"used":{"type":"integer","title":"Used"},"remaining":{"type":"integer","title":"Remaining"},"reset_at":{"type":"string","format":"date-time","title":"Reset At"}},"type":"object","required":["scope"],"title":"RunLimit","description":"Structured run-allowance summary returned for every user.\n\n``scope`` selects which allowance applies:\n- ``anonymous_lifetime``: anonymous lifetime sign-in run cap.\n- ``member_daily``: signed-in free member's daily compute allowance.\n- ``unlimited``: Pro/pass users have no compute cap (limit/used/remaining\n  and reset_at are all null).\n\n``reset_at`` is the exact instant the daily window rolls over (member_daily\nonly) so the frontend can render it in the user's local timezone."},"RunListItem":{"properties":{"run_id":{"type":"integer","title":"Run Id"},"status":{"type":"string","enum":["queued","running","succeeded","failed"],"title":"Status"},"run_kind":{"type":"string","title":"Run Kind"},"sweep_variable":{"type":"string","title":"Sweep Variable"},"point_count":{"type":"integer","title":"Point Count"},"requested_at":{"type":"string","format":"date-time","title":"Requested At"},"finished_at":{"type":"string","format":"date-time","title":"Finished At"},"failure_probability":{"type":"number","title":"Failure Probability"},"run_source":{"type":"string","title":"Run Source","default":"web"},"config_id":{"type":"integer","title":"Config Id"},"config_name":{"type":"string","title":"Config Name"},"ephemeral":{"type":"boolean","title":"Ephemeral","default":false},"label":{"type":"string","title":"Label"},"assumptions_version":{"type":"string","title":"Assumptions Version"},"assumptions_version_state":{"type":"string","enum":["declared","legacy_unverified"],"title":"Assumptions Version State","default":"legacy_unverified"}},"type":"object","required":["run_id","status","run_kind","requested_at","label"],"title":"RunListItem"},"RunListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RunListItem"},"type":"array","title":"Items"},"next_before":{"type":"string","title":"Next Before"}},"type":"object","required":["items"],"title":"RunListResponse"},"RunProgress":{"properties":{"current":{"type":"integer","title":"Current"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["current","total"],"title":"RunProgress"},"RunRequest":{"properties":{"config_name":{"type":"string","title":"Config Name"},"simulation":{"$ref":"#/components/schemas/SimulationConfigPayload"},"idempotency_key":{"type":"string","maxLength":200,"title":"Idempotency Key"},"withdrawal_baseline_run_id":{"type":"integer","maximum":999999999999999.0,"exclusiveMinimum":0.0,"title":"Withdrawal Baseline Run Id"},"currency_context":{"type":"object","title":"Currency Context","description":"MCP-owned currency provenance (input_currency, simulation_currency, and FX receipts). Set by the MCP layer; ignored for non-MCP callers."}},"type":"object","title":"RunRequest"},"RunStats":{"properties":{"baseline_withdrawal_rate":{"type":"number","title":"Baseline Withdrawal Rate"},"total_scenarios":{"type":"integer","title":"Total Scenarios"},"probability_of_failure":{"type":"number","title":"Probability Of Failure"},"minimum_ending_balance":{"type":"number","title":"Minimum Ending Balance","default":0.0},"country":{"type":"string","title":"Country"},"success_probability":{"type":"number","title":"Success Probability"},"net_worth":{"$ref":"#/components/schemas/PercentileStats"},"ending_portfolio":{"$ref":"#/components/schemas/PercentileStats"},"depletion":{"$ref":"#/components/schemas/DepletionMetadata"},"returns":{"$ref":"#/components/schemas/PercentileStats"},"withdrawal_rates":{"$ref":"#/components/schemas/PercentileStats"},"tax_rates":{"$ref":"#/components/schemas/PercentileStats"},"tax_components":{"$ref":"#/components/schemas/TaxComponentStats"},"tax_summary":{"$ref":"#/components/schemas/TaxSummary"},"first_year_taxes":{"$ref":"#/components/schemas/FirstYearTaxSummary"},"tax_impact":{"$ref":"#/components/schemas/TaxImpact"},"failed_runs":{"$ref":"#/components/schemas/FailedRunStats"},"legacy":{"$ref":"#/components/schemas/LegacySummary"},"median_legacy_pre_tax":{"type":"number","title":"Median Legacy Pre Tax"},"median_legacy_tax":{"type":"number","title":"Median Legacy Tax"},"median_legacy_post_tax":{"type":"number","title":"Median Legacy Post Tax"},"sampled_timelines":{"items":{"$ref":"#/components/schemas/SampledTimeline"},"type":"array","title":"Sampled Timelines"},"percentile_scenarios":{"$ref":"#/components/schemas/PercentileScenarios"},"percentile_timeseries":{"items":{"$ref":"#/components/schemas/PercentileTimeseriesRow"},"type":"array","title":"Percentile Timeseries"},"per_asset_simulation":{"type":"boolean","title":"Per Asset Simulation","default":false},"rebalancing_mode":{"type":"string","title":"Rebalancing Mode"},"regime_aware":{"type":"boolean","title":"Regime Aware","default":false},"regime_summary":{"type":"object","title":"Regime Summary"},"return_assumption_preset":{"type":"string","title":"Return Assumption Preset"},"total_cohorts":{"type":"integer","title":"Total Cohorts"},"succeeding_cohorts":{"type":"integer","title":"Succeeding Cohorts"},"failing_cohorts":{"type":"integer","title":"Failing Cohorts"},"failing_cohort_years":{"items":{"type":"integer"},"type":"array","title":"Failing Cohort Years"},"worst_cohort":{"$ref":"#/components/schemas/WorstCohortStats"},"france_assumption_resolution":{"$ref":"#/components/schemas/FranceAssumptionResolution"},"france_sensitivity_outcomes":{"items":{"$ref":"#/components/schemas/FranceSensitivityOutcome"},"type":"array","title":"France Sensitivity Outcomes"},"currency_segments":{"items":{"type":"object"},"type":"array","title":"Currency Segments"},"relocation_currency_receipts":{"items":{"type":"object"},"type":"array","title":"Relocation Currency Receipts"},"final_headline_currency":{"type":"string","title":"Final Headline Currency"}},"type":"object","required":["baseline_withdrawal_rate","probability_of_failure","net_worth","returns","withdrawal_rates","tax_rates","failed_runs"],"title":"RunStats"},"RunStatusResponse":{"properties":{"id":{"type":"integer","title":"Id"},"withdrawal_baseline_run_id":{"type":"integer","title":"Withdrawal Baseline Run Id"},"config_id":{"type":"integer","title":"Config Id"},"config_name":{"type":"string","title":"Config Name"},"label":{"type":"string","title":"Label"},"status":{"type":"string","enum":["queued","running","succeeded","failed"],"title":"Status"},"run_kind":{"type":"string","enum":["simulation","sweep","grid","roth_conversion_explorer"],"title":"Run Kind","default":"simulation"},"run_source":{"type":"string","title":"Run Source","default":"web"},"sweep_variable":{"type":"string","enum":["retirement_year","annual_savings","portfolio_preset","baseline_annual_expenses","initial_net_worth","country","claim_age","bond_tilt_pp"],"title":"Sweep Variable"},"sweep_values":{"items":{"type":"string"},"type":"array","title":"Sweep Values"},"col_enabled":{"type":"boolean","title":"Col Enabled"},"col_adjustments":{"additionalProperties":{"type":"number"},"type":"object","title":"Col Adjustments"},"sweep_target_income_id":{"type":"string","title":"Sweep Target Income Id"},"stats":{"$ref":"#/components/schemas/RunStats"},"simulation":{"$ref":"#/components/schemas/SimulationConfigPayload"},"simulation_mode":{"type":"string","enum":["monte_carlo_regime","monte_carlo_iid","historical"],"title":"Simulation Mode"},"cohorts":{"items":{"$ref":"#/components/schemas/CohortResult"},"type":"array","title":"Cohorts"},"cohort_index":{"items":{"$ref":"#/components/schemas/CohortIndexEntry"},"type":"array","title":"Cohort Index"},"warnings":{"items":{"$ref":"#/components/schemas/HistoricalWarning"},"type":"array","title":"Warnings"},"sweep":{"$ref":"#/components/schemas/SweepResponse"},"grid":{"$ref":"#/components/schemas/GridResult"},"roth_explorer":{"$ref":"#/components/schemas/RothConversionExplorerResponse"},"error":{"$ref":"#/components/schemas/RunError"},"runs_remaining":{"type":"integer","title":"Runs Remaining"},"run_limit":{"$ref":"#/components/schemas/RunLimit"},"progress":{"$ref":"#/components/schemas/RunProgress"},"requested_at":{"type":"string","format":"date-time","title":"Requested At"},"compute_provenance":{"$ref":"#/components/schemas/ComputeProvenanceResponse"},"assumptions_version":{"type":"string","title":"Assumptions Version"},"assumptions_version_state":{"type":"string","enum":["declared","legacy_unverified"],"title":"Assumptions Version State","default":"legacy_unverified"},"source_assumptions_version":{"type":"string","title":"Source Assumptions Version"},"source_assumptions_version_state":{"type":"string","enum":["declared","legacy_unverified"],"title":"Source Assumptions Version State"}},"type":"object","required":["id","status"],"title":"RunStatusResponse"},"SampledTimeline":{"properties":{"scenario_index":{"type":"integer","title":"Scenario Index"},"is_failure":{"type":"boolean","title":"Is Failure"},"points":{"items":{"$ref":"#/components/schemas/SampledTimelinePoint"},"type":"array","title":"Points"},"returns":{"items":{"type":"number"},"type":"array","title":"Returns"},"depletion_year_index":{"type":"integer","title":"Depletion Year Index"},"cohort_start_year":{"type":"integer","title":"Cohort Start Year"}},"type":"object","required":["scenario_index","is_failure"],"title":"SampledTimeline"},"SampledTimelinePoint":{"properties":{"year_index":{"type":"integer","title":"Year Index"},"year":{"type":"integer","title":"Year"},"net_worth":{"type":"number","title":"Net Worth"}},"type":"object","required":["year_index","year","net_worth"],"title":"SampledTimelinePoint"},"ScenarioDetailConfigSummary":{"properties":{"horizon":{"type":"integer","title":"Horizon"},"initial_year":{"type":"integer","title":"Initial Year"},"country":{"type":"string","title":"Country"},"currency":{"type":"string","title":"Currency"},"inflation_rate":{"type":"number","title":"Inflation Rate"}},"type":"object","required":["horizon","initial_year","country","currency","inflation_rate"],"title":"ScenarioDetailConfigSummary"},"ScenarioDetailRequest":{"properties":{"scenario_index":{"type":"integer","title":"Scenario Index"}},"type":"object","required":["scenario_index"],"title":"ScenarioDetailRequest"},"ScenarioDetailResponse":{"properties":{"scenario_index":{"type":"integer","title":"Scenario Index"},"is_failure":{"type":"boolean","title":"Is Failure"},"years":{"items":{"$ref":"#/components/schemas/YearDetailSchema"},"type":"array","title":"Years"},"config_summary":{"$ref":"#/components/schemas/ScenarioDetailConfigSummary"},"early_distribution_penalty_disclosure_active":{"type":"boolean","title":"Early Distribution Penalty Disclosure Active","default":false}},"type":"object","required":["scenario_index","is_failure","years","config_summary"],"title":"ScenarioDetailResponse"},"ShareClaimResponse":{"properties":{"config_name":{"type":"string","title":"Config Name"},"label":{"type":"string","title":"Label"},"already_claimed":{"type":"boolean","title":"Already Claimed"}},"type":"object","required":["config_name","label","already_claimed"],"title":"ShareClaimResponse"},"ShareCreateRequest":{"properties":{"config_name":{"type":"string","title":"Config Name"},"run_id":{"type":"integer","title":"Run Id"}},"type":"object","title":"ShareCreateRequest"},"ShareCreateResponse":{"properties":{"token":{"type":"string","title":"Token"},"share_url":{"type":"string","title":"Share Url"},"config_name":{"type":"string","title":"Config Name"},"created_at":{"type":"string","title":"Created At"},"source_run_id":{"type":"integer","title":"Source Run Id"},"assumptions_version":{"type":"string","title":"Assumptions Version"},"assumptions_version_state":{"type":"string","enum":["declared","legacy_unverified"],"title":"Assumptions Version State","default":"legacy_unverified"}},"type":"object","required":["token","share_url","config_name","created_at"],"title":"ShareCreateResponse"},"ShareDataResponse":{"properties":{"token":{"type":"string","title":"Token"},"config_name":{"type":"string","title":"Config Name"},"config_snapshot":{"type":"object","title":"Config Snapshot"},"result_snapshot":{"type":"object","title":"Result Snapshot"},"created_at":{"type":"string","title":"Created At"},"label":{"type":"string","title":"Label"},"notes":{"type":"string","title":"Notes"},"cohort_index":{"items":{"$ref":"#/components/schemas/CohortIndexEntry"},"type":"array","title":"Cohort Index"},"currency_context":{"type":"object","title":"Currency Context"},"compute_provenance":{"$ref":"#/components/schemas/ComputeProvenanceResponse"},"assumptions_version":{"type":"string","title":"Assumptions Version"},"assumptions_version_state":{"type":"string","enum":["declared","legacy_unverified"],"title":"Assumptions Version State","default":"legacy_unverified"}},"type":"object","required":["token","config_name","config_snapshot","result_snapshot","created_at"],"title":"ShareDataResponse"},"ShareForkResponse":{"properties":{"config_name":{"type":"string","title":"Config Name"},"label":{"type":"string","title":"Label"}},"type":"object","required":["config_name","label"],"title":"ShareForkResponse"},"ShareStatusResponse":{"properties":{"shared":{"type":"boolean","title":"Shared"},"token":{"type":"string","title":"Token"},"share_url":{"type":"string","title":"Share Url"},"success_pct":{"type":"integer","title":"Success Pct"}},"type":"object","required":["shared"],"title":"ShareStatusResponse"},"SimulationAccountPayload":{"properties":{"wrapper_id":{"type":"string","title":"Wrapper Id"},"balance":{"type":"number","minimum":0.0,"title":"Balance","description":"Account balance in full local currency units."},"cost_basis":{"type":"number","minimum":0.0,"title":"Cost Basis"},"person":{"type":"string","enum":["A","B"],"title":"Person"},"item_id":{"type":"string","format":"uuid","title":"Item Id"},"cross_border_tax_facts":{"$ref":"#/components/schemas/CrossBorderTaxFactsPayload"},"withdrawal_access":{"$ref":"#/components/schemas/AccountAccessRulePayload"},"securities_holding_eligibility_override":{"type":"string","enum":["eligible","ineligible"],"title":"Securities Holding Eligibility Override"}},"additionalProperties":false,"type":"object","required":["wrapper_id","balance"],"title":"SimulationAccountPayload"},"SimulationConfigPayload":{"properties":{"initial_year":{"type":"integer","title":"Initial Year"},"initial_net_worth":{"type":"number","exclusiveMinimum":0.0,"title":"Initial Net Worth","description":"Starting portfolio value in full local currency units."},"baseline_annual_expenses":{"type":"number","minimum":0.0,"title":"Baseline Annual Expenses","description":"Baseline annual spending in full local currency units."},"additional_expenses":{"items":{"$ref":"#/components/schemas/SimulationExpensePayload"},"type":"array","title":"Additional Expenses"},"additional_income":{"items":{"$ref":"#/components/schemas/SimulationIncomePayload"},"type":"array","title":"Additional Income"},"country":{"type":"string","title":"Country"},"citizenship":{"type":"string","title":"Citizenship","default":""},"avg_return":{"type":"number","title":"Avg Return"},"volatility":{"type":"number","minimum":0.0,"title":"Volatility"},"approximate_yield_rate":{"type":"number","minimum":0.0,"title":"Approximate Yield Rate"},"taxable_balance":{"type":"number","minimum":0.0,"title":"Taxable Balance"},"tax_deferred_balance":{"type":"number","minimum":0.0,"title":"Tax Deferred Balance"},"tax_free_balance":{"type":"number","minimum":0.0,"title":"Tax Free Balance"},"taxable_cost_basis":{"type":"number","minimum":0.0,"title":"Taxable Cost Basis"},"accounts":{"items":{"$ref":"#/components/schemas/SimulationAccountPayload"},"type":"array","title":"Accounts"},"withdrawal_order":{"type":"string","enum":["taxable_first","tax_deferred_first","tax_free_first"],"title":"Withdrawal Order","default":"taxable_first"},"tax_filing_status":{"type":"string","enum":["single","married_filing_jointly","head_of_household"],"title":"Tax Filing Status","default":"single"},"wealth_tax_region":{"type":"string","title":"Wealth Tax Region","default":"default"},"tax_regime":{"type":"string","title":"Tax Regime","default":"default"},"subnational_region":{"type":"string","title":"Subnational Region","default":"default"},"taxable_portfolio_source":{"type":"string","enum":["domestic","foreign"],"title":"Taxable Portfolio Source","default":"domestic"},"tax_regime_years_remaining":{"type":"integer","minimum":0.0,"title":"Tax Regime Years Remaining"},"portfolio_dividend_qualified_pct":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Portfolio Dividend Qualified Pct"},"portfolio_gains_longterm_pct":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Portfolio Gains Longterm Pct"},"primary_residence_value":{"type":"number","minimum":0.0,"title":"Primary Residence Value"},"primary_residence_debt":{"type":"number","minimum":0.0,"title":"Primary Residence Debt"},"non_portfolio_property_value":{"type":"number","minimum":0.0,"title":"Non Portfolio Property Value"},"regime_eligibility_facts":{"type":"object","title":"Regime Eligibility Facts"},"tax_profile_extended":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/ComponentSourceTagPayload"},{"type":"string"}]},"type":"object","title":"Tax Profile Extended"},"medicare_levy_applicable":{"type":"boolean","title":"Medicare Levy Applicable"},"super_characterization":{"type":"string","title":"Super Characterization"},"remittance_basis":{"type":"boolean","title":"Remittance Basis"},"tax_profile_explicit_fields":{"items":{"type":"string"},"type":"array","title":"Tax Profile Explicit Fields"},"horizon":{"type":"integer","minimum":1.0,"title":"Horizon","default":50},"n_scenarios":{"type":"integer","minimum":1.0,"title":"N Scenarios","default":10000},"inflation":{"type":"number","title":"Inflation","default":0.018},"tail_profile":{"type":"string","enum":["none","historical","severe"],"title":"Tail Profile","description":"Shape of each asset's annual returns. 'historical' (default): skew and tail weight fitted to long US histories; 'none': plain log-normal; 'severe': the heaviest stock-market tail the 1871-2024 record cannot rule out. Expected returns and volatilities are unchanged by the choice.","default":"historical"},"market_turbulence":{"type":"string","enum":["calmer","historical","rougher"],"title":"Market Turbulence","description":"How big each year's market ups and downs are. 'historical' (default): US stock volatility over 1871-2024; 'calmer': the calmest 30-year stretch on record (1871-1900); 'rougher': the roughest (1927-1956). Scales every asset's volatility; expected compound returns are unchanged.","default":"historical"},"skewness_start":{"type":"number","title":"Skewness Start","description":"Deprecated and ignored; use tail_profile.","default":-1.0},"skewness_factor":{"type":"number","minimum":0.0,"title":"Skewness Factor","description":"Deprecated and ignored; use tail_profile.","default":1.4},"minimum_ending_balance":{"type":"number","minimum":0.0,"title":"Minimum Ending Balance","default":0.0},"primary_heir_country":{"type":"string","title":"Primary Heir Country"},"retirement_year":{"type":"integer","title":"Retirement Year"},"annual_savings":{"type":"number","minimum":0.0,"title":"Annual Savings"},"age":{"type":"integer","minimum":0.0,"title":"Age"},"plan_to_age":{"type":"integer","minimum":1.0,"title":"Plan To Age"},"person_b_retirement_year":{"type":"integer","title":"Person B Retirement Year"},"person_b_age":{"type":"integer","minimum":0.0,"title":"Person B Age"},"person_b_plan_to_age":{"type":"integer","minimum":1.0,"title":"Person B Plan To Age"},"person_labels":{"items":{"type":"string"},"type":"array","title":"Person Labels"},"portfolio_preset":{"type":"string","title":"Portfolio Preset"},"portfolio_allocation":{"items":{"type":"object"},"type":"array","title":"Portfolio Allocation"},"glide_path":{"items":{"$ref":"#/components/schemas/GlidePathWaypointPayload"},"type":"array","title":"Glide Path"},"rebalancing_mode":{"type":"string","enum":["annual","threshold","none"],"title":"Rebalancing Mode","default":"annual"},"rebalancing_threshold":{"type":"number","title":"Rebalancing Threshold","default":0.05},"regime_aware":{"type":"boolean","title":"Regime Aware","default":false},"simulation_mode":{"type":"string","enum":["monte_carlo_regime","monte_carlo_iid","historical"],"title":"Simulation Mode","default":"monte_carlo_regime"},"withdrawal_strategy":{"type":"string","title":"Withdrawal Strategy","default":"fixed"},"withdrawal_strategy_params":{"type":"object","title":"Withdrawal Strategy Params"},"return_assumption_preset":{"type":"string","title":"Return Assumption Preset","default":"historical"},"return_overrides":{"additionalProperties":{"type":"number"},"type":"object","title":"Return Overrides"},"aca_subsidies_enabled":{"type":"boolean","title":"Aca Subsidies Enabled","default":false},"household_size":{"type":"integer","minimum":1.0,"title":"Household Size"},"aca_state":{"type":"string","title":"Aca State"},"medicare_enabled":{"type":"boolean","title":"Medicare Enabled","default":false},"irmaa_enabled":{"type":"boolean","title":"Irmaa Enabled","default":false},"tax_loss_harvesting_enabled":{"type":"boolean","title":"Tax Loss Harvesting Enabled","default":false},"residency_schedule":{"items":{"type":"object"},"type":"array","title":"Residency Schedule"},"relocation_events":{"items":{"$ref":"#/components/schemas/RelocationEventPayload"},"type":"array","title":"Relocation Events"},"baseline_adjustments":{"items":{"$ref":"#/components/schemas/BaselineAdjustmentPayload"},"type":"array","title":"Baseline Adjustments"},"roth_conversions":{"items":{"$ref":"#/components/schemas/RothConversionPayload"},"type":"array","title":"Roth Conversions"},"article24_relief":{"$ref":"#/components/schemas/Article24ReliefFactsPayload"},"puma_csm":{"$ref":"#/components/schemas/PumaCsmAssumptionPayload"},"puma_household_adults":{"items":{"$ref":"#/components/schemas/PumaHouseholdAdultPayload"},"type":"array","title":"Puma Household Adults"}},"additionalProperties":false,"type":"object","required":["initial_year","initial_net_worth","baseline_annual_expenses","additional_expenses","additional_income","country","avg_return","volatility","approximate_yield_rate","taxable_balance","tax_deferred_balance","tax_free_balance","taxable_cost_basis"],"title":"SimulationConfigPayload","description":"Simulation payload with all money values represented in full currency units."},"SimulationExpensePayload":{"properties":{"description":{"type":"string","title":"Description"},"cost":{"type":"number","title":"Cost","description":"Expense amount in full local currency units."},"begin_year":{"type":"integer","title":"Begin Year","description":"First year the expense applies (inclusive)."},"end_year":{"type":"integer","title":"End Year","description":"Last year the expense applies (inclusive). For a single-year expense, set begin_year == end_year. The API services layer converts to the engine's half-open ``[begin, end)`` interval."},"item_id":{"type":"string","format":"uuid","title":"Item Id"},"seeded_from":{"type":"string","title":"Seeded From","description":"Marker identifying a helper that generated this row (e.g. 'healthcare_defaults'). Absent on user-authored rows."}},"additionalProperties":false,"type":"object","required":["description","cost","begin_year","end_year"],"title":"SimulationExpensePayload"},"SimulationIncomePayload":{"properties":{"description":{"type":"string","title":"Description"},"income":{"type":"number","title":"Income","description":"Income amount in full local currency units."},"begin_year":{"type":"integer","title":"Begin Year","description":"First year the income applies (inclusive)."},"end_year":{"type":"integer","title":"End Year","description":"Last year the income applies (inclusive). For a single-year income, set begin_year == end_year. The API services layer converts to the engine's half-open ``[begin, end)`` interval."},"type":{"type":"string","enum":["employment","social_security","public_pension","private_pension","rental","other","asset_sale"],"title":"Type","default":"other"},"source_country":{"type":"string","title":"Source Country"},"claim_age":{"type":"integer","title":"Claim Age"},"benefit_source":{"type":"string","title":"Benefit Source"},"cost_basis":{"type":"number","minimum":0.0,"title":"Cost Basis"},"person":{"type":"string","enum":["A","B"],"title":"Person"},"item_id":{"type":"string","format":"uuid","title":"Item Id"},"ss_benefit_basis_mode":{"type":"string","enum":["fra_benefit","ssa_estimate_at_age","already_receiving"],"title":"Ss Benefit Basis Mode"},"ss_monthly_benefit_basis":{"type":"number","minimum":0.0,"title":"Ss Monthly Benefit Basis"},"ss_benefit_basis_age":{"type":"integer","maximum":80.0,"minimum":50.0,"title":"Ss Benefit Basis Age"},"ss_fra_age":{"type":"integer","maximum":70.0,"minimum":60.0,"title":"Ss Fra Age"}},"additionalProperties":false,"type":"object","required":["description","income","begin_year","end_year"],"title":"SimulationIncomePayload"},"SimulationsByTierDay":{"properties":{"date":{"type":"string","title":"Date"},"anonymous":{"type":"integer","title":"Anonymous"},"free":{"type":"integer","title":"Free"},"pro":{"type":"integer","title":"Pro"}},"type":"object","required":["date","anonymous","free","pro"],"title":"SimulationsByTierDay"},"StaleRun":{"properties":{"run_id":{"type":"integer","title":"Run Id"},"config_name":{"type":"string","title":"Config Name"},"started_at":{"type":"string","title":"Started At"},"running_seconds":{"type":"integer","title":"Running Seconds"},"worker_id":{"type":"string","title":"Worker Id"},"request_id":{"type":"string","title":"Request Id"},"run_kind":{"type":"string","title":"Run Kind"},"sweep_variable":{"type":"string","title":"Sweep Variable"},"preview":{"type":"boolean","title":"Preview","default":false}},"type":"object","required":["run_id","run_kind"],"title":"StaleRun"},"StoreRestoreItem":{"properties":{"product_id":{"type":"string","title":"Product Id"},"transaction_id":{"type":"string","title":"Transaction Id"},"signed_transaction":{"type":"string","title":"Signed Transaction"},"purchase_token":{"type":"string","title":"Purchase Token"}},"type":"object","title":"StoreRestoreItem"},"StoreRestoreRequest":{"properties":{"platform":{"type":"string","enum":["ios","android"],"title":"Platform"},"transactions":{"items":{"$ref":"#/components/schemas/StoreRestoreItem"},"type":"array","title":"Transactions","default":[]}},"type":"object","required":["platform"],"title":"StoreRestoreRequest"},"StoreRestoreResponse":{"properties":{"restored":{"type":"integer","title":"Restored"},"settled":{"items":{"$ref":"#/components/schemas/StoreSettledTransaction"},"type":"array","title":"Settled","default":[]},"session":{"$ref":"#/components/schemas/AuthSessionResponse"}},"type":"object","required":["restored","session"],"title":"StoreRestoreResponse"},"StoreSettledTransaction":{"properties":{"transaction_id":{"type":"string","title":"Transaction Id"},"purchase_token":{"type":"string","title":"Purchase Token"}},"type":"object","title":"StoreSettledTransaction","description":"Identifies a restored transaction the server actually verified and\nprovisioned, so the client may settle (finish / acknowledge) it. Echoes the\nclient-reported lookup keys back so the caller can match its own native\npurchase objects. Transactions the server skipped are absent — the client\nmust leave those unsettled so the store re-delivers them later."},"StoreVerifyRequest":{"properties":{"platform":{"type":"string","enum":["ios","android"],"title":"Platform"},"product_id":{"type":"string","title":"Product Id"},"transaction_id":{"type":"string","title":"Transaction Id"},"signed_transaction":{"type":"string","title":"Signed Transaction"},"purchase_token":{"type":"string","title":"Purchase Token"}},"type":"object","required":["platform","product_id"],"title":"StoreVerifyRequest","description":"Client-reported purchase to verify server-side. The client values are NOT\ntrusted for the grant — they are only the lookup keys we re-verify against\nthe store's server API."},"SubscriberHealth":{"properties":{"active_subscribers":{"type":"integer","title":"Active Subscribers"},"monthly_subscribers":{"type":"integer","title":"Monthly Subscribers"},"annual_subscribers":{"type":"integer","title":"Annual Subscribers"},"new_subscribers_30d":{"type":"integer","title":"New Subscribers 30D"},"churned_30d":{"type":"integer","title":"Churned 30D"},"mrr":{"type":"number","title":"Mrr"},"arr":{"type":"number","title":"Arr"},"active_passes":{"type":"integer","title":"Active Passes"},"pass_revenue_30d":{"type":"number","title":"Pass Revenue 30D"}},"type":"object","required":["active_subscribers","monthly_subscribers","annual_subscribers","new_subscribers_30d","churned_30d","mrr","arr","active_passes","pass_revenue_30d"],"title":"SubscriberHealth"},"SweepPoint":{"properties":{"variable_value":{"anyOf":[{"type":"number"},{"type":"string"}],"title":"Variable Value"},"label":{"type":"string","title":"Label"},"probability_of_success":{"type":"number","title":"Probability Of Success"},"stats":{"type":"object","title":"Stats"},"simulation_currency":{"type":"string","title":"Simulation Currency"},"currency_conversion":{"type":"object","title":"Currency Conversion"},"applied_assumptions":{"type":"object","title":"Applied Assumptions"},"annual_amount":{"type":"number","title":"Annual Amount"},"france_assumption_resolution":{"$ref":"#/components/schemas/FranceAssumptionResolution"},"sensitivity_outcomes":{"items":{"$ref":"#/components/schemas/FranceSensitivityOutcome"},"type":"array","title":"Sensitivity Outcomes"}},"type":"object","required":["variable_value","label","probability_of_success"],"title":"SweepPoint"},"SweepRequest":{"properties":{"config_name":{"type":"string","title":"Config Name"},"simulation":{"$ref":"#/components/schemas/SimulationConfigPayload"},"sweep_variable":{"type":"string","enum":["retirement_year","annual_savings","portfolio_preset","baseline_annual_expenses","initial_net_worth","country","claim_age","bond_tilt_pp"],"title":"Sweep Variable"},"sweep_values":{"items":{"type":"string"},"type":"array","title":"Sweep Values"},"idempotency_key":{"type":"string","maxLength":200,"title":"Idempotency Key"},"col_enabled":{"type":"boolean","title":"Col Enabled","default":true},"col_adjustments":{"additionalProperties":{"type":"number"},"type":"object","title":"Col Adjustments"},"sweep_target_income_id":{"type":"string","title":"Sweep Target Income Id"},"currency_context":{"type":"object","title":"Currency Context","description":"MCP-owned currency provenance (input_currency, simulation_currency, and FX receipts). Set by the MCP layer; ignored for non-MCP callers."},"fx_rate_table":{"type":"object","title":"Fx Rate Table","description":"MCP-owned frozen exchange-rate snapshot used for country-sweep points. Set by the MCP layer; ignored for non-MCP callers."},"preview":{"type":"boolean","title":"Preview","default":false}},"type":"object","required":["sweep_variable"],"title":"SweepRequest"},"SweepResponse":{"properties":{"sweep_variable":{"type":"string","enum":["retirement_year","annual_savings","portfolio_preset","baseline_annual_expenses","initial_net_worth","country","claim_age","bond_tilt_pp"],"title":"Sweep Variable"},"current_value":{"anyOf":[{"type":"number"},{"type":"string"}],"title":"Current Value"},"points":{"items":{"$ref":"#/components/schemas/SweepPoint"},"type":"array","title":"Points"},"disclaimer":{"type":"string","title":"Disclaimer"}},"type":"object","required":["sweep_variable","points"],"title":"SweepResponse"},"SweepVariableCount":{"properties":{"variable":{"type":"string","title":"Variable"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["variable","count"],"title":"SweepVariableCount"},"TaxComponentStats":{"properties":{"income":{"$ref":"#/components/schemas/PercentileStats"},"investment_income":{"$ref":"#/components/schemas/PercentileStats"},"capital_gains":{"$ref":"#/components/schemas/PercentileStats"},"wealth":{"$ref":"#/components/schemas/PercentileStats"},"total":{"$ref":"#/components/schemas/PercentileStats"},"surcharges":{"$ref":"#/components/schemas/PercentileStats"}},"type":"object","required":["income","investment_income","capital_gains","wealth","total"],"title":"TaxComponentStats"},"TaxImpact":{"properties":{"tax_drag":{"$ref":"#/components/schemas/PercentileStats"},"wealth_impact":{"$ref":"#/components/schemas/PercentileStats"},"safety_impact":{"type":"number","title":"Safety Impact"},"failure_rate_with_tax":{"type":"number","title":"Failure Rate With Tax"},"failure_rate_without_tax":{"type":"number","title":"Failure Rate Without Tax"},"comparison_basis":{"type":"string","title":"Comparison Basis","default":"same_path_no_tax_counterfactual"}},"type":"object","required":["tax_drag","wealth_impact","safety_impact","failure_rate_with_tax","failure_rate_without_tax"],"title":"TaxImpact"},"TaxPolicyMetadataResponse":{"properties":{"country":{"type":"string","title":"Country"},"effective_from":{"type":"string","title":"Effective From"},"sources":{"items":{"type":"string"},"type":"array","title":"Sources"},"known_simplifications":{"items":{"type":"string"},"type":"array","title":"Known Simplifications"},"component_labels":{"additionalProperties":{"type":"string"},"type":"object","title":"Component Labels"},"wrappers_available_count":{"type":"integer","title":"Wrappers Available Count","default":0},"last_verified":{"type":"string","title":"Last Verified","default":""},"treaty_provisions":{"$ref":"#/components/schemas/TreatyProvisionsResponse"},"dual_tax_fallback":{"$ref":"#/components/schemas/DualTaxFallbackMetadataResponse"},"exit_tax_rule":{"$ref":"#/components/schemas/ExitTaxRuleResponse"},"ordinary_bracket_ceilings":{"items":{"$ref":"#/components/schemas/OrdinaryBracketCeilingResponse"},"type":"array","title":"Ordinary Bracket Ceilings"}},"type":"object","required":["country","effective_from","sources","known_simplifications"],"title":"TaxPolicyMetadataResponse"},"TaxSummary":{"properties":{"annual_average_total":{"type":"number","title":"Annual Average Total"},"display_basis":{"type":"string","enum":["average_annual_tax_per_simulated_scenario"],"title":"Display Basis","default":"average_annual_tax_per_simulated_scenario"},"breakdown":{"items":{"$ref":"#/components/schemas/TaxSummaryLine"},"type":"array","title":"Breakdown"}},"type":"object","required":["annual_average_total"],"title":"TaxSummary"},"TaxSummaryLine":{"properties":{"component":{"type":"string","title":"Component"},"label":{"type":"string","title":"Label"},"annual_average_amount":{"type":"number","title":"Annual Average Amount"}},"type":"object","required":["component","label","annual_average_amount"],"title":"TaxSummaryLine"},"TaxWrapperListResponse":{"properties":{"country":{"type":"string","title":"Country"},"wrappers":{"items":{"$ref":"#/components/schemas/TaxWrapperResponse"},"type":"array","title":"Wrappers"},"last_verified":{"type":"string","title":"Last Verified","default":""},"registry_buckets":{"additionalProperties":{"type":"string","enum":["taxable","tax_deferred","tax_free"]},"type":"object","title":"Registry Buckets"}},"type":"object","required":["country","wrappers"],"title":"TaxWrapperListResponse"},"TaxWrapperResponse":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"bucket":{"type":"string","enum":["taxable","tax_deferred","tax_free"],"title":"Bucket"},"notes":{"type":"string","title":"Notes"},"country":{"type":"string","title":"Country"},"caveats":{"items":{"type":"string"},"type":"array","title":"Caveats"}},"type":"object","required":["id","label","bucket","country"],"title":"TaxWrapperResponse"},"TokenExchangeRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"TokenExchangeRequest","description":"Exchange a one-time OAuth handoff code for a bearer token."},"TokenResponse":{"properties":{"auth_token":{"type":"string","title":"Auth Token"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["auth_token","expires_at"],"title":"TokenResponse","description":"Bearer token issued to a mobile (token-mode) client."},"TrackEvent":{"properties":{"event":{"type":"string","maxLength":200,"minLength":1,"title":"Event"},"props":{"type":"object","title":"Props"},"ts":{"type":"string","title":"Ts"}},"type":"object","required":["event"],"title":"TrackEvent"},"TrackEventsRequest":{"properties":{"events":{"items":{"$ref":"#/components/schemas/TrackEvent"},"type":"array","maxItems":50,"minItems":1,"title":"Events"}},"type":"object","required":["events"],"title":"TrackEventsRequest"},"TreatyProvisionsResponse":{"properties":{"citizenship":{"type":"string","title":"Citizenship"},"residency":{"type":"string","title":"Residency"},"social_security_taxable_by":{"type":"string","enum":["citizenship","residency","both","source_state"],"title":"Social Security Taxable By"},"public_pension_taxable_by":{"type":"string","enum":["citizenship","residency","both","source_state"],"title":"Public Pension Taxable By"},"private_pension_taxable_by":{"type":"string","enum":["citizenship","residency","both","source_state"],"title":"Private Pension Taxable By"},"traditional_ira_401k_withdrawal_taxable_by":{"type":"string","enum":["citizenship","residency","both","source_state"],"title":"Traditional Ira 401K Withdrawal Taxable By"},"roth_withdrawal_taxable_by":{"type":"string","enum":["citizenship","residency","both","source_state"],"title":"Roth Withdrawal Taxable By"},"capital_gains_taxable_by":{"type":"string","enum":["citizenship","residency","both","source_state"],"title":"Capital Gains Taxable By"},"source_state_caveats":{"items":{"type":"string"},"type":"array","title":"Source State Caveats"},"source_citation":{"type":"string","title":"Source Citation"},"last_verified":{"type":"string","title":"Last Verified"}},"type":"object","required":["citizenship","residency","social_security_taxable_by","public_pension_taxable_by","private_pension_taxable_by","traditional_ira_401k_withdrawal_taxable_by","roth_withdrawal_taxable_by","capital_gains_taxable_by","source_citation","last_verified"],"title":"TreatyProvisionsResponse"},"UnsubscribeResult":{"properties":{"valid":{"type":"boolean","title":"Valid"},"topic":{"type":"string","title":"Topic"},"confirmation_text":{"type":"string","title":"Confirmation Text"}},"type":"object","required":["valid"],"title":"UnsubscribeResult"},"UserConfigCount":{"properties":{"user_display_name":{"type":"string","title":"User Display Name"},"config_count":{"type":"integer","title":"Config Count"}},"type":"object","required":["user_display_name","config_count"],"title":"UserConfigCount"},"UserEngagement":{"properties":{"user_display_name":{"type":"string","title":"User Display Name"},"run_count":{"type":"integer","title":"Run Count"},"sweep_count":{"type":"integer","title":"Sweep Count"}},"type":"object","required":["user_display_name","run_count","sweep_count"],"title":"UserEngagement"},"UserGeoCount":{"properties":{"country":{"type":"string","title":"Country"},"user_count":{"type":"integer","title":"User Count"}},"type":"object","required":["country","user_count"],"title":"UserGeoCount"},"UserMetrics":{"properties":{"total":{"type":"integer","title":"Total"},"dau":{"type":"integer","title":"Dau"},"wau":{"type":"integer","title":"Wau"},"mau":{"type":"integer","title":"Mau"},"wau_mau_ratio":{"type":"number","title":"Wau Mau Ratio"},"visitors_30d":{"items":{"$ref":"#/components/schemas/DailySignup"},"type":"array","title":"Visitors 30D"},"simulations_30d":{"items":{"$ref":"#/components/schemas/SimulationsByTierDay"},"type":"array","title":"Simulations 30D","default":[]}},"type":"object","required":["total","dau","wau","mau","wau_mau_ratio","visitors_30d"],"title":"UserMetrics"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WeeklyCohort":{"properties":{"cohort_week":{"type":"string","title":"Cohort Week"},"cohort_size":{"type":"integer","title":"Cohort Size"},"retained":{"items":{"type":"integer"},"type":"array","title":"Retained"}},"type":"object","required":["cohort_week","cohort_size","retained"],"title":"WeeklyCohort"},"WhatWouldItTakeRequest":{"properties":{"config_name":{"type":"string","title":"Config Name"},"simulation":{"$ref":"#/components/schemas/SimulationConfigPayload"},"target_probability":{"type":"number","maximum":0.99,"minimum":0.5,"title":"Target Probability","default":0.9}},"type":"object","title":"WhatWouldItTakeRequest"},"WorkerStatus":{"properties":{"worker_id":{"type":"string","title":"Worker Id"},"status":{"type":"string","title":"Status"},"last_seen_at":{"type":"string","title":"Last Seen At"},"process_id":{"type":"integer","title":"Process Id"}},"type":"object","required":["worker_id","status","last_seen_at"],"title":"WorkerStatus"},"WorstCohortStats":{"properties":{"start_year":{"type":"integer","title":"Start Year"},"depletion_year":{"type":"integer","title":"Depletion Year"},"depletion_calendar_year":{"type":"integer","title":"Depletion Calendar Year"}},"type":"object","required":["start_year","depletion_year","depletion_calendar_year"],"title":"WorstCohortStats"},"YearDetailAccountBalances":{"properties":{"taxable":{"type":"number","title":"Taxable"},"tax_deferred":{"type":"number","title":"Tax Deferred"},"tax_free":{"type":"number","title":"Tax Free"}},"type":"object","required":["taxable","tax_deferred","tax_free"],"title":"YearDetailAccountBalances"},"YearDetailAccountSourceLine":{"properties":{"account_label":{"type":"string","title":"Account Label"},"wrapper_id":{"type":"string","title":"Wrapper Id"},"bucket":{"type":"string","title":"Bucket"},"amount":{"type":"number","title":"Amount"},"access_reason":{"type":"string","title":"Access Reason"}},"type":"object","required":["bucket","amount"],"title":"YearDetailAccountSourceLine"},"YearDetailDualTax":{"properties":{"residency_tax":{"type":"number","title":"Residency Tax"},"citizenship_tax":{"type":"number","title":"Citizenship Tax"},"ftc_applied":{"type":"number","title":"Ftc Applied"},"net_tax":{"type":"number","title":"Net Tax"},"residency_income_tax":{"type":"number","title":"Residency Income Tax","default":0.0},"residency_investment_income_tax":{"type":"number","title":"Residency Investment Income Tax","default":0.0},"residency_capital_gains_tax":{"type":"number","title":"Residency Capital Gains Tax","default":0.0},"residency_wealth_tax":{"type":"number","title":"Residency Wealth Tax","default":0.0},"residency_surcharges":{"type":"number","title":"Residency Surcharges","default":0.0},"citizenship_income_tax":{"type":"number","title":"Citizenship Income Tax","default":0.0},"citizenship_investment_income_tax":{"type":"number","title":"Citizenship Investment Income Tax","default":0.0},"citizenship_capital_gains_tax":{"type":"number","title":"Citizenship Capital Gains Tax","default":0.0},"citizenship_wealth_tax":{"type":"number","title":"Citizenship Wealth Tax","default":0.0},"citizenship_surcharges":{"type":"number","title":"Citizenship Surcharges","default":0.0},"gross_french_pfu_by_component":{"additionalProperties":{"type":"number"},"type":"object","title":"Gross French Pfu By Component"},"article24_credit_by_component":{"additionalProperties":{"type":"number"},"type":"object","title":"Article24 Credit By Component"},"net_french_portfolio_tax":{"type":"number","title":"Net French Portfolio Tax","default":0.0},"article24_eligibility_status":{"type":"string","title":"Article24 Eligibility Status","default":"unknown"}},"type":"object","required":["residency_tax","citizenship_tax","ftc_applied","net_tax"],"title":"YearDetailDualTax"},"YearDetailEarlyWithdrawalPenaltyLine":{"properties":{"amount":{"type":"number","title":"Amount"}},"type":"object","required":["amount"],"title":"YearDetailEarlyWithdrawalPenaltyLine","description":"US 10% additional federal tax on pre-59½ tax-deferred distributions.\nSee ``specs/us-early-distribution-penalty.md``."},"YearDetailEnglobamento":{"properties":{"selection":{"type":"string","enum":["auto","always","never"],"title":"Selection"},"applied":{"type":"string","enum":["englobamento","autonomous"],"title":"Applied"},"autonomous_tax":{"type":"number","title":"Autonomous Tax"},"englobamento_tax":{"type":"number","title":"Englobamento Tax"}},"type":"object","required":["selection","applied","autonomous_tax","englobamento_tax"],"title":"YearDetailEnglobamento","description":"Per-year disclosure of Portugal's englobamento decision.\n\n``selection`` is the user's preference (``\"auto\"``, ``\"always\"``, or\n``\"never\"``); ``applied`` is which option the policy actually used —\n``\"englobamento\"`` (progressive aggregation) or ``\"autonomous\"`` (28%\nflat). The two ``*_tax`` fields are the alternatives so the year detail\ncan show what the other choice would have cost."},"YearDetailExitTaxLine":{"properties":{"amount":{"type":"number","title":"Amount"},"description":{"type":"string","title":"Description"}},"type":"object","required":["amount"],"title":"YearDetailExitTaxLine","description":"Exit-tax line for years where a relocation triggers an expatriation /\ndeemed-disposition charge. Populated by the per-country exit-tax engine\n(see ``specs/exit-tax-engine.md``); omitted when no exit tax fires."},"YearDetailExpenseChange":{"properties":{"reason":{"type":"string","title":"Reason"},"prior_amount":{"type":"number","title":"Prior Amount"},"new_amount":{"type":"number","title":"New Amount"}},"type":"object","required":["reason","prior_amount","new_amount"],"title":"YearDetailExpenseChange","description":"Year where the active baseline expense changes (baseline-adjustment\nevent or a relocation expense adjustment fires). Carries the prior and\nnew amounts so the ledger can render a narrative change line."},"YearDetailExpenseItem":{"properties":{"description":{"type":"string","title":"Description"},"amount":{"type":"number","title":"Amount"}},"type":"object","required":["description","amount"],"title":"YearDetailExpenseItem"},"YearDetailIncomeItem":{"properties":{"source":{"type":"string","title":"Source"},"amount":{"type":"number","title":"Amount"}},"type":"object","required":["source","amount"],"title":"YearDetailIncomeItem"},"YearDetailPumaCsm":{"properties":{"eligibility_status":{"type":"string","title":"Eligibility Status"},"amount":{"type":"number","title":"Amount"},"adults":{"items":{"$ref":"#/components/schemas/YearDetailPumaCsmAdult"},"type":"array","title":"Adults"}},"type":"object","required":["eligibility_status","amount"],"title":"YearDetailPumaCsm"},"YearDetailPumaCsmAdult":{"properties":{"person":{"type":"string","title":"Person"},"relationship":{"type":"string","title":"Relationship"},"liable":{"type":"boolean","title":"Liable"},"reason":{"type":"string","title":"Reason"},"assessment_income":{"type":"number","title":"Assessment Income"},"professional_income":{"type":"number","title":"Professional Income"},"coverage_fraction":{"type":"number","title":"Coverage Fraction"},"amount":{"type":"number","title":"Amount"}},"type":"object","required":["relationship","liable","reason","assessment_income","professional_income","coverage_fraction","amount"],"title":"YearDetailPumaCsmAdult"},"YearDetailRmdLine":{"properties":{"amount":{"type":"number","title":"Amount"},"account":{"type":"string","title":"Account"},"age":{"type":"integer","title":"Age"},"account_label":{"type":"string","title":"Account Label"},"wrapper_id":{"type":"string","title":"Wrapper Id"},"bucket":{"type":"string","title":"Bucket"},"access_reason":{"type":"string","title":"Access Reason"}},"type":"object","required":["amount"],"title":"YearDetailRmdLine","description":"Required Minimum Distribution surfaced for the year (US tax-deferred\naccounts past the RMD age). See ``specs/rmd-enforcement.md``."},"YearDetailRothConversion":{"properties":{"amount":{"type":"number","title":"Amount"},"description":{"type":"string","title":"Description"},"account_label":{"type":"string","title":"Account Label"},"wrapper_id":{"type":"string","title":"Wrapper Id"},"bucket":{"type":"string","title":"Bucket"},"access_reason":{"type":"string","title":"Access Reason"}},"type":"object","required":["amount"],"title":"YearDetailRothConversion","description":"Roth conversion line surfaced when a Roth-conversion event fires this\nyear. See ``specs/roth-conversion-event.md``."},"YearDetailSchema":{"properties":{"year":{"type":"integer","title":"Year"},"starting_balance":{"type":"number","title":"Starting Balance"},"starting_balances":{"$ref":"#/components/schemas/YearDetailAccountBalances"},"portfolio_return_rate":{"type":"number","title":"Portfolio Return Rate"},"portfolio_return_amount":{"type":"number","title":"Portfolio Return Amount"},"income":{"items":{"$ref":"#/components/schemas/YearDetailIncomeItem"},"type":"array","title":"Income"},"income_total":{"type":"number","title":"Income Total"},"expenses":{"items":{"$ref":"#/components/schemas/YearDetailExpenseItem"},"type":"array","title":"Expenses"},"expenses_total":{"type":"number","title":"Expenses Total"},"investment_yield":{"type":"number","title":"Investment Yield"},"withdrawals":{"$ref":"#/components/schemas/YearDetailWithdrawals"},"capital_gains_realized":{"type":"number","title":"Capital Gains Realized"},"taxes":{"$ref":"#/components/schemas/YearDetailTaxes"},"surplus_deposited":{"type":"number","title":"Surplus Deposited"},"ending_balance":{"type":"number","title":"Ending Balance"},"ending_balances":{"$ref":"#/components/schemas/YearDetailAccountBalances"},"cumulative_inflation":{"type":"number","title":"Cumulative Inflation"},"asset_returns":{"items":{"$ref":"#/components/schemas/AssetReturnItemSchema"},"type":"array","title":"Asset Returns"},"rebalancing":{"items":{"$ref":"#/components/schemas/RebalancingTradeSchema"},"type":"array","title":"Rebalancing"},"withdrawal_strategy_name":{"type":"string","title":"Withdrawal Strategy Name"},"withdrawal_target":{"type":"number","title":"Withdrawal Target"},"withdrawal_floor":{"type":"number","title":"Withdrawal Floor"},"withdrawal_ceiling":{"type":"number","title":"Withdrawal Ceiling"},"withdrawal_baseline":{"type":"number","title":"Withdrawal Baseline"},"guardrail_hit":{"type":"string","title":"Guardrail Hit"},"regime":{"type":"string","title":"Regime"},"exit_tax":{"$ref":"#/components/schemas/YearDetailExitTaxLine"},"expense_change":{"$ref":"#/components/schemas/YearDetailExpenseChange"},"rmds":{"items":{"$ref":"#/components/schemas/YearDetailRmdLine"},"type":"array","title":"Rmds"},"roth_conversions":{"items":{"$ref":"#/components/schemas/YearDetailRothConversion"},"type":"array","title":"Roth Conversions"},"withdrawal_sources":{"items":{"$ref":"#/components/schemas/YearDetailAccountSourceLine"},"type":"array","title":"Withdrawal Sources"},"early_withdrawal_penalty":{"$ref":"#/components/schemas/YearDetailEarlyWithdrawalPenaltyLine"},"harvested_loss":{"type":"number","title":"Harvested Loss","default":0.0},"puma_csm":{"$ref":"#/components/schemas/YearDetailPumaCsm"}},"type":"object","required":["year","starting_balance","starting_balances","portfolio_return_rate","portfolio_return_amount","income","income_total","expenses","expenses_total","investment_yield","withdrawals","capital_gains_realized","taxes","surplus_deposited","ending_balance","ending_balances","cumulative_inflation"],"title":"YearDetailSchema"},"YearDetailTaxReconciliation":{"properties":{"country":{"type":"string","title":"Country"},"yield_treatment":{"type":"string","title":"Yield Treatment"},"yield_treatment_label":{"type":"string","title":"Yield Treatment Label"},"used_default_assumption":{"type":"boolean","title":"Used Default Assumption"},"lines":{"items":{"$ref":"#/components/schemas/YearDetailTaxReconciliationLine"},"type":"array","title":"Lines"}},"type":"object","required":["country","yield_treatment","yield_treatment_label","used_default_assumption","lines"],"title":"YearDetailTaxReconciliation","description":"Country-specific reconciliation surfaced for Canada (issue #662) so\nthe year detail can show the dividend gross-up, dividend tax credits,\ncapital-gains inclusion, and ordinary interest treatment alongside the\nheadline tax."},"YearDetailTaxReconciliationLine":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"amount":{"type":"number","title":"Amount"}},"type":"object","required":["key","label","amount"],"title":"YearDetailTaxReconciliationLine","description":"One row in a country-specific taxable-income reconciliation."},"YearDetailTaxes":{"properties":{"income":{"type":"number","title":"Income"},"investment_income":{"type":"number","title":"Investment Income"},"capital_gains":{"type":"number","title":"Capital Gains"},"wealth":{"type":"number","title":"Wealth"},"surcharges":{"type":"number","title":"Surcharges"},"total":{"type":"number","title":"Total"},"dual_tax":{"$ref":"#/components/schemas/YearDetailDualTax"},"early_withdrawal_penalty":{"type":"number","title":"Early Withdrawal Penalty","default":0.0},"englobamento":{"$ref":"#/components/schemas/YearDetailEnglobamento"},"reconciliation":{"$ref":"#/components/schemas/YearDetailTaxReconciliation"},"taxable_securities_gross_proceeds":{"type":"number","title":"Taxable Securities Gross Proceeds","default":0.0},"proceeds_based_tax":{"type":"number","title":"Proceeds Based Tax","default":0.0},"applied_simplifications":{"items":{"type":"string"},"type":"array","title":"Applied Simplifications"}},"type":"object","required":["income","investment_income","capital_gains","wealth","surcharges","total"],"title":"YearDetailTaxes"},"YearDetailWithdrawals":{"properties":{"taxable":{"type":"number","title":"Taxable"},"tax_deferred":{"type":"number","title":"Tax Deferred"},"tax_free":{"type":"number","title":"Tax Free"},"total":{"type":"number","title":"Total"},"taxable_principal":{"type":"number","title":"Taxable Principal","default":0.0},"taxable_yield_consumed":{"type":"number","title":"Taxable Yield Consumed","default":0.0}},"type":"object","required":["taxable","tax_deferred","tax_free","total"],"title":"YearDetailWithdrawals"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}