openapi: 3.0.3
info:
  title: Circular reference examples
  version: 1.0.0
servers:
  - url: https://httpbin.org/
paths:
  '/nestedTest':
    put:
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                foo:
                  type: string
                arr:
                  type: array
                  items:
                    type: array
                    items:
                      type: array
                      items:
                        type: array
                        items:
                          type: array
                          items:
                            type: array
                            items:
                              type: array
                              items:
                                type: array
                                items:
                                  type: array
                                  items:
                                    type: string
                obj:
                  type: object
                  properties:
                    ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff:
                      type: object
                      properties:
                        fooa:
                          type: object
                          properties:
                            'foob:':
                              type: object
                              properties:
                                fooc:
                                  type: string
      responses:
        '200':
          description: OK
  '/circular':
    put:
      parameters:
        - name: Authorization
          in: header
          description: API key.
          required: true
          schema:
            type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  '$ref': '#/components/schemas/FormDataBodyPart'
                typename:
                  type: string
      responses:
        '200':
          description: Successfully processed.
        '400':
          description: Invalid payload. This can be due to invalid headers or form-data
            params.
        '401':
          description: Permissions error. The Authorization header may be missing,
            the value may be invalid or the associated organization/user does not
            have permission to modify the specified typename.
        '500':
          description: Server error. Something unexpected happened while processing
            the request. Try again later.
  '/not-quite-circular':
    post:
      description: This is a schema that is technically circular, but not in a way
        that will cause infinite recursion when processing it.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                rules:
                  '$ref': '#/components/schemas/ZoneRules'
      responses:
        '200':
          description: successful operation
components:
  schemas:
    BodyPart:
      type: object
      properties:
        contentDisposition:
          '$ref': '#/components/schemas/ContentDisposition'
        entity:
          type: object
        headers:
          type: object
          properties:
            empty:
              type: boolean
          additionalProperties:
            type: array
            items:
              type: string
        mediaType:
          type: object
          properties:
            type:
              type: string
            subtype:
              type: string
            parameters:
              type: object
              additionalProperties:
                type: string
            wildcardType:
              type: boolean
            wildcardSubtype:
              type: boolean
        messageBodyWorkers:
          '$ref': '#/components/schemas/MessageBodyWorkers'
        parent:
          '$ref': '#/components/schemas/MultiPart'
        providers:
          type: object
        parameterizedHeaders:
          type: object
          properties:
            empty:
              type: boolean
          additionalProperties:
            type: array
            items:
              '$ref': '#/components/schemas/ParameterizedHeader'
    ContentDisposition:
      type: object
      properties:
        type:
          type: string
        parameters:
          type: object
          additionalProperties:
            type: string
        fileName:
          type: string
        creationDate:
          type: string
          format: date-time
        modificationDate:
          type: string
          format: date-time
        readDate:
          type: string
          format: date-time
        size:
          type: integer
          format: int64
    FormDataBodyPart:
      type: object
      properties:
        contentDisposition:
          '$ref': '#/components/schemas/ContentDisposition'
        entity:
          type: object
        headers:
          type: object
          properties:
            empty:
              type: boolean
          additionalProperties:
            type: array
            items:
              type: string
        mediaType:
          type: object
          properties:
            type:
              type: string
            subtype:
              type: string
            parameters:
              type: object
              additionalProperties:
                type: string
            wildcardType:
              type: boolean
            wildcardSubtype:
              type: boolean
        messageBodyWorkers:
          '$ref': '#/components/schemas/MessageBodyWorkers'
        parent:
          '$ref': '#/components/schemas/MultiPart'
        providers:
          type: object
        name:
          type: string
        value:
          type: string
        formDataContentDisposition:
          '$ref': '#/components/schemas/FormDataContentDisposition'
        simple:
          type: boolean
        parameterizedHeaders:
          type: object
          properties:
            empty:
              type: boolean
          additionalProperties:
            type: array
            items:
              '$ref': '#/components/schemas/ParameterizedHeader'
      description: A single file which will be added/updated or a ZIP archive containing
        files that will be added/updated. The name of the ZIP archive does not matter
        but the names of the files contained within do.
      example: file=@2018-report.pdf
    FormDataContentDisposition:
      type: object
      properties:
        type:
          type: string
        parameters:
          type: object
          additionalProperties:
            type: string
        fileName:
          type: string
        creationDate:
          type: string
          format: date-time
        modificationDate:
          type: string
          format: date-time
        readDate:
          type: string
          format: date-time
        size:
          type: integer
          format: int64
        name:
          type: string
    MessageBodyWorkers:
      type: object
    MultiPart:
      type: object
      properties:
        contentDisposition:
          '$ref': '#/components/schemas/ContentDisposition'
        entity:
          type: object
        headers:
          type: object
          properties:
            empty:
              type: boolean
          additionalProperties:
            type: array
            items:
              type: string
        mediaType:
          type: object
          properties:
            type:
              type: string
            subtype:
              type: string
            parameters:
              type: object
              additionalProperties:
                type: string
            wildcardType:
              type: boolean
            wildcardSubtype:
              type: boolean
        messageBodyWorkers:
          '$ref': '#/components/schemas/MessageBodyWorkers'
        parent:
          '$ref': '#/components/schemas/MultiPart'
        providers:
          type: object
        bodyParts:
          type: array
          items:
            '$ref': '#/components/schemas/BodyPart'
        parameterizedHeaders:
          type: object
          properties:
            empty:
              type: boolean
          additionalProperties:
            type: array
            items:
              '$ref': '#/components/schemas/ParameterizedHeader'
    ParameterizedHeader:
      type: object
      properties:
        value:
          type: string
        parameters:
          type: object
          additionalProperties:
            type: string
    ZoneId:
      type: object
      properties:
        rules:
          '$ref': '#/components/schemas/ZoneRules'
    ZoneOffset:
      type: object
      properties:
        id:
          type: string
        rules:
          '$ref': '#/components/schemas/ZoneRules'
    ZoneOffsetTransition:
      type: object
      properties:
        offsetBefore:
          '$ref': '#/components/schemas/ZoneOffset'
        offsetAfter:
          '$ref': '#/components/schemas/ZoneOffset'
        dateTimeAfter:
          type: string
          format: date-time
        dateTimeBefore:
          type: string
          format: date-time
    ZoneRules:
      type: object
      properties:
        transitions:
          type: array
          items:
            '$ref': '#/components/schemas/ZoneOffsetTransition'
