{
  "definitions": {
    "Callback": {
      "description": "A map of possible out-of band callbacks related to the parent operation. Each value in the map is a Path Item Object that describes a set of requests that may be initiated by the API provider and the expected responses. The key value used to identify the callback object is an expression, evaluated at runtime, that identifies a URL to use for the callback operation.",
      "type": "object",
      "additionalProperties": {
        "$ref": "PathItem"
      }
    },
    "Callbacks": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "Callback"
          },
          {
            "$ref": "Reference"
          }
        ]
      }
    },
    "Components": {
      "description": "Holds a set of reusable objects for different aspects of the OAS. All objects defined within the components object will have no effect on the API unless they are explicitly referenced from properties outside the components object.",
      "type": "object",
      "properties": {
        "schemas": {
          "$ref": "Schemas"
        },
        "responses": {
          "$ref": "Responses"
        },
        "parameters": {
          "$ref": "Parameters"
        },
        "examples": {
          "$ref": "Examples"
        },
        "requestBodies": {
          "$ref": "RequestBodies"
        },
        "headers": {
          "$ref": "Headers"
        },
        "securitySchemes": {
          "$ref": "SecuritySchemes"
        },
        "links": {
          "$ref": "Links"
        },
        "callbacks": {
          "$ref": "Callbacks"
        }
      }
    },
    "Contact": {
      "description": "Contact information for the exposed API.",
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "email": {
          "type": "string"
        }
      }
    },
    "Encoding": {
      "description": "A single encoding definition applied to a single schema property.",
      "type": "object",
      "properties": {
        "contentType": {
          "type": "string"
        },
        "headers": {
          "$ref": "Headers"
        },
        "style": {
          "type": "string"
        },
        "explode": {
          "type": "boolean"
        },
        "allowReserved": {
          "type": "boolean"
        }
      }
    },
    "Encodings": {
      "type": "object",
      "additionalProperties": {
        "$ref": "Encoding"
      }
    },
    "Example": {
      "type": "object",
      "properties": {
        "summary": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "externalValue": {
          "type": "string"
        }
      }
    },
    "ExternalDocs": {
      "description": "Allows referencing an external resource for extended documentation.",
      "type": "object",
      "properties": {
        "description": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "url"
      ]
    },
    "Header": {
      "description": "The Header Object follows the structure of the Parameter Object with the following changes:  1. `name` MUST NOT be specified, it is given in the corresponding `headers` map. 1. `in` MUST NOT be specified, it is implicitly in `header`. 1. All traits that are affected by the location MUST be applicable to a location of `header` (for example, `style`).",
      "type": "object",
      "properties": {
        "description": {
          "type": "string"
        },
        "required": {
          "type": "boolean"
        },
        "deprecated": {
          "type": "boolean"
        },
        "allowEmptyValue": {
          "type": "boolean"
        },
        "style": {
          "type": "string"
        },
        "explode": {
          "type": "boolean"
        },
        "allowReserved": {
          "type": "boolean"
        },
        "schema": {
          "type": "any"
        },
        "example": {
          "type": "any"
        },
        "examples": {
          "$ref": "Examples"
        },
        "content": {
          "$ref": "MediaTypes"
        }
      }
    },
    "Headers": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "Header"
          },
          {
            "$ref": "Reference"
          }
        ]
      }
    },
    "Info": {
      "description": "The object provides metadata about the API. The metadata can be used by the clients if needed, and can be presented in editing or documentation generation tools for convenience.",
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "termsOfService": {
          "type": "string"
        },
        "contact": {
          "$ref": "Contact"
        },
        "license": {
          "$ref": "License"
        },
        "version": {
          "type": "string"
        }
      },
      "required": [
        "title",
        "version"
      ]
    },
    "License": {
      "description": "License information for the exposed API.",
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "name"
      ]
    },
    "Link": {
      "description": "The `Link object` represents a possible design-time link for a response. The presence of a link does not guarantee the caller's ability to successfully invoke it, rather it provides a known relationship and traversal mechanism between responses and other operations.  Unlike _dynamic_ links (i.e. links provided **in** the response payload), the OAS linking mechanism does not require link information in the runtime response.  For computing links, and providing instructions to execute them, a runtime expression is used for accessing values in an operation and using them as parameters while invoking the linked operation.",
      "type": "object",
      "properties": {
        "operationRef": {
          "type": "string"
        },
        "operationId": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "server": {
          "$ref": "Server"
        }
      }
    },
    "Links": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "Link"
          },
          {
            "$ref": "Reference"
          }
        ]
      }
    },
    "MediaType": {
      "description": "Each Media Type Object provides schema and examples for the media type identified by its key.",
      "type": "object",
      "properties": {
        "schema": {
          "type": "any"
        },
        "example": {
          "type": "any"
        },
        "examples": {
          "$ref": "Examples"
        },
        "encoding": {
          "$ref": "Encodings"
        }
      }
    },
    "MediaTypes": {
      "type": "object",
      "additionalProperties": {
        "$ref": "MediaType"
      }
    },
    "OAuthFlow": {
      "type": "object",
      "properties": {
        "authorizationUrl": {
          "type": "string"
        },
        "tokenUrl": {
          "type": "string"
        },
        "refreshUrl": {
          "type": "string"
        },
        "scopes": {
          "$ref": "Scopes"
        }
      }
    },
    "OAuthFlows": {
      "type": "object",
      "properties": {
        "implicit": {
          "$ref": "OAuthFlow"
        },
        "password": {
          "$ref": "OAuthFlow"
        },
        "clientCredentials": {
          "$ref": "OAuthFlow"
        },
        "authorizationCode": {
          "$ref": "OAuthFlow"
        }
      }
    },
    "OpenAPI": {
      "description": "This is the root document object of the OpenAPI definition file.",
      "type": "object",
      "properties": {
        "openapi": {
          "const": "3.0.0",
          "type": "string"
        },
        "info": {
          "$ref": "Info"
        },
        "servers": {
          "type": "array",
          "items": {
            "$ref": "Server"
          },
          "uniqueItems": true
        },
        "paths": {
          "$ref": "Paths"
        },
        "components": {
          "$ref": "Components"
        },
        "security": {
          "type": "array",
          "items": {
            "$ref": "SecurityRequirement"
          },
          "uniqueItems": true
        },
        "tags": {
          "type": "array",
          "items": {
            "$ref": "Tag"
          },
          "uniqueItems": true
        },
        "externalDocs": {
          "$ref": "ExternalDocs"
        }
      },
      "required": [
        "openapi",
        "info",
        "paths"
      ]
    },
    "Operation": {
      "description": "Describes a single API operation on a path.",
      "type": "object",
      "properties": {
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true
        },
        "summary": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "externalDocs": {
          "$ref": "ExternalDocs"
        },
        "operationId": {
          "type": "string"
        },
        "parameters": {
          "type": "array",
          "items": {
            "oneOf": [
              {
                "$ref": "Parameter"
              },
              {
                "$ref": "Reference"
              }
            ]
          },
          "uniqueItems": true
        },
        "requestBody": {
          "oneOf": [
            {
              "$ref": "RequestBody"
            },
            {
              "$ref": "Reference"
            }
          ]
        },
        "responses": {
          "$ref": "Responses"
        },
        "callbacks": {
          "oneOf": [
            {
              "$ref": "Callback"
            },
            {
              "$ref": "Reference"
            }
          ]
        },
        "deprecated": {
          "type": "boolean"
        },
        "security": {
          "type": "array",
          "items": {
            "$ref": "SecurityRequirement"
          },
          "uniqueItems": true
        },
        "servers": {
          "type": "array",
          "items": {
            "$ref": "Server"
          },
          "uniqueItems": true
        }
      },
      "required": [
        "responses"
      ]
    },
    "Parameters": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "Parameter"
          },
          {
            "$ref": "Reference"
          }
        ]
      }
    },
    "Parameter": {
      "description": "Describes a single operation parameter.  A unique parameter is defined by a combination of a name and location.",
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "in": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "required": {
          "type": "boolean"
        },
        "deprecated": {
          "type": "boolean"
        },
        "allowEmptyValue": {
          "type": "boolean"
        },
        "style": {
          "type": "string"
        },
        "explode": {
          "type": "boolean"
        },
        "allowReserved": {
          "type": "boolean"
        },
        "schema": {
          "type": "any"
        },
        "example": {
          "type": "any"
        },
        "examples": {
          "$ref": "Examples"
        },
        "content": {
          "$ref": "MediaTypes"
        }
      },
      "required": [
        "name",
        "in"
      ]
    },
    "Examples": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "Example"
          },
          {
            "$ref": "Reference"
          }
        ]
      }
    },
    "PathItem": {
      "description": "Describes the operations available on a single path. A Path Item MAY be empty, due to ACL constraints. The path itself is still exposed to the documentation viewer but they will not know which operations and parameters are available.",
      "type": "object",
      "properties": {
        "$ref": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "get": {
          "$ref": "Operation"
        },
        "put": {
          "$ref": "Operation"
        },
        "post": {
          "$ref": "Operation"
        },
        "delete": {
          "$ref": "Operation"
        },
        "options": {
          "$ref": "Operation"
        },
        "head": {
          "$ref": "Operation"
        },
        "patch": {
          "$ref": "Operation"
        },
        "trace": {
          "$ref": "Operation"
        },
        "servers": {
          "type": "array",
          "items": {
            "$ref": "Server"
          },
          "uniqueItems": true
        },
        "parameters": {
          "type": "array",
          "items": {
            "oneOf": [
              {
                "$ref": "Parameter"
              },
              {
                "$ref": "Reference"
              }
            ]
          },
          "uniqueItems": true
        }
      }
    },
    "Paths": {
      "description": "Holds the relative paths to the individual endpoints and their operations. The path is appended to the URL from the `Server Object` in order to construct the full URL.  The Paths MAY be empty, due to ACL constraints.",
      "type": "object",
      "additionalProperties": {
        "$ref": "PathItem"
      }
    },
    "Reference": {
      "description": "A simple object to allow referencing other components in the specification, internally and externally.  The Reference Object is defined by JSON Reference and follows the same structure, behavior and rules.   For this specification, reference resolution is accomplished as defined by the JSON Reference specification and not by the JSON Schema specification.",
      "type": "object",
      "properties": {
        "$ref": {
          "type": "string"
        }
      },
      "required": [
        "$ref"
      ]
    },
    "RequestBody": {
      "description": "Describes a single request body.",
      "type": "object",
      "properties": {
        "description": {
          "type": "string"
        },
        "content": {
          "$ref": "MediaTypes"
        },
        "required": {
          "type": "boolean"
        }
      },
      "required": [
        "content"
      ]
    },
    "RequestBodies": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "RequestBody"
          },
          {
            "$ref": "Reference"
          }
        ]
      }
    },
    "Response": {
      "description": "Describes a single response from an API Operation, including design-time, static  `links` to operations based on the response.",
      "type": "object",
      "properties": {
        "description": {
          "type": "string"
        },
        "headers": {
          "$ref": "Headers"
        },
        "content": {
          "$ref": "MediaTypes"
        },
        "links": {
          "oneOf": [
            {
              "$ref": "Link"
            },
            {
              "$ref": "Reference"
            }
          ]
        }
      },
      "required": [
        "description"
      ]
    },
    "Responses": {
      "description": "A container for the expected responses of an operation. The container maps a HTTP response code to the expected response.  The documentation is not necessarily expected to cover all possible HTTP response codes because they may not be known in advance. However, documentation is expected to cover a successful operation response and any known errors.  The `default` MAY be used as a default response object for all HTTP codes  that are not covered individually by the specification.  The `Responses Object` MUST contain at least one response code, and it  SHOULD be the response for a successful operation call.",
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "Response"
          },
          {
            "$ref": "Reference"
          }
        ]
      }
    },
    "SecurityRequirement": {
      "description": "Lists the required security schemes to execute this operation. The name used for each property MUST correspond to a security scheme declared in the Security Schemes under the Components Object.  Security Requirement Objects that contain multiple schemes require that all schemes MUST be satisfied for a request to be authorized. This enables support for scenarios where multiple query parameters or HTTP headers are required to convey security information.  When a list of Security Requirement Objects is defined on the Open API object or Operation Object, only one of Security Requirement Objects in the list needs to be satisfied to authorize the request.",
      "type": "object",
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    },
    "SecuritySchemes": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {
            "$ref": "SecurityScheme"
          },
          {
            "$ref": "Reference"
          }
        ]
      }
    },
    "Server": {
      "description": "An object representing a Server.",
      "type": "object",
      "properties": {
        "url": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "variables": {
          "$ref": "ServerVariables"
        }
      },
      "required": [
        "url"
      ]
    },
    "ServerVariable": {
      "description": "An object representing a Server Variable for server URL template substitution.",
      "type": "object",
      "properties": {
        "enum": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true
        },
        "default": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      },
      "required": [
        "default"
      ]
    },
    "ServerVariables": {
      "type": "object",
      "additionalProperties": {
        "$ref": "ServerVariable"
      }
    },
    "Schemas": {
      "type": "object",
      "additionalProperties": {
        "type": "any"
      }
    },
    "Scopes": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "SecurityScheme": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "in": {
          "type": "string"
        },
        "scheme": {
          "type": "string"
        },
        "bearerFormat": {
          "type": "string"
        },
        "flows": {
          "$ref": "OAuthFlows"
        },
        "openIdConnectUrl": {
          "type": "string"
        }
      }
    },
    "Tag": {
      "description": "Adds metadata to a single tag that is used by the Operation Object. It is not mandatory to have a Tag Object per tag defined in the Operation Object instances.",
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "externalDocs": {
          "$ref": "ExternalDocs"
        }
      },
      "required": [
        "name"
      ]
    }
  },
  "$ref": "OpenAPI"
}