{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://github.com/api-search/microsoft-windows-server/json-schema/microsoft-windows-server-site-schema.json",
  "title": "IIS Web Site",
  "description": "Schema for an IIS web site resource as exposed by the Microsoft IIS Administration API. Web sites are a core entity of IIS that determine where and how HTTP requests will be handled, including binding configuration, application pool assignment, and resource limits.",
  "type": "object",
  "required": [
    "name",
    "physical_path",
    "bindings"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The display name of the web site.",
      "examples": [
        "Default Web Site",
        "Demonstration Site"
      ]
    },
    "id": {
      "type": "string",
      "description": "The unique identifier assigned to the web site by the IIS Administration API."
    },
    "physical_path": {
      "type": "string",
      "description": "The physical file system path for the web site root directory. Environment variables such as %SystemDrive% are supported.",
      "examples": [
        "%SystemDrive%\\inetpub\\wwwroot",
        "C:\\inetpub\\wwwroot\\DemonstrationSite"
      ]
    },
    "key": {
      "type": "string",
      "description": "The IIS site key identifier, corresponding to the site ID in IIS configuration.",
      "examples": [
        "1"
      ]
    },
    "status": {
      "type": "string",
      "description": "The current operational status of the web site.",
      "enum": [
        "started",
        "stopped",
        "starting",
        "stopping"
      ]
    },
    "server_auto_start": {
      "type": "boolean",
      "description": "Whether the web site starts automatically when the IIS service starts.",
      "default": true
    },
    "enabled_protocols": {
      "type": "string",
      "description": "A comma-separated list of protocols enabled for this web site.",
      "examples": [
        "http",
        "http,https",
        "http,net.tcp"
      ]
    },
    "limits": {
      "type": "object",
      "description": "Resource limits governing connection behavior and URL processing for the web site.",
      "properties": {
        "connection_timeout": {
          "type": "integer",
          "description": "The time in seconds after which an inactive connection is closed.",
          "minimum": 0,
          "default": 120
        },
        "max_bandwidth": {
          "type": "integer",
          "description": "The maximum bandwidth in bytes per second allowed for the web site. A value of 4294967295 indicates no limit.",
          "minimum": 0,
          "default": 4294967295
        },
        "max_connections": {
          "type": "integer",
          "description": "The maximum number of concurrent connections allowed for the web site. A value of 4294967295 indicates no limit.",
          "minimum": 0,
          "default": 4294967295
        },
        "max_url_segments": {
          "type": "integer",
          "description": "The maximum number of segments allowed in a URL path.",
          "minimum": 0,
          "default": 32
        }
      },
      "additionalProperties": false
    },
    "bindings": {
      "type": "array",
      "description": "The bindings that define the protocols, IP addresses, ports, and hostnames the web site listens on. At minimum, a binding must specify a protocol, IP address, and port.",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": [
          "protocol"
        ],
        "properties": {
          "protocol": {
            "type": "string",
            "description": "The network protocol for this binding.",
            "examples": [
              "http",
              "https",
              "net.tcp"
            ]
          },
          "binding_information": {
            "type": "string",
            "description": "Combined binding string in the format '{ip_address}:{port}:{hostname}' for HTTP/HTTPS protocols.",
            "examples": [
              "*:80:",
              "*:443:",
              "808:*"
            ]
          },
          "ip_address": {
            "type": "string",
            "description": "The IP address the binding listens on. Use '*' to listen on all available addresses.",
            "examples": [
              "*",
              "192.168.1.1",
              "10.0.0.1"
            ]
          },
          "port": {
            "type": "integer",
            "description": "The TCP port number the binding listens on.",
            "minimum": 1,
            "maximum": 65535,
            "examples": [
              80,
              443,
              8080,
              8443
            ]
          },
          "hostname": {
            "type": "string",
            "description": "The hostname for host header-based routing. An empty string matches all hostnames.",
            "examples": [
              "",
              "www.example.com",
              "api.example.com"
            ]
          },
          "certificate": {
            "type": "object",
            "description": "The SSL/TLS certificate associated with an HTTPS binding. Required when protocol is HTTPS.",
            "properties": {
              "name": {
                "type": "string",
                "description": "The friendly name of the certificate.",
                "examples": [
                  "Web Hosting Certificate"
                ]
              },
              "id": {
                "type": "string",
                "description": "The unique identifier of the certificate resource in the IIS Administration API."
              },
              "issued_by": {
                "type": "string",
                "description": "The distinguished name of the certificate issuer.",
                "examples": [
                  "CN=localhost"
                ]
              },
              "subject": {
                "type": "string",
                "description": "The distinguished name of the certificate subject.",
                "examples": [
                  "CN=localhost"
                ]
              },
              "thumbprint": {
                "type": "string",
                "description": "The SHA-1 thumbprint of the certificate.",
                "pattern": "^[0-9A-Fa-f]{40}$",
                "examples": [
                  "2F6C0E796B8DAC4A1DDBF59F1714A19D9520B88A"
                ]
              },
              "valid_to": {
                "type": "string",
                "format": "date-time",
                "description": "The expiration date and time of the certificate in ISO 8601 format.",
                "examples": [
                  "2025-01-09T00:00:00Z"
                ]
              }
            },
            "additionalProperties": false
          },
          "require_sni": {
            "type": "boolean",
            "description": "Whether Server Name Indication (SNI) is required for this HTTPS binding.",
            "default": false
          }
        },
        "additionalProperties": false
      }
    },
    "application_pool": {
      "type": "object",
      "description": "The application pool assigned to handle requests for this web site.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the application pool.",
          "examples": [
            "DefaultAppPool"
          ]
        },
        "id": {
          "type": "string",
          "description": "The unique identifier of the application pool."
        },
        "status": {
          "type": "string",
          "description": "The current operational status of the application pool.",
          "enum": [
            "started",
            "stopped",
            "starting",
            "stopping"
          ]
        }
      },
      "additionalProperties": false
    },
    "_links": {
      "type": "object",
      "description": "HAL-style hypermedia links to related resources.",
      "properties": {
        "authentication": {
          "$ref": "#/$defs/halLink"
        },
        "authorization": {
          "$ref": "#/$defs/halLink"
        },
        "default_document": {
          "$ref": "#/$defs/halLink"
        },
        "delegation": {
          "$ref": "#/$defs/halLink"
        },
        "directory_browsing": {
          "$ref": "#/$defs/halLink"
        },
        "files": {
          "$ref": "#/$defs/halLink"
        },
        "handlers": {
          "$ref": "#/$defs/halLink"
        },
        "ip_restrictions": {
          "$ref": "#/$defs/halLink"
        },
        "logging": {
          "$ref": "#/$defs/halLink"
        },
        "modules": {
          "$ref": "#/$defs/halLink"
        },
        "request_filtering": {
          "$ref": "#/$defs/halLink"
        },
        "request_monitor": {
          "$ref": "#/$defs/halLink"
        },
        "request_tracing": {
          "$ref": "#/$defs/halLink"
        },
        "response_compression": {
          "$ref": "#/$defs/halLink"
        },
        "response_headers": {
          "$ref": "#/$defs/halLink"
        },
        "ssl": {
          "$ref": "#/$defs/halLink"
        },
        "static_content": {
          "$ref": "#/$defs/halLink"
        },
        "vdirs": {
          "$ref": "#/$defs/halLink"
        },
        "webapps": {
          "$ref": "#/$defs/halLink"
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false,
  "$defs": {
    "halLink": {
      "type": "object",
      "description": "A HAL-style hyperlink to a related resource.",
      "properties": {
        "href": {
          "type": "string",
          "format": "uri-reference",
          "description": "The URI of the linked resource."
        }
      },
      "required": [
        "href"
      ],
      "additionalProperties": false
    }
  }
}
