openapi: 3.1.0
info:
  title: Petstore
  version: 1.0.17
  description: This is a sample Pet Store Server specification used to illustrate
    the documentation and sdk publication features of the Waylay service catalog.
servers:
- url: https://api.waylay.io
  description: Waylay enterprise gateway
externalDocs:
  url: https://docs.waylay.io/#/api/
  description: Waylay Documentation
tags:
- name: pets
  description: Everything about your Pets.
  externalDocs:
    description: Find out more
    url: https://docs.waylay.io
- name: store
  description: Access to Petstore orders.
  externalDocs:
    description: Find out more about our store
    url: https://docs.waylay.io
- name: users
  description: Operations about user.
paths:
  /petstore/v1/:
    get:
      summary: Show About
      description: Get Petstore service information.
      operationId: about
      responses:
        '200':
          description: Service Information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AboutResponse'
      security: &id002
      - waylayApiKeySecret: []
  /petstore/v1/pet:
    put:
      tags:
      - pets
      summary: Update Pet
      description: Update an existing pet.
      operationId: update_pets
      requestBody:
        description: Pet Instance
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Pet'
        required: true
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pet'
        '400':
          description: Invalid Id Supplied
        '404':
          description: Pet Not Found
        '405':
          description: Validation Exception
      security: &id001
      - waylayApiKeySecret: []
    post:
      tags:
      - pets
      summary: Add Pet
      description: Add a new pet to the store.
      operationId: add_pets
      requestBody:
        description: Pet Instance
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Pet'
        required: true
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pet'
        '405':
          description: Invalid Input
      security: *id001
  /petstore/v1/pet/findByTags:
    get:
      tags:
      - pets
      summary: Find Pets By Tags
      description: 'Find pets by tags.


        #### visibility

        This definition has visibility status `beta`.

        '
      x-visibility: beta
      x-select-path: entities.pets
      operationId: findByTags_pets
      parameters:
      - name: tags
        in: query
        description: Tags to filter by
        required: true
        explode: true
        schema:
          type: array
          items:
            type: string
        example:
        - some-tag
        - some-other-tag
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PetEntities'
        '400':
          description: Invalid Tag Value
      security: *id001
    delete:
      tags:
      - pets
      summary: Delete Pets By Tags
      description: 'Delete pets by tags.


        #### visibility

        This definition has visibility status `beta`.

        '
      x-visibility: beta
      x-select-path: entities.pets[*].name
      operationId: deleteByTags_pets
      parameters:
      - name: tags
        in: query
        description: Tags to filter by
        required: false
        explode: true
        schema:
          type: array
          minItems: 1
          items:
            type: string
        example:
        - some-tag
        - some-other-tag
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PetEntities'
        '400':
          description: Invalid Tag Value
      security: *id001
  /petstore/v1/pet/{petId}:
    get:
      tags:
      - pets
      summary: Find Pet
      description: Find a pet by id.
      operationId: get_pets
      parameters:
      - name: petId
        in: path
        description: ID of pet to return
        required: true
        schema:
          type: integer
          format: int64
        example: 123456
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pet'
        '400':
          description: Invalid Id Supplied
        '404':
          description: Pet Not Found
      security: *id001
    post:
      tags:
      - pets
      summary: Update Pet
      description: Update a pet in the store with form data.
      operationId: updateById_pets
      parameters:
      - name: petId
        in: path
        description: ID of pet that needs to be updated
        required: true
        schema:
          type: integer
          format: int64
        example: 123456
      - name: name
        in: query
        description: Name of pet that needs to be updated
        schema:
          type: string
        example: fido
      responses:
        '405':
          description: Invalid Input
      security: *id001
    delete:
      tags:
      - pets
      summary: Delete Pet
      description: Delete a pet.
      operationId: delete_pets
      parameters:
      - name: api_key
        in: header
        description: ''
        required: false
        schema:
          type: string
      - name: petId
        in: path
        description: Pet id to delete
        required: true
        schema:
          type: integer
          format: int64
        example: 987654
      responses:
        '400':
          description: Invalid Pet Value
      security: *id001
  /petstore/v1/pet/{petId}/uploadImage:
    post:
      tags:
      - pets
      summary: Upload Image
      description: Upload an image.
      operationId: uploadImage_pets
      parameters:
      - name: petId
        in: path
        description: ID of pet to update
        required: true
        schema:
          type: integer
          format: int64
        example: 987654
      - name: additionalMetadata
        in: query
        description: Additional metadata
        required: false
        schema:
          type: string
        example: metadata_string
      requestBody:
        content:
          application/octet-stream:
            schema:
              description: A single image upload.
              type: string
              format: binary
          multipart/form-data:
            schema:
              type: object
              properties:
                image:
                  description: An image file.
                  type: string
                  format: binary
                comment:
                  description: Additional comment on the images.
                  type: string
            encoding:
              image:
                contentType: image/png, image/jpeg
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImageUploadResponse'
      security: *id001
  /petstore/v1/pet/{petId}/images/{imageName}:
    put:
      tags:
      - pets
      summary: Replace Image
      description: Replace an image.
      operationId: replaceImage_pets
      parameters:
      - name: petId
        in: path
        description: ID of pet to update
        required: true
        schema:
          type: integer
          format: int64
        example: 987654
      - name: imageName
        in: path
        description: Name of the image
        required: true
        schema:
          type: string
        example: front.png
      requestBody:
        content:
          image/*:
            schema:
              description: A single image upload.
              type: string
              format: binary
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImageUploadResponse'
      security: *id001
  /petstore/v1/pet/{petId}/uploadImages:
    post:
      tags:
      - pets
      summary: Upload Images
      description: Upload one or more images.
      operationId: uploadImages_pets
      parameters:
      - name: petId
        in: path
        description: ID of pet to update
        required: true
        schema:
          type: integer
          format: int64
        example: 987654
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                images:
                  description: Multiple images
                  type: array
                  items:
                    type: string
                    format: binary
                comment:
                  description: Additional comment on the images.
                  type: string
            encoding:
              images:
                contentType: image/png, image/jpeg
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImageUploadResponse'
      security: *id001
  /petstore/v1/pet/{petId}/feedback:
    post:
      tags:
      - pets
      summary: Submit Feedback
      description: Upload a feedback form (url-encoded).
      operationId: feedback_pets
      parameters:
      - name: petId
        in: path
        description: ID of pet to evaluate.
        required: true
        schema:
          type: integer
          format: int64
        example: 987654
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PetRatingForm'
      responses:
        '200':
          description: Feedback Submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PetRatingForm'
      security: *id001
  /petstore/v1/store/inventory:
    get:
      tags:
      - store
      summary: Get Pet Inventories
      description: Get pet inventories by status.
      operationId: getInventory_store
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: integer
                  format: int32
                  example: 1
      security: *id001
  /petstore/v1/store/order:
    post:
      tags:
      - store
      summary: Place Order
      description: Place a new order in the store.
      operationId: placeOrder_store
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Order'
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '405':
          description: Invalid Input
      security: *id002
  /petstore/v1/store/order/{orderId}:
    get:
      tags:
      - store
      summary: Get Purchase Order
      description: Find purchase order by id.
      operationId: getOrder_store
      parameters:
      - name: orderId
        in: path
        description: ID of order that needs to be fetched
        required: true
        schema:
          type: integer
          format: int64
        example: 456789
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '400':
          description: Invalid Id Supplied
        '404':
          description: Order Not Found
      security: *id002
    delete:
      tags:
      - store
      summary: Delete Purchase Order By Id
      description: Delete purchase order by id.
      operationId: deleteOrder_store
      parameters:
      - name: orderId
        in: path
        description: ID of the order that needs to be deleted
        required: true
        schema:
          type: integer
          format: int64
        example: 456789
      responses:
        '400':
          description: Invalid Id Supplied
        '404':
          description: Order Not Found
      security: *id002
  /petstore/v1/store/events:
    get:
      tags:
      - store
      summary: List Order Events
      description: List order events of the store.
      operationId: events_store
      responses:
        '200':
          description: Order Event Stream
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/Order'
            text/event-stream:
              schema:
                $ref: '#/components/schemas/Order'
      security: *id001
  /petstore/v1/user:
    post:
      tags:
      - users
      summary: Create User
      description: Create a user.
      operationId: create_users
      requestBody:
        description: Created user object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
      responses:
        default:
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
      security: *id002
  /petstore/v1/user/createWithList:
    post:
      tags:
      - users
      summary: Create Multiple Users
      description: 'Create list of users.


        #### visibility

        This definition has visibility status `deprecated`.

        '
      x-visibility: deprecated
      operationId: createFromList_users
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/User'
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        default:
          description: Successful Operation
      security: *id002
  /petstore/v1/user/login:
    get:
      tags:
      - users
      summary: Login
      description: Log a user into the system.
      operationId: login_users
      parameters:
      - name: username
        in: query
        description: The user name for login
        required: false
        schema:
          type: string
        example: john
      - name: password
        in: query
        description: The password for login in clear text
        required: false
        schema:
          type: string
        example: '**pwd**'
      responses:
        '200':
          description: Successful Operation
          headers:
            X-Rate-Limit:
              description: calls per hour allowed by the user
              schema:
                type: integer
                format: int32
              example: 10
            X-Expires-After:
              description: date in UTC when token expires
              schema:
                type: string
                format: date-time
          content:
            application/json:
              schema:
                type: string
              example: User logged in
        '400':
          description: Invalid Username/password Supplied
      security: *id002
  /petstore/v1/user/logout:
    get:
      tags:
      - users
      summary: Logout
      description: Log out the current logged in user session.
      operationId: logout_users
      responses:
        default:
          description: Successful Operation
      security: *id002
  /petstore/v1/user/{username}:
    get:
      tags:
      - users
      summary: Get User
      description: Get a user by user name.
      operationId: getByName_users
      parameters:
      - name: username
        in: path
        description: The name that needs to be fetched
        required: true
        schema:
          type: string
        example: Simon
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          description: Invalid Username Supplied
        '404':
          description: User Not Found
      security: *id002
    put:
      tags:
      - users
      summary: Update User
      description: Update a user.
      operationId: update_users
      parameters:
      - name: username
        in: path
        description: name that need to be deleted
        required: true
        schema:
          type: string
        example: Simon
      requestBody:
        description: Update an existent user in the store
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
      responses:
        default:
          description: Successful Operation
      security: *id002
    delete:
      tags:
      - users
      summary: Delete User
      description: Delete a user.
      operationId: delete_users
      parameters:
      - name: username
        in: path
        description: The name that needs to be deleted
        required: true
        schema:
          type: string
        example: Simon
      responses:
        '400':
          description: Invalid Username Supplied
        '404':
          description: User Not Found
      security: *id002
  /petstore/v1/usernames:
    get:
      tags:
      - users
      summary: List User Names
      description: List user names.
      operationId: listNames_users
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                title: User Names
                type: array
                items:
                  title: User Name
                  type: string
      security: *id002
    post:
      tags:
      - users
      summary: Validate User Names
      description: Check that all specified user names exist.
      operationId: validateNames_users
      requestBody:
        content:
          application/json:
            schema:
              title: User Names
              type: array
              items:
                title: User Name
                type: string
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                title: All Valid
                type: boolean
      security: *id002
components:
  schemas:
    Order:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 10
        petId:
          type: integer
          format: int64
          example: 198772
        quantity:
          type: integer
          format: int32
          example: 7
        shipDate:
          type: string
          format: date-time
        status:
          type: string
          description: Order Status
          example: approved
          enum:
          - placed
          - approved
          - delivered
        complete:
          type: boolean
          example: true
    Customer:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 100000
        username:
          type: string
          example: fehguy
        address:
          type: array
          items:
            $ref: '#/components/schemas/Address'
    Address:
      type: object
      properties:
        street:
          type: string
          example: 437 Lytton
        city:
          type: string
          example: Palo Alto
        state:
          type: string
          example: CA
        zip:
          type: string
          example: '94301'
    Category:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 1
        name:
          type: string
          example: Dogs
    User:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 10
        username:
          type: string
          example: theUser
        firstName:
          type: string
          example: John
        lastName:
          type: string
          example: James
        email:
          type: string
          example: john@email.com
        password:
          type: string
          example: '12345'
        phone:
          type: string
          example: '12345'
        userStatus:
          type: integer
          description: User Status
          format: int32
          example: 1
    Tag:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 123456
        name:
          type: string
          example: Cruella
    Pet:
      required:
      - name
      - photoUrls
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 10
        name:
          type: string
          example: doggie
        category:
          $ref: '#/components/schemas/Category'
        photoUrls:
          type: array
          items:
            type: string
            example: https://my-photo-url.io
        tags:
          type: array
          items:
            $ref: '#/components/schemas/Tag'
        status:
          type: string
          description: pet status in the store
          enum:
          - available
          - pending
          - sold
    PetEntities:
      type: object
      required:
      - entities
      properties:
        entities:
          $ref: '#/components/schemas/PetList'
    PetList:
      type: object
      required:
      - pets
      properties:
        pets:
          type: array
          items:
            $ref: '#/components/schemas/Pet'
    ImageUploadResponse:
      x-classname: ImageUpload
      type: object
      properties:
        code:
          type: integer
          format: int32
          example: 123
        type:
          type: string
          example: type1
        message:
          type: string
          example: upload ok
    AboutResponse:
      type: object
      required:
      - message
      - version
      properties:
        message:
          type: string
          example: service info blah blah
        version:
          type: string
          example: 1.2.3-beta
    PetRatingForm:
      title: Pet Rating
      description: Pet evaluation form.
      type: object
      properties:
        rating:
          description: Pet rating.
          type: integer
          maximum: 5
          minimum: 0
        comment:
          description: Pet rating comment.
          type: string
  requestBodies:
    Pet:
      description: Pet object that needs to be added to the store
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Pet'
    UserArray:
      description: List of user object
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/User'
  securitySchemes:
    waylayApiKeySecret:
      type: http
      description: Waylay apiKey/apiSecret basic authentication. All endpoints support
        also Waylay JWT Bearer authentication.
      scheme: basic
