{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "SecurityScheme": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "type"
      ]
    },
    "OAuth2SecurityScheme": {
      "type": "object",
      "properties": {
        "scopes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "scopes",
        "type"
      ],
      "allOf": [
        {
          "$ref": "./http.json#/definitions/SecurityScheme"
        }
      ]
    },
    "AuthorizationCodeOAuthFlow": {
      "type": "object",
      "properties": {
        "authorizationUrl": {
          "description": "an URI",
          "type": "string"
        },
        "tokenUrl": {
          "description": "an URI",
          "type": "string"
        },
        "refreshUrl": {
          "description": "an URI",
          "type": "string"
        },
        "scopes": {
          "$ref": "./master.json#/definitions/Record<string,string>"
        },
        "extensions": {
          "$ref": "./master.json#/definitions/Record<string,any>",
          "description": "additional metadata extensions dictionary"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "authorizationUrl",
        "scopes",
        "tokenUrl"
      ]
    },
    "BearerHTTPSecurityScheme": {
      "type": "object",
      "properties": {
        "scheme": {
          "type": "string",
          "const": "bearer"
        },
        "bearerFormat": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "const": "http"
        },
        "description": {
          "type": "string"
        },
        "extensions": {
          "$ref": "./master.json#/definitions/Record<string,any>",
          "description": "additional metadata extensions dictionary"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "scheme",
        "type"
      ]
    },
    "ClientCredentialsFlow": {
      "type": "object",
      "properties": {
        "tokenUrl": {
          "description": "an URI",
          "type": "string"
        },
        "refreshUrl": {
          "description": "an URI",
          "type": "string"
        },
        "scopes": {
          "$ref": "./master.json#/definitions/Record<string,string>"
        },
        "extensions": {
          "$ref": "./master.json#/definitions/Record<string,any>",
          "description": "additional metadata extensions dictionary"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "scopes",
        "tokenUrl"
      ]
    },
    "ImplicitOAuthFlow": {
      "type": "object",
      "properties": {
        "authorizationUrl": {
          "description": "an URI",
          "type": "string"
        },
        "refreshUrl": {
          "description": "an URI",
          "type": "string"
        },
        "scopes": {
          "$ref": "./master.json#/definitions/Record<string,string>"
        },
        "extensions": {
          "$ref": "./master.json#/definitions/Record<string,any>",
          "description": "additional metadata extensions dictionary"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "authorizationUrl",
        "scopes"
      ]
    },
    "NonBearerHTTPSecurityScheme": {
      "type": "object",
      "properties": {
        "scheme": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "const": "http"
        },
        "extensions": {
          "$ref": "./master.json#/definitions/Record<string,any>",
          "description": "additional metadata extensions dictionary"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "scheme",
        "type"
      ]
    },
    "OAuthFlows": {
      "type": "object",
      "properties": {
        "implicit": {
          "$ref": "./http.json#/definitions/ImplicitOAuthFlow"
        },
        "password": {
          "$ref": "./http.json#/definitions/PasswordOAuthFlow"
        },
        "clientCredentials": {
          "$ref": "./http.json#/definitions/ClientCredentialsFlow"
        },
        "authorizationCode": {
          "$ref": "./http.json#/definitions/AuthorizationCodeOAuthFlow"
        },
        "extensions": {
          "$ref": "./master.json#/definitions/Record<string,any>",
          "description": "additional metadata extensions dictionary"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "HTTPSecurityScheme": {
      "anyOf": [
        {
          "$ref": "./http.json#/definitions/BearerHTTPSecurityScheme"
        },
        {
          "$ref": "./http.json#/definitions/NonBearerHTTPSecurityScheme"
        }
      ]
    },
    "APIKeySecurityScheme": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "apiKey"
        },
        "name": {
          "type": "string"
        },
        "in": {
          "$ref": "./enums.json#/definitions/ParameterLocation"
        },
        "description": {
          "type": "string"
        },
        "extensions": {
          "$ref": "./master.json#/definitions/Record<string,any>",
          "description": "additional metadata extensions dictionary"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "in",
        "name",
        "type"
      ]
    },
    "OpenIdConnectSecurityScheme": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "openIdConnect"
        },
        "openIdConnectUrl": {
          "description": "an URI",
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "extensions": {
          "$ref": "./master.json#/definitions/Record<string,any>",
          "description": "additional metadata extensions dictionary"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "openIdConnectUrl",
        "type"
      ]
    },
    "PasswordOAuthFlow": {
      "type": "object",
      "properties": {
        "tokenUrl": {
          "description": "an URI",
          "type": "string"
        },
        "refreshUrl": {
          "description": "an URI",
          "type": "string"
        },
        "scopes": {
          "$ref": "./master.json#/definitions/Record<string,string>"
        },
        "extensions": {
          "$ref": "./master.json#/definitions/Record<string,any>",
          "description": "additional metadata extensions dictionary"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "scopes",
        "tokenUrl"
      ]
    },
    "SecurityRequirement": {
      "description": "common ways of serializing simple parameters",
      "type": "object",
      "defaultProperties": [],
      "additionalProperties": false
    },
    "HttpParameter": {
      "description": "extended metadata for HTTP operation parameters",
      "type": "object",
      "properties": {
        "in": {
          "description": "the location that this parameter is placed in the http request",
          "enum": [
            "body",
            "cookie",
            "header",
            "none",
            "path",
            "query",
            "uri",
            "virtual"
          ],
          "type": "string"
        },
        "style": {
          "$ref": "./enums.json#/definitions/SerializationStyle",
          "description": "the Serialization Style used for the parameter."
        },
        "explode": {
          "description": "when set, 'form' style parameters generate separate parameters for each value of an array.",
          "type": "boolean"
        },
        "skipUriEncoding": {
          "description": "when set, this indicates that the content of the parameter should not be subject to URI encoding rules.",
          "type": "boolean"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "in"
      ],
      "allOf": [
        {
          "$ref": "./master.json#/definitions/Protocol"
        }
      ]
    },
    "HttpRequest": {
      "description": "HTTP operation protocol data",
      "type": "object",
      "properties": {
        "path": {
          "description": "A relative path to an individual endpoint.\n\nThe field name MUST begin with a slash.\nThe path is appended (no relative URL resolution) to the expanded URL from the Server Object's url field in order to construct the full URL.\nPath templating is allowed.\n\nWhen matching URLs, concrete (non-templated) paths would be matched before their templated counterparts.",
          "type": "string"
        },
        "uri": {
          "description": "the base URI template for the operation. This will be a template that has Uri parameters to craft the base url to use.",
          "type": "string"
        },
        "method": {
          "$ref": "./enums.json#/definitions/HttpMethod",
          "description": "the HTTP Method used to process this operation"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "method",
        "path",
        "uri"
      ],
      "allOf": [
        {
          "$ref": "./master.json#/definitions/Protocol"
        }
      ]
    },
    "HttpWithBodyRequest": {
      "type": "object",
      "properties": {
        "knownMediaType": {
          "$ref": "./enums.json#/definitions/KnownMediaType",
          "description": "a normalized value for the media type (ie, distills down to a well-known moniker (ie, 'json'))"
        },
        "mediaTypes": {
          "description": "must contain at least one media type to send for the body",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "knownMediaType",
        "mediaTypes",
        "method",
        "path",
        "uri"
      ],
      "allOf": [
        {
          "$ref": "./http.json#/definitions/HttpRequest"
        }
      ]
    },
    "HttpBinaryRequest": {
      "type": "object",
      "properties": {
        "binary": {
          "type": "boolean",
          "const": true
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "binary",
        "knownMediaType",
        "mediaTypes",
        "method",
        "path",
        "uri"
      ],
      "allOf": [
        {
          "$ref": "./http.json#/definitions/HttpWithBodyRequest"
        }
      ]
    },
    "HttpMultipartRequest": {
      "type": "object",
      "properties": {
        "multipart": {
          "description": "indicates that the HTTP Request should be a multipart request\n\nie, that it has multiple requests in a single request.",
          "type": "boolean",
          "const": true
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "knownMediaType",
        "mediaTypes",
        "method",
        "multipart",
        "path",
        "uri"
      ],
      "allOf": [
        {
          "$ref": "./http.json#/definitions/HttpWithBodyRequest"
        }
      ]
    },
    "HttpHeader": {
      "type": "object",
      "properties": {
        "header": {
          "type": "string"
        },
        "schema": {
          "$ref": "./schemas.json#/definitions/Schema"
        },
        "language": {
          "$ref": "./master.json#/definitions/Languages"
        },
        "extensions": {
          "$ref": "./master.json#/definitions/Record<string,any>",
          "description": "additional metadata extensions dictionary"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "header",
        "language",
        "schema"
      ]
    },
    "HttpResponse": {
      "type": "object",
      "properties": {
        "statusCodes": {
          "description": "the possible HTTP status codes that this response MUST match one of.",
          "type": "array",
          "items": {
            "$ref": "./enums.json#/definitions/StatusCode"
          }
        },
        "knownMediaType": {
          "$ref": "./enums.json#/definitions/KnownMediaType",
          "description": "canonical response type (ie, 'json')."
        },
        "mediaTypes": {
          "description": "The possible media types that this response MUST match one of.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "headers": {
          "description": "content returned by the service in the HTTP headers",
          "type": "array",
          "items": {
            "$ref": "./http.json#/definitions/HttpHeader"
          }
        },
        "headerGroups": {
          "description": "sets of HTTP headers grouped together into a single schema",
          "type": "array",
          "items": {
            "$ref": "./schemas.json#/definitions/GroupSchema"
          }
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "statusCodes"
      ],
      "allOf": [
        {
          "$ref": "./master.json#/definitions/Protocol"
        }
      ]
    },
    "HttpBinaryResponse": {
      "type": "object",
      "properties": {
        "binary": {
          "description": "binary responses",
          "type": "boolean",
          "const": true
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "binary",
        "statusCodes"
      ],
      "allOf": [
        {
          "$ref": "./http.json#/definitions/HttpResponse"
        }
      ]
    },
    "HttpModel": {
      "description": "code model metadata for HTTP protocol",
      "type": "object",
      "properties": {
        "security": {
          "description": "a collection of security requirements for the service",
          "type": "array",
          "items": {
            "$ref": "./http.json#/definitions/SecurityRequirement"
          }
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "./master.json#/definitions/Protocol"
        }
      ]
    }
  }
}