{
  "openapi": "3.1.0",
  "info": {
    "title": "Kronos Quant Signal API",
    "version": "2.1.0",
    "summary": "Auditable multi-asset financial forecasts for agents",
    "description": "Kronos publishes cached multi-timeframe forecasts across crypto, commodities, and pre-market equities. Includes calibrated ranges, risk context, auditable decision records, and cross-symbol regime detection. Research and decision support only; not financial advice. x402 payments are active on testnet (Solana devnet + Base Sepolia) via the PayAI facilitator. See /.well-known/x402 for exact requirements.",
    "termsOfService": "https://kronos.seshat.markets/",
    "x-guidance": "Use the catalog first, prefer cached reads, cite generated_at/decision_id, and verify outcomes through the audit record. Do not treat directional context as a standalone trading instruction."
  },
  "servers": [
    {
      "url": "https://kronos.seshat.markets/api",
      "description": "Kronos production API"
    }
  ],
  "externalDocs": {
    "description": "Kronos agent quickstart",
    "url": "https://kronos.seshat.markets/kronos/skill.md"
  },
  "x-discovery": {
    "llms_txt": "https://kronos.seshat.markets/kronos/llms.txt",
    "registry": "https://kronos.seshat.markets/kronos/registry.json",
    "x402": "https://kronos.seshat.markets/.well-known/x402"
  },
  "x402": {
    "status": "active_testnet",
    "payment_required": true,
    "mode": "testnet",
    "networks": [
      "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
      "eip155:84532"
    ],
    "asset": "USDC",
    "facilitator": "https://facilitator.payai.network",
    "flows": [
      "authorization",
      "upfront"
    ],
    "manifest": "https://kronos.seshat.markets/.well-known/x402",
    "note": "Testnet only (Solana devnet + Base Sepolia). USDC has no real value. Swap to mainnet networks for production."
  },
  "paths": {
    "/feeds/kronos/catalog": {
      "get": {
        "operationId": "getKronosCatalog",
        "tags": [
          "Discovery"
        ],
        "summary": "GET /catalog",
        "description": "The first call an agent should make. Returns all supported symbols, timeframes, per-timeframe cache TTLs, model config, and the complete product catalog — every endpoint with its x402 price, data policy and description.",
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        }
      }
    },
    "/feeds/kronos/sample/btc_usdt": {
      "get": {
        "operationId": "getKronosSample",
        "tags": [
          "Discovery"
        ],
        "summary": "GET /sample/btc_usdt",
        "description": "Real BTC model output, all 5 timeframes. The delay is scaled per timeframe: 5m→2h, 15m→6h, 1h→24h, 4h→48h, 1d→72h. No friction, no wallet. For integration testing.",
        "responses": {
          "200": {
            "$ref": "#/components/responses/KronosForecast"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/feeds/kronos/accuracy-preview/{symbolKey}": {
      "get": {
        "operationId": "kronos_accuracy_preview",
        "tags": [
          "Analysis"
        ],
        "summary": "GET /accuracy-preview/:symbol",
        "description": "Free preview of the accuracy report for a single symbol — total predictions, correct calls, hit rate, avg Brier score, calibration status and baselines (no-change/momentum accuracy + edge). Strips risk_state and candle_audit, which stay behind the paid /accuracy and /accuracy/candles endpoints.",
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        }
      }
    },
    "/feeds/kronos/accuracy": {
      "get": {
        "operationId": "getKronosAccuracy",
        "tags": [
          "Verification"
        ],
        "summary": "GET /accuracy",
        "parameters": [
          {
            "$ref": "#/components/parameters/SymbolQuery"
          },
          {
            "$ref": "#/components/parameters/Limit"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          },
          "500": {
            "$ref": "#/components/responses/Error"
          }
        },
        "description": "Model accuracy report — measures the Kronos forecast model (predicted direction vs actual price at horizon). Total predictions, correct calls, hit rate, avg Brier score, calibration status, forecast coverage (conformal interval containment), baselines (no-change/momentum accuracy + edge vs best baseline) and current risk_state. Per-timeframe candle-level audit (MAPE/MAE) is available via /accuracy/candles. Filter by ?symbol and ?limit. Not the same as /agent/track-record, which measures Kronos as a market voter (option voted vs market outcome).",
        "x-payment-info": {
          "status": "planned",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/kronos/accuracy/candles": {
      "get": {
        "operationId": "kronos_accuracy_candles",
        "tags": [
          "Analysis"
        ],
        "summary": "GET /accuracy/candles",
        "description": "Granular model performance — per-timeframe candle-level audit with MAPE (mean absolute percentage error) and MAE (mean absolute error) broken down by 5m, 15m, 1h, 4h, 1d. Computed from 47k+ audited candles. Shows exactly which timeframes the model predicts best. Filter by ?symbol and ?limit.",
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        },
        "x-payment-info": {
          "status": "planned",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.005000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/kronos/accuracy/candles-preview": {
      "get": {
        "operationId": "kronos_accuracy_candles_preview",
        "tags": [
          "Analysis"
        ],
        "summary": "GET /accuracy/candles-preview",
        "description": "Free preview of per-timeframe candle-level audit (MAPE/MAE by 5m, 15m, 1h, 4h, 1d) — aggregate across all symbols only, rounded to 1 decimal. Full precision and per-symbol filtering stay behind the paid /accuracy/candles endpoint.",
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        }
      }
    },
    "/feeds/kronos/conviction-signals": {
      "get": {
        "operationId": "kronos_conviction_signals",
        "tags": [
          "Forecast"
        ],
        "summary": "GET /conviction-signals",
        "description": "Free public signal — the latest pre-midnight prediction per non-BTC symbol, ranked by conviction (distance of upside_prob from 50%), top 3. Delayed by design (cutoff: before today's midnight) so it never undercuts the paid, fresh /predict and /decisions endpoints.",
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        }
      }
    },
    "/feeds/kronos/risk": {
      "get": {
        "operationId": "getKronosRisk",
        "tags": [
          "Signal"
        ],
        "summary": "GET /risk",
        "description": "Check if the model is hot or cold. Returns current streak, cooldown status and confidence multiplier — so you know whether to trust the next signal or wait.",
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/feeds/kronos/risk/history": {
      "get": {
        "operationId": "kronos_risk_history",
        "tags": [
          "Analysis"
        ],
        "summary": "GET /risk/history",
        "description": "Historical streak analytics — best and worst streaks ever, broken down globally, per symbol (BTC, ETH, SOL, XRP, etc.) and per timeframe (5m, 15m, 1h, 4h, 1d). Includes date ranges for each streak. Separate from /risk so expensive all-history aggregation does not affect live decisions. Only counts decisions from the default preset (standard agent pipeline, not playground experiments).",
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        },
        "x-payment-info": {
          "status": "planned",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.020000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/kronos/predict/{symbolKey}": {
      "get": {
        "operationId": "getKronosPrediction",
        "tags": [
          "Forecast"
        ],
        "summary": "GET /predict/:symbol?timeframes=",
        "description": "Fresh on-demand forecast for any supported asset (BTC, ETH, SOL, etc). Returns all timeframes by default, or filter with ?timeframes=5m,1h. $0.01 per timeframe, capped at $0.04 (20% off when requesting all 5). Horizon: 5m→6h, 15m→24h, 1h→2d, 4h→10d, 1d→14d.",
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/SymbolKey"
          },
          {
            "$ref": "#/components/parameters/Timeframes"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/KronosForecast"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotCached"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/feeds/kronos/decision/{decisionId}": {
      "get": {
        "operationId": "getKronosDecision",
        "tags": [
          "Verification"
        ],
        "summary": "GET /decision/:id",
        "parameters": [
          {
            "name": "decisionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          }
        },
        "description": "Retrieve a single past decision by its UUID. Returns the full prediction, audit status, forecast bounds, Brier score and pred_candles — everything you need to verify or replay a call. Free, rate-limited (30 req/5min)."
      }
    },
    "/feeds/kronos/decisions": {
      "get": {
        "operationId": "getKronosDecisions",
        "tags": [
          "Verification"
        ],
        "summary": "GET /decisions",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 50,
              "maximum": 500
            },
            "description": "Number of decisions to return (max 500)."
          },
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by symbol key, e.g. btc_usdt, eth_usdt."
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "audited",
                "auditing",
                "pending"
              ]
            },
            "description": "Filter by audit status: audited (has outcome + Brier score), auditing (candle audit in progress), pending (not yet audited)."
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Lookback window in days (e.g. days=30 for last 30 days)."
          },
          {
            "name": "detail",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "0",
                "1",
                "true",
                "false"
              ]
            },
            "description": "Set to 1 or true to include full pred_candles arrays (48-60 OHLC candles per timeframe). Default: stripped to reduce payload size — use /decision/{id} for full detail on a single decision."
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        },
        "description": "Browse recent predictions — each with decision ID, symbol, consensus, audit status, Brier score and per-timeframe summary (direction, change_pct, ranges). Results are ordered by predicted_at DESC (most recent first). Use ?detail=1 to include full pred_candles arrays. Filter by ?symbol (e.g. btc_usdt), ?status (audited/auditing/pending), ?days (lookback), ?limit (max 500). Without ?status, returns the most recent decisions regardless of audit state (audit fields will be null for pending decisions).",
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/kronos/forecast-evolution/{symbolKey}": {
      "get": {
        "operationId": "getForecastEvolution",
        "tags": [
          "Analysis"
        ],
        "summary": "GET /forecast-evolution/:symbol",
        "description": "How the forecast for a symbol has changed over time — direction flips, confidence drift, upside_prob revision and audited accuracy of each revision. Each revision includes market_key (e.g. btc-10m, btc-1h, or null for background scheduler predictions) and timeframes used. Reveals the trajectory of the model's opinion, not just the latest reading. ?hours to set lookback (default 24, max 168). ?market_key=btc-10m to filter by specific market. ?limit to cap revisions (default 144, max 1000). ?summary=1 for summary-only (no revisions array).",
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.005000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/SymbolKey"
          },
          {
            "name": "hours",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 24,
              "minimum": 1,
              "maximum": 168
            },
            "description": "Lookback window in hours (default 24, max 168)."
          },
          {
            "name": "market_key",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by market key, e.g. btc-10m, btc-1h, btc-12h. If omitted, returns all revisions including background scheduler predictions (market_key=null)."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 144,
              "maximum": 1000
            },
            "description": "Maximum number of revisions to return (default 144, max 1000)."
          },
          {
            "name": "summary",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "0",
                "1",
                "true",
                "false"
              ]
            },
            "description": "Set to 1 or true to return only the summary block (no revisions array)."
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/feeds/kronos/forecast-distribution/{symbolKey}": {
      "get": {
        "operationId": "getKronosForecastDistribution",
        "tags": [
          "Forecast"
        ],
        "summary": "GET /forecast-distribution/:symbol?timeframes=",
        "description": "Unlike /predict which returns the median-averaged prediction, this returns the full empirical distribution from sample_count independent inference paths. At each prediction step you get p05-p95 percentiles for close price, plus the final return percentile distribution. This is the true probabilistic output of Kronos — agents can use it to compute Value-at-Risk, confidence intervals, or any custom decision rule.",
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/SymbolKey"
          },
          {
            "$ref": "#/components/parameters/Timeframes"
          }
        ],
        "responses": {
          "200": {
            "description": "Forecast distribution with percentiles per step",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "pair": {
                      "type": "string"
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "generated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "timeframes": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "object",
                        "properties": {
                          "current_price": {
                            "type": "number"
                          },
                          "pred_len": {
                            "type": "integer"
                          },
                          "sample_count": {
                            "type": "integer"
                          },
                          "upside_prob": {
                            "type": "number"
                          },
                          "as_of": {
                            "type": "string"
                          },
                          "elapsed_s": {
                            "type": "number"
                          },
                          "final_price": {
                            "type": "object",
                            "properties": {
                              "p05": {
                                "type": "number"
                              },
                              "p10": {
                                "type": "number"
                              },
                              "p25": {
                                "type": "number"
                              },
                              "p50": {
                                "type": "number"
                              },
                              "p75": {
                                "type": "number"
                              },
                              "p90": {
                                "type": "number"
                              },
                              "p95": {
                                "type": "number"
                              }
                            }
                          },
                          "final_return_pct": {
                            "type": "object",
                            "properties": {
                              "p05": {
                                "type": "number"
                              },
                              "p10": {
                                "type": "number"
                              },
                              "p25": {
                                "type": "number"
                              },
                              "p50": {
                                "type": "number"
                              },
                              "p75": {
                                "type": "number"
                              },
                              "p90": {
                                "type": "number"
                              },
                              "p95": {
                                "type": "number"
                              }
                            }
                          },
                          "per_step": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "step": {
                                  "type": "integer"
                                },
                                "p05": {
                                  "type": "number"
                                },
                                "p10": {
                                  "type": "number"
                                },
                                "p25": {
                                  "type": "number"
                                },
                                "p50": {
                                  "type": "number"
                                },
                                "p75": {
                                  "type": "number"
                                },
                                "p90": {
                                  "type": "number"
                                },
                                "p95": {
                                  "type": "number"
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/feeds/kronos/historical-analogs/{symbolKey}": {
      "get": {
        "operationId": "getHistoricalAnalogs",
        "tags": [
          "Analysis"
        ],
        "summary": "GET /historical-analogs/:symbol",
        "description": "Past audited situations similar to the current forecast (same direction, similar confidence and upside_prob) and what actually happened — accuracy, median change, outcome distribution, max adverse/favorable and percentiles. Empirical evidence from analogous situations. ?days, ?limit, ?confidenceTol, ?upsideTol to tune matching. ?full=1 returns all analogs (default: top 10 + summary).",
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/SymbolKey"
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 90,
              "minimum": 1,
              "maximum": 365
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 200,
              "minimum": 1,
              "maximum": 500
            }
          },
          {
            "name": "confidenceTol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "default": 0.15,
              "minimum": 0.01,
              "maximum": 0.5
            }
          },
          {
            "name": "upsideTol",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "default": 15,
              "minimum": 1,
              "maximum": 50
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/feeds/kronos/regime": {
      "get": {
        "operationId": "getKronosRegime",
        "tags": [
          "Analysis"
        ],
        "summary": "GET /regime",
        "description": "Cross-symbol regime signal — how aligned are all Kronos-covered assets right now? When ≥3 symbols share the same consensus direction, it signals risk-on or risk-off. Includes historical alignment events with accuracy. ?days and ?minSymbols to configure.",
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.020000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 30,
              "minimum": 1,
              "maximum": 365
            }
          },
          {
            "name": "minSymbols",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 3,
              "minimum": 2,
              "maximum": 10
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    },
    "/feeds/kronos/agent/track-record": {
      "get": {
        "operationId": "getKronosAgentTrackRecord",
        "tags": [
          "Agent"
        ],
        "summary": "GET /agent/track-record",
        "description": "Agent track record — measures Kronos as a market voter (option voted vs market outcome): win rate, Brier score, per-coin breakdown and daily evolution. Filter by ?coin and ?days. Not the same as /accuracy, which measures the Kronos forecast model (predicted direction vs actual price at horizon).",
        "parameters": [
          {
            "name": "coin",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 30,
              "maximum": 365
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-payment-info": {
          "status": "planned",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/kronos/agent/votes": {
      "get": {
        "operationId": "getKronosAgentVotes",
        "tags": [
          "Agent"
        ],
        "summary": "GET /agent/votes",
        "description": "Recent agent votes with market context, confidence, rationale and outcome. Paginate with ?limit (default 50) and ?offset, filter by ?coin. ?full=1 includes rationale and research_notes text.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "coin",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          }
        },
        "x-payment-info": {
          "status": "planned",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.003000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/kronos/agent/signals": {
      "get": {
        "operationId": "getKronosAgentSignals",
        "tags": [
          "Agent"
        ],
        "summary": "GET /agent/signals",
        "description": "Live view of open markets where the agent is actively voting — includes vote status and cached predictions per market.",
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.005000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/feeds/kronos/composite-preview/{symbolKey}": {
      "get": {
        "operationId": "kronos_composite_preview",
        "tags": [
          "Agent"
        ],
        "summary": "GET /composite-preview/:symbol",
        "description": "Free preview of the Quant (Kronos) vs Crowd composite signal — same agreement/divergence read as /composite, aggregated/delayed. ?days controls lookback (default 30, max 365). Full per-duration breakdown and history stay behind the paid endpoint.",
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        }
      }
    },
    "/feeds/kronos/composite/{symbolKey}": {
      "get": {
        "operationId": "getKronosComposite",
        "tags": [
          "Analysis"
        ],
        "summary": "GET /composite/:symbol",
        "description": "Quant vs Crowd — compares Kronos forecasts against LLM agents and human votes. Shows agreement/divergence rates, who wins when they disagree, per-duration breakdown and the current live signal. ?days to set lookback.",
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/SymbolKey"
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 30,
              "minimum": 1,
              "maximum": 365
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          },
          "404": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/feeds/kronos/benchmark-preview": {
      "get": {
        "operationId": "kronos_benchmark_preview",
        "tags": [
          "Agent"
        ],
        "summary": "GET /benchmark-preview",
        "description": "Free preview of the benchmark leaderboard — ranks Kronos against every LLM agent and human forecaster by accuracy and Brier score, fixed 7-day window, min 10 resolved, no per-coin detail. Configurable window and per-coin breakdown stay behind the paid /benchmark endpoint.",
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        }
      }
    },
    "/feeds/kronos/benchmark": {
      "get": {
        "operationId": "kronos_benchmark",
        "tags": [
          "Agent"
        ],
        "summary": "GET /benchmark",
        "description": "Benchmark leaderboard — ranks Kronos against every LLM agent and human forecasters by accuracy and Brier score on crypto markets. Kronos model-level stats (audited predictions, accuracy, Brier). Use ?detail=1 for per-coin breakdown. ?days for lookback, ?minResolved to filter agents with too few votes.",
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        },
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.020000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/kronos/digest/{symbolKey}": {
      "get": {
        "operationId": "kronos_digest",
        "tags": [
          "Forecast"
        ],
        "summary": "GET /digest/:symbol",
        "description": "Combines 7 Kronos data sources (predict, risk, forecast-evolution, regime, historical-analogs, composite quant-vs-crowd, accuracy) into one insight-driven digest. An AI agent cross-references these to surface non-obvious insights: track-record reality checks (is the confidence justified by analogs?), timeframe contradictions, quant-vs-crowd divergences, calibration warnings, and risk context. Returns the text digest plus structured metadata (analog accuracy, model accuracy, crowd accuracy, live divergences). Saves the agent 6 paid calls ($0.06+). Priced at $0.03.",
        "parameters": [
          {
            "name": "symbolKey",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "btc_usdt",
                "eth_usdt",
                "sol_usdt",
                "xrp_usdt",
                "bnb_usdt",
                "bz_usdt",
                "ng_usdt",
                "xaut_usdt",
                "xag_usdt",
                "cl_usdt",
                "openai_usdt",
                "anthropic_usdt",
                "nvdax_usdt",
                "tslax_usdt",
                "metax_usdt",
                "eurusd_usdt",
                "gbpusd_usdt"
              ]
            },
            "description": "Symbol key — crypto (btc_usdt, eth_usdt...), commodities (bz_usdt, ng_usdt, xaut_usdt, xag_usdt, cl_usdt), equities (openai_usdt, anthropic_usdt, nvdax_usdt...), forex (eurusd_usdt, gbpusd_usdt)"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        },
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.030000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/kronos/market-brief/{symbolKey}": {
      "get": {
        "operationId": "kronos_market_brief",
        "tags": [
          "Market Intelligence"
        ],
        "summary": "GET /market-brief/:symbol",
        "description": "Combines Gate.io news, social sentiment, exchange announcements, event attribution, historical resolution context, similar-market outcomes, and Kronos forecast/risk/regime data. Returns an AI-generated market brief with market narrative, catalysts, risks, contradictions, model alignment, historical context, constructive next step, source status and freshness. External claims are required to reference supplied evidence; unavailable sources are reported rather than hidden.",
        "parameters": [
          {
            "name": "symbolKey",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "btc_usdt",
                "eth_usdt",
                "sol_usdt",
                "xrp_usdt",
                "bnb_usdt",
                "bz_usdt",
                "ng_usdt",
                "xaut_usdt",
                "xag_usdt",
                "cl_usdt",
                "openai_usdt",
                "anthropic_usdt",
                "nvdax_usdt",
                "tslax_usdt",
                "metax_usdt",
                "eurusd_usdt",
                "gbpusd_usdt"
              ]
            },
            "description": "Symbol key — crypto (btc_usdt, eth_usdt...), commodities (bz_usdt, ng_usdt, xaut_usdt, xag_usdt, cl_usdt), equities (openai_usdt, anthropic_usdt, nvdax_usdt...), forex (eurusd_usdt, gbpusd_usdt)"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        },
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.050000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/similar-markets": {
      "get": {
        "operationId": "similar_markets_text",
        "tags": [
          "Semantic Similarity"
        ],
        "summary": "GET /feeds/similar-markets",
        "description": "Semantic market discovery by text query. Embeds arbitrary text (for example, an open market question) and returns the closest resolved instance from each distinct market template via pgvector cosine search. Results are automatically isolated to the domain of the closest match (crypto, commodity, equity, forex, aviation, environment, space, maritime, and so on), so financial markets are never mixed with flights, pollution or unrelated domains. Embeddings include title, asset, market type, duration, and available sentiment/news; the resolved outcome is deliberately excluded from the embedding to prevent answer leakage. winnerLabel is the outcome of the representative returned instance, not a historical probability. Use ?domain, ?coin and ?kind for explicit comparability, or /feeds/similar-markets/outcome-stats for an aggregated historical outcome distribution.",
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Market question or arbitrary text to find similar resolved markets"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "coin",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by coin_id (e.g. bitcoin)"
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by market kind (short, yesno, ath, milestone, range)"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        },
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.005000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/similar-markets/outcome-stats": {
      "get": {
        "operationId": "similar_markets_outcome_stats",
        "tags": [
          "Semantic Similarity"
        ],
        "summary": "GET /feeds/similar-markets/outcome-stats",
        "description": "Outcome aggregation — the core B2B semantic search product. Given a market question (text) or instance ID, finds comparable resolved markets and returns their outcome distribution (for example, '62% Up, 38% Down across 50 similar markets'). Domain isolation is automatic, and coin plus market kind are inferred when omitted, preventing incompatible outcomes from financial, aviation, environment or other domains from being mixed. Includes sample sufficiency, similarity threshold, per-coin breakdown and top matches. Supports explicit ?domain, ?coin and ?kind filters.",
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Market question text (alternative to instanceId)"
          },
          {
            "name": "instanceId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Market instance ID (alternative to text)"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 50
            }
          },
          {
            "name": "coin",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        },
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/agent-intelligence/behavioral-correlations": {
      "get": {
        "operationId": "behavioral_correlations",
        "tags": [
          "Agent Intelligence"
        ],
        "summary": "GET /feeds/agent-intelligence/behavioral-correlations",
        "description": "Semantic (behavioral) correlation — how similarly two agents REASON, via embeddings of their vote rationale. Two agents can vote identically for opposite reasons, or vote oppositely via near-identical reasoning — this endpoint sees that, unlike outcome-based correlation which only measures whether they voted the same option.",
        "parameters": [
          {
            "name": "minSamples",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 3
            },
            "description": "Minimum shared markets for a pair to be included"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 500
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        },
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/agent-intelligence/rationale-novelty": {
      "get": {
        "operationId": "rationale_novelty",
        "tags": [
          "Agent Intelligence"
        ],
        "summary": "GET /feeds/agent-intelligence/rationale-novelty",
        "description": "Rationale novelty detection — compares each vote rationale with that agent's own prior reasoning using pgvector cosine similarity. Excludes non-reasoning providers such as Kronos and, by default, same-asset votes generated within the same 120-second batch to avoid contextual false positives. Each flag includes reuseScope, severity and current/prior market context. Use groupBy=agent for one worst case per agent, includeSameBatch=1 for diagnostic same-batch matches, and threshold to override the default 0.97.",
        "parameters": [
          {
            "name": "agentId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Filter to a specific agent"
          },
          {
            "name": "threshold",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "default": 0.97
            },
            "description": "Cosine similarity threshold above which rationale is flagged as recycled"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100
            }
          },
          {
            "name": "groupBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "agent"
              ],
              "default": null
            },
            "description": "Set to 'agent' to return one flag per agent (their worst case). Default returns all flags ordered by similarity DESC."
          },
          {
            "name": "includeSameBatch",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include diagnostic matches for the same asset generated within 120 seconds. Excluded by default because they usually share legitimate context."
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          }
        },
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/kronos/market-context/{symbolKey}": {
      "get": {
        "operationId": "kronos_market_context",
        "tags": [
          "Market Intelligence"
        ],
        "summary": "GET /market-context/:symbol",
        "description": "Combines Binance/OKX/Gate cross-venue crypto context (funding, open interest, basis, spot, liquidations, options IV) with Gate on-demand market discovery for crypto, stocks, forex, metals, commodities and indices. On-demand crypto symbols aggregate Binance+OKX+Gate in parallel with graceful degradation. Returns source status, options availability and cached Kronos context. TradFi instruments are identified as perpetuals, CFDs or tokenized exposures; no market is created and no auto-voting is enabled.",
        "parameters": [
          {
            "name": "symbolKey",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "btc_usdt",
                "eth_usdt",
                "sol_usdt",
                "xrp_usdt",
                "bnb_usdt"
              ]
            },
            "description": "Kronos symbol key"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          },
          "404": {
            "$ref": "#/components/responses/Json"
          },
          "502": {
            "$ref": "#/components/responses/Json"
          }
        },
        "x-payment-info": {
          "status": "active",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.030000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        }
      }
    },
    "/feeds/kronos/playground/{symbolKey}": {
      "post": {
        "operationId": "runKronosPlayground",
        "tags": [
          "Experimental"
        ],
        "summary": "POST /playground/:symbol",
        "description": "Experimental — run a prediction with custom inference params (T, top_p, sample_count, pred_len, lookback). Rate-limited 3/5min per IP.",
        "x-payment-info": {
          "status": "planned",
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.005000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/SymbolKey"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlaygroundRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/Json"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "429": {
            "$ref": "#/components/responses/Error"
          },
          "503": {
            "$ref": "#/components/responses/Disabled"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "x402Payment": {
        "type": "apiKey",
        "in": "header",
        "name": "PAYMENT-SIGNATURE",
        "description": "x402 v2 payment payload. Required for paid endpoints when the service manifest at /.well-known/x402 has enforcement=active_testnet. Send the signed payment in this header (or the legacy X-PAYMENT header) to satisfy the 402 challenge."
      }
    },
    "parameters": {
      "SymbolKey": {
        "name": "symbolKey",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string",
          "example": "btc_usdt"
        }
      },
      "SymbolQuery": {
        "name": "symbol",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "example": "btc_usdt"
        }
      },
      "Limit": {
        "name": "limit",
        "in": "query",
        "required": false,
        "schema": {
          "type": "integer",
          "default": 100,
          "minimum": 1,
          "maximum": 1000
        }
      },
      "Timeframe": {
        "name": "tf",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "5m",
            "15m",
            "1h",
            "4h",
            "1d"
          ]
        }
      },
      "Timeframes": {
        "name": "timeframes",
        "in": "query",
        "required": false,
        "description": "Comma-separated timeframes.",
        "schema": {
          "type": "string",
          "example": "5m,15m,1h,4h,1d"
        }
      }
    },
    "schemas": {
      "PlaygroundRequest": {
        "type": "object",
        "properties": {
          "timeframes": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "5m",
                "15m",
                "1h",
                "4h",
                "1d"
              ]
            }
          },
          "config": {
            "type": "object",
            "properties": {
              "T": {
                "type": "number",
                "minimum": 0,
                "maximum": 2
              },
              "top_p": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "sample_count": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100
              },
              "pred_len": {
                "type": "object",
                "additionalProperties": {
                  "type": "integer"
                }
              },
              "lookback": {
                "type": "object",
                "additionalProperties": {
                  "type": "integer"
                }
              }
            }
          }
        }
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          }
        }
      },
      "KronosConsensus": {
        "type": "object",
        "description": "Aggregate directional reading across the requested timeframes.",
        "properties": {
          "direction": {
            "type": "string",
            "enum": [
              "LONG",
              "SHORT",
              "NEUTRAL"
            ]
          },
          "confidence": {
            "type": "number",
            "description": "0-1 agreement strength across timeframes."
          },
          "upside_prob_avg": {
            "type": "number",
            "description": "Average upside probability across timeframes (0-100)."
          },
          "total_timeframes": {
            "type": "integer"
          },
          "agreeing_timeframes": {
            "type": "integer"
          }
        },
        "required": [
          "direction",
          "total_timeframes",
          "agreeing_timeframes"
        ]
      },
      "KronosForecast": {
        "type": "object",
        "description": "Conformal calibrated price range.",
        "properties": {
          "low": {
            "type": "number"
          },
          "high": {
            "type": "number"
          },
          "coverage": {
            "type": "number"
          },
          "predicted_at": {
            "type": "string",
            "format": "date-time"
          },
          "method": {
            "type": "string",
            "enum": [
              "dynamic_calibration",
              "default_widening"
            ]
          }
        },
        "required": [
          "low",
          "high",
          "coverage"
        ]
      },
      "KronosTimeframeResult": {
        "type": "object",
        "properties": {
          "pred_len": {
            "type": "integer"
          },
          "pred_max": {
            "type": "number"
          },
          "pred_min": {
            "type": "number"
          },
          "direction": {
            "type": "string",
            "enum": [
              "LONG",
              "SHORT",
              "NEUTRAL"
            ]
          },
          "elapsed_s": {
            "type": "number"
          },
          "change_pct": {
            "type": "number"
          },
          "upside_prob": {
            "type": "number"
          },
          "pred_candles": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 4,
              "maxItems": 4
            }
          },
          "current_price": {
            "type": "number"
          },
          "predicted_price": {
            "type": "number"
          }
        },
        "required": [
          "direction",
          "current_price",
          "predicted_price"
        ]
      },
      "KronosSamplePolicy": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string"
          },
          "delay_minutes": {
            "type": "integer"
          },
          "realtime": {
            "type": "boolean"
          }
        }
      },
      "KronosForecastResponse": {
        "type": "object",
        "description": "Kronos forecast response shared by /sample and /predict endpoints.",
        "properties": {
          "pair": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "timeframes": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/KronosTimeframeResult"
            }
          },
          "consensus": {
            "$ref": "#/components/schemas/KronosConsensus"
          },
          "forecast": {
            "$ref": "#/components/schemas/KronosForecast"
          },
          "sample": {
            "type": "boolean"
          },
          "sample_policy": {
            "$ref": "#/components/schemas/KronosSamplePolicy"
          }
        },
        "required": [
          "pair",
          "timestamp",
          "timeframes",
          "consensus"
        ]
      }
    },
    "responses": {
      "Json": {
        "description": "JSON response",
        "content": {
          "application/json": {
            "schema": {
              "type": "object"
            }
          }
        }
      },
      "KronosForecast": {
        "description": "Kronos forecast response",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KronosForecastResponse"
            }
          }
        }
      },
      "Error": {
        "description": "Error response",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "NotCached": {
        "description": "No cached signal is available",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Disabled": {
        "description": "Kronos is disabled",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "PaymentRequired": {
        "description": "x402 payment challenge. Returned by paid endpoints when no valid payment is provided. The response body contains x402Version and accepts[] with the exact payment requirements (network, asset, amount, payTo, scheme). See /.well-known/x402 for the full manifest.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "x402Version": {
                  "type": "integer",
                  "const": 2
                },
                "accepts": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
