{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://docs.cheapgpu.com/specs/endpoint-v1-draft/schemas/common.schema.json",
  "$comment": "Draft only. Structural validation does not establish safety, authenticity, availability, or billability.",
  "$defs": {
    "id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,128}$"
    },
    "model_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9._/-]{0,127}$"
    },
    "positive_decimal": {
      "type": "string",
      "pattern": "^[1-9][0-9]*$",
      "maxLength": 20
    },
    "decimal": {
      "type": "string",
      "pattern": "^(0|[1-9][0-9]*)$",
      "maxLength": 20
    },
    "version": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128
    },
    "profile_id": {
      "enum": [
        "openai-chat-text-v1-draft.1",
        "openai-responses-v1-draft.1"
      ]
    },
    "scope": {
      "type": "object",
      "properties": {
        "endpoint_id": {
          "$ref": "#/$defs/id"
        },
        "configuration_revision": {
          "$ref": "#/$defs/positive_decimal"
        },
        "model_id": {
          "$ref": "#/$defs/model_id"
        },
        "model_revision": {
          "$ref": "#/$defs/model_revision"
        },
        "profile_id": {
          "$ref": "#/$defs/profile_id"
        },
        "capabilities": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "endpoint_id",
        "configuration_revision",
        "model_id",
        "model_revision",
        "profile_id",
        "capabilities"
      ],
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/$defs/profile_binding"
        }
      ]
    },
    "limits": {
      "type": "object",
      "properties": {
        "max_http_requests": {
          "$ref": "#/$defs/positive_decimal"
        },
        "max_input_bytes_per_request": {
          "$ref": "#/$defs/positive_decimal"
        },
        "max_response_bytes_per_request": {
          "$ref": "#/$defs/positive_decimal"
        },
        "connect_timeout_ms": {
          "$ref": "#/$defs/positive_decimal"
        },
        "idle_timeout_ms": {
          "$ref": "#/$defs/positive_decimal"
        },
        "max_wall_time_ms": {
          "$ref": "#/$defs/positive_decimal"
        },
        "max_output_tokens_per_request": {
          "$ref": "#/$defs/positive_decimal"
        }
      },
      "required": [
        "max_http_requests",
        "max_input_bytes_per_request",
        "max_output_tokens_per_request",
        "max_response_bytes_per_request",
        "connect_timeout_ms",
        "idle_timeout_ms",
        "max_wall_time_ms"
      ],
      "additionalProperties": false
    },
    "profile_binding": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "profile_id": {
              "const": "openai-chat-text-v1-draft.1"
            },
            "capabilities": {
              "type": "array",
              "items": {
                "enum": [
                  "text_chat",
                  "streaming",
                  "usage"
                ]
              },
              "uniqueItems": true,
              "minItems": 3,
              "maxItems": 3
            }
          },
          "required": [
            "profile_id",
            "capabilities"
          ],
          "additionalProperties": true
        },
        {
          "type": "object",
          "properties": {
            "profile_id": {
              "const": "openai-responses-v1-draft.1"
            },
            "capabilities": {
              "type": "array",
              "items": {
                "enum": [
                  "responses",
                  "streaming",
                  "usage",
                  "function_calling",
                  "reasoning",
                  "structured_outputs",
                  "image_input"
                ]
              },
              "minItems": 7,
              "maxItems": 7,
              "uniqueItems": true
            }
          },
          "required": [
            "profile_id",
            "capabilities"
          ],
          "additionalProperties": true
        }
      ]
    },
    "model_revision": {
      "type": "string",
      "pattern": "^[A-Za-z0-9._-]{1,128}$"
    }
  }
}
