openapi: 3.0.1
info:
  title: Demo Conference API
  description: 'A sample API with information related to a technical conference.  The available resources  include *Speakers*, *Sessions* and *Topics*.  A single write operation is available to provide  feedback on a session.'
  version: '1.0'
servers:
  - url: https://api.waelsconsulting.com
  - url: https://portal.waelsconsulting.com
paths:
  /sessions:
    get:
      summary: GetSessions
      description: A list of sessions.  Optional parameters work as filters to reduce the listed sessions.
      operationId: GetSessions
      parameters:
        - name: speakername
          in: query
          style: form
          schema:
            type: string
        - name: dayno
          in: query
          description: Format - int32.
          style: form
          schema:
            type: integer
        - name: keyword
          in: query
          style: form
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/vnd.collection+json: { }
  '/session/{id}':
    get:
      summary: GetSession
      description: Retreive a representation of a single session by Id
      operationId: GetSession
      parameters:
        - name: id
          in: path
          description: Format - int32.
          required: true
          style: simple
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/hal+json: { }
            text/plain: { }
  '/session/{id}/topics':
    get:
      summary: GetSessionTopics
      description: A list of topics covered by a particular session
      operationId: GetSessionTopics
      parameters:
        - name: id
          in: path
          description: Format - int32.
          required: true
          style: simple
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/vnd.collection+json: { }
  '/session/{id}/feedback':
    post:
      summary: SubmitSession
      description: Retreive a representation of a single session by Id
      operationId: SubmitSession
      parameters:
        - name: id
          in: path
          description: Format - int32.
          required: true
          style: simple
          schema:
            type: integer
      requestBody:
        content:
          text/plain:
            schema:
              $ref: '#/components/schemas/Body'
            example: ''
      responses:
        '200':
          description: OK
          content:
            application/hal+json: { }
            text/plain: { }
  /speakers:
    get:
      summary: GetSpeakers
      description: GetSpeakers
      operationId: GetSpeakers
      parameters:
        - name: dayno
          in: query
          description: Format - int32.
          style: form
          schema:
            type: integer
        - name: speakername
          in: query
          style: form
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/vnd.collection+json: { }
  '/speaker/{id}':
    get:
      summary: GetSpeaker
      description: GetSpeaker
      operationId: GetSpeaker
      parameters:
        - name: id
          in: path
          description: Format - int32.
          required: true
          style: simple
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/vnd.hal+json: { }
            text/plain: { }
  '/speaker/{id}/sessions':
    get:
      summary: GetSpeakerSessions
      description: GetSpeakerSessions
      operationId: GetSpeakerSessions
      parameters:
        - name: id
          in: path
          description: Format - int32.
          required: true
          style: simple
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/vnd.collection+json: { }
  '/speaker/{id}/topics':
    get:
      summary: GetSpeakerTopics
      description: GetSpeakerTopics
      operationId: GetSpeakerTopics
      parameters:
        - name: id
          in: path
          description: Format - int32.
          required: true
          style: simple
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/vnd.collection+json: { }
  /topics:
    get:
      summary: GetTopics
      description: GetTopics
      operationId: GetTopics
      parameters:
        - name: dayno
          in: query
          description: Format - int32.
          style: form
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/vnd.collection+json: { }
  '/topic/{id}':
    get:
      summary: GetTopic
      description: GetTopic
      operationId: GetTopic
      parameters:
        - name: id
          in: path
          description: Format - int32.
          required: true
          style: simple
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/hal+json: { }
  '/topic/{id}/speakers':
    get:
      summary: GetTopicSpeakers
      description: GetTopicSpeakers
      operationId: GetTopicSpeakers
      parameters:
        - name: id
          in: path
          description: Format - int32.
          required: true
          style: simple
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/vnd.collection+json: { }
  '/topic/{id}/sessions':
    get:
      summary: GetTopicSessions
      description: GetTopicSessions
      operationId: GetTopicSessions
      parameters:
        - name: id
          in: path
          description: Format - int32.
          required: true
          style: simple
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/vnd.collection+json: { }
components:
  schemas:
    Body:
      type: string
  securitySchemes:
    apiKeyHeader:
      type: apiKey
      name: Ocp-Apim-Subscription-Key
      in: header
    apiKeyQuery:
      type: apiKey
      name: subscription-key
      in: query
security:
  - apiKeyHeader: [ ]
  - apiKeyQuery: [ ]