---
title: A JSON Schema for Swagger 2.0 API.
id: http://swagger.io/v2/schema.json#
$schema: http://json-schema.org/draft-04/schema#
type: object
required:
  - swagger
  - info
  - paths
additionalProperties: false
patternProperties:
  "^x-":
    $ref: "#/definitions/vendorExtension"
properties:
  swagger:
    type: string
    enum:
      - '2.0'
    description: The Swagger version of this document.
  info:
    $ref: "#/definitions/info"
  host:
    type: string
    pattern: "^[^{}/ :\\\\]+(?::\\d+)?$"
    description: 'The host (name or ip) of the API. Example: ''swagger.io'''
  basePath:
    type: string
    pattern: "^/"
    description: 'The base path to the API. Example: ''/api''.'
  schemes:
    $ref: "#/definitions/schemesList"
  consumes:
    description: A list of MIME types accepted by the API.
    allOf:
      - $ref: "#/definitions/mediaTypeList"
  produces:
    description: A list of MIME types the API can produce.
    allOf:
      - $ref: "#/definitions/mediaTypeList"
  paths:
    $ref: "#/definitions/paths"
  definitions:
    $ref: "#/definitions/definitions"
  parameters:
    $ref: "#/definitions/parameterDefinitions"
  responses:
    $ref: "#/definitions/responseDefinitions"
  security:
    $ref: "#/definitions/security"
  securityDefinitions:
    $ref: "#/definitions/securityDefinitions"
  tags:
    type: array
    items:
      $ref: "#/definitions/tag"
    ### disabled, see
    ### test/unit/plugins/json-schema-validator/test-documents/tag-object-uniqueness.yaml
    # uniqueItems: true
  externalDocs:
    $ref: "#/definitions/externalDocs"
