---
swagger: '2.0'
x-pet: true
info:
  description: 'This is a sample server Petstore server.  You can find out more about
    Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).  For
    this sample, you can use the api key `special-key` to test the authorization filters.'
  version: 1.0.6
  title: Swagger Petstore
  termsOfService: http://swagger.io/terms/
  contact:
    email: apiteam@swagger.io
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
host: petstore.swagger.io
basePath: "/v2"
parameters:
  simpleParam:
    in: query
    name: simple
    type: string
    x-chicken: nuggets
security:
  - global_auth:
      - write:pets
      - read:pets
tags:
  - name: pet
    description: Everything about your Pets
    externalDocs:
      description: Find out more
      url: http://swagger.io
  - name: store
    description: Access to Petstore orders
  - name: user
    description: Operations about user
    externalDocs:
      description: Find out more about our store
      url: http://swagger.io
schemes:
  - https
  - http
consumes:
  - application/json
  - text/xml
produces:
  - application/json
paths:
  x-minty: fresh
  "/pet/{petId}/uploadImage":
    x-potato: man
    post:
      schemes: [ http, https]
      tags:
        - pet
      summary: uploads an image
      description: also, uploads an image - but this time with more details.
      operationId: uploadFile
      externalDocs:
        url: https://pb33f.io
      consumes:
        - multipart/form-data
      produces:
        - application/json
      parameters:
        - name: petId
          in: path
          description: ID of pet to update
          required: true
          type: integer
          format: int64
          exclusiveMaximum: true
          exclusiveMinimum: true
          maxLength: 2
          minLength: 1
          minimum: 1
          maximum: 5
          pattern: hi!
          minItems: 1
          maxItems: 20
          uniqueItems: true
          enum:
            - hello
            - there
          default:
            something: here
          multipleOf: 2
        - name: additionalMetadata
          in: formData
          description: Additional data to pass to server
          required: false
          type: string
          allowEmptyValue: true
          default: something
        - name: file
          in: formData
          description: file to upload
          required: false
          type: file
          default:
            - one
            - two
      responses:
        '200':
          description: successful operation
          schema:
            "$ref": "#/definitions/ApiResponse"
      security:
        - petstore_auth:
            - write:pets
            - read:pets
  "/pet":
    post:
      tags:
        - pet
      summary: Add a new pet to the store
      description: ''
      operationId: addPet
      consumes:
        - application/json
        - application/xml
      produces:
        - application/json
        - application/xml
      parameters:
        - in: body
          name: body
          description: Pet object that needs to be added to the store
          required: true
          schema:
            "$ref": "#/definitions/Pet"
      responses:
        '405':
          description: Invalid input
      security:
        - petstore_auth:
            - write:pets
            - read:pets
    put:
      tags:
        - pet
      summary: Update an existing pet
      description: ''
      operationId: updatePet
      consumes:
        - application/json
        - application/xml
      produces:
        - application/json
        - application/xml
      parameters:
        - in: body
          name: body
          description: Pet object that needs to be added to the store
          required: true
          schema:
            "$ref": "#/definitions/Pet"
      responses:
        '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
      produces:
        - application/json
        - application/xml
      parameters:
        - name: status
          in: query
          description: Status values that need to be considered for filter
          required: true
          type: array
          items:
            type: string
            enum:
              - available
              - pending
              - sold
            default: available
          collectionFormat: multi
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              "$ref": "#/definitions/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
      produces:
        - application/json
        - application/xml
      parameters:
        - name: tags
          in: query
          description: Tags to filter by
          required: true
          type: array
          items:
            type: string
          collectionFormat: multi
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              "$ref": "#/definitions/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
      produces:
        - application/json
        - application/xml
      parameters:
        - name: petId
          in: path
          description: ID of pet to return
          required: true
          type: integer
          format: int64
      responses:
        '200':
          description: successful operation
          schema:
            "$ref": "#/definitions/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
      consumes:
        - application/x-www-form-urlencoded
      produces:
        - application/json
        - application/xml
      parameters:
        - name: petId
          in: path
          description: ID of pet that needs to be updated
          required: true
          type: integer
          format: int64
        - name: name
          in: formData
          description: Updated name of the pet
          required: false
          type: string
        - name: status
          in: formData
          description: Updated status of the pet
          required: false
          type: string
      responses:
        '405':
          description: Invalid input
      security:
        - petstore_auth:
            - write:pets
            - read:pets
    delete:
      tags:
        - pet
      summary: Deletes a pet
      description: ''
      operationId: deletePet
      produces:
        - application/json
        - application/xml
      parameters:
        - name: api_key
          in: header
          required: false
          type: string
        - name: petId
          in: path
          description: Pet id to delete
          required: true
          type: integer
          format: int64
      responses:
        '400':
          description: Invalid ID supplied
        '404':
          description: Pet not found
      security:
        - petstore_auth:
            - write:pets
            - read:pets
  "/store/order":
    post:
      tags:
        - store
      summary: Place an order for a pet
      description: ''
      operationId: placeOrder
      consumes:
        - application/json
      produces:
        - application/json
        - application/xml
      parameters:
        - in: body
          name: body
          description: order placed for purchasing the pet
          required: true
          schema:
            "$ref": "#/definitions/Order"
      responses:
        '200':
          description: successful operation
          schema:
            "$ref": "#/definitions/Order"
        '400':
          description: Invalid Order
  "/store/order/{orderId}":
    get:
      tags:
        - store
      summary: Find purchase order by ID
      description: For valid response try integer IDs with value >= 1 and <= 10. Other
        values will generated exceptions
      operationId: getOrderById
      produces:
        - application/json
        - application/xml
      parameters:
        - name: orderId
          in: path
          description: ID of pet that needs to be fetched
          required: true
          type: integer
          maximum: 10
          minimum: 1
          format: int64
      responses:
        '200':
          description: successful operation
          schema:
            "$ref": "#/definitions/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 positive integer value.
        Negative or non-integer values will generate API errors
      operationId: deleteOrder
      produces:
        - application/json
        - application/xml
      parameters:
        - name: orderId
          in: path
          description: ID of the order that needs to be deleted
          required: true
          type: integer
          minimum: 1
          format: int64
      responses:
        '400':
          description: Invalid ID supplied
        '404':
          description: Order not found
  "/store/inventory":
    get:
      tags:
        - store
      summary: Returns pet inventories by status
      description: Returns a map of status codes to quantities
      operationId: getInventory
      produces:
        - application/json
      parameters: []
      responses:
        '200':
          description: successful operation
          schema:
            type: object
            additionalProperties:
              type: integer
              format: int32
      security:
        - api_key: []
  "/user/createWithArray":
    post:
      tags:
        - user
      summary: Creates list of users with given input array
      description: ''
      operationId: createUsersWithArrayInput
      consumes:
        - application/json
      produces:
        - application/json
        - application/xml
      parameters:
        - in: body
          name: body
          description: List of user object
          required: true
          schema:
            type: array
            items:
              "$ref": "#/definitions/User"
      responses:
        default:
          description: successful operation
  "/user/createWithList":
    post:
      tags:
        - user
      summary: Creates list of users with given input array
      description: ''
      operationId: createUsersWithListInput
      consumes:
        - application/json
      produces:
        - application/json
        - application/xml
      parameters:
        - in: body
          name: body
          description: List of user object
          required: true
          schema:
            type: array
            items:
              "$ref": "#/definitions/User"
      responses:
        default:
          description: successful operation
  "/user/{username}":
    get:
      tags:
        - user
      summary: Get user by user name
      description: ''
      operationId: getUserByName
      produces:
        - application/json
        - application/xml
      parameters:
        - name: username
          in: path
          description: 'The name that needs to be fetched. Use user1 for testing. '
          required: true
          type: string
      responses:
        '200':
          description: successful operation
          schema:
            "$ref": "#/definitions/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
      consumes:
        - application/json
      produces:
        - application/json
        - application/xml
      parameters:
        - name: username
          in: path
          description: name that need to be updated
          required: true
          type: string
        - in: body
          name: body
          description: Updated user object
          required: true
          schema:
            "$ref": "#/definitions/User"
      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
      produces:
        - application/json
        - application/xml
      parameters:
        - name: username
          in: path
          description: The name that needs to be deleted
          required: true
          type: string
      responses:
        '400':
          description: Invalid username supplied
        '404':
          description: User not found
  "/user/login":
    get:
      tags:
        - user
      summary: Logs user into the system
      description: ''
      operationId: loginUser
      produces:
        - application/json
        - application/xml
      parameters:
        - name: username
          in: query
          description: The user name for login
          required: true
          type: string
        - name: password
          in: query
          description: The password for login in clear text
          required: true
          type: string
      responses:
        '200':
          description: successful operation
          headers:
            X-Expires-After:
              type: string
              format: date-time
              description: date in UTC when token expires
            X-Rate-Limit:
              type: integer
              format: int32
              description: calls per hour allowed by the user
          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
      produces:
        - application/json
        - application/xml
      parameters: []
      responses:
        default:
          description: successful operation
  "/user":
    borked:
      summary: not allowed
    options:
      summary: hola!
      responses:
        default:
          description: hello there
    delete:
      summary: sup!
      responses:
        default:
          description: hello there
    head:
      summary: yo!
      responses:
        default:
          description: hello there
    patch:
      summary: hi!
      responses:
        default:
          description: hello there
    post:
      tags:
        - user
      summary: Create user
      description: This can only be done by the logged in user.
      operationId: createUser
      consumes:
        - application/json
      produces:
        - application/json
        - application/xml
      parameters:
        - in: body
          name: body
          description: Created user object
          required: true
          schema:
            "$ref": "#/definitions/User"
      responses:
        default:
          description: successful operation
  "/ref":
    $ref: "#/externalPaths/test"
