{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://thanos.io/schemas/query-response.json",
  "title": "Thanos Query Response",
  "description": "The standard JSON response envelope returned by Thanos Query API endpoints for instant and range queries. Compatible with the Prometheus API response format, with Thanos-specific additions such as partial response warnings.",
  "type": "object",
  "required": [
    "status"
  ],
  "properties": {
    "status": {
      "type": "string",
      "description": "Indicates whether the query was successful or encountered an error.",
      "enum": [
        "success",
        "error"
      ]
    },
    "data": {
      "type": "object",
      "description": "The query result payload. Present when status is success.",
      "required": [
        "resultType",
        "result"
      ],
      "properties": {
        "resultType": {
          "type": "string",
          "description": "The type of result returned by the query.",
          "enum": [
            "matrix",
            "vector",
            "scalar",
            "string"
          ]
        },
        "result": {
          "description": "The query result data. Structure depends on resultType.",
          "oneOf": [
            {
              "title": "VectorResult",
              "description": "Result for instant vector queries.",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "metric": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "Label set identifying the time series."
                  },
                  "value": {
                    "type": "array",
                    "description": "A [unix_timestamp, sample_value] pair.",
                    "prefixItems": [
                      {
                        "type": "number",
                        "description": "Unix timestamp with millisecond precision."
                      },
                      {
                        "type": "string",
                        "description": "Sample value as a string to preserve precision."
                      }
                    ],
                    "minItems": 2,
                    "maxItems": 2
                  }
                },
                "required": [
                  "metric",
                  "value"
                ]
              }
            },
            {
              "title": "MatrixResult",
              "description": "Result for range vector queries.",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "metric": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "Label set identifying the time series."
                  },
                  "values": {
                    "type": "array",
                    "description": "Array of [unix_timestamp, sample_value] pairs.",
                    "items": {
                      "type": "array",
                      "prefixItems": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "string"
                        }
                      ],
                      "minItems": 2,
                      "maxItems": 2
                    }
                  }
                },
                "required": [
                  "metric",
                  "values"
                ]
              }
            },
            {
              "title": "ScalarResult",
              "description": "Result for scalar queries.",
              "type": "array",
              "prefixItems": [
                {
                  "type": "number"
                },
                {
                  "type": "string"
                }
              ],
              "minItems": 2,
              "maxItems": 2
            },
            {
              "title": "StringResult",
              "description": "Result for string queries.",
              "type": "array",
              "prefixItems": [
                {
                  "type": "number"
                },
                {
                  "type": "string"
                }
              ],
              "minItems": 2,
              "maxItems": 2
            }
          ]
        }
      }
    },
    "errorType": {
      "type": "string",
      "description": "Category of error. Present when status is error."
    },
    "error": {
      "type": "string",
      "description": "Human-readable error message. Present when status is error."
    },
    "warnings": {
      "type": "array",
      "description": "Warnings generated during query execution. In Thanos, this often includes partial response warnings when a store is unavailable.",
      "items": {
        "type": "string"
      }
    }
  },
  "examples": [
    {
      "status": "success",
      "data": {
        "resultType": "vector",
        "result": [
          {
            "metric": {
              "__name__": "up",
              "instance": "prometheus-0:9090",
              "job": "prometheus"
            },
            "value": [
              1704067200,
              "1"
            ]
          }
        ]
      },
      "warnings": []
    },
    {
      "status": "success",
      "data": {
        "resultType": "matrix",
        "result": [
          {
            "metric": {
              "__name__": "http_requests_total",
              "method": "GET"
            },
            "values": [
              [1704060000, "100"],
              [1704063600, "150"],
              [1704067200, "200"]
            ]
          }
        ]
      },
      "warnings": [
        "store sidecar-prometheus-1:10901 is unhealthy, returning partial response"
      ]
    }
  ]
}
