{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/kronos-seshat/main/json-schema/kronos-seshat-kronos-forecast-response-schema.json",
  "title": "KronosForecastResponse",
  "description": "Kronos forecast response shared by /sample and /predict endpoints.",
  "x-generated": "2026-09-25",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/kronos-seshat-openapi.json#/components/schemas/KronosForecastResponse",
  "type": "object",
  "properties": {
    "pair": {
      "type": "string"
    },
    "timestamp": {
      "type": "string",
      "format": "date-time"
    },
    "timeframes": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/$defs/KronosTimeframeResult"
      }
    },
    "consensus": {
      "$ref": "#/$defs/KronosConsensus"
    },
    "forecast": {
      "$ref": "#/$defs/KronosForecast"
    },
    "sample": {
      "type": "boolean"
    },
    "sample_policy": {
      "$ref": "#/$defs/KronosSamplePolicy"
    }
  },
  "required": [
    "pair",
    "timestamp",
    "timeframes",
    "consensus"
  ],
  "$defs": {
    "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"
      ]
    },
    "KronosSamplePolicy": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "delay_minutes": {
          "type": "integer"
        },
        "realtime": {
          "type": "boolean"
        }
      }
    },
    "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"
      ]
    }
  }
}