securityDefinitions:
  tokenKey:
    description: this is a token key
    type: oauth2
    tokenUrl: https://petstore.swagger.io/oauth/token
    flow: password
  api_key:
    description: this is an API key
    type: apiKey
    name: api_key
    in: header
  petstore_auth:
    type: oauth2
    authorizationUrl: https://petstore.swagger.io/oauth/authorize
    flow: implicit
    scopes:
      read:pets: read your pets
      write:pets: modify pets in your account
responses:
  "200":
    x-coffee: morning
    description: OK
    headers:
      noHeader:
        type: string
        x-empty: true
        items:
          type: string
      yourHeader:
        type: string
        default: yourHeader
        items:
          default: somethingSimple
      ourHeader:
        type: string
        default:
          funny: bunny
      myHeader:
        type: array
        description: myHeader
        items:
          type: string
          default:
            something: here
          items:
            default:
              - one
              - two
        collectionFormat: csv
        default: [ one, two, three ]
        enum: [ 99,100,101 ]
    examples:
      "application/json":
        one: two
        three: four
      "text/xml":
        - one
        - two
        - three
      "text/plain": something else.
    schema:
      $ref: '#/definitions/ApiResponse'
  "500":
    description: Error
    schema:
      $ref: '#/definitions/ApiResponse'
    headers:
      someHeader:
        format: something
        pattern: a nice pattern
        exclusiveMinimum: false
        exclusiveMaximum: false
        minimum: 1
        maximum: 2
        maxItems: 3
        minItems: 1
        minLength: 1
        maxLength: 10
        multipleOf: 20
        uniqueItems: false
        type: array
        enum: [one, two]
        items:
          format: something
          type: array
          collectionFormat: csv
          default: cake
          maximum: 10
          exclusiveMaximum: true
          minimum: 1
          exclusiveMinimum: true
          maxLength: 5
          minLength: 1
          pattern: hi!
          minItems: 1
          maxItems: 10
          uniqueItems: true
          enum:
            - one
            - two
          multipleOf: 1
