{"openapi":"3.1.0","info":{"title":"Backtesting Arena — Public API","description":"Programmatic access to daily Bitcoin/crypto cycle scoring, on-chain indicators, aggregated strategy/sentiment insights, and on-demand backtests. Three channels:\n\n- **REST** — Bearer-Token-Auth, this spec. Available now.\n- **MCP** — same Bearer-Tokens, ~42 tools at https://tradingstrategies.work/api/mcp. Available now.\n- **x402** — pay-per-call USDC on Base, no account. 13 endpoints under /api/v1/agent/* from $0.01-$0.05. Available now.\n\nTiers: Free / API Pro €9,99/Mo / API Power €29,99/Mo. Live-Subscriptions (signal alerts, cycle changes, etc.) push updates via polling or webhook. Get a Free-tier key at /dashboard/account/api-keys (no credit-card required).","version":"1.0.0","contact":{"name":"Backtesting Arena","url":"https://tradingstrategies.work","email":"info@tradingstrategies.work"},"license":{"name":"See terms","url":"https://tradingstrategies.work/agb"},"x-logo":{"url":"https://tradingstrategies.work/og-image.png"}},"externalDocs":{"description":"Developer landing + curl examples","url":"https://tradingstrategies.work/api"},"servers":[{"url":"https://tradingstrategies.work","description":"Production"}],"tags":[{"name":"Public","description":"Unauthenticated endpoints supporting the public UI. Fair-use rate-limit via server-side caching. No tier-gating."},{"name":"Snapshots","description":"Daily latest values for the 8 cycle / sentiment indicators (Arena Pulse, BTC Cycle, F&G, etc.). [Free tier]"},{"name":"History","description":"Historical time-series for the 5 daily-snapshot indicators. Tier-staggered range cap (30d Free, 365d Pro, 3650d Power)."},{"name":"Bitcoin Charts","description":"21 editorial Bitcoin chart indicators (Mayer, MVRV, NUPL, SOPR, Puell, etc.) with methodology docs."},{"name":"On-Chain Series","description":"BRK (Bitcoin Research Kit) raw on-chain series. Full history from 2009-01-03 — MVRV, Realized Price, SOPR, NUPL, address-supply cohorts, mining metrics."},{"name":"Insights","description":"Aggregated cross-asset / cross-strategy analyses. Top-10 in Free, full matrix in Pro."},{"name":"Strategy Catalog","description":"Static metadata: 23 strategies, asset universes, supported asset classes. Use before triggering backtests."},{"name":"Signals","description":"Live signal status (BUY/SELL/no-signal) for any strategy on any pair on any timeframe. Computed daily by the platform."},{"name":"Backtests","description":"Read your own backtests + shared public ones. Trigger new sync backtests (single + grid + compare). [API Pro tier and up]"},{"name":"Custom Reports","description":"Asynchronous PDF + Excel reports. Quote → Stripe checkout (Web) → poll status → download. [API Pro tier and up]"},{"name":"Live-Subscriptions","description":"Polling + Webhook-Push notifications for state changes (Signal-Alert, Cycle-Band, Pulse-Score, Bullmarket-Stage). [API Pro tier and up — 3 active for Pro, 20 for Power]"},{"name":"Data Quality","description":"Public transparency tooling: drift log between our two on-chain data sources (BRK vs bgeometrics)."},{"name":"Agent (x402)","description":"Pay-per-call USDC endpoints for autonomous AI agents. HTTP 402 + EIP-3009 wallet signature. No account, no API key. 19 endpoints from $0.01 (snapshots) to $0.50 (universe-express), settled on Base via x402v2."},{"name":"Meta","description":"API self-description + per-caller usage stats. /info works without auth; /usage requires Bearer (Free tier)."},{"name":"Macro","description":"Daily Macro Regime snapshot — 18 components in 6 tiers (Liquidity / FCI / Risk Appetite / Crypto / Cycle / Inflation) synthesized into composite + 2D-matrix quadrant. FRED-sourced. [Free tier]"}],"paths":{"/api/arena-pulse/today":{"get":{"summary":"Today's Arena Pulse heat score (public)","description":"Returns a 0-100 multi-component heat score from 8 indicators (Bullmarket gauge, Fear & Greed, MVRV-Z, 200-WMA distance, Mayer Multiple, Altcoin Season, Funding rates, Hash Ribbons). Updated daily 07:55 UTC. **For programmatic access prefer `/api/v1/arena-pulse/today`.**","operationId":"getPublicArenaPulseToday","tags":["Public"],"security":[],"responses":{"200":{"description":"Today's snapshot with full component breakdown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArenaPulseSnapshot"}}}}}}},"/api/btc-cycle":{"get":{"summary":"BTC cycle phase + 10 component indicators (public)","description":"Returns the latest BTC cycle classification with all 10 components. Optional `?days=N` for history.","operationId":"getPublicBtcCycle","tags":["Public"],"security":[],"parameters":[{"name":"days","in":"query","schema":{"type":"integer","minimum":1,"maximum":3650}}],"responses":{"200":{"description":"Latest cycle snapshot."}}}},"/api/fear-greed":{"get":{"summary":"Fear & Greed Index history (public)","description":"Alternative.me F&G with arena-specific cadence cache + recent history.","operationId":"getPublicFearGreed","tags":["Public"],"security":[],"responses":{"200":{"description":"F&G with recent history."}}}},"/api/v1/arena-pulse/today":{"get":{"summary":"Arena Pulse heat score (today)","description":"Daily 0-100 score aggregated from 8 components: Bullmarket-Ampel, F&G, MVRV-Z, 200-WMA distance, Mayer, Altcoin-Season, Funding-Rate, Hash-Ribbons. Includes band classification, color, verdict (DE/EN), 7d+30d delta. [Free tier]","operationId":"getV1ArenaPulseToday","tags":["Snapshots"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Latest snapshot with tier echo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArenaPulseSnapshot"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/btc-cycle/latest":{"get":{"summary":"BTC Cycle snapshot (latest)","description":"Latest BTC-Cycle snapshot with 10-indicator aggregation (MVRV-Z, NUPL, Puell, Pi-Cycle, Funding, Hash-Ribbons, Power-Law, Rainbow, F&G, Mayer). Returns raw + adjusted score (-3..+3 Z-Score), phase classification, signal enum. [Free tier]","operationId":"getV1BtcCycleLatest","tags":["Snapshots"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Latest snapshot with tier echo.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/altcoin-season/latest":{"get":{"summary":"Altcoin Season Indicator (latest)","description":"Daily Altcoin-Season indicator (v7 Native-Filter methodology). BTC-Dominance, Alt-Dominance, 4 Layer-1 signals (USDT.D, USDC.D, BTC-DOM, ETH-DOM), overall color (red/amber/green) + Top-50 CoinGecko snapshot. [Free tier]","operationId":"getV1AltcoinSeasonLatest","tags":["Snapshots"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Latest snapshot with tier echo.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/fear-greed/today":{"get":{"summary":"Fear & Greed Index (today)","description":"Crypto F&G from alternative.me with historical context (recent history, classification, cadence cache). [Free tier]","operationId":"getV1FearGreedToday","tags":["Snapshots"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Latest snapshot with tier echo.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/bullmarket-ampel/latest":{"get":{"summary":"Bullmarket-Ampel state (latest)","description":"Bitcoin Bullmarket-Ampel current state (0-5 active stages). Higher count = more bull-market signals firing. [Free tier]","operationId":"getV1BullmarketAmpelLatest","tags":["Snapshots"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Latest snapshot with tier echo.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/funding-rate/latest":{"get":{"summary":"Funding Rate (latest)","description":"Latest aggregate Binance Perpetual Funding Rate (8h cadence). Returns value, 30d MA, Z-Score. Positive = longs pay shorts. [Free tier]","operationId":"getV1FundingRateLatest","tags":["Snapshots"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Latest snapshot with tier echo.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/hash-ribbons/latest":{"get":{"summary":"Hash Ribbons (latest)","description":"Charles Edwards' Hash Ribbons. 30d + 60d hashrate moving averages; when 30d > 60d after a capitulation, signals miner recovery (bullish). [Free tier]","operationId":"getV1HashRibbonsLatest","tags":["Snapshots"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Latest snapshot with tier echo.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/mayer-multiple/latest":{"get":{"summary":"Mayer Multiple (latest)","description":"Latest Mayer Multiple (BTC ÷ 200-day SMA). Trace Mayer (2014): <0.7 capitulation, 0.7-1.5 neutral, 1.5-2.4 bullish, >2.4 euphoria. [Free tier]","operationId":"getV1MayerMultipleLatest","tags":["Snapshots"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Latest snapshot with tier echo.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/onchain/btc-market-structure/latest":{"get":{"summary":"BTC Market Structure (latest)","description":"Daily Phantomflow adaptation on BTCUSDT 1d (1000 bars). Returns current_trend, fractals + waves counts, last-5 pivot points up/down. [Free tier]","operationId":"getV1BtcMarketStructureLatest","tags":["Snapshots"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Latest snapshot with tier echo.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/arena-pulse/history":{"get":{"summary":"Arena Pulse history","description":"Daily 0-100 heat-score series. Tier-Range: Free 30d, Pro 365d, Power 3650d.","operationId":"getV1ArenaPulseHistory","tags":["History"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"days","in":"query","description":"History-Window in Tagen. Tier-Cap: Free 30d, API Pro 365d, API Power 3650d. Über-Cap wird auf Cap geclampt (kein 400).","schema":{"type":"integer","minimum":1,"default":30}}],"responses":{"200":{"description":"History container with snapshots[] and tier echo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryResponse"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/btc-cycle/history":{"get":{"summary":"BTC Cycle history","description":"Daily 10-indicator-aggregated cycle scores. Tier-Range: Free 30d, Pro 365d, Power 3650d.","operationId":"getV1BtcCycleHistory","tags":["History"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"days","in":"query","description":"History-Window in Tagen. Tier-Cap: Free 30d, API Pro 365d, API Power 3650d. Über-Cap wird auf Cap geclampt (kein 400).","schema":{"type":"integer","minimum":1,"default":30}}],"responses":{"200":{"description":"History container with snapshots[] and tier echo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryResponse"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/altcoin-season/history":{"get":{"summary":"Altcoin Season history","description":"Daily Altcoin-Season indicator + Layer-1 signals. Tier-Range: Free 30d, Pro 365d, Power 3650d.","operationId":"getV1AltcoinSeasonHistory","tags":["History"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"days","in":"query","description":"History-Window in Tagen. Tier-Cap: Free 30d, API Pro 365d, API Power 3650d. Über-Cap wird auf Cap geclampt (kein 400).","schema":{"type":"integer","minimum":1,"default":30}}],"responses":{"200":{"description":"History container with snapshots[] and tier echo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryResponse"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/fear-greed/history":{"get":{"summary":"Fear & Greed history","description":"Daily F&G values + classification. Tier-Range: Free 30d, Pro 365d, Power 3650d.","operationId":"getV1FearGreedHistory","tags":["History"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"days","in":"query","description":"History-Window in Tagen. Tier-Cap: Free 30d, API Pro 365d, API Power 3650d. Über-Cap wird auf Cap geclampt (kein 400).","schema":{"type":"integer","minimum":1,"default":30}}],"responses":{"200":{"description":"History container with snapshots[] and tier echo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryResponse"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/bullmarket-ampel/history":{"get":{"summary":"Bullmarket-Ampel history","description":"Daily active-count time series. Tier-Range: Free 30d, Pro 365d, Power 3650d.","operationId":"getV1BullmarketAmpelHistory","tags":["History"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"days","in":"query","description":"History-Window in Tagen. Tier-Cap: Free 30d, API Pro 365d, API Power 3650d. Über-Cap wird auf Cap geclampt (kein 400).","schema":{"type":"integer","minimum":1,"default":30}}],"responses":{"200":{"description":"History container with snapshots[] and tier echo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryResponse"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/charts":{"get":{"summary":"List Bitcoin chart indicators","description":"Returns the catalog of ~21 editorial chart indicators (Mayer, MVRV, NUPL, SOPR, Puell, Pi-Cycle, Bull-Market-Support, etc.) with slug + name + category. Use the slug for /charts/{slug}/* sub-resources. [Free tier]","operationId":"getV1ChartsList","tags":["Bitcoin Charts"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Chart catalog."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/charts/{slug}/latest":{"get":{"summary":"Get latest chart value + classification","description":"Most-recent value + zone classification (bearish/neutral/bullish per traffic-light convention). [Free tier]","operationId":"getV1ChartLatest","tags":["Bitcoin Charts"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Chart slug from /v1/charts."}],"responses":{"200":{"description":"Latest indicator snapshot."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/charts/{slug}/history":{"get":{"summary":"Get chart historical series","description":"Time-series of the indicator. Tier-staggered range cap. [Free tier]","operationId":"getV1ChartHistory","tags":["Bitcoin Charts"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","description":"History-Window in Tagen. Tier-Cap: Free 30d, API Pro 365d, API Power 3650d. Über-Cap wird auf Cap geclampt (kein 400).","schema":{"type":"integer","minimum":1,"default":30}}],"responses":{"200":{"description":"History series."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/charts/{slug}/methodology":{"get":{"summary":"Get chart methodology document (DE+EN)","description":"~800-word methodology explanation in both DE and EN. Includes formula, signal interpretation, historical performance. [Free tier]","operationId":"getV1ChartMethodology","tags":["Bitcoin Charts"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Methodology in both languages."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/onchain/series":{"get":{"summary":"List available BRK on-chain series","description":"Catalog der 21 BRK-Series (MVRV, NUPL, SOPR, Realized Price, Mayer, Puell, STH/LTH SOPR, Hash-Ribbons, etc.) mit id + label + group. [Free tier]","operationId":"getV1OnchainSeriesList","tags":["On-Chain Series"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Series catalog."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/onchain/series/{id}/latest":{"get":{"summary":"Latest on-chain series value","description":"Most-recent daily value of the BRK series. [Free tier]","operationId":"getV1OnchainSeriesLatest","tags":["On-Chain Series"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Series id from /v1/onchain/series."}],"responses":{"200":{"description":"Latest value with as-of date."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Unknown series id."},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/onchain/series/{id}/history":{"get":{"summary":"On-chain series history","description":"Full daily series from 2009-01-03. Tier-staggered range cap. [Free tier]","operationId":"getV1OnchainSeriesHistory","tags":["On-Chain Series"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","description":"History-Window in Tagen. Tier-Cap: Free 30d, API Pro 365d, API Power 3650d. Über-Cap wird auf Cap geclampt (kein 400).","schema":{"type":"integer","minimum":1,"default":30}}],"responses":{"200":{"description":"Time-series."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Unknown series id."},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/data-quality/drift":{"get":{"summary":"BRK vs bgeometrics drift log","description":"Drift statistics between our two on-chain data sources for 4 pilot metric pairs (realized_price, sth_sopr, lth_sopr, puell_multiple). Public transparency. [API Pro tier]","operationId":"getV1DataQualityDrift","tags":["Data Quality"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"metric_pair","in":"query","schema":{"type":"string","enum":["realized_price","sth_sopr","lth_sopr","puell_multiple"]}},{"name":"days","in":"query","schema":{"type":"integer","minimum":1,"maximum":365,"default":90}},{"name":"include_series","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Summary + optional time-series."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/insights/strategies":{"get":{"summary":"Strategy Insights matrix or detail","description":"Aggregated CAGR/Win-Rate-Matrix über alle Strategies × Asset-Classes × Timeframes. Free → Top-10. Pro+ → vollständige Matrix. Mit `strategy` + `interval` Query-Params: Detail-View (Per-Pair-Breakdown).","operationId":"getV1InsightsStrategies","tags":["Insights"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"asset_type","in":"query","schema":{"type":"string","enum":["crypto","stock","etf","commodities","forex"]}},{"name":"min_runs","in":"query","schema":{"type":"integer","minimum":1,"default":3}},{"name":"ref_strategy","in":"query","schema":{"type":"string"},"description":"Reference for vs-comparison."},{"name":"assets_mode","in":"query","schema":{"type":"string","enum":["common","all"]}},{"name":"strategy","in":"query","schema":{"type":"string"},"description":"For detail view."},{"name":"interval","in":"query","schema":{"type":"string","enum":["1d","1w","1M"]}}],"responses":{"200":{"description":"Matrix or detail."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/insights/strategy-filters":{"get":{"summary":"Strategy Filter Insights (Lift-Analysis)","description":"Lift-Analyse der 4 Entry-Filter (200WMA, Altcoin-Season, ATR-Volatility, Bullmarket-Stage) pro Strategy-Combo: baseline vs filtered CAGR/win-rate/drawdown. [API Pro tier]","operationId":"getV1InsightsStrategyFilters","tags":["Insights"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Lift-table per filter × strategy."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/insights/volatility":{"get":{"summary":"Volatility Phase Insights","description":"CAGR-Breakdown nach Volatility-Phase (Low / Normal / High) pro Asset + Timeframe. Findet Regime-Fit für Strategies. [API Pro tier]","operationId":"getV1InsightsVolatility","tags":["Insights"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"asset_type","in":"query","schema":{"type":"string","enum":["crypto","stock","etf","commodities","forex"]}},{"name":"min_trades","in":"query","schema":{"type":"integer","minimum":1,"default":20}}],"responses":{"200":{"description":"Volatility-Phase-Matrix."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/insights/sentiment":{"get":{"summary":"Sentiment Dashboard","description":"Multi-source Sentiment-Aggregation: F&G, Funding-Rate, Altcoin-Season, Arena-Pulse, optional ticker-level. Konfigurierbares Window. [Free tier]","operationId":"getV1InsightsSentiment","tags":["Insights"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"period","in":"query","schema":{"type":"string","enum":["7d","30d","90d"],"default":"7d"}}],"responses":{"200":{"description":"Sentiment aggregate."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/insights/winners":{"get":{"summary":"Winners List — top backtests","description":"Liste der Top-Backtests (höchste CAGR, beat-B&H). Default 25 results, Pro+ kann limit erhöhen. [Free tier]","operationId":"getV1InsightsWinners","tags":["Insights"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"asset_type","in":"query","schema":{"type":"string","enum":["crypto","stock","etf","commodities","forex"]}},{"name":"strategy","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Top-N backtests."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/strategies":{"get":{"summary":"List available trading strategies","description":"19 Trading-Strategien mit key, label, plan-tier, asset-classes, primary indicators. Use before /backtests/run. Filterable by asset_class + plan. [Free tier]","operationId":"getV1Strategies","tags":["Strategy Catalog"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"asset_class","in":"query","schema":{"type":"string","enum":["crypto","stock","etf","commodities","forex"]}},{"name":"plan","in":"query","schema":{"type":"string","enum":["free","pro","elite"]}},{"name":"lang","in":"query","schema":{"type":"string","enum":["de","en"],"default":"en"}}],"responses":{"200":{"description":"Strategy catalog."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/universes":{"get":{"summary":"List asset universes","description":"Asset-Universen (BTC, top-10 crypto, top-50 crypto, stocks-top-10, ETFs, etc.) — Pair-Sets für /reports/quote + (zukünftig) /backtests/universe. [Free tier]","operationId":"getV1Universes","tags":["Strategy Catalog"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Universe catalog."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/universes/{id}":{"get":{"summary":"Get universe detail (with pair list)","description":"Detail-View eines Universums inkl. der konkreten Pair-Liste. [Free tier]","operationId":"getV1Universe","tags":["Strategy Catalog"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"e.g. top-10-crypto"}],"responses":{"200":{"description":"Universe with pairs[]."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Unknown universe."},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/signals/{strategy}/{pair}/{timeframe}":{"get":{"summary":"Live signal status (BUY/SELL/no-signal)","description":"Computed daily by the platform cron. Returns current effective signal, last calculation date, optional filter/trailing-stop state. [Free tier]","operationId":"getV1Signal","tags":["Signals"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"strategy","in":"path","required":true,"schema":{"type":"string"},"description":"Strategy key (rsi_sma, golden_cross, etc.)."},{"name":"pair","in":"path","required":true,"schema":{"type":"string"},"description":"BTCUSDT, AAPL.US, EURUSD.FOREX, etc."},{"name":"timeframe","in":"path","required":true,"schema":{"type":"string","enum":["1d","1w","1M","2d","3d"]}}],"responses":{"200":{"description":"Signal status."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No matching ampel config."},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/backtests":{"get":{"summary":"List your saved backtests","description":"User-eigene Backtest-Runs aus `backtest_runs` (joined mit configs). Pagination via limit + offset. [API Pro tier]","operationId":"getV1BacktestsList","tags":["Backtests"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"asset_type","in":"query","schema":{"type":"string"}},{"name":"strategy","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Backtest run list."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/backtests/{id}":{"get":{"summary":"Get backtest detail","description":"Detail eines eigenen Backtests inkl. Config + Summary-Metriken. [API Pro tier]","operationId":"getV1Backtest","tags":["Backtests"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Backtest detail."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found."},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/backtests/{id}/trades":{"get":{"summary":"Get backtest trades + equity curve","description":"Trade-by-trade Liste + Equity-Curve-Punkte. [API Pro tier]","operationId":"getV1BacktestTrades","tags":["Backtests"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Trades + equity curve."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/shared/backtests/{id}":{"get":{"summary":"Get public shared backtest","description":"Public-shared Backtest (über Web /share-Flow). Kein Owner-Check, jeder Bearer-Token kann lesen. [Free tier]","operationId":"getV1SharedBacktest","tags":["Backtests"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Shared backtest detail."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found or not shared."},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/backtests/run":{"post":{"summary":"Run a single-asset backtest (sync)","description":"Synchronous backtest run. Persistiert in backtest_runs mit user_id. Per-Endpoint-Quota: Pro 50/d, Power 500/d. Globaler Tier-Rate-Limit zählt zusätzlich. [API Pro tier]","operationId":"postV1BacktestsRun","tags":["Backtests"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["strategy","pair","interval","date_from"],"properties":{"strategy":{"type":"string","description":"Strategy key from /v1/strategies."},"pair":{"type":"string","description":"e.g. BTCUSDT, AAPL.US, EURUSD.FOREX"},"asset_type":{"type":"string","enum":["crypto","stock","etf","commodities","forex"],"default":"crypto"},"interval":{"type":"string","enum":["1d","1w","1M"],"default":"1d"},"date_from":{"type":"string","format":"date","description":"YYYY-MM-DD"},"date_to":{"type":"string","format":"date","description":"YYYY-MM-DD (optional, default = today)"},"capital":{"type":"number","minimum":100,"default":10000},"params":{"type":"object","additionalProperties":true,"description":"Strategy-specific parameters."},"filters":{"type":"object","properties":{"wma200":{"type":"boolean"},"atr_mode":{"type":"string","enum":["off","low","high","expansion"]},"altcoin_season_mode":{"type":"string","enum":["off","aggressive","conservative"]},"bullmarket_stage_mode":{"type":"string","enum":["off","early","confirmed","strict"]},"min_profit_guard_threshold":{"type":["number","null"]}}}}}}}},"responses":{"201":{"description":"Backtest result with summary + persisted run id."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/backtests/compare":{"post":{"summary":"Compare multiple strategies on the same pair","description":"Vergleicht 2-5 Strategien auf gleichem Asset + Zeitraum + Capital. Returns Equity-Curves + Summary-Metriken pro Strategy. [API Pro tier]","operationId":"postV1BacktestsCompare","tags":["Backtests"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["strategies","pair","interval","date_from"],"properties":{"strategies":{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":5},"pair":{"type":"string"},"asset_type":{"type":"string","enum":["crypto","stock","etf","commodities","forex"]},"interval":{"type":"string","enum":["1d","1w","1M"]},"date_from":{"type":"string","format":"date"},"date_to":{"type":"string","format":"date"},"capital":{"type":"number","minimum":100}}}}}},"responses":{"200":{"description":"Comparison result."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/backtests/universe":{"post":{"summary":"Run a backtest across a pair universe (async)","description":"Backtests one strategy on up to 50 pairs at once. Returns immediately with `job_id` + `poll_url`; client polls `/api/v1/jobs/{job_id}` until status='completed'. Use `universe_id` (e.g. 'crypto-top-10') or `pairs[]` (max 50). Background runtime: ~1.5s × n_pairs. Per-day quota: Pro 5/Tag, Power 50/Tag. [API Pro tier]","operationId":"postV1BacktestsUniverse","tags":["Backtests"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["strategy","interval","date_from"],"properties":{"universe_id":{"type":"string","description":"Pre-curated universe id from /v1/universes (e.g. 'crypto-top-10', 'stocks-top-50'). Max 50 pairs."},"pairs":{"type":"array","items":{"type":"string"},"maxItems":50,"description":"Explicit pair list (alternative to universe_id)."},"strategy":{"type":"string","description":"Strategy key from /v1/strategies."},"interval":{"type":"string","enum":["1d","1w","1M"]},"date_from":{"type":"string","format":"date"},"date_to":{"type":"string","format":"date"},"capital":{"type":"number","minimum":100},"params":{"type":"object","additionalProperties":true},"filters":{"type":"object","properties":{"wma200":{"type":"boolean"},"atr_mode":{"type":"string","enum":["off","low","high","expansion"]},"altcoin_season_mode":{"type":"string","enum":["off","aggressive","conservative"]},"bullmarket_stage_mode":{"type":"string","enum":["off","early","confirmed","strict"]},"min_profit_guard_threshold":{"type":["number","null"]}}}}}}}},"responses":{"202":{"description":"Job accepted. Use job_id with /api/v1/jobs/{job_id} to poll."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/jobs/{job_id}":{"get":{"summary":"Get async job status","description":"Polls an async job (e.g. created via POST /backtests/universe). Returns status, progress_pct, pairs_completed, and once completed: the full result. [Free tier]","operationId":"getV1Job","tags":["Backtests"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Job status + (if completed) result."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Job not found (or not owned)."},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/backtests/grid":{"post":{"summary":"Run a Grid-Trading backtest (sync)","description":"KuCoin-konformer Grid-Trading-Backtest. Eigenes Trade-Modell mit per-level coinSize-Allokation. [API Pro tier]","operationId":"postV1BacktestsGrid","tags":["Backtests"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["pair","low_price","high_price","grid_count","capital"],"properties":{"pair":{"type":"string"},"low_price":{"type":"number"},"high_price":{"type":"number"},"grid_count":{"type":"integer","minimum":2,"maximum":200},"capital":{"type":"number","minimum":100},"date_from":{"type":"string","format":"date"},"date_to":{"type":"string","format":"date"},"mode":{"type":"string","enum":["arithmetic","geometric"],"default":"arithmetic"}}}}}},"responses":{"200":{"description":"Grid backtest result with profit-per-grid statistics."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/reports/quote":{"post":{"summary":"Quote a Custom Report","description":"Berechnet n_viable Pairs für Universe + Period, returnt Preis (n × 0,10 €, geclampt 14,99-49,99 €). Pre-Checkout-Validation. [API Pro tier]","operationId":"postV1ReportsQuote","tags":["Custom Reports"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["universe_id","period"],"properties":{"universe_id":{"type":"string","description":"Universe id, e.g. top-50-crypto."},"period":{"type":"string","enum":["1y","2y","4y","8y"]},"interval":{"type":"string","enum":["1d","1w","1M"],"default":"1d"},"discount_code":{"type":["string","null"],"description":"Optional 20%-Retention-Code."}}}}}},"responses":{"200":{"description":"Quote with price, n_viable, viability_filter_summary."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/reports/pair-pool":{"get":{"summary":"List eligible pairs for a universe + period","description":"Returns the post-filter pair list (alive pairs with sufficient listing history). [API Pro tier]","operationId":"getV1ReportsPairPool","tags":["Custom Reports"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"universe_id","in":"query","required":true,"schema":{"type":"string"}},{"name":"period","in":"query","required":true,"schema":{"type":"string","enum":["1y","2y","4y","8y"]}}],"responses":{"200":{"description":"Eligible pair list."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/reports/my-reports":{"get":{"summary":"List your custom reports","description":"Lifecycle: pending_payment → queued → running → generating → success/failed. Returns Job-Liste mit Status + Download-Token. [API Pro tier]","operationId":"getV1ReportsMyReports","tags":["Custom Reports"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Report jobs list."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/reports/jobs/{jobId}":{"get":{"summary":"Get report job status","description":"Polling-Endpoint. Returns current status, progress (slices done / total), download-token wenn fertig. [API Pro tier]","operationId":"getV1ReportJobStatus","tags":["Custom Reports"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Job status."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found."},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/reports/{token}/download":{"get":{"summary":"Download a finished Custom Report","description":"Returns PDF binary or Excel XLSX depending on `?format=`. Token-based, signed URL, 30-day TTL. [API Pro tier]","operationId":"getV1ReportDownload","tags":["Custom Reports"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","schema":{"type":"string","enum":["pdf","xlsx"],"default":"pdf"}}],"responses":{"200":{"description":"PDF or XLSX binary.","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Token unknown or expired."},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/subscriptions":{"get":{"summary":"List active subscriptions","description":"Returns active Live-Subscriptions for the current API key. [API Pro tier]","operationId":"getV1Subscriptions","tags":["Live-Subscriptions"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Active subscriptions.","content":{"application/json":{"schema":{"type":"object","properties":{"subscriptions":{"type":"array","items":{"$ref":"#/components/schemas/LiveSubscription"}},"tier":{"$ref":"#/components/schemas/TierEnum"}}}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/subscriptions/updates":{"get":{"summary":"Fetch pending subscription updates (polling)","description":"Returns all undelivered updates for the API key, then marks them as delivered. Call regularly to consume the polling queue. Idempotent — subsequent calls return remaining undelivered only. [API Pro tier]","operationId":"getV1SubscriptionUpdates","tags":["Live-Subscriptions"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Pending updates.","content":{"application/json":{"schema":{"type":"object","properties":{"updates":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionUpdate"}},"tier":{"$ref":"#/components/schemas/TierEnum"}}}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/subscriptions/{id}":{"delete":{"summary":"Cancel a subscription","description":"Idempotent. Sets active=false; updates stop firing. [API Pro tier]","operationId":"deleteV1Subscription","tags":["Live-Subscriptions"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Cancelled."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Subscription not found."},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/subscriptions/signal-alert":{"post":{"summary":"Subscribe to strategy signal alerts","description":"Fires when an existing Ampel-Config's `last_signal` changes (BUY ↔ SELL). User must first create the Ampel via Web `/dashboard/ampel`, then reference its UUID. [API Pro tier — Pro 3 active, Power 20]","operationId":"postV1SubscriptionsSignalAlert","tags":["Live-Subscriptions"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["ampel_config_id"],"properties":{"ampel_config_id":{"type":"string","format":"uuid","description":"Existing ampel_config UUID from the same user."},"signal_types":{"type":"array","items":{"type":"string","enum":["BUY","SELL"]},"description":"Optional filter."},"delivery_method":{"type":"string","enum":["polling","webhook"],"default":"polling"},"webhook_url":{"type":"string","format":"uri","description":"HTTPS-only. Required when delivery_method=webhook."},"expires_at":{"type":"string","format":"date-time","description":"ISO timestamp; subscription auto-deactivates after."}}}}}},"responses":{"201":{"description":"Subscription created.","content":{"application/json":{"schema":{"type":"object","properties":{"subscription":{"$ref":"#/components/schemas/LiveSubscription"}}}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/subscriptions/cycle-band":{"post":{"summary":"Subscribe to BTC cycle band changes","description":"Fires when the BTC-Cycle band changes (capitulation → risk-off → neutral → constructive → euphoric). Optional `bands` filter restricts to specific targets. [API Pro tier]","operationId":"postV1SubscriptionsCycleBand","tags":["Live-Subscriptions"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"bands":{"type":"array","items":{"type":"string"},"description":"Filter target bands. Default: any change triggers."},"delivery_method":{"type":"string","enum":["polling","webhook"],"default":"polling"},"webhook_url":{"type":"string","format":"uri","description":"HTTPS-only. Required when delivery_method=webhook."},"expires_at":{"type":"string","format":"date-time","description":"ISO timestamp; subscription auto-deactivates after."}}}}}},"responses":{"201":{"description":"Subscription created."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/subscriptions/pulse-score":{"post":{"summary":"Subscribe to Arena-Pulse threshold crossings","description":"Fires when daily 0-100 score crosses `threshold_above` (up) or `threshold_below` (down). At least one threshold required. [API Pro tier]","operationId":"postV1SubscriptionsPulseScore","tags":["Live-Subscriptions"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"threshold_above":{"type":"number","minimum":0,"maximum":100},"threshold_below":{"type":"number","minimum":0,"maximum":100},"delivery_method":{"type":"string","enum":["polling","webhook"],"default":"polling"},"webhook_url":{"type":"string","format":"uri","description":"HTTPS-only. Required when delivery_method=webhook."},"expires_at":{"type":"string","format":"date-time","description":"ISO timestamp; subscription auto-deactivates after."}}}}}},"responses":{"201":{"description":"Subscription created."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/subscriptions/bullmarket-stage":{"post":{"summary":"Subscribe to Bullmarket-Ampel stage changes","description":"Fires when active stage count (0-5) changes. Optional `direction` (up/down/any) + `stages` filter. [API Pro tier]","operationId":"postV1SubscriptionsBullmarketStage","tags":["Live-Subscriptions"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"direction":{"type":"string","enum":["up","down","any"],"default":"any"},"stages":{"type":"array","items":{"type":"integer","minimum":0,"maximum":5}},"delivery_method":{"type":"string","enum":["polling","webhook"],"default":"polling"},"webhook_url":{"type":"string","format":"uri","description":"HTTPS-only. Required when delivery_method=webhook."},"expires_at":{"type":"string","format":"date-time","description":"ISO timestamp; subscription auto-deactivates after."}}}}}},"responses":{"201":{"description":"Subscription created."},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"api_pro"}},"/api/v1/agent/arena-pulse/today":{"get":{"summary":"Arena Pulse heat score (x402, $0.01)","description":"Today's Arena Pulse score (0-100, 8 components, verdict DE/EN).\n\n**Pricing:** $0.01 USDC pay-per-call (x402). No account / no API key.\nCached daily snapshot, refreshed by morning cron.","operationId":"getAgentArenaPulseToday","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.01","amount":"10000","description":"Cached daily snapshot, refreshed by morning cron."}}},"/api/v1/agent/btc-cycle/latest":{"get":{"summary":"BTC Cycle snapshot (x402, $0.01)","description":"Latest BTC-Cycle snapshot (10 indicators, raw/adj/z-score, signal).\n\n**Pricing:** $0.01 USDC pay-per-call (x402). No account / no API key.\nCached daily snapshot, refreshed by morning cron.","operationId":"getAgentBtcCycleLatest","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.01","amount":"10000","description":"Cached daily snapshot, refreshed by morning cron."}}},"/api/v1/agent/altcoin-season/latest":{"get":{"summary":"Altcoin Season Indicator (x402, $0.01)","description":"Daily Altcoin-Season v7 Native-Filter (Alt.D + Top-50 + overall color).\n\n**Pricing:** $0.01 USDC pay-per-call (x402). No account / no API key.\nCached daily snapshot, refreshed by morning cron.","operationId":"getAgentAltcoinSeasonLatest","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.01","amount":"10000","description":"Cached daily snapshot, refreshed by morning cron."}}},"/api/v1/agent/fear-greed/today":{"get":{"summary":"Fear & Greed Index (x402, $0.01)","description":"Today's alternative.me F&G value (server-side proxy, GDPR-safe).\n\n**Pricing:** $0.01 USDC pay-per-call (x402). No account / no API key.\nCached daily snapshot, refreshed by morning cron.","operationId":"getAgentFearGreedToday","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.01","amount":"10000","description":"Cached daily snapshot, refreshed by morning cron."}}},"/api/v1/agent/bullmarket-ampel/latest":{"get":{"summary":"Bullmarket Ampel (x402, $0.01)","description":"Bitcoin Bullmarket-Ampel current state (0-5 active stages).\n\n**Pricing:** $0.01 USDC pay-per-call (x402). No account / no API key.\nCached daily snapshot, refreshed by morning cron.","operationId":"getAgentBullmarketAmpelLatest","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.01","amount":"10000","description":"Cached daily snapshot, refreshed by morning cron."}}},"/api/v1/agent/funding-rate/latest":{"get":{"summary":"BTC Funding Rate (x402, $0.01)","description":"Latest aggregate Binance perpetual funding (value, 30d MA, Z-Score).\n\n**Pricing:** $0.01 USDC pay-per-call (x402). No account / no API key.\nCached daily snapshot, refreshed by morning cron.","operationId":"getAgentFundingRateLatest","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.01","amount":"10000","description":"Cached daily snapshot, refreshed by morning cron."}}},"/api/v1/agent/hash-ribbons/latest":{"get":{"summary":"Hash Ribbons (x402, $0.01)","description":"Charles Edwards' Hash Ribbons miner-recovery state.\n\n**Pricing:** $0.01 USDC pay-per-call (x402). No account / no API key.\nCached daily snapshot, refreshed by morning cron.","operationId":"getAgentHashRibbonsLatest","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.01","amount":"10000","description":"Cached daily snapshot, refreshed by morning cron."}}},"/api/v1/agent/mayer-multiple/latest":{"get":{"summary":"Mayer Multiple (x402, $0.01)","description":"Latest Mayer Multiple (BTC / 200-day SMA).\n\n**Pricing:** $0.01 USDC pay-per-call (x402). No account / no API key.\nCached daily snapshot, refreshed by morning cron.","operationId":"getAgentMayerMultipleLatest","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.01","amount":"10000","description":"Cached daily snapshot, refreshed by morning cron."}}},"/api/v1/agent/macro-regime/today":{"get":{"summary":"Macro Regime Snapshot (x402, $0.01)","description":"Daily Macro Regime snapshot — 18 components, 6 tiers (Liquidity/FCI/Risk Appetite/Crypto/Cycle/Inflation), composite 0-100 + matrix quadrant.\n\n**Pricing:** $0.01 USDC pay-per-call (x402). No account / no API key.\nCached daily snapshot, refreshed by morning cron.","operationId":"getAgentMacroRegimeToday","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.01","amount":"10000","description":"Cached daily snapshot, refreshed by morning cron."}}},"/api/v1/agent/btc-market-structure/today":{"get":{"summary":"BTC Market Structure (x402, $0.01)","description":"Daily Phantomflow adaptation on BTCUSDT 1d. Returns current_trend, fractals + waves counts, last-5 pivot points.\n\n**Pricing:** $0.01 USDC pay-per-call (x402). No account / no API key.\nCached daily snapshot, refreshed by morning cron.","operationId":"getAgentBtcMarketStructureToday","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.01","amount":"10000","description":"Cached daily snapshot, refreshed by morning cron."}}},"/api/v1/agent/insights/strategies":{"get":{"summary":"Strategy Insights matrix (x402, $0.05)","description":"CAGR / win-rate / beats-B&H per strategy × asset, aggregated from all runs (always all-assets view).\n\n**Pricing:** $0.05 USDC pay-per-call (x402). No account / no API key.\nAggregated insights computed from all backtest runs.","operationId":"getAgentInsightsStrategies","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.05","amount":"50000","description":"Aggregated insights computed from all backtest runs."},"parameters":[{"name":"asset_class","in":"query","required":false,"description":"Filter (crypto, stocks, etf, commodities, forex)","schema":{"type":"string"}},{"name":"min_runs","in":"query","required":false,"description":"Minimum runs per cell","schema":{"type":"integer","minimum":1}},{"name":"ref","in":"query","required":false,"description":"Reference strategy ('bh' for Avg B&H, 'dca' for DCA)","schema":{"type":"string","enum":["bh","dca"],"default":"bh"}}]}},"/api/v1/agent/insights/strategy-filters":{"get":{"summary":"Strategy Filter Insights (x402, $0.05)","description":"Lift per filter × strategy: 200 WMA, Altcoin-Season, ATR, Bullmarket-Ampel.\n\n**Pricing:** $0.05 USDC pay-per-call (x402). No account / no API key.\nAggregated insights computed from all backtest runs.","operationId":"getAgentInsightsStrategyFilters","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.05","amount":"50000","description":"Aggregated insights computed from all backtest runs."}}},"/api/v1/agent/insights/volatility":{"get":{"summary":"Volatility Insights heatmap (x402, $0.05)","description":"Strategy × ATR-phase (low / normal / high / expansion) performance heatmap.\n\n**Pricing:** $0.05 USDC pay-per-call (x402). No account / no API key.\nAggregated insights computed from all backtest runs.","operationId":"getAgentInsightsVolatility","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.05","amount":"50000","description":"Aggregated insights computed from all backtest runs."},"parameters":[{"name":"asset","in":"query","required":false,"description":"Asset class filter","schema":{"type":"string"}},{"name":"min_trades","in":"query","required":false,"description":"Minimum trades per cell","schema":{"type":"integer","minimum":1}}]}},"/api/v1/agent/insights/sentiment":{"get":{"summary":"Sentiment Dashboard (x402, $0.05)","description":"7-section sentiment aggregate (cycle, funding, dominance, F&G, volume, leverage, coverage).\n\n**Pricing:** $0.05 USDC pay-per-call (x402). No account / no API key.\nAggregated insights computed from all backtest runs.","operationId":"getAgentInsightsSentiment","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.05","amount":"50000","description":"Aggregated insights computed from all backtest runs."},"parameters":[{"name":"period","in":"query","required":false,"description":"7d (default), 30d, or 90d","schema":{"type":"string","enum":["7d","30d","90d"],"default":"7d"}}]}},"/api/v1/agent/insights/winners":{"get":{"summary":"Backtest Winners list (x402, $0.05)","description":"Top backtest runs by CAGR + beats-B&H, filterable by asset / strategy.\n\n**Pricing:** $0.05 USDC pay-per-call (x402). No account / no API key.\nAggregated insights computed from all backtest runs.","operationId":"getAgentInsightsWinners","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.05","amount":"50000","description":"Aggregated insights computed from all backtest runs."},"parameters":[{"name":"asset_class","in":"query","required":false,"description":"Filter (crypto, stocks, etf, commodities, forex)","schema":{"type":"string"}},{"name":"strategy","in":"query","required":false,"description":"Strategy key filter","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max winners to return (default 100)","schema":{"type":"integer","minimum":1,"maximum":100}}]}},"/api/v1/agent/backtests/run":{"post":{"summary":"Run single-asset backtest (x402, $0.10)","description":"Execute one strategy on one asset/timeframe. Returns inline results (CAGR, win-rate, drawdown, trades). No persistence for anonymous callers — bookmark via REST + Bearer if needed.\n\n**Pricing:** $0.10 USDC pay-per-call (x402). No account / no API key.\nOn-demand backtest, computed inline (no DB-persistence for anonymous x402 callers).","operationId":"postAgentBacktestsRun","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.10","amount":"100000","description":"On-demand backtest, computed inline (no DB-persistence for anonymous x402 callers)."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["strategy","pair","date_from"],"properties":{"strategy":{"type":"string","description":"Strategy key, e.g. rsi_sma, golden_cross, obv_macd_v2"},"pair":{"type":"string","description":"Asset symbol, e.g. BTCUSDT, AAPL.US, EURUSD.FOREX"},"asset_type":{"type":"string","enum":["crypto","stock","etf","commodities","forex"],"default":"crypto"},"interval":{"type":"string","enum":["1d","1w","1M"],"default":"1d"},"date_from":{"type":"string","format":"date","description":"YYYY-MM-DD"},"date_to":{"type":"string","format":"date","description":"YYYY-MM-DD (default: today UTC)"},"capital":{"type":"number","minimum":100,"default":10000},"params":{"type":"object","description":"Strategy-specific params (see /api/v1/strategies for catalog)"},"filters":{"type":"object","properties":{"wma200":{"type":"boolean"},"atr_mode":{"type":"string","enum":["off","low","high","expansion"]},"altcoin_season_mode":{"type":"string","enum":["off","aggressive","conservative"]},"bullmarket_stage_mode":{"type":"string","enum":["off","early","confirmed","strict"]},"min_profit_guard_threshold":{"type":["number","null"]}}}}}}}}}},"/api/v1/agent/backtests/grid":{"post":{"summary":"Run grid-bot backtest (x402, $0.10)","description":"Simulate a KuCoin-style grid bot on historical candles. All crypto pairs unlocked for x402 callers (payment IS entitlement).\n\n**Pricing:** $0.10 USDC pay-per-call (x402). No account / no API key.\nOn-demand backtest, computed inline (no DB-persistence for anonymous x402 callers).","operationId":"postAgentBacktestsGrid","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.10","amount":"100000","description":"On-demand backtest, computed inline (no DB-persistence for anonymous x402 callers)."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["pair","start_date","end_date","total_investment","low_price","high_price","grid_count"],"properties":{"pair":{"type":"string"},"start_date":{"type":"string","format":"date"},"end_date":{"type":"string","format":"date"},"total_investment":{"type":"number","minimum":100},"low_price":{"type":"number","minimum":0},"high_price":{"type":"number","minimum":0},"grid_count":{"type":"integer","minimum":2,"maximum":100},"grid_type":{"type":"string","enum":["arithmetic","geometric"],"default":"arithmetic"},"fee_rate":{"type":"number","default":0.001},"entry_price":{"type":"number"},"stop_loss_price":{"type":"number"},"take_profit_price":{"type":"number"}}}}}}}},"/api/v1/agent/backtests/compare":{"post":{"summary":"Compare 2-5 strategies (x402, $0.30)","description":"Run 2-5 strategies sequentially on the same asset/timeframe. Returns per-strategy result + best-by-CAGR/win-rate/drawdown comparison block.\n\n**Pricing:** $0.30 USDC pay-per-call (x402). No account / no API key.\nCompare 2-5 strategies sequentially on the same asset (inline-compute, no persistence).","operationId":"postAgentBacktestsCompare","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.30","amount":"300000","description":"Compare 2-5 strategies sequentially on the same asset (inline-compute, no persistence)."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["strategies","pair","date_from"],"properties":{"strategies":{"type":"array","minItems":2,"maxItems":5,"items":{"type":"object","required":["strategy"],"properties":{"strategy":{"type":"string"},"params":{"type":"object"}}}},"pair":{"type":"string"},"asset_type":{"type":"string","enum":["crypto","stock","etf","commodities","forex"],"default":"crypto"},"interval":{"type":"string","enum":["1d","1w","1M"],"default":"1d"},"date_from":{"type":"string","format":"date"},"date_to":{"type":"string","format":"date"},"capital":{"type":"number","minimum":100,"default":10000},"filters":{"type":"object"}}}}}}}},"/api/v1/agent/backtests/universe":{"post":{"summary":"Run universe backtest, max 10 pairs (x402, $0.50)","description":"Universe-Express: run one strategy against up to 10 pairs inline. No polling. Bigger universes (up to 50 pairs) are available via authenticated REST/MCP — get a Free-tier key at /dashboard/account/api-keys.\n\n**Pricing:** $0.50 USDC pay-per-call (x402). No account / no API key.\nUniverse-Express: up to 10 pairs in one inline call. No polling, no persistence.","operationId":"postAgentBacktestsUniverse","tags":["Agent (x402)"],"responses":{"200":{"description":"Settled payment + data payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-PAYMENT-RESPONSE":{"description":"Base64-encoded settlement-receipt incl. transaction-hash.","schema":{"type":"string"}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required. Body + `payment-required` header contain payment-instructions (network, payTo, amount, asset).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"payment-required":{"description":"Base64-encoded x402v2 PaymentRequired JSON.","schema":{"type":"string"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","price":"$0.50","amount":"500000","description":"Universe-Express: up to 10 pairs in one inline call. No polling, no persistence."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["strategy","interval","date_from"],"properties":{"universe_id":{"type":"string","description":"Pre-curated universe (e.g. 'crypto-top-10') — max 10 pairs in x402-inline mode."},"pairs":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Explicit pair list (max 10 for x402-Express)."},"strategy":{"type":"string"},"interval":{"type":"string","enum":["1d","1w","1M"],"default":"1d"},"date_from":{"type":"string","format":"date"},"date_to":{"type":"string","format":"date"},"capital":{"type":"number","minimum":100,"default":10000},"params":{"type":"object","additionalProperties":true},"filters":{"type":"object"}}}}}}}},"/api/v1/info":{"get":{"summary":"API info + caller tier echo","description":"Returns API version, server time, channel hints, discovery URLs, and (if a valid Bearer is supplied) the calling key prefix + tier. Useful for connectivity smoke-tests and key-validity checks. No quota consumed.","operationId":"getV1Info","tags":["Meta"],"security":[],"responses":{"200":{"description":"API info payload.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"x-min-tier":"public"}},"/api/v1/usage":{"get":{"summary":"Caller usage stats (last N days)","description":"Aggregated call counts for the caller, grouped by status / channel / endpoint / tier-at-call. Also returns per-key activity (`last_used_at`, call_count). Window: 1-30 days for Free, up to 90 days for Pro+. Aggregated in-memory from `api_key_usage` table. [Free tier]","operationId":"getV1Usage","tags":["Meta"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"days","in":"query","schema":{"type":"integer","minimum":1,"maximum":90,"default":30}}],"responses":{"200":{"description":"Usage stats.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/macro/regime/latest":{"get":{"summary":"Macro Regime snapshot (latest)","description":"Daily Macro Regime — 18 components in 6 tiers (Liquidity 30% / Financial Conditions 20% / Risk Appetite 15% / Crypto Liquidity 10% / Business Cycle 15% / Inflation 10%). FRED-sourced (no API key required). Returns composite_score (0-100), regime_label (risk_off/neutral/risk_on_leaning/risk_on), cycle_phase_label, matrix_quadrant (sweet_spot/late_cycle_warning/crisis/recovery), tier_scores (6 sub-scores), components (flat key/value). [Free tier]","operationId":"getV1MacroRegimeLatest","tags":["Macro"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Macro snapshot or history.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}},"/api/v1/macro/regime/history":{"get":{"summary":"Macro Regime timeline (history)","description":"Timeline of composite_score + matrix_quadrant + tier1/tier5 scores over N days (default 90, max 365). Useful for plotting regime path and 2D-matrix history clouds. [Free tier]","operationId":"getV1MacroRegimeHistory","tags":["Macro"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"days","in":"query","description":"History window in days (1-365, default 90).","required":false,"schema":{"type":"integer","minimum":1,"maximum":365,"default":90}}],"responses":{"200":{"description":"Macro snapshot or history.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input — fehlt Pflichtfeld oder Wert außerhalb des erlaubten Bereichs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthenticated — kein gültiger Bearer-Token im Authorization-Header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Tier-Insufficient — Endpoint braucht höheren API-Tier. Response enthält upgrade_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not-Found — Resource existiert nicht oder gehört nicht dem aktuellen User.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-Limit überschritten — Tier-Quota (hourly/daily) oder Per-Endpoint-Quota erreicht. Retry-After-Header gesetzt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Upstream-Failure — Datenquelle nicht erreichbar (Binance, EODHD, etc.).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"x-min-tier":"free"}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API-Key","description":"Get a Free-tier key at https://tradingstrategies.work/dashboard/account/api-keys"}},"schemas":{"ErrorResponse":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","enum":["invalid_input","unauthenticated","tier_insufficient","not_found","rate_limited","upstream_failed","compute_failed","internal"],"description":"Stable error-code; map to client-side handling."},"message":{"type":"string","description":"Human-readable error message."},"required_tier":{"type":["string","null"],"enum":["api_pro","api_power",null]},"current_tier":{"type":["string","null"],"enum":["free","api_pro","api_power",null]},"upgrade_url":{"type":["string","null"],"format":"uri"},"retry_after_seconds":{"type":["integer","null"]},"details":{"type":["object","null"],"additionalProperties":true}}},"TierEnum":{"type":"string","enum":["free","api_pro","api_power"],"description":"Echo des aktuellen Tier des aufrufenden API-Keys."},"ArenaPulseBand":{"type":"string","enum":["capitulation","risk-off","neutral","constructive","euphoric"]},"ArenaPulseSnapshot":{"type":"object","required":["date","score","band"],"properties":{"date":{"type":"string","format":"date"},"score":{"type":"integer","minimum":0,"maximum":100},"band":{"$ref":"#/components/schemas/ArenaPulseBand"},"label_de":{"type":"string"},"label_en":{"type":"string"},"color_hex":{"type":"string"},"verdict_de":{"type":"string"},"verdict_en":{"type":"string"},"delta_7d":{"type":["integer","null"]},"delta_30d":{"type":["integer","null"]},"confidence":{"type":"string","enum":["low","medium","high"]},"components":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"rawValue":{"type":"string"},"earnedPoints":{"type":["number","null"]},"maxPoints":{"type":"integer"}}}}}},"HistoryResponse":{"type":"object","description":"Generic history container. Concrete `snapshots`-items vary per endpoint.","properties":{"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"days":{"type":"integer"},"snapshots":{"type":"array","items":{"type":"object","additionalProperties":true}},"tier":{"$ref":"#/components/schemas/TierEnum"}}},"LiveSubscription":{"type":"object","required":["id","api_key_id","subscription_type","config","delivery_method","active","created_at"],"properties":{"id":{"type":"string","format":"uuid"},"api_key_id":{"type":"string","format":"uuid"},"subscription_type":{"type":"string","enum":["signal_alert","cycle_band","pulse_score","bullmarket_stage"]},"config":{"type":"object","additionalProperties":true},"delivery_method":{"type":"string","enum":["polling","webhook"]},"webhook_url":{"type":["string","null"],"format":"uri"},"active":{"type":"boolean"},"expires_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"},"last_triggered_at":{"type":["string","null"],"format":"date-time"},"last_state":{"type":["object","null"],"additionalProperties":true}}},"SubscriptionUpdate":{"type":"object","required":["id","subscription_id","subscription_type","payload","created_at"],"properties":{"id":{"type":"integer"},"subscription_id":{"type":"string","format":"uuid"},"subscription_type":{"type":"string","enum":["signal_alert","cycle_band","pulse_score","bullmarket_stage"]},"payload":{"type":"object","additionalProperties":true},"created_at":{"type":"string","format":"date-time"}}}}}}