openapi: 3.0.0
info:
  description: 'This spec is mainly for testing Petstore server and contains fake
    endpoints, models. Please do not use this for any other purpose. Special
    characters: " \'
  version: 1.0.0
  title: OpenAPI Petstore
  license:
    name: Apache-2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
tags:
  - name: pet
    description: Everything about your Pets
  - name: store
    description: Access to Petstore orders
  - name: user
    description: Operations about user
paths:
  /pet:
    post:
      tags:
        - pet
      summary: Add a new pet to the store
      description: ""
      operationId: addPet
      requestBody:
        $ref: "#/components/requestBodies/Pet"
      responses:
        "200":
          description: successful operation
        "405":
          description: Invalid input
      security:
        - petstore_auth:
            - write:pets
            - read:pets
    put:
      tags:
        - pet
      summary: Update an existing pet
      description: ""
      operationId: updatePet
      requestBody:
        $ref: "#/components/requestBodies/Pet"
      responses:
        "200":
          description: successful operation
        "400":
          description: Invalid ID supplied
        "404":
          description: Pet not found
        "405":
          description: Validation exception
      security:
        - petstore_auth:
            - write:pets
            - read:pets
  /pet/findByStatus:
    get:
      tags:
        - pet
      summary: Finds Pets by status
      description: Multiple status values can be provided with comma separated strings
      operationId: findPetsByStatus
      parameters:
        - name: status
          in: query
          description: Status values that need to be considered for filter
          required: true
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              enum:
                - available
                - pending
                - sold
              default: available
      responses:
        "200":
          description: successful operation
          content:
            application/xml:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Pet"
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Pet"
        "400":
          description: Invalid status value
      security:
        - petstore_auth:
            - write:pets
            - read:pets
  /pet/findByTags:
    get:
      tags:
        - pet
      summary: Finds Pets by tags
      description: Multiple tags can be provided with comma separated strings. Use tag1,
        tag2, tag3 for testing.
      operationId: findPetsByTags
      parameters:
        - name: tags
          in: query
          description: Tags to filter by
          required: true
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
            uniqueItems: true
      responses:
        "200":
          description: successful operation
          content:
            application/xml:
              schema:
                type: array
                uniqueItems: true
                items:
                  $ref: "#/components/schemas/Pet"
            application/json:
              schema:
                type: array
                uniqueItems: true
                items:
                  $ref: "#/components/schemas/Pet"
        "400":
          description: Invalid tag value
      security:
        - petstore_auth:
            - write:pets
            - read:pets
      deprecated: true
  "/pet/{petId}":
    get:
      tags:
        - pet
      summary: Find pet by ID
      description: Returns a single pet
      operationId: getPetById
      parameters:
        - name: petId
          in: path
          description: ID of pet to return
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: successful operation
          content:
            application/xml:
              schema:
                $ref: "#/components/schemas/Pet"
            application/json:
              schema:
                $ref: "#/components/schemas/Pet"
        "400":
          description: Invalid ID supplied
        "404":
          description: Pet not found
      security:
        - api_key: []
    post:
      tags:
        - pet
      summary: Updates a pet in the store with form data
      description: ""
      operationId: updatePetWithForm
      parameters:
        - name: petId
          in: path
          description: ID of pet that needs to be updated
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                name:
                  description: Updated name of the pet
                  type: string
                status:
                  description: Updated status of the pet
                  type: string
      responses:
        "405":
          description: Invalid input
      security:
        - petstore_auth:
            - write:pets
            - read:pets
    delete:
      tags:
        - pet
      summary: Deletes a pet
      description: ""
      operationId: deletePet
      parameters:
        - name: api_key
          in: header
          required: false
          schema:
            type: string
        - name: petId
          in: path
          description: Pet id to delete
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: successful operation
        "400":
          description: Invalid pet value
      security:
        - petstore_auth:
            - write:pets
            - read:pets
  "/pet/{petId}/uploadImage":
    post:
      tags:
        - pet
      summary: uploads an image
      description: ""
      operationId: uploadFile
      parameters:
        - name: petId
          in: path
          description: ID of pet to update
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                additionalMetadata:
                  description: Additional data to pass to server
                  type: string
                file:
                  description: file to upload
                  type: string
                  format: binary
      responses:
        "200":
          description: successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
      security:
        - petstore_auth:
            - write:pets
            - read:pets
  /store/inventory:
    get:
      tags:
        - store
      summary: Returns pet inventories by status
      description: Returns a map of status codes to quantities
      operationId: getInventory
      responses:
        "200":
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: integer
                  format: int32
      security:
        - api_key: []
  /store/order:
    post:
      tags:
        - store
      summary: Place an order for a pet
      description: ""
      operationId: placeOrder
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Order"
        description: order placed for purchasing the pet
        required: true
      responses:
        "200":
          description: successful operation
          content:
            application/xml:
              schema:
                $ref: "#/components/schemas/Order"
            application/json:
              schema:
                $ref: "#/components/schemas/Order"
        "400":
          description: Invalid Order
  "/store/order/{order_id}":
    get:
      tags:
        - store
      summary: Find purchase order by ID
      description: For valid response try integer IDs with value <= 5 or > 10. Other values
        will generate exceptions
      operationId: getOrderById
      parameters:
        - name: order_id
          in: path
          description: ID of pet that needs to be fetched
          required: true
          schema:
            type: integer
            format: int64
            minimum: 1
            maximum: 5
      responses:
        "200":
          description: successful operation
          content:
            application/xml:
              schema:
                $ref: "#/components/schemas/Order"
            application/json:
              schema:
                $ref: "#/components/schemas/Order"
        "400":
          description: Invalid ID supplied
        "404":
          description: Order not found
    delete:
      tags:
        - store
      summary: Delete purchase order by ID
      description: For valid response try integer IDs with value < 1000. Anything above
        1000 or nonintegers will generate API errors
      operationId: deleteOrder
      parameters:
        - name: order_id
          in: path
          description: ID of the order that needs to be deleted
          required: true
          schema:
            type: string
      responses:
        "400":
          description: Invalid ID supplied
        "404":
          description: Order not found
  /user:
    post:
      tags:
        - user
      summary: Create user
      description: This can only be done by the logged in user.
      operationId: createUser
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/User"
        description: Created user object
        required: true
      responses:
        default:
          description: successful operation
  /user/createWithArray:
    post:
      tags:
        - user
      summary: Creates list of users with given input array
      description: ""
      operationId: createUsersWithArrayInput
      requestBody:
        $ref: "#/components/requestBodies/UserArray"
      responses:
        default:
          description: successful operation
  /user/createWithList:
    post:
      tags:
        - user
      summary: Creates list of users with given input array
      description: ""
      operationId: createUsersWithListInput
      requestBody:
        $ref: "#/components/requestBodies/UserArray"
      responses:
        default:
          description: successful operation
  /user/login:
    get:
      tags:
        - user
      summary: Logs user into the system
      description: ""
      operationId: loginUser
      parameters:
        - name: username
          in: query
          description: The user name for login
          required: true
          schema:
            type: string
        - name: password
          in: query
          description: The password for login in clear text
          required: true
          schema:
            type: string
      responses:
        "200":
          description: successful operation
          headers:
            X-Rate-Limit:
              description: calls per hour allowed by the user
              schema:
                type: integer
                format: int32
            X-Expires-After:
              description: date in UTC when token expires
              schema:
                type: string
                format: date-time
          content:
            application/xml:
              schema:
                type: string
            application/json:
              schema:
                type: string
        "400":
          description: Invalid username/password supplied
  /user/logout:
    get:
      tags:
        - user
      summary: Logs out current logged in user session
      description: ""
      operationId: logoutUser
      responses:
        default:
          description: successful operation
  "/user/{username}":
    get:
      tags:
        - user
      summary: Get user by user name
      description: ""
      operationId: getUserByName
      parameters:
        - name: username
          in: path
          description: The name that needs to be fetched. Use user1 for testing.
          required: true
          schema:
            type: string
      responses:
        "200":
          description: successful operation
          content:
            application/xml:
              schema:
                $ref: "#/components/schemas/User"
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        "400":
          description: Invalid username supplied
        "404":
          description: User not found
    put:
      tags:
        - user
      summary: Updated user
      description: This can only be done by the logged in user.
      operationId: updateUser
      parameters:
        - name: username
          in: path
          description: name that need to be deleted
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/User"
        description: Updated user object
        required: true
      responses:
        "400":
          description: Invalid user supplied
        "404":
          description: User not found
    delete:
      tags:
        - user
      summary: Delete user
      description: This can only be done by the logged in user.
      operationId: deleteUser
      parameters:
        - name: username
          in: path
          description: The name that needs to be deleted
          required: true
          schema:
            type: string
      responses:
        "400":
          description: Invalid username supplied
        "404":
          description: User not found
  /fake_classname_test:
    patch:
      tags:
        - fake_classname_tags 123#$%^
      summary: To test class name in snake case
      description: To test class name in snake case
      operationId: testClassname
      requestBody:
        $ref: "#/components/requestBodies/Client"
      responses:
        "200":
          description: successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Client"
      security:
        - api_key_query: []
  /fake:
    patch:
      tags:
        - fake
      summary: To test "client" model
      description: To test "client" model
      operationId: testClientModel
      requestBody:
        $ref: "#/components/requestBodies/Client"
      responses:
        "200":
          description: successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Client"
    get:
      tags:
        - fake
      summary: To test enum parameters
      description: To test enum parameters
      operationId: testEnumParameters
      parameters:
        - name: enum_header_string_array
          in: header
          description: Header parameter enum test (string array)
          schema:
            type: array
            items:
              type: string
              default: $
              enum:
                - ">"
                - $
        - name: enum_header_string
          in: header
          description: Header parameter enum test (string)
          schema:
            type: string
            enum:
              - _abc
              - -efg
              - (xyz)
            default: -efg
        - name: enum_query_string_array
          in: query
          description: Query parameter enum test (string array)
          schema:
            type: array
            items:
              type: string
              default: $
              enum:
                - ">"
                - $
        - name: enum_query_string
          in: query
          description: Query parameter enum test (string)
          schema:
            type: string
            enum:
              - _abc
              - -efg
              - (xyz)
            default: -efg
        - name: enum_query_integer
          in: query
          description: Query parameter enum test (double)
          schema:
            type: integer
            format: int32
            enum:
              - 1
              - -2
        - name: enum_query_double
          in: query
          description: Query parameter enum test (double)
          schema:
            type: number
            format: double
            enum:
              - 1.1
              - -1.2
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                enum_form_string_array:
                  description: Form parameter enum test (string array)
                  type: array
                  items:
                    type: string
                    default: $
                    enum:
                      - ">"
                      - $
                enum_form_string:
                  description: Form parameter enum test (string)
                  type: string
                  enum:
                    - _abc
                    - -efg
                    - (xyz)
                  default: -efg
      responses:
        "400":
          description: Invalid request
        "404":
          description: Not found
    post:
      tags:
        - fake
      summary: |-
        Fake endpoint for testing various parameters
         假端點
         偽のエンドポイント
         가짜 엔드 포인트
      description: |-
        Fake endpoint for testing various parameters
         假端點
         偽のエンドポイント
         가짜 엔드 포인트
      operationId: testEndpointParameters
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                integer:
                  description: None
                  type: integer
                  minimum: 10
                  maximum: 100
                int32:
                  description: None
                  type: integer
                  format: int32
                  minimum: 20
                  maximum: 200
                int64:
                  description: None
                  type: integer
                  format: int64
                number:
                  description: None
                  type: number
                  minimum: 32.1
                  maximum: 543.2
                float:
                  description: None
                  type: number
                  format: float
                  maximum: 987.6
                double:
                  description: None
                  type: number
                  format: double
                  minimum: 67.8
                  maximum: 123.4
                string:
                  description: None
                  type: string
                  pattern: /[a-z]/i
                pattern_without_delimiter:
                  description: None
                  type: string
                  pattern: ^[A-Z].*
                byte:
                  description: None
                  type: string
                  format: byte
                binary:
                  description: None
                  type: string
                  format: binary
                date:
                  description: None
                  type: string
                  format: date
                dateTime:
                  description: None
                  type: string
                  format: date-time
                password:
                  description: None
                  type: string
                  format: password
                  minLength: 10
                  maxLength: 64
                callback:
                  description: None
                  type: string
              required:
                - number
                - double
                - pattern_without_delimiter
                - byte
      responses:
        "400":
          description: Invalid username supplied
        "404":
          description: User not found
      security:
        - http_basic_test: []
    delete:
      tags:
        - fake
      summary: Fake endpoint to test group parameters (optional)
      description: Fake endpoint to test group parameters (optional)
      operationId: testGroupParameters
      x-group-parameters: true
      parameters:
        - name: required_string_group
          in: query
          description: Required String in group parameters
          required: true
          schema:
            type: integer
        - name: required_boolean_group
          in: header
          description: Required Boolean in group parameters
          required: true
          schema:
            type: boolean
        - name: required_int64_group
          in: query
          description: Required Integer in group parameters
          required: true
          schema:
            type: integer
            format: int64
        - name: string_group
          in: query
          description: String in group parameters
          schema:
            type: integer
        - name: boolean_group
          in: header
          description: Boolean in group parameters
          schema:
            type: boolean
        - name: int64_group
          in: query
          description: Integer in group parameters
          schema:
            type: integer
            format: int64
      responses:
        "400":
          description: Something wrong
  /fake/outer/number:
    post:
      tags:
        - fake
      description: Test serialization of outer number types
      operationId: fakeOuterNumberSerialize
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OuterNumber"
        description: Input number as post body
      responses:
        "200":
          description: Output number
          content:
            "*/*":
              schema:
                $ref: "#/components/schemas/OuterNumber"
  /fake/outer/string:
    post:
      tags:
        - fake
      description: Test serialization of outer string types
      operationId: fakeOuterStringSerialize
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OuterString"
        description: Input string as post body
      responses:
        "200":
          description: Output string
          content:
            "*/*":
              schema:
                $ref: "#/components/schemas/OuterString"
  /fake/outer/boolean:
    post:
      tags:
        - fake
      description: Test serialization of outer boolean types
      operationId: fakeOuterBooleanSerialize
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OuterBoolean"
        description: Input boolean as post body
      responses:
        "200":
          description: Output boolean
          content:
            "*/*":
              schema:
                $ref: "#/components/schemas/OuterBoolean"
  /fake/outer/composite:
    post:
      tags:
        - fake
      description: Test serialization of object with outer number type
      operationId: fakeOuterCompositeSerialize
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OuterComposite"
        description: Input composite as post body
      responses:
        "200":
          description: Output composite
          content:
            "*/*":
              schema:
                $ref: "#/components/schemas/OuterComposite"
  /fake/jsonFormData:
    get:
      tags:
        - fake
      summary: test json serialization of form data
      description: ""
      operationId: testJsonFormData
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                param:
                  description: field1
                  type: string
                param2:
                  description: field2
                  type: string
              required:
                - param
                - param2
      responses:
        "200":
          description: successful operation
  /fake/inline-additionalProperties:
    post:
      tags:
        - fake
      summary: test inline additionalProperties
      description: ""
      operationId: testInlineAdditionalProperties
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties:
                type: string
        description: request body
        required: true
      responses:
        "200":
          description: successful operation
  /fake/body-with-query-params:
    put:
      tags:
        - fake
      operationId: testBodyWithQueryParams
      parameters:
        - name: query
          in: query
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/User"
        required: true
      responses:
        "200":
          description: Success
  /fake/create_xml_item:
    post:
      tags:
        - fake
      operationId: createXmlItem
      summary: creates an XmlItem
      description: this route creates an XmlItem
      requestBody:
        content:
          application/xml:
            schema:
              $ref: "#/components/schemas/XmlItem"
          application/xml; charset=utf-8:
            schema:
              $ref: "#/components/schemas/XmlItem"
          application/xml; charset=utf-16:
            schema:
              $ref: "#/components/schemas/XmlItem"
          text/xml:
            schema:
              $ref: "#/components/schemas/XmlItem"
          text/xml; charset=utf-8:
            schema:
              $ref: "#/components/schemas/XmlItem"
          text/xml; charset=utf-16:
            schema:
              $ref: "#/components/schemas/XmlItem"
        description: XmlItem Body
        required: true
      responses:
        "200":
          description: successful operation
  /another-fake/dummy:
    patch:
      tags:
        - $another-fake?
      summary: To test special tags
      description: To test special tags and operation ID starting with number
      operationId: 123_test_@#$%_special_tags
      requestBody:
        $ref: "#/components/requestBodies/Client"
      responses:
        "200":
          description: successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Client"
  /fake/body-with-file-schema:
    put:
      tags:
        - fake
      description: For this test, the body for this request much reference a schema named
        `File`.
      operationId: testBodyWithFileSchema
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/FileSchemaTestClass"
        required: true
      responses:
        "200":
          description: Success
  /fake/test-query-parameters:
    put:
      tags:
        - fake
      description: To test the collection format in query parameters
      operationId: testQueryParameterCollectionFormat
      parameters:
        - name: pipe
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: http
          in: query
          required: true
          style: spaceDelimited
          schema:
            type: array
            items:
              type: string
        - name: url
          in: query
          required: true
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
        - name: context
          in: query
          required: true
          explode: true
          schema:
            type: array
            items:
              type: string
      responses:
        "200":
          description: Success
  "/fake/{petId}/uploadImageWithRequiredFile":
    post:
      tags:
        - pet
      summary: uploads an image (required)
      description: ""
      operationId: uploadFileWithRequiredFile
      parameters:
        - name: petId
          in: path
          description: ID of pet to update
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                additionalMetadata:
                  description: Additional data to pass to server
                  type: string
                requiredFile:
                  description: file to upload
                  type: string
                  format: binary
              required:
                - requiredFile
      responses:
        "200":
          description: successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
      security:
        - petstore_auth:
            - write:pets
            - read:pets
  /fake/{petId}/response-object-different-names:
    get:
      tags:
        - pet
      operationId: responseObjectDifferentNames
      parameters:
        - name: petId
          in: path
          description: ID of pet to update
          required: true
          schema:
            type: integer
            format: int64
      responses:
        200:
          description: successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ResponseObjectWithDifferentFieldNames"
