type: object
required:
  - openapi
  - info
  - paths
properties:
  openapi:
    type: string
    pattern: ^3\.0\.\d(-.+)?$
  info:
    $ref: '#/definitions/Info'
  externalDocs:
    $ref: '#/definitions/ExternalDocumentation'
  servers:
    type: array
    items:
      $ref: '#/definitions/Server'
  security:
    type: array
    items:
      $ref: '#/definitions/SecurityRequirement'
  tags:
    type: array
    items:
      $ref: '#/definitions/Tag'
    uniqueItems: true
  paths:
    $ref: '#/definitions/Paths'
  components:
    $ref: '#/definitions/Components'
patternProperties:
  ^x-: {}
additionalProperties: false
definitions:
  Reference:
    type: object
    required:
      - $ref
    patternProperties:
      ^\$ref$:
        type: string
        format: uri-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 done as defined by the
      JSON Reference specification and not by the JSON Schema specification.
  Info:
    type: object
    required:
      - title
      - version
    properties:
      title:
        type: string
      description:
        type: string
      termsOfService:
        type: string
        format: uri-reference
      contact:
        $ref: '#/definitions/Contact'
      license:
        $ref: '#/definitions/License'
      version:
        type: string
    patternProperties:
      ^x-: {}
    additionalProperties: false
    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.
  Contact:
    type: object
    properties:
      name:
        type: string
      url:
        type: string
        format: uri-reference
      email:
        type: string
        format: email
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: Contact information for the exposed API.
  License:
    type: object
    required:
      - name
    properties:
      name:
        type: string
      url:
        type: string
        format: uri-reference
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: License information for the exposed API.
  Server:
    type: object
    required:
      - url
    properties:
      url:
        type: string
      description:
        type: string
      variables:
        type: object
        additionalProperties:
          $ref: '#/definitions/ServerVariable'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: An object representing a Server.
  ServerVariable:
    type: object
    required:
      - default
    properties:
      enum:
        type: array
        items:
          type: string
      default:
        type: string
      description:
        type: string
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      An object representing a Server Variable for server URL template
      substitution.
  Components:
    type: object
    properties:
      schemas:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Schema'
      responses:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Response'
      parameters:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Parameter'
      examples:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Example'
      requestBodies:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/RequestBody'
      headers:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Header'
      securitySchemes:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/SecurityScheme'
      links:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Link'
      callbacks:
        type: object
        patternProperties:
          '^[a-zA-Z0-9\.\-_]+$':
            oneOf:
              - $ref: '#/definitions/Reference'
              - $ref: '#/definitions/Callback'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    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.
  Schema:
    type: object
    properties:
      title:
        type: string
      multipleOf:
        type: number
        minimum: 0
        exclusiveMinimum: true
      maximum:
        type: number
      exclusiveMaximum:
        type: boolean
        default: false
      minimum:
        type: number
      exclusiveMinimum:
        type: boolean
        default: false
      maxLength:
        type: integer
        minimum: 0
      minLength:
        type: integer
        minimum: 0
        default: 0
      pattern:
        type: string
        format: regex
      maxItems:
        type: integer
        minimum: 0
      minItems:
        type: integer
        minimum: 0
        default: 0
      uniqueItems:
        type: boolean
        default: false
      maxProperties:
        type: integer
        minimum: 0
      minProperties:
        type: integer
        minimum: 0
        default: 0
      required:
        type: array
        items:
          type: string
        minItems: 1
        uniqueItems: true
      enum:
        type: array
        items: {}
        minItems: 1
        uniqueItems: false
      type:
        type: string
        enum:
          - array
          - boolean
          - integer
          - number
          - object
          - string
      not:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      allOf:
        type: array
        items:
          oneOf:
            - $ref: '#/definitions/Schema'
            - $ref: '#/definitions/Reference'
      oneOf:
        type: array
        items:
          oneOf:
            - $ref: '#/definitions/Schema'
            - $ref: '#/definitions/Reference'
      anyOf:
        type: array
        items:
          oneOf:
            - $ref: '#/definitions/Schema'
            - $ref: '#/definitions/Reference'
      items:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      properties:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Schema'
            - $ref: '#/definitions/Reference'
      additionalProperties:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
          - type: boolean
        default: true
      description:
        type: string
      format:
        type: string
      default: {}
      nullable:
        type: boolean
        default: false
      discriminator:
        $ref: '#/definitions/Discriminator'
      readOnly:
        type: boolean
        default: false
      writeOnly:
        type: boolean
        default: false
      example: {}
      externalDocs:
        $ref: '#/definitions/ExternalDocumentation'
      deprecated:
        type: boolean
        default: false
      xml:
        $ref: '#/definitions/XML'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      The Schema Object allows the definition of input and output data types.
      These types can be objects, but also primitives and arrays. This object is
      an extended subset of the JSON Schema Specification Wright Draft 00. 
      Further information about the properties can be found in JSON Schema Core
      and JSON Schema Validation. Unless stated otherwise, the property
      definitions follow the JSON Schema specification as referenced here.
  Discriminator:
    type: object
    required:
      - propertyName
    properties:
      propertyName:
        type: string
      mapping:
        type: object
        additionalProperties:
          type: string
    description: >-
      When request bodies or response payloads may be one of a number of
      different schemas, a `discriminator` object can be used to aid in
      serialization, deserialization, and validation.  The discriminator is a
      specific object in a schema which is used to inform the consumer of the
      specification of an alternative schema based on the value associated with
      it.  Note, when using the discriminator, _inline_ schemas will not be
      considered when using the discriminator.
  XML:
    type: object
    properties:
      name:
        type: string
      namespace:
        type: string
        format: uri
      prefix:
        type: string
      attribute:
        type: boolean
        default: false
      wrapped:
        type: boolean
        default: false
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      A metadata object that allows for more fine-tuned XML model definitions. 
      When using arrays, XML element names are *not* inferred (for
      singular/plural forms) and the `name` property SHOULD be used to add that
      information. See examples for expected behavior.
  Response:
    type: object
    required:
      - description
    properties:
      description:
        type: string
      headers:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Header'
            - $ref: '#/definitions/Reference'
      content:
        type: object
        additionalProperties:
          $ref: '#/definitions/MediaType'
      links:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Link'
            - $ref: '#/definitions/Reference'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Describes a single response from an API Operation, including design-time,
      static  `links` to operations based on the response.
  MediaType:
    oneOf:
      - $ref: '#/definitions/MediaTypeWithExample'
      - $ref: '#/definitions/MediaTypeWithExamples'
    description: >-
      Each Media Type Object provides schema and examples for a the media type
      identified by its key.  Media Type Objects can be used in a Content
      Object.
  MediaTypeWithExample:
    type: object
    properties:
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      example: {}
      encoding:
        type: object
        additionalProperties:
          $ref: '#/definitions/Encoding'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Each Media Type Object provides schema and examples for a the media type
      identified by its key.  Media Type Objects can be used in a Content
      Object.
  MediaTypeWithExamples:
    type: object
    required:
      - examples
    properties:
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      examples:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Example'
            - $ref: '#/definitions/Reference'
      encoding:
        type: object
        additionalProperties:
          $ref: '#/definitions/Encoding'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Each Media Type Object provides schema and examples for a the media type
      identified by its key.  Media Type Objects can be used in a Content
      Object.
  Example:
    type: object
    properties:
      summary:
        type: string
      description:
        type: string
      value: {}
      externalValue:
        type: string
        format: uri-reference
    patternProperties:
      ^x-: {}
    additionalProperties: false
  Header:
    oneOf:
      - $ref: '#/definitions/HeaderWithSchema'
      - $ref: '#/definitions/HeaderWithContent'
    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
      Headers Object. 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`).
  HeaderWithSchema:
    oneOf:
      - $ref: '#/definitions/HeaderWithSchemaWithExample'
      - $ref: '#/definitions/HeaderWithSchemaWithExamples'
    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
      Headers Object. 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`).
  HeaderWithSchemaWithExample:
    type: object
    required:
      - schema
    properties:
      description:
        type: string
      required:
        type: boolean
        default: false
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      style:
        type: string
        enum:
          - simple
        default: simple
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      example: {}
    patternProperties:
      ^x-: {}
    additionalProperties: false
    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
      Headers Object. 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`).
  HeaderWithSchemaWithExamples:
    type: object
    required:
      - schema
      - examples
    properties:
      description:
        type: string
      required:
        type: boolean
        default: false
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      style:
        type: string
        enum:
          - simple
        default: simple
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      examples:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Example'
            - $ref: '#/definitions/Reference'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    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
      Headers Object. 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`).
  HeaderWithContent:
    type: object
    required:
      - content
    properties:
      description:
        type: string
      required:
        type: boolean
        default: false
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      content:
        type: object
        additionalProperties:
          $ref: '#/definitions/MediaType'
        minProperties: 1
        maxProperties: 1
    patternProperties:
      ^x-: {}
    additionalProperties: false
    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
      Headers Object. 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`).
  Paths:
    type: object
    patternProperties:
      ^\/:
        $ref: '#/definitions/PathItem'
      ^x-: {}
    additionalProperties: false
    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.
  PathItem:
    type: object
    properties:
      $ref:
        type: string
      summary:
        type: string
      description:
        type: string
      get:
        $ref: '#/definitions/Operation'
      put:
        $ref: '#/definitions/Operation'
      post:
        $ref: '#/definitions/Operation'
      delete:
        $ref: '#/definitions/Operation'
      options:
        $ref: '#/definitions/Operation'
      head:
        $ref: '#/definitions/Operation'
      patch:
        $ref: '#/definitions/Operation'
      trace:
        $ref: '#/definitions/Operation'
      servers:
        type: array
        items:
          $ref: '#/definitions/Server'
      parameters:
        type: array
        items:
          oneOf:
            - $ref: '#/definitions/Parameter'
            - $ref: '#/definitions/Reference'
        uniqueItems: true
    patternProperties:
      ^x-: {}
    additionalProperties: false
    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.
  Operation:
    type: object
    required:
      - responses
    properties:
      tags:
        type: array
        items:
          type: string
      summary:
        type: string
      description:
        type: string
      externalDocs:
        $ref: '#/definitions/ExternalDocumentation'
      operationId:
        type: string
      parameters:
        type: array
        items:
          oneOf:
            - $ref: '#/definitions/Parameter'
            - $ref: '#/definitions/Reference'
        uniqueItems: true
      requestBody:
        oneOf:
          - $ref: '#/definitions/RequestBody'
          - $ref: '#/definitions/Reference'
      responses:
        $ref: '#/definitions/Responses'
      callbacks:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Callback'
            - $ref: '#/definitions/Reference'
      deprecated:
        type: boolean
        default: false
      security:
        type: array
        items:
          $ref: '#/definitions/SecurityRequirement'
      servers:
        type: array
        items:
          $ref: '#/definitions/Server'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: Describes a single API operation on a path.
  Responses:
    type: object
    properties:
      default:
        oneOf:
          - $ref: '#/definitions/Response'
          - $ref: '#/definitions/Reference'
    patternProperties:
      '^[1-5](?:\d{2}|XX)$':
        oneOf:
          - $ref: '#/definitions/Response'
          - $ref: '#/definitions/Reference'
      ^x-: {}
    minProperties: 1
    additionalProperties: false
    description: >-
      A container for the expected responses of an operation. The container maps
      a HTTP response code to the expected response.  It is not expected for the
      documentation to necessarily cover all possible HTTP response codes, since
      they may not be known in advance. However, it is expected for the
      documentation 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.
  SecurityRequirement:
    type: object
    additionalProperties:
      type: array
      items:
        type: string
    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 there 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.
  Tag:
    type: object
    required:
      - name
    properties:
      name:
        type: string
      description:
        type: string
      externalDocs:
        $ref: '#/definitions/ExternalDocumentation'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Allows adding meta data to a single tag that is used by the Operation
      Object. It is not mandatory to have a Tag Object per tag used there.
  ExternalDocumentation:
    type: object
    required:
      - url
    properties:
      description:
        type: string
      url:
        type: string
        format: uri-reference
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: Allows referencing an external resource for extended documentation.
  Parameter:
    oneOf:
      - $ref: '#/definitions/ParameterWithSchema'
      - $ref: '#/definitions/ParameterWithContent'
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithSchema:
    oneOf:
      - $ref: '#/definitions/ParameterWithSchemaWithExample'
      - $ref: '#/definitions/ParameterWithSchemaWithExamples'
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithSchemaWithExample:
    oneOf:
      - $ref: '#/definitions/ParameterWithSchemaWithExampleInPath'
      - $ref: '#/definitions/ParameterWithSchemaWithExampleInQuery'
      - $ref: '#/definitions/ParameterWithSchemaWithExampleInHeader'
      - $ref: '#/definitions/ParameterWithSchemaWithExampleInCookie'
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithSchemaWithExampleInPath:
    type: object
    required:
      - name
      - in
      - schema
      - required
    properties:
      name:
        type: string
      in:
        type: string
        enum:
          - path
      description:
        type: string
      required:
        type: boolean
        enum:
          - true
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      style:
        type: string
        enum:
          - matrix
          - label
          - simple
        default: simple
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      example: {}
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithSchemaWithExampleInQuery:
    type: object
    required:
      - name
      - in
      - schema
    properties:
      name:
        type: string
      in:
        type: string
        enum:
          - query
      description:
        type: string
      required:
        type: boolean
        default: false
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      style:
        type: string
        enum:
          - form
          - spaceDelimited
          - pipeDelimited
          - deepObject
        default: form
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      example: {}
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithSchemaWithExampleInHeader:
    type: object
    required:
      - name
      - in
      - schema
    properties:
      name:
        type: string
      in:
        type: string
        enum:
          - header
      description:
        type: string
      required:
        type: boolean
        default: false
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      style:
        type: string
        enum:
          - simple
        default: simple
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      example: {}
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithSchemaWithExampleInCookie:
    type: object
    required:
      - name
      - in
      - schema
    properties:
      name:
        type: string
      in:
        type: string
        enum:
          - cookie
      description:
        type: string
      required:
        type: boolean
        default: false
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      style:
        type: string
        enum:
          - form
        default: form
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      example: {}
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithSchemaWithExamples:
    oneOf:
      - $ref: '#/definitions/ParameterWithSchemaWithExamplesInPath'
      - $ref: '#/definitions/ParameterWithSchemaWithExamplesInQuery'
      - $ref: '#/definitions/ParameterWithSchemaWithExamplesInHeader'
      - $ref: '#/definitions/ParameterWithSchemaWithExamplesInCookie'
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithSchemaWithExamplesInPath:
    type: object
    required:
      - name
      - in
      - schema
      - required
      - examples
    properties:
      name:
        type: string
      in:
        type: string
        enum:
          - path
      description:
        type: string
      required:
        type: boolean
        enum:
          - true
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      style:
        type: string
        enum:
          - matrix
          - label
          - simple
        default: simple
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      examples:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Example'
            - $ref: '#/definitions/Reference'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithSchemaWithExamplesInQuery:
    type: object
    required:
      - name
      - in
      - schema
      - examples
    properties:
      name:
        type: string
      in:
        type: string
        enum:
          - query
      description:
        type: string
      required:
        type: boolean
        default: false
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      style:
        type: string
        enum:
          - form
          - spaceDelimited
          - pipeDelimited
          - deepObject
        default: form
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      examples:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Example'
            - $ref: '#/definitions/Reference'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithSchemaWithExamplesInHeader:
    type: object
    required:
      - name
      - in
      - schema
      - examples
    properties:
      name:
        type: string
      in:
        type: string
        enum:
          - header
      description:
        type: string
      required:
        type: boolean
        default: false
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      style:
        type: string
        enum:
          - simple
        default: simple
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      examples:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Example'
            - $ref: '#/definitions/Reference'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithSchemaWithExamplesInCookie:
    type: object
    required:
      - name
      - in
      - schema
      - examples
    properties:
      name:
        type: string
      in:
        type: string
        enum:
          - cookie
      description:
        type: string
      required:
        type: boolean
        default: false
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      style:
        type: string
        enum:
          - form
        default: form
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
      schema:
        oneOf:
          - $ref: '#/definitions/Schema'
          - $ref: '#/definitions/Reference'
      examples:
        type: object
        additionalProperties:
          oneOf:
            - $ref: '#/definitions/Example'
            - $ref: '#/definitions/Reference'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithContent:
    oneOf:
      - $ref: '#/definitions/ParameterWithContentInPath'
      - $ref: '#/definitions/ParameterWithContentNotInPath'
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithContentInPath:
    type: object
    required:
      - name
      - in
      - content
    properties:
      name:
        type: string
      in:
        type: string
        enum:
          - path
      description:
        type: string
      required:
        type: boolean
        enum:
          - true
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      content:
        type: object
        additionalProperties:
          $ref: '#/definitions/MediaType'
        minProperties: 1
        maxProperties: 1
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  ParameterWithContentNotInPath:
    type: object
    required:
      - name
      - in
      - content
    properties:
      name:
        type: string
      in:
        type: string
        enum:
          - query
          - header
          - cookie
      description:
        type: string
      required:
        type: boolean
        default: false
      deprecated:
        type: boolean
        default: false
      allowEmptyValue:
        type: boolean
        default: false
      content:
        type: object
        additionalProperties:
          $ref: '#/definitions/MediaType'
        minProperties: 1
        maxProperties: 1
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      Describes a single operation parameter.  A unique parameter is defined by
      a combination of a name and location.
  RequestBody:
    type: object
    required:
      - content
    properties:
      description:
        type: string
      content:
        type: object
        additionalProperties:
          $ref: '#/definitions/MediaType'
      required:
        type: boolean
        default: false
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: Describes a single request body.
  SecurityScheme:
    oneOf:
      - $ref: '#/definitions/APIKeySecurityScheme'
      - $ref: '#/definitions/HTTPSecurityScheme'
      - $ref: '#/definitions/OAuth2SecurityScheme'
      - $ref: '#/definitions/OpenIdConnectSecurityScheme'
    description: >-
      Allows the definition of a security scheme that can be used by the
      operations. Supported schemes are HTTP authentication, an API key (either
      as a header or as a query parameter) and OAuth2's common flows (implicit,
      password, application and access code).
  APIKeySecurityScheme:
    type: object
    required:
      - type
      - name
      - in
    properties:
      type:
        type: string
        enum:
          - apiKey
      name:
        type: string
      in:
        type: string
        enum:
          - header
          - query
          - cookie
      description:
        type: string
    patternProperties:
      ^x-: {}
    additionalProperties: false
  HTTPSecurityScheme:
    oneOf:
      - $ref: '#/definitions/NonBearerHTTPSecurityScheme'
      - $ref: '#/definitions/BearerHTTPSecurityScheme'
  NonBearerHTTPSecurityScheme:
    type: object
    required:
      - scheme
      - type
    properties:
      scheme:
        type: string
        not:
          enum:
            - bearer
      description:
        type: string
      type:
        type: string
        enum:
          - http
    patternProperties:
      ^x-: {}
    additionalProperties: false
  BearerHTTPSecurityScheme:
    type: object
    required:
      - type
      - scheme
    properties:
      scheme:
        type: string
        enum:
          - bearer
      bearerFormat:
        type: string
      type:
        type: string
        enum:
          - http
      description:
        type: string
    patternProperties:
      ^x-: {}
    additionalProperties: false
  OAuth2SecurityScheme:
    type: object
    required:
      - type
      - flows
    properties:
      type:
        type: string
        enum:
          - oauth2
      flows:
        $ref: '#/definitions/OAuthFlows'
      description:
        type: string
    patternProperties:
      ^x-: {}
    additionalProperties: false
  OpenIdConnectSecurityScheme:
    type: object
    required:
      - type
      - openIdConnectUrl
    properties:
      type:
        type: string
        enum:
          - openIdConnect
      openIdConnectUrl:
        type: string
        format: uri-reference
      description:
        type: string
    patternProperties:
      ^x-: {}
    additionalProperties: false
  OAuthFlows:
    type: object
    properties:
      implicit:
        $ref: '#/definitions/ImplicitOAuthFlow'
      password:
        $ref: '#/definitions/PasswordOAuthFlow'
      clientCredentials:
        $ref: '#/definitions/ClientCredentialsFlow'
      authorizationCode:
        $ref: '#/definitions/AuthorizationCodeOAuthFlow'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: Allows configuration of the supported OAuth Flows.
  ImplicitOAuthFlow:
    type: object
    required:
      - authorizationUrl
      - scopes
    properties:
      authorizationUrl:
        type: string
        format: uri-reference
      refreshUrl:
        type: string
        format: uri-reference
      scopes:
        type: object
        additionalProperties:
          type: string
    patternProperties:
      ^x-: {}
    additionalProperties: false
  PasswordOAuthFlow:
    type: object
    required:
      - tokenUrl
    properties:
      tokenUrl:
        type: string
        format: uri-reference
      refreshUrl:
        type: string
        format: uri-reference
      scopes:
        type: object
        additionalProperties:
          type: string
    patternProperties:
      ^x-: {}
    additionalProperties: false
  ClientCredentialsFlow:
    type: object
    required:
      - tokenUrl
    properties:
      tokenUrl:
        type: string
        format: uri-reference
      refreshUrl:
        type: string
        format: uri-reference
      scopes:
        type: object
        additionalProperties:
          type: string
    patternProperties:
      ^x-: {}
    additionalProperties: false
  AuthorizationCodeOAuthFlow:
    type: object
    required:
      - authorizationUrl
      - tokenUrl
    properties:
      authorizationUrl:
        type: string
        format: uri-reference
      tokenUrl:
        type: string
        format: uri-reference
      refreshUrl:
        type: string
        format: uri-reference
      scopes:
        type: object
        additionalProperties:
          type: string
    patternProperties:
      ^x-: {}
    additionalProperties: false
  Link:
    oneOf:
      - $ref: '#/definitions/LinkWithOperationRef'
      - $ref: '#/definitions/LinkWithOperationId'
    description: >-
      The `Link Object` is responsible for defining a possible operation based
      on a single response.
  LinkWithOperationRef:
    type: object
    properties:
      operationRef:
        type: string
        format: uri-reference
      parameters:
        type: object
        additionalProperties: {}
      requestBody: {}
      description:
        type: string
      server:
        $ref: '#/definitions/Server'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      The `Link Object` is responsible for defining a possible operation based
      on a single response.
  LinkWithOperationId:
    type: object
    properties:
      operationId:
        type: string
      parameters:
        type: object
        additionalProperties: {}
      requestBody: {}
      description:
        type: string
      server:
        $ref: '#/definitions/Server'
    patternProperties:
      ^x-: {}
    additionalProperties: false
    description: >-
      The `Link Object` is responsible for defining a possible operation based
      on a single response.
  Callback:
    type: object
    additionalProperties:
      $ref: '#/definitions/PathItem'
    patternProperties:
      ^x-: {}
    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.
  Encoding:
    type: object
    properties:
      contentType:
        type: string
      headers:
        type: object
        additionalProperties:
          $ref: '#/definitions/Header'
      style:
        type: string
        enum:
          - form
          - spaceDelimited
          - pipeDelimited
          - deepObject
      explode:
        type: boolean
      allowReserved:
        type: boolean
        default: false
    additionalProperties: false
    description: >-
      An object representing multipart region encoding for `requestBody`
      objects.
description: >-
  This is the root document object for the API specification. It combines what
  previously was the Resource Listing and API Declaration (version 1.2 and
  earlier) together into one document.
