{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://qazpolit.com/contracts/qazpolit-api-v1.schema.json",
  "title": "QazPolit additive public API v1 contract",
  "type": "object",
  "required": ["schema", "version", "service", "base_url", "status", "compatibility", "response", "pagination", "provenance", "endpoints"],
  "properties": {
    "schema": {"const": "qazpolit.api-contract.v1"},
    "version": {"const": "v1"},
    "service": {"const": "qazpolit"},
    "base_url": {"type": "string", "format": "uri"},
    "status": {"const": "additive_read_only"},
    "compatibility": {
      "type": "object",
      "required": ["legacy_base", "legacy_unchanged", "deprecation_policy"],
      "properties": {
        "legacy_base": {"const": "/api"},
        "legacy_unchanged": {"const": true},
        "deprecation_policy": {"type": "string", "minLength": 1}
      },
      "additionalProperties": false
    },
    "response": {
      "type": "object",
      "required": ["content_types", "request_id_header", "cache_headers", "rate_limit_headers"],
      "properties": {
        "content_types": {"type": "array", "items": {"type": "string"}},
        "request_id_header": {"const": "X-Request-ID"},
        "cache_headers": {"type": "array", "items": {"type": "string"}},
        "rate_limit_headers": {"type": "array", "items": {"type": "string"}}
      },
      "additionalProperties": false
    },
    "pagination": {
      "type": "object",
      "required": ["page", "limit", "cursor"],
      "properties": {
        "page": {"type": "string", "minLength": 1},
        "cursor": {"type": "string", "minLength": 1},
        "limit": {"type": "string", "minLength": 1}
      },
      "additionalProperties": false
    },
    "provenance": {
      "type": "object",
      "required": ["public_evidence_states", "receipt_contract"],
      "properties": {
        "public_evidence_states": {
          "type": "array",
          "items": {"type": "string"},
          "minItems": 1
        },
        "receipt_contract": {
          "const": "/contracts/qazpolit-evidence-receipt-v1.schema.json"
        }
      },
      "additionalProperties": false
    },
    "endpoints": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["path", "method", "kind"],
        "properties": {
          "path": {"type": "string", "pattern": "^/api/v1/"},
          "method": {"const": "GET"},
          "kind": {"type": "string", "enum": ["action-manifest", "contract", "collection", "decision-register", "entity", "jsonld", "search", "stats", "geojson"]},
          "pagination": {"type": "string", "enum": ["page", "cursor", "limit"]},
          "rate_limit": {"type": "string", "pattern": "^[0-9]+;w=[0-9]+$"},
          "cache_ttl": {"type": "string", "pattern": "^[0-9]+$"}
        },
        "additionalProperties": false
      },
      "minItems": 1
    }
  },
  "additionalProperties": false
}
