openapi: 3.0.0
servers:
  - url: //petstore.swagger.io/v2
    description: Default server
  - url: //petstore.swagger.io/sandbox
    description: Sandbox server
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.
    # Introduction
    This API is documented in **OpenAPI format** and is based on
    [Petstore sample](http://petstore.swagger.io/) provided by [swagger.io](http://swagger.io) team.
    It was **extended** to illustrate features of [generator-openapi-repo](https://github.com/Rebilly/generator-openapi-repo)
    tool and [ReDoc](https://github.com/Redocly/redoc) documentation. In addition to standard
    OpenAPI syntax we use a few [vendor extensions](https://github.com/Redocly/redoc/blob/main/docs/redoc-vendor-extensions.md).
    # OpenAPI Specification
    This API is documented in **OpenAPI format** and is based on
    [Petstore sample](http://petstore.swagger.io/) provided by [swagger.io](http://swagger.io) team.
    It was **extended** to illustrate features of [generator-openapi-repo](https://github.com/Rebilly/generator-openapi-repo)
    tool and [ReDoc](https://github.com/Redocly/redoc) documentation. In addition to standard
    OpenAPI syntax we use a few [vendor extensions](https://github.com/Redocly/redoc/blob/main/docs/redoc-vendor-extensions.md).
    # Cross-Origin Resource Sharing
    This API features Cross-Origin Resource Sharing (CORS) implemented in compliance with  [W3C spec](https://www.w3.org/TR/cors/).
    And that allows cross-domain communication from the browser.
    All responses have a wildcard same-origin which makes them completely public and accessible to everyone, including any code on any site.
    # Authentication
    Petstore offers two forms of authentication:
      - API Key
      - OAuth2
    OAuth2 - an open protocol to allow secure authorization in a simple
    and standard method from web, mobile and desktop applications.
    
  version: 1.1.0
  title: Swagger Petstore
  termsOfService: 'http://swagger.io/terms/'
  contact:
    name: API Support
    email: apiteam@swagger.io
    url: https://github.com/Redocly/redoc
  x-logo:
    url: 'https://redocly.github.io/redoc/petstore-logo.png'
    altText: Petstore logo
  license:
    name: Apache 2.0
    url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
externalDocs:
  description: Find out how to create Github repo for your OpenAPI spec.
  url: 'https://github.com/Rebilly/generator-openapi-repo'
tags:
  - name: pet
    description: Everything about your Pets
  - name: Tn Option
    description: Everything about your TN Options
  - name: store
    description: Access to Petstore orders
  - name: user
    description: Operations about user
  - name: pet_model
    x-displayName: The Pet Model
    description: |
      
  - name: store_model
    x-displayName: The Order Model
    description: |
      
x-tagGroups:
  - name: General
    tags:
      - pet
      - store
      - Tn Option
  - name: User Management
    tags:
      - user
  - name: Models
    tags:
      - pet_model
      - store_model
security:
  - {}
paths:
  /pet:
    parameters:
      - name: Accept-Language
        in: header
        description: 'The language you prefer for messages. Supported values are en-AU, en-CA, en-GB, en-US'
        example: en-US
        required: false
        schema:
          type: string
          default: en-AU
      - name: cookieParam
        in: cookie
        description: Some cookie
        required: true
        schema:
          type: integer
          format: int64
    post:
      tags:
        - pet
      summary: Add a new pet to the store
      description: Add new pet to the store inventory.
      operationId: addPet
      x-badges:
        - name: Global
          type: global
      responses:
        '405':
          description: Invalid input
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
      x-codeSamples:
        - lang: 'C#'
          source: |
            PetStore.v1.Pet pet = new PetStore.v1.Pet();
            pet.setApiKey("your api key");
            pet.petType = PetStore.v1.Pet.TYPE_DOG;
            pet.name = "Rex";
            // set other fields
            PetStoreResponse response = pet.create();
            if (response.statusCode == HttpStatusCode.Created)
            {
              // Successfully created
            }
            else
            {
              // Something wrong -- check response for errors
              Console.WriteLine(response.getRawResponse());
            }
        - lang: PHP
          source: |
            $form = new \PetStore\Entities\Pet();
            $form->setPetType("Dog");
            $form->setName("Rex");
            // set other fields
            try {
                $pet = $client->pets()->create($form);
            } catch (UnprocessableEntityException $e) {
                var_dump($e->getErrors());
            }
      requestBody:
        $ref: '#/components/requestBodies/Pet'
    put:
      tags:
        - pet
      summary: Update an existing pet
      description: ''
      operationId: updatePet
      x-badges:
        - name: US Only
          type: usonly
      responses:
        '400':
          description: Invalid ID supplied
        '404':
          description: Pet not found
        '405':
          description: Validation exception
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
      x-codeSamples:
        - lang: PHP
          source: |
            $form = new \PetStore\Entities\Pet();
            $form->setPetId(1);
            $form->setPetType("Dog");
            $form->setName("Rex");
            // set other fields
            try {
                $pet = $client->pets()->update($form);
            } catch (UnprocessableEntityException $e) {
                var_dump($e->getErrors());
            }
      requestBody:
        $ref: '#/components/requestBodies/Pet'
  '/accounts/{accountId}/tnoptions/{orderid}/history':
    get:
      description: Retrieve the history information associated with an order.
      operationId: GetOrderHistory
      x-badges:
        - name: Success
          type: success
      parameters:
        - description: ''
          in: path
          name: orderid
          required: true
          schema:
            type: string
      responses:
        '200':
          content:
            application/xml:
              examples:
                application/xml:
                  value: |-
                    
                    
                       
                          2020-09-17T08:56:39.607Z
                          Order has been received by the system.
                          admin
                          received
                       
                       
                          2020-09-17T08:56:39.743Z
                          Order processing has started.
                          admin
                          processing
                       
                       
                          2020-09-17T08:56:39.820Z
                          Order is complete.
                          admin
                          complete
                       
                    
          description: >-
            The history payload is a set of history records, each of which
            contains: 
                    
                        
                            | OrderDate | The date that the order history event happened | 
| Status | The new state of the TN Option order - RECEIVED, PROCESSING, COMPLETE, PARTIAL, FAILED | 
| Note | A Note or additional information included with the state change | 
| Author | The user id that implemented the state change | 
        '404':
          content:
            application/xml: {}
          description: Not found. The order id does not exist in the system.
      summary: Retrieve TN Option order history
      tags:
        - Tn Option
  '/accounts/{accountId}/tnoptions':
    get:
      description: >-
        Retrieve a list of the TN Option orders that are associated with the
        account. A maximum of 1,000 orders can be retrieved per request. If no
        date range or specific query parameter (marked by * below) is
        provided, the order results will be limited to the last two years.
      operationId: GetTnOptionOrders
      x-badges:
        - name: 1st Badge
          type: warning
        - name: 2nd Badge
          type: experimental
      parameters:
        - description: The status of the TN Option order being searched for.
          example: PROCESSING
          in: query
          name: status
          required: false
          schema:
            items:
              type: string
            type: array
        - description: * A Telephone Number (TN) that is referenced in the order.
          example: '9199918388'
          in: query
          name: tn
          required: false
          schema:
            type: string
        - description: >-
            * The Customer Order ID is an ID assigned by the account
            owner to provide a reference number for the TN Option order.
          example: ABCCorp12345
          in: query
          name: customerOrderId
          required: false
          schema:
            type: string
        - description: >-
            For Date-based searches, the starting date of a date range
            (inclusive) that will be used to find TN Option Orders that were
            modified within the date range. It is in the form yyyy-MM-dd.
          example: '2013-10-22'
          in: query
          name: modifiedDateFrom
          required: false
          schema:
            type: string
        - description: >-
            For Date-based searches, the ending date of a date range (inclusive)
            that will be used to find TN Option Orders that were modified within
            the date range.  It is in the form yyyy-MM-dd.
          example: '2013-10-25'
          in: query
          name: modifiedDateTo
          required: false
          schema:
            type: string
        - description: >-
            Checks the order's creation date against this value. Orders that
            have a creation date after this date will be included. Format is
            yyyy-MM-dd.
          example: '2013-10-22'
          in: query
          name: createdDateFrom
          required: false
          schema:
            type: string
        - description: >-
            Checks the order's creation date against this value. Orders that
            have a creation date before this date will be included. Format is
            yyyy-MM-dd.
          example: '2013-10-25'
          in: query
          name: createdDateTo
          required: false
          schema:
            type: string
        - description: >-
            Checks the order's last modified date against this value. Orders
            that have a modification date after this date will be included.
            Format is yyyy-MM-dd.
          example: '2013-10-25'
          in: query
          name: lastModifiedAfter
          required: false
          schema:
            type: string
        - description: >-
            This is the user-name of the user that last modified the TN Option
            Order.
          example: smckinnon
          in: query
          name: lastModifiedBy
          required: false
          schema:
            type: string
        - description: >-
            * This search parameter represents the internal Bandwidth
            Dashboard API ID that has been assigned to the TN Option Order. This
            parameter is the first few characters of the internal ID - the
            entire ID does not need to be specified.
          example: ed1c0bed-e2
          in: query
          name: orderIdFragment
          required: false
          schema:
            type: string
        - description: >-
            If set to true, a list of order details will be displayed instead
            the summary information.
          in: query
          name: orderDetails
          required: false
          schema:
            type: boolean
      responses:
        '200':
          content:
            application/xml:
              examples:
                example:
                  value: |-
                    
                    
                       
                          2
                          
                             14
                             2
                             jbm
                             2016-01-15T12:01:14.363Z
                             2016-01-15T12:01:14.324Z
                             tn_option
                             FAILED
                             ddbdc72e-dc27-490c-904e-d0c11291b095
                          
                          
                             14
                             3
                             jbm
                             2016-01-15T11:22:58.969Z
                             2016-01-15T11:22:58.789Z
                             tn_option
                             COMPLETE
                             409033ee-88ec-43e3-85f3-538f30733963
                          
                       
                       
                       
                          2
                          
                             2016-01-15T12:01:14.324Z
                             14
                             jbm
                             ddbdc72e-dc27-490c-904e-d0c11291b095
                             2016-01-15T12:01:14.363Z
                             FAILED
                             
                                
                                   10digit
                                   10digit
                                   testUser1
                                   6042661720
                                   on
                                   true
                                   on
                                   sip:+12345678901@1.2.3.4:5060
                                   
                                      2018551020
                                   
                                
                                
                                   off
                                   false
                                   off
                                   
                                      2018551025
                                   
                                
                             
                             
                                
                                   5076
                                   Telephone number is not available.
                                   2018551025
                                
                                
                                   5076
                                   Telephone number is not available.
                                   2018551020
                                
                             
                          
                          
                             2016-01-15T11:22:58.789Z
                             14
                             jbm
                             409033ee-88ec-43e3-85f3-538f30733963
                             2016-01-15T11:22:58.969Z
                             COMPLETE
                             
                                
                                   on
                                   
                                      2174101601
                                   
                                
                                
                                   off
                                   
                                      2174101602
                                   
                                
                                
                                   systemdefault
                                   
                                      2174101603
                                   
                                
                             
                             
                          
                       
                    
          description: >-
            The descriptive payload for the TN Option Orders query provides a
            broad range of information about the TN Option Orders found by the
            query, including the data associated with the order, the state of
            the order, and details about the order if it was successful.
        '404':
          content:
            application/xml: {}
          description: >
            Not Found.  If any errors are found in the processing of the query
            string a 404 will be returned.  Note that parameters that are not
            recognized are not considered errors, and are just ignored.
      summary: Retrieve list TN Option orders
      tags:
        - Tn Option
    post:
      description: >-
        Create TN Option order to assign line features to the telephone
        number.
Attribute description:- for A2pSettings
        attribute
| Number
        attribute | Action value | Description of
        action | 
|---|
| LongCode | systemDefault | Removes
        the per-TN A2P attributes, and it reverts to the Location/SIP Peer
        characteristics. Any values for Class or Campaign ID are not
        valid | 
| LongCode | asSpecified | Sets
        the message class and campaign ID - this is the default if
        unspecified | 
| LongCode | off | Will
        set the TN as a 'P' TN. Any values for Class or Campaign ID are not
        valid | 
| LongCode | delete | Will
        delete the campaign ID from TN. Any values for Class or Campaign ID are
        not valid | 
| LongCode | unchanged | Do
        nothing with respect to
        A2P | 
| TollFree | systemDefault | Removes
        the per-TN A2P attributes, and it reverts to the Location/SIP Peer
        characteristics. Any values for Class or Campaign ID are not
        valid | 
| TollFree | asSpecified | Sets
        the message class and campaign ID - this is the default if
        unspecified | 
| TollFree | off | If the
        Togglz value is set to 'on' this is invalid for Toll Free telephone
        numbers. Any values for Class or Campaign ID in the payload are invalid.
        If the Togglz value is set to off this behaves like and A2P TN, where
        the characteristics of the TNs is set to
        'P' | 
| TollFree | unchanged | Do
        nothing with respect to A2P | 
- for Origination
        Route plan attribute
| Action
        value | Description of
        action | 
|---|
| asSpecified | Creates/updates the
        origination route plan for the TN with route plan details provided in
        the request | 
| off | Removes the origination route
        plan for the TN. Route list is the request must be
        empty | 
| unchanged | Doesn't update/create the
        origination route plan, even when route plan details exist in the
        request | 
-  Origination route plan is
        validated against CallForward and RewriteUser
- Route plan and CallForward cannot co-exist. Order is
        accepted but will respond with error messages on GET.
- Route plan and RewriteUser cannot co-exist. Order is
        accepted but will respond with error messages on
        GET.
- for Pindrop Enabled attribute
| Action value | Description of
        action | 
|---|
| true | Enables Pindrop integration on each
        phone number in the option
        group | 
| false | Explicitly disables Pindrop
        integration on each phone number in the option
        group | 
- for other attribute
-  systemDefault - implies that the element profile
        value should be removed so that the TN changes back to the default
        system behavior;
-  unchanged - the value
        should remain unchanged - implies a read before write model.
- Leaving the element out of the payload is equivalent to
        unchanged.
operationId: CreateTnOptionOrder
      requestBody:
        content:
          application/xml:
            examples:
              example:
                value: |-
                  
                  
                    TnOptionOrder1
                    
                      
                        10digit
                        10digit
                        testUser1
                        6042661720
                        on
                        a1b2c3
                        true
                        on
                        sip:+12345678901@1.2.3.4:5060
                        
                          M
                          campaignId010
                          asSpecified
                        
                        
                          2018551020
                        
                      
                      
                        off
                        false
                        off
                        
                          
                            6105552502
                            1
                            100
                          
                          
                            sip:clarkkent@dailyplanet.com
                            2
                            100
                          
                          
                            192.168.20.21
                            3
                            50
                          
                          
                            7075552509
                            3
                            50
                          
                          
                            myhost.bandwidth.example
                            4
                            100
                          
                          asSpecified
                        
                        
                          2018551025
                        
                      
                      
                        true
                        
                          2018551026
                        
                      
                    
                  
      responses:
        '201':
          content:
            application/xml:
              examples:
                example:
                  value: |-
                    
                    
                      
                        2016-01-15T12:01:14.324Z
                        14
                        jbm
                        ddbdc72e-dc27-490c-904e-d0c11291b095
                        2016-01-15T12:01:14.324Z
                        RECEIVED
                        
                          
                            10digit
                            10digit
                            testUser1
                            6042661720
                            on
                            true
                            on
                            
                              2018551020
                            
                          
                          
                            off
                            false
                            off
                            
                              2018551025
                            
                          
                        
                        
                      
                    
          description: Created
        '400':
          content:
            application/xml:
              examples:
                example:
                  value: |-
                    
                    
                      
                        5081
                        Number Format 'wrong' is invalid.
                      
                    
          description: >-
            Bad Request A 400 response Indicates that the order could not be
            created. Error text and an error code will be provided in the
            ErrorList element.
        '409':
          content:
            application/xml:
              examples:
                example:
                  value: |-
                    
                    
                      
                        5200
                        Origination route plan is not enabled for the account.
                      
                    
          description: >-
            Conflict. Error text and an error code will be provided in the
            ErrorList element.
      summary: Create TN Option order
      tags:
        - Tn Option
  '/accounts/{accountId}/tnoptions/{orderid}':
    get:
      description: Retrieve information about a TN Option Order with specified ID.
      operationId: GetTnOptionOrder
      parameters:
        - description: ''
          in: path
          name: orderid
          required: true
          schema:
            type: string
      responses:
        '200':
          content:
            application/xml:
              examples:
                example:
                  value: |-
                    
                    
                      2016-01-15T11:22:58.789Z
                      14
                      jbm
                      409033ee-88ec-43e3-85f3-538f30733963
                      2016-01-15T11:22:58.969Z
                      COMPLETE
                      
                        
                          on
                          on
                          
                            2174101601
                          
                        
                        
                          off
                          
                            2174101602
                          
                          
                        
                          systemdefault
                          sip:+12345678901@1.2.3.4:5060
                          
                            2174101603
                          
                        
                      
                      
                      
                        
                          2174101601
                          SMS is already Enabled or number is in processing.
                        
                      
                    
          description: >-
            The descriptive payload for the TN Option Orders query provides a
            broad range of information about the TN Option Order identified in
            the URL.  Included amongst the information is:- ErrorList -
            the errors discovered with codes and explanations
- Warnings -
            the warnings discovered with
            explanations
- ProcessingStatus(RECEIVED, PROCESSING,
            COMPLETE, PARTIAL, FAILED) - the overall status of the
            order
'404':
          content:
            application/xml:
              examples:
                example:
                  value: |-
                    
                    
                      
                        The resource does not exist
                      
                    
          description: Not found. The order id does not exist in the system.
      summary: Retrieve TN Option order
      tags:
        - Tn Option
  '/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
          deprecated: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pet'
            application/xml:
              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
      responses:
        '405':
          description: Invalid input
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
      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
    delete:
      tags:
        - pet
      summary: Deletes a pet
      description: ''
      operationId: deletePet
      parameters:
        - name: api_key
          in: header
          required: false
          schema:
            type: string
          example: 'Bearer '
        - name: petId
          in: path
          description: Pet id to delete
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '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
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
      requestBody:
        content:
          application/octet-stream:
            schema:
              type: string
              format: binary
  /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
          schema:
            type: array
            minItems: 1
            maxItems: 3
            items:
              type: string
              enum:
                - available
                - pending
                - sold
              default: available
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Pet'
            application/xml:
              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
      deprecated: true
      parameters:
        - name: tags
          in: query
          description: Tags to filter by
          required: true
          style: form
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Pet'
            application/xml:
              schema:
                type: array
                maxItems: 999
                items:
                  maxItems: 111
                  $ref: '#/components/schemas/Pet'
        '400':
          description: Invalid tag value
      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
                minProperties: 2
                additionalProperties:
                  type: integer
                  format: int32
      security:
        - api_key: []
  /store/order:
    post:
      tags:
        - store
      summary: Place an order for a pet
      description: ''
      operationId: placeOrder
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
            application/xml:
              schema:
                $ref: '#/components/schemas/Order'
        '400':
          description: Invalid Order
          content:
            application/json:
              example:
                status: 400
                message: 'Invalid Order'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Order'
        description: order placed for purchasing the pet
        required: true
  '/store/order/{orderId}':
    get:
      tags:
        - store
      summary: Find purchase order by ID
      description: >-
        For valid response try integer IDs with value <= 5 or > 10. Other values
        will generated exceptions
      operationId: getOrderById
      parameters:
        - name: orderId
          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/json:
              schema:
                $ref: '#/components/schemas/Order'
            application/xml:
              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: orderId
          in: path
          description: ID of the order that needs to be deleted
          required: true
          schema:
            type: string
            minimum: 1
      responses:
        '400':
          description: Invalid ID supplied
        '404':
          description: Order not found
  /store/subscribe:
    post:
      tags:
        - store
      summary: Subscribe to the Store events
      description: Add subscription for a store events
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                callbackUrl:
                  type: string
                  format: uri
                  description: This URL will be called by the server when the desired event will occur
                  example: https://myserver.com/send/callback/here
                eventName:
                  type: string
                  description: Event name for the subscription
                  enum:
                    - orderInProgress
                    - orderShipped
                    - orderDelivered
                  example: orderInProgress
              required:
                - callbackUrl
                - eventName
      responses:
        '201':
          description: Subscription added
          content:
            application/json:
              schema:
                type: object
                properties:
                  subscriptionId:
                    type: string
                    example: AAA-123-BBB-456
      callbacks:
        orderInProgress:
          '{$request.body#/callbackUrl}?event={$request.body#/eventName}':
            servers:
              - url: //callback-url.path-level/v1
                description: Path level server 1
              - url: //callback-url.path-level/v2
                description: Path level server 2
            post:
              summary: Order in Progress (Summary)
              description: A callback triggered every time an Order is updated status to "inProgress" (Description)
              externalDocs:
                description: Find out more
                url: 'https://more-details.com/demo'
              requestBody:
                content:
                  application/json:
                    schema:
                      type: object
                      properties:
                        orderId:
                          type: string
                          example: '123'
                        timestamp:
                          type: string
                          format: date-time
                          example: '2018-10-19T16:46:45Z'
                        status:
                          type: string
                          example: 'inProgress'
                  application/xml:
                    schema:
                      type: object
                      properties:
                        orderId:
                          type: string
                          example: '123'
                    example: |
                      
                      
                        123
                        inProgress
                        2018-10-19T16:46:45Z
                      
              responses:
                '200':
                  description: Callback successfully processed and no retries will be performed
                  content:
                    application/json:
                      schema:
                        type: object
                        properties:
                          someProp:
                            type: string
                            example: '123'
                '299':
                  description: Response for cancelling subscription
                '500':
                  description: Callback processing failed and retries will be performed
              x-codeSamples:
                - lang: 'C#'
                  source: |
                    PetStore.v1.Pet pet = new PetStore.v1.Pet();
                    pet.setApiKey("your api key");
                    pet.petType = PetStore.v1.Pet.TYPE_DOG;
                    pet.name = "Rex";
                    // set other fields
                    PetStoreResponse response = pet.create();
                    if (response.statusCode == HttpStatusCode.Created)
                    {
                      // Successfully created
                    }
                    else
                    {
                      // Something wrong -- check response for errors
                      Console.WriteLine(response.getRawResponse());
                    }
                - lang: PHP
                  source: |
                    $form = new \PetStore\Entities\Pet();
                    $form->setPetType("Dog");
                    $form->setName("Rex");
                    // set other fields
                    try {
                        $pet = $client->pets()->create($form);
                    } catch (UnprocessableEntityException $e) {
                        var_dump($e->getErrors());
                    }
            put:
              description: Order in Progress (Only Description)
              servers:
                - url: //callback-url.operation-level/v1
                  description: Operation level server 1 (Operation override)
                - url: //callback-url.operation-level/v2
                  description: Operation level server 2 (Operation override)
              requestBody:
                content:
                  application/json:
                    schema:
                      type: object
                      properties:
                        orderId:
                          type: string
                          example: '123'
                        timestamp:
                          type: string
                          format: date-time
                          example: '2018-10-19T16:46:45Z'
                        status:
                          type: string
                          example: 'inProgress'
                  application/xml:
                    schema:
                      type: object
                      properties:
                        orderId:
                          type: string
                          example: '123'
                    example: |
                      
                      
                        123
                        inProgress
                        2018-10-19T16:46:45Z
                      
              responses:
                '200':
                  description: Callback successfully processed and no retries will be performed
                  content:
                    application/json:
                      schema:
                        type: object
                        properties:
                          someProp:
                            type: string
                            example: '123'
        orderShipped:
          '{$request.body#/callbackUrl}?event={$request.body#/eventName}':
            post:
              description: |
                Very long description
                Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
                incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
                nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
                Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
                fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
                culpa qui officia deserunt mollit anim id est laborum.
              requestBody:
                content:
                  application/json:
                    schema:
                      type: object
                      properties:
                        orderId:
                          type: string
                          example: '123'
                        timestamp:
                          type: string
                          format: date-time
                          example: '2018-10-19T16:46:45Z'
                        estimatedDeliveryDate:
                          type: string
                          format: date-time
                          example: '2018-11-11T16:00:00Z'
              responses:
                '200':
                  description: Callback successfully processed and no retries will be performed
        orderDelivered:
          'http://notificationServer.com?url={$request.body#/callbackUrl}&event={$request.body#/eventName}':
            post:
              deprecated: true
              summary: Order delivered
              description: A callback triggered every time an Order is delivered to the recipient
              requestBody:
                content:
                  application/json:
                    schema:
                      type: object
                      properties:
                        orderId:
                          type: string
                          example: '123'
                        timestamp:
                          type: string
                          format: date-time
                          example: '2018-10-19T16:46:45Z'
              responses:
                '200':
                  description: Callback successfully processed and no retries will be performed
  /user:
    post:
      tags:
        - user
      summary: Create user
      description: This can only be done by the logged in user.
      operationId: createUser
      responses:
        default:
          description: successful operation
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
        description: Created user object
        required: true
  '/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/json:
              schema:
                $ref: '#/components/schemas/User'
            application/xml:
              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
      responses:
        '400':
          description: Invalid user supplied
        '404':
          description: User not found
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
        description: Updated user object
        required: true
    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
  /user/createWithArray:
    post:
      tags:
        - user
      summary: Creates list of users with given input array
      description: ''
      operationId: createUsersWithArrayInput
      responses:
        default:
          description: successful operation
      requestBody:
        $ref: '#/components/requestBodies/UserArray'
  /user/createWithList:
    post:
      tags:
        - user
      summary: Creates list of users with given input array
      description: ''
      operationId: createUsersWithListInput
      responses:
        default:
          description: successful operation
      requestBody:
        $ref: '#/components/requestBodies/UserArray'
  /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/json:
              schema:
                type: string
              examples:
                response:
                  value: OK
            application/xml:
              schema:
                type: string
              examples:
                response:
                  value:  OK 
            text/plain:
              examples:
                response:
                  value: OK
        '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
components:
  schemas:
    ApiResponse:
      type: object
      properties:
        code:
          type: integer
          format: int32
        type:
          type: string
        message:
          type: string
    Cat:
      'x-tags': ['pet']
      description: A representation of a cat
      allOf:
        - $ref: '#/components/schemas/Pet'
        - type: object
          properties:
            huntingSkill:
              type: string
              description: The measured skill for hunting
              default: lazy
              example: adventurous
              enum:
                - clueless
                - lazy
                - adventurous
                - aggressive
          required:
            - huntingSkill
    Category:
      type: object
      properties:
        id:
          description: Category ID
          allOf:
            - $ref: '#/components/schemas/Id'
        name:
          description: Category name
          type: string
          minLength: 1
        sub:
          description: Test Sub Category
          type: object
          properties:
            prop1:
              type: string
              description: Dumb Property
      xml:
        name: Category
    Dog:
      description: A representation of a dog
      allOf:
        - $ref: '#/components/schemas/Pet'
        - type: object
          properties:
            packSize:
              type: integer
              format: int32
              description: The size of the pack the dog is from
              default: 1
              minimum: 1
          required:
            - packSize
    HoneyBee:
      description: A representation of a honey bee
      allOf:
        - $ref: '#/components/schemas/Pet'
        - type: object
          properties:
            honeyPerDay:
              type: number
              description: Average amount of honey produced per day in ounces
              example: 3.14
              multipleOf: .01
          required:
            - honeyPerDay
    Id:
      type: integer
      format: int64
      readOnly: true
    Order:
      type: object
      properties:
        id:
          description: Order ID
          allOf:
            - $ref: '#/components/schemas/Id'
        petId:
          description: Pet ID
          allOf:
            - $ref: '#/components/schemas/Id'
        quantity:
          type: integer
          format: int32
          minimum: 1
          default: 1
        shipDate:
          description: Estimated ship date
          type: string
          format: date-time
        status:
          type: string
          description: Order Status
          enum:
            - placed
            - approved
            - delivered
        complete:
          description: Indicates whenever order was completed or not
          type: boolean
          default: false
          readOnly: true
        requestId:
          description: Unique Request Id
          type: string
          writeOnly: true
      xml:
        name: Order
    Pet:
      type: object
      required:
        - name
        - photoUrls
      discriminator:
        propertyName: petType
        mapping:
          cat: '#/components/schemas/Cat'
          dog: '#/components/schemas/Dog'
          bee: '#/components/schemas/HoneyBee'
      properties:
        id:
          externalDocs:
            description: 'Find more info here'
            url: 'https://example.com'
          description: Pet ID
          allOf:
            - $ref: '#/components/schemas/Id'
        category:
          description: Categories this pet belongs to
          allOf:
            - $ref: '#/components/schemas/Category'
        name:
          description: The name given to a pet
          type: string
          example: Guru
        photoUrls:
          description: The list of URL to a cute photos featuring pet
          type: array
          default: []
          maxItems: 20
          xml:
            name: photoUrl
            wrapped: true
          items:
            type: string
            format: url
        friend:
          allOf:
            - $ref: '#/components/schemas/Pet'
        tags:
          description: Tags attached to the pet
          type: array
          minItems: 1
          xml:
            name: tag
            wrapped: true
          items:
            $ref: '#/components/schemas/Tag'
        status:
          type: string
          description: Pet status in the store
          enum:
            - available
            - pending
            - sold
        petType:
          description: Type of a pet
          type: string
      xml:
        name: Pet
    Tag:
      type: object
      properties:
        id:
          description: Tag ID
          allOf:
            - $ref: '#/components/schemas/Id'
        name:
          description: Tag name
          type: string
          minLength: 1
      xml:
        name: Tag
    User:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        pet:
          oneOf:
            - $ref: '#/components/schemas/Pet'
            - $ref: '#/components/schemas/Tag'
        username:
          description: User supplied username
          type: string
          minLength: 4
          example: John78
        firstName:
          description: User first name
          type: string
          minLength: 1
          example: John
        lastName:
          description: User last name
          type: string
          minLength: 1
          example: Smith
        email:
          description: User email address
          type: string
          format: email
          example: john.smith@example.com
        password:
          type: string
          description: >-
            User password, MUST contain a mix of upper and lower case letters,
            as well as digits
          format: password
          minLength: 8
          pattern: '/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])/'
          example: drowssaP123
        phone:
          description: User phone number in international format
          type: string
          pattern: '/^\+(?:[0-9]-?){6,14}[0-9]$/'
          example: +1-202-555-0192
        userStatus:
          description: User status
          type: integer
          format: int32
        addresses:
          type: array
          minItems: 0
          maxLength: 10
          items:
            - type: object
              properties:
                city:
                  type: string
                  minLength: 0
                country:
                  type: string
                  minLength: 0
                street:
                  description: includes build/apartment number
                  type: string
                  minLength: 0
            - type: number
          additionalItems:
            type: string
      xml:
        name: User
  requestBodies:
    Pet:
      content:
        application/json:
          schema:
            allOf:
              - description: My Pet
                title: Pettie
              - $ref: '#/components/schemas/Pet'
        application/xml:
          schema:
            type: 'object'
            properties:
              name:
                type: string
                description: hooray
                default: []
      description: Pet object that needs to be added to the store
      required: true
    UserArray:
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/User'
      description: List of user object
      required: true
  securitySchemes:
    petstore_auth:
      description: |
        Get access to data while protecting your account credentials.
        OAuth2 is also a safer and more secure way to give you access.
      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:
      description: >
        For this sample, you can use the api key `special-key` to test the
        authorization filters.
      type: apiKey
      name: api_key
      in: header
  examples:
    Order:
      value:
        quantity: 1
        shipDate: '2018-10-19T16:46:45Z'
        status: placed
        complete: false
x-webhooks:
  newPet:
    post:
      summary: New pet
      description: Information about a new pet in the systems
      operationId: newPet
      tags:
        - pet
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Pet'
      responses:
        '200':
          description: Return a 200 status to indicate that the data was received successfully