definitions:
  ApiResponse:
    description: a generic API response object
    type: object
    properties:
      code:
        type: integer
        format: int32
      type:
        type: string
      message:
        type: string
  Category:
    type: object
    properties:
      id:
        type: integer
        format: int64
      name:
        type: string
    xml:
      name: Category
  Pet:
    type: object
    required:
      - name
      - photoUrls
    properties:
      id:
        type: integer
        format: int64
      category:
        "$ref": "#/definitions/Category"
      name:
        type: string
        example: doggie
      photoUrls:
        type: array
        xml:
          wrapped: true
        items:
          type: string
          xml:
            name: photoUrl
      tags:
        type: array
        xml:
          wrapped: true
        items:
          xml:
            name: tag
          "$ref": "#/definitions/Tag"
      status:
        type: string
        description: pet status in the store
        enum:
          - available
          - pending
          - sold
    xml:
      name: Pet
  Tag:
    type: object
    properties:
      id:
        type: integer
        format: int64
      name:
        type: string
    xml:
      name: Tag
  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
    xml:
      name: Order
  User:
    type: object
    properties:
      id:
        type: integer
        format: int64
      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
externalDocs:
  description: Find out more about Swagger
  url: http://swagger.io
externalPaths:
  # this is illegal
  test:
    - summary: this is illegal.