servers:
  - url: http://petstore.swagger.io:80/v2
components:
  requestBodies:
    UserArray:
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: "#/components/schemas/User"
      description: List of user object
      required: true
    Client:
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Client"
      description: client model
      required: true
    Pet:
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Pet"
        application/xml:
          schema:
            $ref: "#/components/schemas/Pet"
      description: Pet object that needs to be added to the store
      required: true
  securitySchemes:
    petstore_auth:
      type: oauth2
      flows:
        implicit:
          authorizationUrl: http://petstore.swagger.io/api/oauth/dialog
          scopes:
            write:pets: modify pets in your account
            read:pets: read your pets
    api_key:
      type: apiKey
      name: api_key
      in: header
    api_key_query:
      type: apiKey
      name: api_key_query
      in: query
    http_basic_test:
      type: http
      scheme: basic
  schemas:
    Order:
      type: object
      properties:
        id:
          type: integer
          format: int64
        petId:
          type: integer
          format: int64
        quantity:
          type: integer
          format: int32
        shipDate:
          type: string
          format: date-time
        status:
          type: string
          description: Order Status
          enum:
            - placed
            - approved
            - delivered
        complete:
          type: boolean
          default: false
      xml:
        name: Order
    Category:
      type: object
      required:
        - name
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
          default: default-name
      xml:
        name: Category
    User:
      type: object
      properties:
        id:
          type: integer
          format: int64
          x-is-unique: true
        username:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
        password:
          type: string
        phone:
          type: string
        userStatus:
          type: integer
          format: int32
          description: User Status
      xml:
        name: User
    Tag:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
      xml:
        name: Tag
    Pet:
      type: object
      required:
        - name
        - photoUrls
      properties:
        id:
          type: integer
          format: int64
          x-is-unique: true
        category:
          $ref: "#/components/schemas/Category"
        name:
          type: string
          example: doggie
        photoUrls:
          type: array
          uniqueItems: true
          xml:
            name: photoUrl
            wrapped: true
          items:
            type: string
        tags:
          type: array
          xml:
            name: tag
            wrapped: true
          items:
            $ref: "#/components/schemas/Tag"
        status:
          type: string
          description: pet status in the store
          deprecated: true
          enum:
            - available
            - pending
            - sold
      xml:
        name: Pet
    ApiResponse:
      type: object
      properties:
        code:
          type: integer
          format: int32
        type:
          type: string
        message:
          type: string
    Return:
      description: Model for testing reserved words
      properties:
        return:
          type: integer
          format: int32
      xml:
        name: Return
    Name:
      description: Model for testing model name same as property name
      required:
        - name
      properties:
        name:
          type: integer
          format: int32
        snake_case:
          readOnly: true
          type: integer
          format: int32
        property:
          type: string
        123Number:
          type: integer
          readOnly: true
      xml:
        name: Name
    200_response:
      description: Model for testing model name starting with number
      properties:
        name:
          type: integer
          format: int32
        class:
          type: string
      xml:
        name: Name
    ClassModel:
      description: Model for testing model with "_class" property
      properties:
        _class:
          type: string
    Dog:
      allOf:
        - $ref: "#/components/schemas/Animal"
        - type: object
          properties:
            breed:
              type: string
    Cat:
      allOf:
        - $ref: "#/components/schemas/Animal"
        - type: object
          properties:
            declawed:
              type: boolean
    BigCat:
      allOf:
        - $ref: "#/components/schemas/Cat"
        - type: object
          properties:
            kind:
              type: string
              enum:
                - lions
                - tigers
                - leopards
                - jaguars
    Animal:
      type: object
      discriminator:
        propertyName: className
      required:
        - className
      properties:
        className:
          type: string
        color:
          type: string
          default: red
    AnimalFarm:
      type: array
      items:
        $ref: "#/components/schemas/Animal"
    format_test:
      type: object
      required:
        - number
        - byte
        - date
        - password
      properties:
        integer:
          type: integer
          maximum: 100
          minimum: 10
        int32:
          type: integer
          format: int32
          maximum: 200
          minimum: 20
        int64:
          type: integer
          format: int64
        number:
          maximum: 543.2
          minimum: 32.1
          type: number
        float:
          type: number
          format: float
          maximum: 987.6
          minimum: 54.3
        double:
          type: number
          format: double
          maximum: 123.4
          minimum: 67.8
        string:
          type: string
          pattern: /[a-z]/i
        byte:
          type: string
          format: byte
        binary:
          type: string
          format: binary
        date:
          type: string
          format: date
        dateTime:
          type: string
          format: date-time
        uuid:
          type: string
          format: uuid
          example: 72f98069-206d-4f12-9f12-3d1e525a8e84
        password:
          type: string
          format: password
          maxLength: 64
          minLength: 10
        BigDecimal:
          type: string
          format: number
    EnumClass:
      type: string
      default: -efg
      enum:
        - _abc
        - -efg
        - (xyz)
    Enum_Test:
      type: object
      required:
        - enum_string_required
      properties:
        enum_string:
          type: string
          enum:
            - UPPER
            - lower
            - ""
        enum_string_required:
          type: string
          enum:
            - UPPER
            - lower
            - ""
        enum_integer:
          type: integer
          format: int32
          enum:
            - 1
            - -1
        enum_number:
          type: number
          format: double
          enum:
            - 1.1
            - -1.2
        outerEnum:
          $ref: "#/components/schemas/OuterEnum"
    AdditionalPropertiesClass:
      type: object
      properties:
        map_string:
          type: object
          additionalProperties:
            type: string
        map_number:
          type: object
          additionalProperties:
            type: number
        map_integer:
          type: object
          additionalProperties:
            type: integer
        map_boolean:
          type: object
          additionalProperties:
            type: boolean
        map_array_integer:
          type: object
          additionalProperties:
            type: array
            items:
              type: integer
        map_array_anytype:
          type: object
          additionalProperties:
            type: array
            items:
              type: object
        map_map_string:
          type: object
          additionalProperties:
            type: object
            additionalProperties:
              type: string
        map_map_anytype:
          type: object
          additionalProperties:
            type: object
            additionalProperties:
              type: object
        anytype_1:
          type: object
        anytype_2: {}
        anytype_3:
          type: object
          properties: {}
    AdditionalPropertiesString:
      type: object
      properties:
        name:
          type: string
      additionalProperties:
        type: string
    AdditionalPropertiesInteger:
      type: object
      properties:
        name:
          type: string
      additionalProperties:
        type: integer
    AdditionalPropertiesNumber:
      type: object
      properties:
        name:
          type: string
      additionalProperties:
        type: number
    AdditionalPropertiesBoolean:
      type: object
      properties:
        name:
          type: string
      additionalProperties:
        type: boolean
    AdditionalPropertiesArray:
      type: object
      properties:
        name:
          type: string
      additionalProperties:
        type: array
        items:
          type: object
    AdditionalPropertiesObject:
      type: object
      properties:
        name:
          type: string
      additionalProperties:
        type: object
        additionalProperties:
          type: object
    AdditionalPropertiesAnyType:
      type: object
      properties:
        name:
          type: string
      additionalProperties:
        type: object
    MixedPropertiesAndAdditionalPropertiesClass:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
        dateTime:
          type: string
          format: date-time
        map:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/Animal"
    List:
      type: object
      properties:
        123-list:
          type: string
    Client:
      type: object
      properties:
        client:
          type: string
    ReadOnlyFirst:
      type: object
      properties:
        bar:
          type: string
          readOnly: true
        baz:
          type: string
    hasOnlyReadOnly:
      type: object
      properties:
        bar:
          type: string
          readOnly: true
        foo:
          type: string
          readOnly: true
    Capitalization:
      type: object
      properties:
        smallCamel:
          type: string
        CapitalCamel:
          type: string
        small_Snake:
          type: string
        Capital_Snake:
          type: string
        SCA_ETH_Flow_Points:
          type: string
        ATT_NAME:
          description: |
            Name of the pet
          type: string
    MapTest:
      type: object
      properties:
        map_map_of_string:
          type: object
          additionalProperties:
            type: object
            additionalProperties:
              type: string
        map_of_enum_string:
          type: object
          additionalProperties:
            type: string
            enum:
              - UPPER
              - lower
        direct_map:
          type: object
          additionalProperties:
            type: boolean
        indirect_map:
          $ref: "#/components/schemas/StringBooleanMap"
    ArrayTest:
      type: object
      properties:
        array_of_string:
          type: array
          items:
            type: string
        array_array_of_integer:
          type: array
          items:
            type: array
            items:
              type: integer
              format: int64
        array_array_of_model:
          type: array
          items:
            type: array
            items:
              $ref: "#/components/schemas/ReadOnlyFirst"
    NumberOnly:
      type: object
      properties:
        JustNumber:
          type: number
    ArrayOfNumberOnly:
      type: object
      properties:
        ArrayNumber:
          type: array
          items:
            type: number
    ArrayOfArrayOfNumberOnly:
      type: object
      properties:
        ArrayArrayNumber:
          type: array
          items:
            type: array
            items:
              type: number
    EnumArrays:
      type: object
      properties:
        just_symbol:
          type: string
          enum:
            - ">="
            - $
        array_enum:
          type: array
          items:
            type: string
            enum:
              - fish
              - crab
    OuterEnum:
      type: string
      enum:
        - placed
        - approved
        - delivered
    OuterComposite:
      type: object
      properties:
        my_number:
          $ref: "#/components/schemas/OuterNumber"
        my_string:
          $ref: "#/components/schemas/OuterString"
        my_boolean:
          $ref: "#/components/schemas/OuterBoolean"
    OuterNumber:
      type: number
    OuterString:
      type: string
    OuterBoolean:
      type: boolean
      x-codegen-body-parameter-name: boolean_post_body
    StringBooleanMap:
      additionalProperties:
        type: boolean
    FileSchemaTestClass:
      type: object
      properties:
        file:
          $ref: "#/components/schemas/File"
        files:
          type: array
          items:
            $ref: "#/components/schemas/File"
    File:
      type: object
      description: Must be named `File` for test.
      properties:
        sourceURI:
          description: Test capitalization
          type: string
    TypeHolderDefault:
      type: object
      required:
        - string_item
        - number_item
        - integer_item
        - bool_item
        - array_item
      properties:
        string_item:
          type: string
          default: what
        number_item:
          type: number
          default: 1.234
        integer_item:
          type: integer
          default: -2
        bool_item:
          type: boolean
          default: true
        array_item:
          type: array
          items:
            type: integer
          default:
            - 0
            - 1
            - 2
            - 3
    TypeHolderExample:
      type: object
      required:
        - string_item
        - number_item
        - float_item
        - integer_item
        - bool_item
        - array_item
      properties:
        string_item:
          type: string
          example: what
        number_item:
          type: number
          example: 1.234
        float_item:
          type: number
          example: 1.234
          format: float
        integer_item:
          type: integer
          example: -2
        bool_item:
          type: boolean
          example: true
        array_item:
          type: array
          items:
            type: integer
          example:
            - 0
            - 1
            - 2
            - 3
    XmlItem:
      type: object
      xml:
        namespace: http://a.com/schema
        prefix: pre
      properties:
        attribute_string:
          type: string
          example: string
          xml:
            attribute: true
        attribute_number:
          type: number
          example: 1.234
          xml:
            attribute: true
        attribute_integer:
          type: integer
          example: -2
          xml:
            attribute: true
        attribute_boolean:
          type: boolean
          example: true
          xml:
            attribute: true
        wrapped_array:
          type: array
          xml:
            wrapped: true
          items:
            type: integer
        name_string:
          type: string
          example: string
          xml:
            name: xml_name_string
        name_number:
          type: number
          example: 1.234
          xml:
            name: xml_name_number
        name_integer:
          type: integer
          example: -2
          xml:
            name: xml_name_integer
        name_boolean:
          type: boolean
          example: true
          xml:
            name: xml_name_boolean
        name_array:
          type: array
          items:
            type: integer
            xml:
              name: xml_name_array_item
        name_wrapped_array:
          type: array
          xml:
            wrapped: true
            name: xml_name_wrapped_array
          items:
            type: integer
            xml:
              name: xml_name_wrapped_array_item
        prefix_string:
          type: string
          example: string
          xml:
            prefix: ab
        prefix_number:
          type: number
          example: 1.234
          xml:
            prefix: cd
        prefix_integer:
          type: integer
          example: -2
          xml:
            prefix: ef
        prefix_boolean:
          type: boolean
          example: true
          xml:
            prefix: gh
        prefix_array:
          type: array
          items:
            type: integer
            xml:
              prefix: ij
        prefix_wrapped_array:
          type: array
          xml:
            wrapped: true
            prefix: kl
          items:
            type: integer
            xml:
              prefix: mn
        namespace_string:
          type: string
          example: string
          xml:
            namespace: http://a.com/schema
        namespace_number:
          type: number
          example: 1.234
          xml:
            namespace: http://b.com/schema
        namespace_integer:
          type: integer
          example: -2
          xml:
            namespace: http://c.com/schema
        namespace_boolean:
          type: boolean
          example: true
          xml:
            namespace: http://d.com/schema
        namespace_array:
          type: array
          items:
            type: integer
            xml:
              namespace: http://e.com/schema
        namespace_wrapped_array:
          type: array
          xml:
            wrapped: true
            namespace: http://f.com/schema
          items:
            type: integer
            xml:
              namespace: http://g.com/schema
        prefix_ns_string:
          type: string
          example: string
          xml:
            namespace: http://a.com/schema
            prefix: a
        prefix_ns_number:
          type: number
          example: 1.234
          xml:
            namespace: http://b.com/schema
            prefix: b
        prefix_ns_integer:
          type: integer
          example: -2
          xml:
            namespace: http://c.com/schema
            prefix: c
        prefix_ns_boolean:
          type: boolean
          example: true
          xml:
            namespace: http://d.com/schema
            prefix: d
        prefix_ns_array:
          type: array
          items:
            type: integer
            xml:
              namespace: http://e.com/schema
              prefix: e
        prefix_ns_wrapped_array:
          type: array
          xml:
            wrapped: true
            namespace: http://f.com/schema
            prefix: f
          items:
            type: integer
            xml:
              namespace: http://g.com/schema
              prefix: g
    _special_model.name_:
      properties:
        "$special[property.name]":
          type: integer
          format: int64
      xml:
        name: $special[model.name]
    ContainerDefaultValue:
      type: object
      required:
        - required_array
        - nullable_required_array
      properties:
        nullable_array:
          type: array
          nullable: true
          items:
            type: string
        nullable_required_array:
          type: array
          nullable: true
          items:
            type: string
        required_array:
          type: array
          nullable: false
          items:
            type: string
        nullable_array_with_default:
          type: array
          nullable: true
          items:
            type: string
          default: ["foo", "bar"]
    ResponseObjectWithDifferentFieldNames:
      type: object
      properties:
        normalPropertyName:
          type: string
        UPPER_CASE_PROPERTY_SNAKE:
          type: string
        lower-case-property-dashes:
          type: string
        property name with spaces:
          type: string
