openapi: 3.0.0
info:
  title: Providing Examples
  description:  Providing Examples
  version: 1.0.0
paths:
  /multiple-examples-in-request-parameters/{path-param-1}/{path-param-2}:
    get:
      tags:
        - Providing Examples
      parameters:
      - name: 'path-param-1'
        in: 'path'
        schema:
          type: 'string'
          default: "p1-opt-2"  
        examples:
          example1: 
            value: "p1-opt-1"
          example2:
            value: "p1-opt-2"
      - name: 'path-param-2'
        in: 'path'
        schema:
          type: 'string'
        examples:
          example1: 
            value: "p2-opt-1"
          example2:
            value: "p2-opt-2"
      - name: 'age'
        description: Single Example
        in: 'query'
        schema:
          type: 'number'
        example: 24
      - name: 'country-code'
        description: Multiple examples _(Notice `us` do not have a summary)_
        in: 'query'
        schema:
          type: 'string'
        examples:
          example1: 
            value: "uk"
            summary: "United Kingdom"
          example2:
            value: "us"
          example3:
            value: "ch"
            summary: "China"
      - name: 'marital-status'
        in: 'query'
        schema:
          type: 'string'
          default: "unmarried"  
        examples:
          example1: 
            value: "married"
          example2:
            value: "unmarried"
          example3:
            value: "widowed"

  /multiple-examples-by-response-type:
    get:
      description: Multiple Examples provide for each media-type (`application/json` or `application/json`) 
      tags:
        - Providing Examples
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  age:
                    description: Person Age
                    type: integer
                  fullName:
                    description: Person Full name
                    type: object
                    properties:
                      firstName:
                        description: First name
                        type: string
                      lastName:
                        description: Last name
                        type: string
              examples:
                valid-json:
                  summary: Example with Valid JSON String
                  description: If valid JSON is provided in the example, It will be displayed in JSON tree form. Allowing copy/expand/collapse functionality
                  value: |
                    {
                      "person": {
                        "fullName": {
                          "firstName": "Mickey",
                          "lastName": "Mouse"
                        },
                        "age": "9"
                      }
                    }
                invalid-json:
                  summary: Example with Invalid JSON String
                  description: Invalid JSON is displayed in text-area as is
                  value: |
                    {
                      person: {
                        fullName: {
                          firstName: Donald,
                          lastName: Duck
                        },
                        age: 10
                      }
                    }
                as-object:    
                  summary: Example specified as object
                  value:
                    fullName:
                      firstName: Donald
                      lastName: Duck       
                    age: 10
            application/xml:
              schema:
                type: object
                properties:
                  age:
                    description: Person Age
                    type: integer
                  fullName:
                    description: Person Full name
                    type: object
                    properties:
                      firstName:
                        description: First name
                        type: string
                      lastName:
                        description: Last name
                        type: string
              examples:
                example-1:
                  description: Exmple 1 Description
                  value: |
                    <root>
                      <person>
                        <fullName>
                          <firstName> Mickey </firstName>
                          <lastName> Mouse </lastName>
                        </fullName>
                        <age> 9 </age>
                      </person>
                    </root>
  /single-example-by-response-type:
    get:
      summary: Single Example at schema Level
      tags:
        - Providing Examples
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  age:
                    description: Person Age
                    type: integer
                  fullName:
                    description: Person Full name
                    type: object
                    properties:
                      firstName:
                        description: First name
                        type: string
                      lastName:
                        description: Last name
                        type: string
              example: |
                {
                  age: 10,
                  fullName: {
                    firstName: Donald,
                    lastName: Duck
                  }
                }
  /example-with-array-1:
    get:
      summary: Single Example at schema Level
      tags:
        - Providing Examples
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ArrayOfInt-1"
  /example-with-array-2:
    get:
      summary: Single Example at schema Level
      tags:
        - Providing Examples
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ArrayOfInt-2"

  /object-example-for-a-schema:
    get:
      summary: Single example having invalid JSON, under a Schema
      tags:
        - Providing Examples
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  age:
                    description: Person Age
                    type: integer
                  fullName:
                    description: Person Full name
                    type: object
                    properties:
                      firstName:
                        description: First name
                        type: string
                      lastName:
                        description: Last name
                        type: string
                example: |
                  {
                    person: {
                      fullName: {
                        firstName: Donald,
                        lastName: Duck
                      },
                      age: 10
                    }
                  }
  /array-example-for-a-schema:
    get:
      summary: Single Example of Type Array Under a Schema
      tags:
        - Providing Examples
      responses:
        '200':
          description: An array of currency codes
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/currencies"
  /example-with-simple-object:
    get:
      summary: Single Example of Type Array Under a Schema
      tags:
        - Providing Examples
      responses:
        '200':
          description: An array of currency codes
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PersonObject"
  /per-field-example-with-root-as-object:
    get:
      summary: Root node of the example is an object. and the object is constituted using field level example
      tags:
        - Providing Examples
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  age:
                    description: Person Age
                    type: integer
                    example: 8
                  fullName:
                    description: Person Full name
                    type: object
                    properties:
                      firstName:
                        description: First name
                        type: string
                        example: 'Daisy'
                      lastName:
                        description: Last name
                        type: string
                        example: 'Duck'
                  dependents:
                    type: array
                    items:
                      type: object
                      properties:
                        dependentName:
                          type: string
                        relation:
                          type: string
                        age:
                          type: number
  /per-field-example-with-root-as-array:
    get:
      summary: Root node of the example is an array. and the object is constituted using field level example
      tags:
        - Providing Examples
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    dependentName:
                      type: string
                    relation:
                      type: string
                    age:
                      type: number
                  example:
                    dependentName: Natasha
                    relation: wife
                    age: 28    
  /example-with-refs:
    get:
      description: |
        When a Schema definition is `provided` as a ref  
        (provide the example at schema-level)
      tags:
        - Providing Examples
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/cost'
              examples:
                USD:
                  description: Cost in `US Dollars`
                  value: |
                    {
                      amount: 10,
                      currency: USD
                    }
                INR:
                  description: Cost in `Indian Rupees`
                  value: |
                    {
                      amount: 700,
                      currency: INR
                    }
  /multiple-example-in-request-body:
    post:
      summary: Request body with multiple examples
      tags:
        - Providing Examples
      requestBody:
        description: Request body containing **multiple** examples
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/cost'
            examples:
              USD:
                description: Cost in `US Dollars`
                value: |
                  {
                    amount: 10,
                    currency: USD
                  }
              INR:
                description: Cost in `Indian Rupees`
                value: |
                  {
                    amount: 700,
                    currency: INR
                  }
  /object-containg-array-property-with-example:
    get:
      summary: Object schema with array type property containing example
      tags:
        - Providing Examples
      responses:
        200:
          description: Object with array type property containing example
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ObjectWithArrayPropExample"
  /examples-anyOf:
    get:
      tags:
        - Providing Examples
      summary: AnyOf schemas with examples as part of the subschema
      responses:
        '200':
          description: AnyOf schemas with examples as part of the subschema
          content:
            application/problem+json:
              schema:
                anyOf:
                  - title: AnyOf example 1
                    description: First example
                    type: object
                    properties:
                      foo:
                        type: string
                      bar:
                        type: integer
                    example:
                      foo: foo
                      bar: 42
                  - title: Second anyOf
                    description: Another example
                    type: array
                    items:
                      type: object
                      properties:
                        foo:
                          type: string
                        quux:
                          type: array
                          items:
                            type: number
                    example:
                      foo: foo
                      quux: [ 42, 24 ]
                  - title: No example defined
                    type: array
                    items:
                      type: object
                      properties:
                        foo:
                          type: string
                        quux:
                          type: array
                          items:
                            type: number
  /examples-anyOf-with-general-properties:
    get:
      tags:
        - Providing Examples
      summary: AnyOf schemas with general properties 
      responses:
        '200':
          description: AnyOf schemas with general properties
          content:
            application/problem+json:
              schema:
                title: A composed object
                type: object
                properties:
                  common:
                    type: string
                  other:
                    type: number
                anyOf:
                  - title: Schema 1
                    type: object
                    properties:
                      foo:
                        type: string
                      bar:
                        type: integer
                    example:
                      foo: foo
                      bar: 42
                  - title: Second schema
                    type: object
                    properties:
                      baz:
                        type: string
                        format: url
  /examples-oneOf:
    get:
      tags:
        - Providing Examples
      summary: OneOf schema with examples as part of the subschema
      responses:
        '200':
          description: OneOf schema with examples as part of the subschema
          content:
            application/problem+json:
              schema:
                oneOf:
                  - title: Schema 1
                    type: object
                    properties:
                      foo:
                        type: string
                      bar:
                        type: integer
                    example:
                      foo: foo
                      bar: 42
                  - title: Second schema
                    type: object
                    properties:
                      baz:
                        type: string
                        format: url
  /examples-allOf:
    get:
      tags:
        - Providing Examples
      summary: AllOf schemas with examples as part of the subschema
      responses:
        '200':
          description: AllOf schemas with examples as part of the subschema
          content:
            application/problem+json:
              schema:
                allOf:
                  - title: Schema 1
                    type: object
                    properties:
                      foo:
                        type: string
                      bar:
                        type: integer
                  - title: Second schema
                    type: object
                    properties:
                      baz:
                        type: string
                        format: url
  /examples-allOf-anyOf:
    get:
      tags:
        - Providing Examples
      summary: Combination of allOf & nested anyOf schemas
      responses:
        '200':
          description: Combination of allOf & nested anyOf schemas
          content:
            application/problem+json:
              schema:
                allOf:
                  - title: Schema 1
                    type: object
                    properties:
                      foo:
                        type: string
                      bar:
                        type: integer
                  - title: Second schema
                    anyOf:
                      - type: object
                        properties:
                          baz:
                            type: string
                            format: url
                      - type: object
                        properties:
                          foobar:
                            type: string
components:
  schemas:
    cost:
      type: object
      properties:
        amount:
          type: integer
          description: Amount
        currency:
          description: Currency Code
          type: string
    currencies:
      type: array
      items:
        type: object
        properties:
          currencyCode:
            type: string
          evaluationDate:
            type: string
            format: date-time
      example:
        - currencyCode: USD
          evaluationDate: '2017-07-21T17:32:28Z'
        - currencyCode: INR
          evaluationDate: '2017-07-21T17:32:28Z'
    ArrayOfInt-1:
      type: array
      items:
        type: integer
        format: int64
      example: [1, 2, 3]
    ArrayOfInt-2:
      type: array
      items:
        type: integer
        format: int64
        example: 1
    PersonObject:
      type: object
      properties:
        name:
          type: string
        age:
          type: integer
      example:
        name: name-1
        age: 1
    ObjectWithArrayPropExample:
      type: object
      properties:
        numberProp:
          type: number
          example: 1000
        stringProp:
          type: string
          enum: [value0, value1]
        arrayProp:
          type: array
          items:
            type: number
          example: [0, 1, 2]