definitions:
  info:
    type: object
    description: General information about the API.
    required:
      - version
      - title
    additionalProperties: false
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
    properties:
      title:
        type: string
        description: A unique and precise title of the API.
      version:
        type: string
        description: A semantic version number of the API.
      description:
        type: string
        description: A longer description of the API. Should be different from the
          title.  GitHub Flavored Markdown is allowed.
      termsOfService:
        type: string
        description: The terms of service for the API.
      contact:
        $ref: "#/definitions/contact"
      license:
        $ref: "#/definitions/license"
  contact:
    type: object
    description: Contact information for the owners of the API.
    additionalProperties: false
    properties:
      name:
        type: string
        description: The identifying name of the contact person/organization.
      url:
        type: string
        description: The URL pointing to the contact information.
        format: uri
      email:
        type: string
        description: The email address of the contact person/organization.
        format: email
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  license:
    type: object
    required:
      - name
    additionalProperties: false
    properties:
      name:
        type: string
        description: The name of the license type. It's encouraged to use an OSI compatible
          license.
      url:
        type: string
        description: The URL pointing to the license.
        format: uri
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  paths:
    type: object
    description: Relative paths to the individual endpoints. They must be relative
      to the 'basePath'.
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
      "^/":
        $ref: "#/definitions/pathItem"
    additionalProperties: false
    errorMessage:
      additionalProperties: "should only have path names that start with `/`"
  definitions:
    type: object
    additionalProperties:
      $ref: "#/definitions/schema"
    description: One or more JSON objects describing the schemas being consumed and
      produced by the API.
  parameterDefinitions:
    type: object
    additionalProperties:
      $ref: "#/definitions/parameter"
    description: One or more JSON representations for parameters
  responseDefinitions:
    type: object
    additionalProperties:
      $ref: "#/definitions/response"
    description: One or more JSON representations for parameters
  externalDocs:
    type: object
    additionalProperties: false
    description: information about external documentation
    required:
      - url
    properties:
      description:
        type: string
      url:
        type: string
        format: uri
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  examples:
    type: object
    additionalProperties: true
  mimeType:
    type: string
    description: The MIME type of the HTTP message.
  operation:
    type: object
    required:
      - responses
    additionalProperties: false
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
    properties:
      tags:
        type: array
        items:
          type: string
        uniqueItems: true
      summary:
        type: string
        description: A brief summary of the operation.
      description:
        type: string
        description: A longer description of the operation, GitHub Flavored Markdown
          is allowed.
      externalDocs:
        $ref: "#/definitions/externalDocs"
      operationId:
        type: string
        description: A unique identifier of the operation.
      produces:
        description: A list of MIME types the API can produce.
        allOf:
          - $ref: "#/definitions/mediaTypeList"
      consumes:
        description: A list of MIME types the API can consume.
        allOf:
          - $ref: "#/definitions/mediaTypeList"
      parameters:
        $ref: "#/definitions/parametersList"
      responses:
        $ref: "#/definitions/responses"
      schemes:
        $ref: "#/definitions/schemesList"
      deprecated:
        type: boolean
        default: false
      security:
        $ref: "#/definitions/security"
  pathItem:
    type: object
    additionalProperties: false
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
    properties:
      $ref:
        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"
      parameters:
        $ref: "#/definitions/parametersList"
  responses:
    type: object
    description: Response objects names can either be any valid HTTP status code or
      'default'.
    minProperties: 1
    additionalProperties: false
    patternProperties:
      "^([0-9]{3})$|^(default)$":
        $ref: "#/definitions/responseValue"
      "^x-":
        $ref: "#/definitions/vendorExtension"
    not:
      type: object
      minProperties: 1
      additionalProperties: false
      patternProperties:
        "^x-":
          $ref: "#/definitions/vendorExtension"
    errorMessage:
      minProperties: "should define at least one response"
      not: "should define at least one response, in addition to any vendor extension (`x-*`) fields"
      additionalProperties: "should only have three-digit status codes, `default`, and vendor extensions (`x-*`) as properties"
  responseValue:
    switch:
      - if:
          required: [$ref]
        then:
          $ref: "#/definitions/jsonReference"
      - then:
          $ref: "#/definitions/response"
  response:
    type: object
    required:
      - description
    properties:
      description:
        type: string
      schema:
        switch:
          - if:
              required: [$ref]
            then:
              $ref: "#/definitions/jsonReference"
          - if:
              required: [type]
              properties: { type: { enum: [file] } }
            then:
              $ref: "#/definitions/fileSchema"
          - then:
              allOf:
                - $ref: "#/definitions/schema"
                - properties:
                    type:
                      enum: [array, boolean, integer, number, object, string, file]
      headers:
        $ref: "#/definitions/headers"
      examples:
        $ref: "#/definitions/examples"
    additionalProperties: false
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  headers:
    type: object
    additionalProperties:
      $ref: "#/definitions/header"
  header:
    type: object
    additionalProperties: false
    required:
      - type
    properties:
      type:
        type: string
        enum:
          - string
          - number
          - integer
          - boolean
          - array
      format:
        type: string
      items:
        $ref: "#/definitions/primitivesItems"
      collectionFormat:
        $ref: "#/definitions/collectionFormat"
      default:
        $ref: "#/definitions/default"
      maximum:
        $ref: "#/definitions/maximum"
      exclusiveMaximum:
        $ref: "#/definitions/exclusiveMaximum"
      minimum:
        $ref: "#/definitions/minimum"
      exclusiveMinimum:
        $ref: "#/definitions/exclusiveMinimum"
      maxLength:
        $ref: "#/definitions/maxLength"
      minLength:
        $ref: "#/definitions/minLength"
      pattern:
        $ref: "#/definitions/pattern"
      maxItems:
        $ref: "#/definitions/maxItems"
      minItems:
        $ref: "#/definitions/minItems"
      uniqueItems:
        $ref: "#/definitions/uniqueItems"
      enum:
        $ref: "#/definitions/enum"
      multipleOf:
        $ref: "#/definitions/multipleOf"
      description:
        type: string
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  vendorExtension:
    description: Any property starting with x- is valid.
    additionalProperties: true
    additionalItems: true
  bodyParameter:
    type: object
    required:
      - name
      - in
      - schema
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
    properties:
      description:
        type: string
        description: A brief description of the parameter. This could contain examples
          of use.  GitHub Flavored Markdown is allowed.
      name:
        type: string
        description: The name of the parameter.
      in:
        type: string
        description: Determines the location of the parameter.
        enum:
          - body
      required:
        type: boolean
        description: Determines whether or not this parameter is required or optional.
        default: false
      schema:
        $ref: "#/definitions/schema"
    additionalProperties: false
  headerParameterSubSchema:
    type: object
    required:
      - name
      - in
      - type
    additionalProperties: false
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
    properties:
      required:
        type: boolean
        description: Determines whether or not this parameter is required or optional.
        default: false
      in:
        type: string
        description: Determines the location of the parameter.
        enum:
          - header
      description:
        type: string
        description: A brief description of the parameter. This could contain examples
          of use.  GitHub Flavored Markdown is allowed.
      name:
        type: string
        description: The name of the parameter.
      type:
        type: string
        enum:
          - string
          - number
          - boolean
          - integer
          - array
      format:
        type: string
      items:
        $ref: "#/definitions/primitivesItems"
      collectionFormat:
        $ref: "#/definitions/collectionFormat"
      default:
        $ref: "#/definitions/default"
      maximum:
        $ref: "#/definitions/maximum"
      exclusiveMaximum:
        $ref: "#/definitions/exclusiveMaximum"
      minimum:
        $ref: "#/definitions/minimum"
      exclusiveMinimum:
        $ref: "#/definitions/exclusiveMinimum"
      maxLength:
        $ref: "#/definitions/maxLength"
      minLength:
        $ref: "#/definitions/minLength"
      pattern:
        $ref: "#/definitions/pattern"
      maxItems:
        $ref: "#/definitions/maxItems"
      minItems:
        $ref: "#/definitions/minItems"
      uniqueItems:
        $ref: "#/definitions/uniqueItems"
      enum:
        $ref: "#/definitions/enum"
      multipleOf:
        $ref: "#/definitions/multipleOf"
  queryParameterSubSchema:
    type: object
    required:
      - name
      - in
      - type
    additionalProperties: false
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
    properties:
      required:
        type: boolean
        description: Determines whether or not this parameter is required or optional.
        default: false
      in:
        type: string
        description: Determines the location of the parameter.
        enum:
          - query
      description:
        type: string
        description: A brief description of the parameter. This could contain examples
          of use.  GitHub Flavored Markdown is allowed.
      name:
        type: string
        description: The name of the parameter.
      allowEmptyValue:
        type: boolean
        default: false
        description: allows sending a parameter by name only or with an empty value.
      type:
        type: string
        enum:
          - string
          - number
          - boolean
          - integer
          - array
      format:
        type: string
      items:
        $ref: "#/definitions/primitivesItems"
      collectionFormat:
        $ref: "#/definitions/collectionFormatWithMulti"
      default:
        $ref: "#/definitions/default"
      maximum:
        $ref: "#/definitions/maximum"
      exclusiveMaximum:
        $ref: "#/definitions/exclusiveMaximum"
      minimum:
        $ref: "#/definitions/minimum"
      exclusiveMinimum:
        $ref: "#/definitions/exclusiveMinimum"
      maxLength:
        $ref: "#/definitions/maxLength"
      minLength:
        $ref: "#/definitions/minLength"
      pattern:
        $ref: "#/definitions/pattern"
      maxItems:
        $ref: "#/definitions/maxItems"
      minItems:
        $ref: "#/definitions/minItems"
      uniqueItems:
        $ref: "#/definitions/uniqueItems"
      enum:
        $ref: "#/definitions/enum"
      multipleOf:
        $ref: "#/definitions/multipleOf"
  formDataParameterSubSchema:
    type: object
    required:
      - name
      - in
      - type
    additionalProperties: false
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
    properties:
      required:
        type: boolean
        description: Determines whether or not this parameter is required or optional.
        default: false
      in:
        type: string
        description: Determines the location of the parameter.
        enum:
          - formData
      description:
        type: string
        description: A brief description of the parameter. This could contain examples
          of use.  GitHub Flavored Markdown is allowed.
      name:
        type: string
        description: The name of the parameter.
      allowEmptyValue:
        type: boolean
        default: false
        description: allows sending a parameter by name only or with an empty value.
      type:
        type: string
        enum:
          - string
          - number
          - boolean
          - integer
          - array
          - file
      format:
        type: string
      items:
        $ref: "#/definitions/primitivesItems"
      collectionFormat:
        $ref: "#/definitions/collectionFormatWithMulti"
      default:
        $ref: "#/definitions/default"
      maximum:
        $ref: "#/definitions/maximum"
      exclusiveMaximum:
        $ref: "#/definitions/exclusiveMaximum"
      minimum:
        $ref: "#/definitions/minimum"
      exclusiveMinimum:
        $ref: "#/definitions/exclusiveMinimum"
      maxLength:
        $ref: "#/definitions/maxLength"
      minLength:
        $ref: "#/definitions/minLength"
      pattern:
        $ref: "#/definitions/pattern"
      maxItems:
        $ref: "#/definitions/maxItems"
      minItems:
        $ref: "#/definitions/minItems"
      uniqueItems:
        $ref: "#/definitions/uniqueItems"
      enum:
        $ref: "#/definitions/enum"
      multipleOf:
        $ref: "#/definitions/multipleOf"
  pathParameterSubSchema:
    type: object
    additionalProperties: false
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
    required:
      - name
      - in
      - type
      - required
    properties:
      required:
        type: boolean
        enum:
          - true
        description: Determines whether or not this parameter is required or optional.
      in:
        type: string
        description: Determines the location of the parameter.
        enum:
          - path
      description:
        type: string
        description: A brief description of the parameter. This could contain examples
          of use.  GitHub Flavored Markdown is allowed.
      name:
        type: string
        description: The name of the parameter.
      type:
        type: string
        enum:
          - string
          - number
          - boolean
          - integer
          - array
      format:
        type: string
      items:
        $ref: "#/definitions/primitivesItems"
      collectionFormat:
        $ref: "#/definitions/collectionFormat"
      default:
        $ref: "#/definitions/default"
      maximum:
        $ref: "#/definitions/maximum"
      exclusiveMaximum:
        $ref: "#/definitions/exclusiveMaximum"
      minimum:
        $ref: "#/definitions/minimum"
      exclusiveMinimum:
        $ref: "#/definitions/exclusiveMinimum"
      maxLength:
        $ref: "#/definitions/maxLength"
      minLength:
        $ref: "#/definitions/minLength"
      pattern:
        $ref: "#/definitions/pattern"
      maxItems:
        $ref: "#/definitions/maxItems"
      minItems:
        $ref: "#/definitions/minItems"
      uniqueItems:
        $ref: "#/definitions/uniqueItems"
      enum:
        $ref: "#/definitions/enum"
      multipleOf:
        $ref: "#/definitions/multipleOf"
  parameter:
    switch:
      - if:
          required: [in]
          properties: { in: { enum: [body] } }
        then: { $ref: "#/definitions/bodyParameter" }
      - if:
          required: [in]
          properties: { in: { enum: [header] } }
        then: { $ref: "#/definitions/headerParameterSubSchema" }
      - if:
          required: [in]
          properties: { in: { enum: [formData] } }
        then: { $ref: "#/definitions/formDataParameterSubSchema" }
      - if:
          required: [in]
          properties: { in: { enum: [query] } }
        then: { $ref: "#/definitions/queryParameterSubSchema" }
      - if:
          required: [in]
          properties: { in: { enum: [path] } }
        then: { $ref: "#/definitions/pathParameterSubSchema" }
      - then:
          type: object
          required: [in]
          properties:
            in:
              enum: [body, header, formData, query, path]
  schema:
    type: object
    description: A deterministic version of a JSON Schema object.
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
    properties:
      $ref:
        type: string
      format:
        type: string
      title:
        $ref: http://json-schema.org/draft-04/schema#/properties/title
      description:
        $ref: http://json-schema.org/draft-04/schema#/properties/description
      default:
        $ref: http://json-schema.org/draft-04/schema#/properties/default
      multipleOf:
        $ref: http://json-schema.org/draft-04/schema#/properties/multipleOf
      maximum:
        $ref: http://json-schema.org/draft-04/schema#/properties/maximum
      exclusiveMaximum:
        $ref: http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum
      minimum:
        $ref: http://json-schema.org/draft-04/schema#/properties/minimum
      exclusiveMinimum:
        $ref: http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum
      maxLength:
        $ref: http://json-schema.org/draft-04/schema#/definitions/positiveInteger
      minLength:
        $ref: http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0
      pattern:
        $ref: http://json-schema.org/draft-04/schema#/properties/pattern
      maxItems:
        $ref: http://json-schema.org/draft-04/schema#/definitions/positiveInteger
      minItems:
        $ref: http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0
      uniqueItems:
        $ref: http://json-schema.org/draft-04/schema#/properties/uniqueItems
      maxProperties:
        $ref: http://json-schema.org/draft-04/schema#/definitions/positiveInteger
      minProperties:
        $ref: http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0
      required:
        $ref: http://json-schema.org/draft-04/schema#/definitions/stringArray
      enum:
        $ref: http://json-schema.org/draft-04/schema#/properties/enum
      additionalProperties:
        switch:
          - if:
              type: object
            then:
              $ref: "#/definitions/schema"
          - then:
              type: boolean
              errorMessage:
                type: "should be either a Schema Object or a boolean value"
        default: {}
      type:
        $ref: http://json-schema.org/draft-04/schema#/properties/type
      items:
        $ref: "#/definitions/schema"
        default: {}
      allOf:
        type: array
        minItems: 1
        items:
          $ref: "#/definitions/schema"
      properties:
        type: object
        additionalProperties:
          $ref: "#/definitions/schema"
        default: {}
      discriminator:
        type: string
      readOnly:
        type: boolean
        default: false
      xml:
        $ref: "#/definitions/xml"
      externalDocs:
        $ref: "#/definitions/externalDocs"
      example: {}
    additionalProperties: false
  fileSchema:
    type: object
    description: A deterministic version of a JSON Schema object.
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
    required:
      - type
    properties:
      format:
        type: string
      title:
        $ref: http://json-schema.org/draft-04/schema#/properties/title
      description:
        $ref: http://json-schema.org/draft-04/schema#/properties/description
      default:
        $ref: http://json-schema.org/draft-04/schema#/properties/default
      required:
        $ref: http://json-schema.org/draft-04/schema#/definitions/stringArray
      type:
        type: string
        enum:
          - file
      readOnly:
        type: boolean
        default: false
      externalDocs:
        $ref: "#/definitions/externalDocs"
      example: {}
    additionalProperties: false
  primitivesItems:
    type: object
    additionalProperties: false
    properties:
      type:
        type: string
        enum:
          - string
          - number
          - integer
          - boolean
          - array
      format:
        type: string
      items:
        $ref: "#/definitions/primitivesItems"
      collectionFormat:
        $ref: "#/definitions/collectionFormat"
      default:
        $ref: "#/definitions/default"
      maximum:
        $ref: "#/definitions/maximum"
      exclusiveMaximum:
        $ref: "#/definitions/exclusiveMaximum"
      minimum:
        $ref: "#/definitions/minimum"
      exclusiveMinimum:
        $ref: "#/definitions/exclusiveMinimum"
      maxLength:
        $ref: "#/definitions/maxLength"
      minLength:
        $ref: "#/definitions/minLength"
      pattern:
        $ref: "#/definitions/pattern"
      maxItems:
        $ref: "#/definitions/maxItems"
      minItems:
        $ref: "#/definitions/minItems"
      uniqueItems:
        $ref: "#/definitions/uniqueItems"
      enum:
        $ref: "#/definitions/enum"
      multipleOf:
        $ref: "#/definitions/multipleOf"
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  security:
    type: array
    items:
      $ref: "#/definitions/securityRequirement"
    uniqueItems: true
  securityRequirement:
    type: object
    additionalProperties:
      type: array
      items:
        type: string
      uniqueItems: true
  xml:
    type: object
    additionalProperties: false
    properties:
      name:
        type: string
      namespace:
        type: string
      prefix:
        type: string
      attribute:
        type: boolean
        default: false
      wrapped:
        type: boolean
        default: false
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  tag:
    type: object
    additionalProperties: false
    required:
      - name
    properties:
      name:
        type: string
      description:
        type: string
      externalDocs:
        $ref: "#/definitions/externalDocs"
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  securityDefinitions:
    type: object
    additionalProperties:
      switch:
        - if:
            required: [type]
            properties: { type: { enum: [basic] } }
          then: { $ref: "#/definitions/basicAuthenticationSecurity" }
        - if:
            required: [type]
            properties: { type: { enum: [apiKey] } }
          then: { $ref: "#/definitions/apiKeySecurity" }
        - if:
            required: [type]
            properties: { type: { enum: [oauth2] } }
          then:
            switch:
              - if:
                  required: [flow]
                  properties: { flow: { enum: [implicit] } }
                then: { $ref: "#/definitions/oauth2ImplicitSecurity" }
              - if:
                  required: [flow]
                  properties: { flow: { enum: [password] } }
                then: { $ref: "#/definitions/oauth2PasswordSecurity" }
              - if:
                  required: [flow]
                  properties: { flow: { enum: [application] } }
                then: { $ref: "#/definitions/oauth2ApplicationSecurity" }
              - if:
                  required: [flow]
                  properties: { flow: { enum: [accessCode] } }
                then: { $ref: "#/definitions/oauth2AccessCodeSecurity" }
              - then:
                  required: [flow]
                  properties:
                    flow:
                      enum: [implicit, password, application, accessCode]
        - then:
            required: [type]
            properties:
              type:
                enum: [basic, apiKey, oauth2]
  basicAuthenticationSecurity:
    type: object
    additionalProperties: false
    required:
      - type
    properties:
      type:
        type: string
        enum:
          - basic
      description:
        type: string
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  apiKeySecurity:
    type: object
    additionalProperties: false
    required:
      - type
      - name
      - in
    properties:
      type:
        type: string
        enum:
          - apiKey
      name:
        type: string
      in:
        type: string
        enum:
          - header
          - query
      description:
        type: string
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  oauth2ImplicitSecurity:
    type: object
    additionalProperties: false
    required:
      - type
      - flow
      - authorizationUrl
    properties:
      type:
        type: string
        enum:
          - oauth2
      flow:
        type: string
        enum:
          - implicit
      scopes:
        $ref: "#/definitions/oauth2Scopes"
      authorizationUrl:
        type: string
        format: uri
        errorMessage:
          format: should be an absolute URI
      description:
        type: string
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  oauth2PasswordSecurity:
    type: object
    additionalProperties: false
    required:
      - type
      - flow
      - tokenUrl
    properties:
      type:
        type: string
        enum:
          - oauth2
      flow:
        type: string
        enum:
          - password
      scopes:
        $ref: "#/definitions/oauth2Scopes"
      tokenUrl:
        type: string
        format: uri
        errorMessage:
          format: should be an absolute URI
      description:
        type: string
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  oauth2ApplicationSecurity:
    type: object
    additionalProperties: false
    required:
      - type
      - flow
      - tokenUrl
    properties:
      type:
        type: string
        enum:
          - oauth2
      flow:
        type: string
        enum:
          - application
      scopes:
        $ref: "#/definitions/oauth2Scopes"
      tokenUrl:
        type: string
        format: uri
        errorMessage:
          format: should be an absolute URI
      description:
        type: string
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  oauth2AccessCodeSecurity:
    type: object
    additionalProperties: false
    required:
      - type
      - flow
      - authorizationUrl
      - tokenUrl
    properties:
      type:
        type: string
        enum:
          - oauth2
      flow:
        type: string
        enum:
          - accessCode
      scopes:
        $ref: "#/definitions/oauth2Scopes"
      authorizationUrl:
        type: string
        format: uri
        errorMessage:
          format: should be an absolute URI
      tokenUrl:
        type: string
        format: uri
        errorMessage:
          format: should be an absolute URI
      description:
        type: string
    patternProperties:
      "^x-":
        $ref: "#/definitions/vendorExtension"
  oauth2Scopes:
    type: object
    additionalProperties:
      type: string
  mediaTypeList:
    type: array
    items:
      $ref: "#/definitions/mimeType"
    uniqueItems: true
  parametersList:
    type: array
    description: The parameters needed to send a valid API call.
    additionalItems: false
    items:
      switch:
        - if:
            required: [$ref]
          then:
            $ref: "#/definitions/jsonReference"
        - then:
            $ref: "#/definitions/parameter"
    uniqueItems: true
  schemesList:
    type: array
    description: The transfer protocol of the API.
    items:
      type: string
      enum:
        - http
        - https
        - ws
        - wss
    uniqueItems: true
  collectionFormat:
    type: string
    enum:
      - csv
      - ssv
      - tsv
      - pipes
    default: csv
  collectionFormatWithMulti:
    type: string
    enum:
      - csv
      - ssv
      - tsv
      - pipes
      - multi
    default: csv
  title:
    $ref: http://json-schema.org/draft-04/schema#/properties/title
  description:
    $ref: http://json-schema.org/draft-04/schema#/properties/description
  default:
    $ref: http://json-schema.org/draft-04/schema#/properties/default
  multipleOf:
    $ref: http://json-schema.org/draft-04/schema#/properties/multipleOf
  maximum:
    $ref: http://json-schema.org/draft-04/schema#/properties/maximum
  exclusiveMaximum:
    $ref: http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum
  minimum:
    $ref: http://json-schema.org/draft-04/schema#/properties/minimum
  exclusiveMinimum:
    $ref: http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum
  maxLength:
    $ref: http://json-schema.org/draft-04/schema#/definitions/positiveInteger
  minLength:
    $ref: http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0
  pattern:
    $ref: http://json-schema.org/draft-04/schema#/properties/pattern
  maxItems:
    $ref: http://json-schema.org/draft-04/schema#/definitions/positiveInteger
  minItems:
    $ref: http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0
  uniqueItems:
    $ref: http://json-schema.org/draft-04/schema#/properties/uniqueItems
  enum:
    $ref: http://json-schema.org/draft-04/schema#/properties/enum
  jsonReference:
    type: object
    required:
      - $ref
    additionalProperties: false
    properties:
      $ref:
        type: string
