openapi: 3.0.0
paths:
  /v1/activities~export:
    get:
      description: Export members activities for a spot
      operationId: exportActivities
      parameters:
        - name: fromDate
          required: false
          in: query
          description: The date from which to start exporting activities (Unix timestamp
            format). You MUST provide either fromDate or fromEventId.
          schema:
            $ref: "#/components/schemas/LHSActivityFromDateFilters"
        - name: fromEventId
          required: false
          in: query
          description: The eventId from which to start exporting activities. You MUST
            provide either fromDate or fromEventId.
          schema:
            type: string
        - name: toDate
          required: false
          in: query
          description: The date until which to export activities (Unix timestamp format).
          schema:
            $ref: "#/components/schemas/LHSActivityToDateFilters"
        - name: eventType
          required: false
          in: query
          description: The event types to export. If not provided, all activities will be
            exported.
          schema:
            $ref: "#/components/schemas/LHSActivityEventTypeFilters"
        - name: limit
          required: false
          in: query
          description: The limit of activities to export. If not provided, a default limit
            of 100 will be used.
          schema:
            minimum: 1
            maximum: 10000
            default: 100
            type: string
      responses:
        "200":
          description: Exported members activities as a stream of JSONL objects. If a
            streaming error occurs, a JSON error payload is returned.
          content:
            application/json:
              schema:
                type: object
                properties:
                  type:
                    description: The activity type
                    enum:
                      - ChannelJoined
                      - ChannelLeft
                      - ChannelMessageReacted
                      - ChannelMessageSent
                      - CourseStarted
                      - CourseCompleted
                      - CourseStepViewed
                      - CourseStepCompleted
                      - DiscussionMessageSent
                      - DocumentLinkOpened
                      - DocumentLinkReacted
                      - DocumentPageReacted
                      - DocumentPageViewed
                      - LearningPathCompleted
                      - LearningPathStarted
                      - LiveAttended
                      - LiveInvitationDeclined
                      - LiveMessageReacted
                      - LiveMessageSent
                      - LiveParticipantRegistered
                      - LiveReplayWatched
                      - SpotMemberLeft
                      - SpotMemberRegistered
                      - SpotMemberRegistrationRequested
                      - TopicAnswerCreated
                      - TopicAnswerVoted
                      - TopicCreated
                      - TopicVoted
                  index:
                    description: The activity index
                    type: string
                  event_id:
                    description: The event id related to this activity
                    type: string
                  spot_id:
                    description: The spot id related to this activity
                    type: string
                  occurred_at_tz:
                    description: The timestamp of the activity
                    type: string
                    format: date-time
                  member_id:
                    description: The member id related to this activity
                    type: string
                  member_first_name:
                    description: The member first name related to this activity
                    type: string
                  member_last_name:
                    description: The member last name related to this activity
                    type: string
                  member_title:
                    description: The member title related to this activity
                    type: string
                    nullable: true
                  member_profile_picture_url:
                    description: The member profile picture URL related to this activity
                    type: string
                    nullable: true
                  member_role:
                    description: The member role related to this activity
                    type: string
                    nullable: true
                  member_custom_role_id:
                    description: The member custom role id related to this activity
                    type: string
                    nullable: true
                  member_custom_role_label:
                    description: The member custom role label related to this activity
                    type: string
                    nullable: true
                  member_email:
                    description: The member email related to this activity
                    type: string
                  recipient_member_id:
                    description: The recipient member id related to this activity
                    type: string
                    nullable: true
                  recipient_member_first_name:
                    description: The recipient member first name related to this activity
                    type: string
                    nullable: true
                  recipient_member_last_name:
                    description: The recipient member last name related to this activity
                    type: string
                    nullable: true
                  recipient_member_title:
                    description: The recipient member title related to this activity
                    type: string
                    nullable: true
                  recipient_member_profile_picture_url:
                    description: The recipient member profile picture URL related to this activity
                    type: string
                    nullable: true
                  recipient_member_email:
                    description: The recipient member email related to this activity
                    type: string
                    nullable: true
                  live_id:
                    description: The live id related to this activity
                    type: string
                    nullable: true
                  live_title:
                    description: The live title related to this activity
                    type: string
                    nullable: true
                  channel_id:
                    description: The channel id related to this activity
                    type: string
                    nullable: true
                  channel_title:
                    description: The channel title related to this activity
                    type: string
                    nullable: true
                  channel_emoji:
                    description: The channel emoji related to this activity
                    type: string
                    nullable: true
                  thread_message_id:
                    description: The thread id related to this activity
                    type: string
                    nullable: true
                  thread_message_preview:
                    description: The thread message preview related to this activity
                    type: string
                    nullable: true
                  reaction_emoji:
                    description: The reaction emoji related to this activity
                    type: string
                    nullable: true
                  document_id:
                    description: The document id related to this activity
                    type: string
                    nullable: true
                  document_title:
                    description: The document title related to this activity
                    type: string
                    nullable: true
                  document_type:
                    description: The document type related to this activity
                    type: string
                    nullable: true
                  document_link:
                    description: The document link related to this activity
                    type: string
                    nullable: true
                  collection_id:
                    description: The collection id related to this activity
                    type: string
                    nullable: true
                  collection_title:
                    description: The collection title related to this activity
                    type: string
                    nullable: true
                  course_id:
                    description: The course id related to this activity
                    type: string
                    nullable: true
                  course_title:
                    description: The course title related to this activity
                    type: string
                    nullable: true
                  course_step_id:
                    description: The course step id related to this activity
                    type: string
                    nullable: true
                  course_step_title:
                    description: The course step title related to this activity
                    type: string
                    nullable: true
                  course_step_type:
                    description: The course step type related to this activity
                    type: string
                    nullable: true
                  course_step_quiz_correct_answers_count:
                    description: The course step quiz correct answers count related to this activity
                    type: integer
                    nullable: true
                  course_step_quiz_total_questions_count:
                    description: The course step quiz total questions count related to this activity
                    type: integer
                    nullable: true
                  collection_emoji:
                    description: The collection emoji related to this activity
                    type: string
                    nullable: true
                  topic_id:
                    description: The topic id related to this activity
                    type: string
                    nullable: true
                  topic_title:
                    description: The topic title related to this activity
                    type: string
                    nullable: true
                  forum_id:
                    description: The forum id related to this activity
                    type: string
                    nullable: true
                  forum_title:
                    description: The forum title related to this activity
                    type: string
                    nullable: true
                  forum_emoji:
                    description: The forum emoji related to this activity
                    type: string
                    nullable: true
                  score_vote:
                    description: The score vote related to this activity
                    type: integer
                    nullable: true
                  learning_path_id:
                    description: The learning path id related to this activity
                    type: string
                    nullable: true
                  learning_path_title:
                    description: The learning path title related to this activity
                    type: string
                    nullable: true
                required:
                  - type
                  - index
                  - event_id
                  - spot_id
                  - occurred_at_tz
                  - member_id
                  - member_first_name
                  - member_last_name
                  - member_email
        "400":
          description: Malformed payload
      summary: ""
      tags:
        - activities
  /v1/channels/{channelId}/spotMembers:
    get:
      description: List Channel members
      operationId: listChannelMembers
      parameters:
        - name: channelId
          required: true
          in: path
          description: The id of the channel
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: email
          required: false
          in: query
          description: Filters on emails of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberEmailFilters"
        - name: firstname
          required: false
          in: query
          description: Filters on firstnames of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberFirstNameFilters"
        - name: lastname
          required: false
          in: query
          description: Filters on lastname of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberLastNameFilters"
        - name: role
          required: false
          in: query
          description: Filters on role of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberRoleFilters"
        - name: registrationDate
          required: false
          in: query
          description: Filters on registration date of Spot member
          schema:
            $ref: "#/components/schemas/LHSSpotMemberRegistrationDateFilters"
      responses:
        "200":
          description: Channel members returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListSpotMembersApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - channel
    post:
      description: Add member to a channel
      operationId: addMemberToChannel
      parameters:
        - name: channelId
          required: true
          in: path
          description: The id of the channel
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddMemberToChannelApiBody"
      responses:
        "204":
          description: Member successfully added
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Channel not found
      summary: ""
      tags:
        - channel
  /v1/channels:
    post:
      description: Create a channel
      operationId: createChannel
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateChannelApiBody"
      responses:
        "201":
          description: Channel has been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ChannelApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - channel
    get:
      description: List channels
      operationId: listChannels
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
      responses:
        "200":
          description: Channels returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListChannelsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - channel
  /v1/channels/{channelId}:
    delete:
      description: Delete a channel
      operationId: deleteChannel
      parameters:
        - name: channelId
          required: true
          in: path
          description: The id of the channel
          schema:
            type: string
      responses:
        "204":
          description: Channel successfully deleted
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Channel not found
      summary: ""
      tags:
        - channel
    put:
      description: Update a channel
      operationId: updateChannel
      parameters:
        - name: channelId
          required: true
          in: path
          description: The id of the channel
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateChannelApiBody"
      responses:
        "200":
          description: Channel successfully updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ChannelApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Channel not found
      summary: ""
      tags:
        - channel
    get:
      description: Get a channel
      operationId: getChannel
      parameters:
        - name: channelId
          required: true
          in: path
          description: The id of the channel
          schema:
            type: string
      responses:
        "200":
          description: Channel found and returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ChannelApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Channel not found
      summary: ""
      tags:
        - channel
  /v1/channels/{channelId}/spotMembers~bulkAdd:
    post:
      description: Add members to a channel
      operationId: addMembersToChannel
      parameters:
        - name: channelId
          required: true
          in: path
          description: The id of the channel
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddMembersToChannelApiBody"
      responses:
        "200":
          description: Members successfully added
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AddMembersToChannelApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Channel not found
      summary: ""
      tags:
        - channel
  /v1/channels/{channelId}/spotMembers~bulkRemove:
    post:
      description: Remove members from a channel
      operationId: removeMembersFromChannel
      parameters:
        - name: channelId
          required: true
          in: path
          description: The id of the channel
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RemoveMembersFromChannelApiBody"
      responses:
        "200":
          description: Members successfully removed
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RemoveMembersFromChannelApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Channel not found
      summary: ""
      tags:
        - channel
  /v1/channels~bulkCreate:
    post:
      description: Create multiple channels
      operationId: createChannels
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: "#/components/schemas/CreateChannelApiBody"
      responses:
        "201":
          description: Channels has been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ChannelsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "413":
          description: Payload is too large
      summary: ""
      tags:
        - channel
  /v1/channels/{channelId}/groups:
    post:
      description: Link a group
      operationId: linkChannelGroup
      parameters:
        - name: channelId
          required: true
          in: path
          description: The id of the channel
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LinkGroupApiBody"
      responses:
        "204":
          description: Group linked successfully
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Channel not found
      summary: ""
      tags:
        - channel
    get:
      description: list a group
      operationId: listChannelGroups
      parameters:
        - name: channelId
          required: true
          in: path
          description: The id of the channel
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
      responses:
        "200":
          description: Group returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LinkedChannelGroupListApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Channel not found
      summary: ""
      tags:
        - channel
  /v1/channels/{channelId}/groups/{groupId}:
    delete:
      description: Unlink a group from a channel
      operationId: unlinkChannelGroup
      parameters:
        - name: channelId
          required: true
          in: path
          description: The id of the channel
          schema:
            type: string
        - name: groupId
          required: true
          in: path
          description: The id of the group
          schema:
            type: string
      responses:
        "204":
          description: Group successfully unlink
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Channel or Group not found
      summary: ""
      tags:
        - channel
  /v1/channels/{channelId}/groups~bulkAdd:
    post:
      description: Link groups
      operationId: linkChannelGroups
      parameters:
        - name: channelId
          required: true
          in: path
          description: The id of the channel
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LinkGroupsApiBody"
      responses:
        "204":
          description: Groups linked successfully
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Channel not found
      summary: ""
      tags:
        - channel
  /v1/channels/{channelId}/groups~bulkRemove:
    post:
      description: Unlink groups from a channel
      operationId: unlinkChannelGroups
      parameters:
        - name: channelId
          required: true
          in: path
          description: The id of the channel
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LinkGroupsApiBody"
      responses:
        "204":
          description: Groups successfully unlink
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Channel not found
      summary: ""
      tags:
        - channel
  /v1/collections:
    get:
      description: Get Collections
      operationId: listCollections
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: name
          required: false
          in: query
          description: Filters on name
          schema:
            $ref: "#/components/schemas/LHSCollectionNameFilters"
        - name: privacy
          required: false
          in: query
          description: Filters on privacy
          schema:
            $ref: "#/components/schemas/LHSCollectionPrivacyFilters"
      responses:
        "200":
          description: Collections returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListCollectionsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - collection
    post:
      description: Create a collection
      operationId: createCollection
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateCollectionApiBody"
      responses:
        "201":
          description: Collection has been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CollectionApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - collection
  /v1/courses:
    get:
      description: Get Courses
      operationId: listCourses
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: status
          required: false
          in: query
          description: Filters on status
          schema:
            $ref: "#/components/schemas/LHSCourseStatusFilters"
        - name: privacy
          required: false
          in: query
          description: Filters on privacy
          schema:
            $ref: "#/components/schemas/LHSCoursePrivacyFilters"
        - name: moduleName
          required: false
          in: query
          description: Filters on module name
          schema:
            $ref: "#/components/schemas/LHSCourseModuleNameFilters"
      responses:
        "200":
          description: Courses returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListCoursesApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - course
  /v1/courses/{courseId}/groups~bulkAdd:
    post:
      description: Link groups to a course
      operationId: linkCourseGroups
      parameters:
        - name: courseId
          required: true
          in: path
          description: The id of the course
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddGroupsToCourseApiBody"
      responses:
        "204":
          description: Groups linked successfully
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - course
  /v1/courses/{courseId}/groups~bulkRemove:
    post:
      description: Unlink groups from a course
      operationId: unlinkCourseGroups
      parameters:
        - name: courseId
          required: true
          in: path
          description: The id of the course
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LinkGroupsApiBody"
      responses:
        "204":
          description: Groups unlinked successfully
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - course
  /v1/courses/{courseId}/groups:
    get:
      description: List groups linked to a course
      operationId: listCourseGroups
      parameters:
        - name: courseId
          required: true
          in: path
          description: The id of the course
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
      responses:
        "200":
          description: Group returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LinkedGroupsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Course not found
      summary: ""
      tags:
        - course
  /v1/courses/{courseId}/participants/{courseParticipantId}:
    get:
      description: Get Course participant
      operationId: getCourseParticipant
      parameters:
        - name: courseId
          required: true
          in: path
          description: The id of the course
          schema:
            type: string
        - name: courseParticipantId
          required: true
          in: path
          description: The id of the course participant
          schema:
            type: string
      responses:
        "200":
          description: Course participant returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CourseParticipantApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Course not found
      summary: ""
      tags:
        - courseParticipant
  /v1/courses/{courseId}/participants:
    get:
      description: Get Courses participants
      operationId: listCourseParticipants
      parameters:
        - name: courseId
          required: true
          in: path
          description: The id of the course
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: firstname
          required: false
          in: query
          description: Filters on firstname
          schema:
            $ref: "#/components/schemas/LHSSpotMemberFirstNameFilters"
        - name: lastname
          required: false
          in: query
          description: Filters on lastname
          schema:
            $ref: "#/components/schemas/LHSSpotMemberLastNameFilters"
        - name: email
          required: false
          in: query
          description: Filters on email
          schema:
            $ref: "#/components/schemas/LHSSpotMemberEmailFilters"
        - name: status
          required: false
          in: query
          description: Filters on status
          schema:
            $ref: "#/components/schemas/LHSCourseParticipantStatusFilters"
      responses:
        "200":
          description: Courses participants returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListCourseParticipantsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Course not found
      summary: ""
      tags:
        - courseParticipant
    post:
      description: Invite a member as Course participant
      operationId: inviteCourseParticipant
      parameters:
        - name: courseId
          required: true
          in: path
          description: The id of the course
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InviteCourseParticipantApiBody"
      responses:
        "200":
          description: Member already invited
        "201":
          description: Member has been successfully invited
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CourseParticipantApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - courseParticipant
  /v1/courses/{courseId}/participants~bulkInvite:
    post:
      description: Invite a members as Course participants
      operationId: inviteCourseParticipants
      parameters:
        - name: courseId
          required: true
          in: path
          description: The id of the course
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InviteCourseParticipantsApiBody"
      responses:
        "200":
          description: Members already invited
        "201":
          description: Members has been successfully invited
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/CourseParticipantApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - courseParticipant
  /v1/courses/{courseId}/participants/{courseParticipantId}/stepCompletions/{stepCompletionId}:
    get:
      description: Get course step completion
      operationId: getCourseStepCompletion
      parameters:
        - name: courseId
          required: true
          in: path
          description: The id of the course
          schema:
            type: string
        - name: courseParticipantId
          required: true
          in: path
          description: The id of the course participant
          schema:
            type: string
        - name: stepCompletionId
          required: true
          in: path
          description: The id of the course step completion
          schema:
            type: string
      responses:
        "200":
          description: Course step completion returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CourseStepCompletionWithDetailsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Course not found
      summary: ""
      tags:
        - course
  /v1/courses/{courseId}/participants/{courseParticipantId}/stepCompletions:
    get:
      description: List Course step completions
      operationId: listCourseStepCompletions
      parameters:
        - name: courseId
          required: true
          in: path
          description: The id of the course
          schema:
            type: string
        - name: courseParticipantId
          required: true
          in: path
          description: The id of the course participant
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: completedAt
          required: false
          in: query
          description: Filters on completed at date
          schema:
            $ref: "#/components/schemas/LHSCourseStepCompletionDateFilters"
        - name: contentType
          required: false
          in: query
          description: Filters on content type
          schema:
            $ref: "#/components/schemas/LHSCourseStepCompletionContentTypeFilters"
      responses:
        "200":
          description: Course step completions returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListCourseStepCompletionsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Course not found
      summary: ""
      tags:
        - course
  /v1/courses/{courseId}/steps:
    get:
      description: List Course steps
      operationId: listCourseSteps
      parameters:
        - name: courseId
          required: true
          in: path
          description: The id of the course
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: title
          required: false
          in: query
          description: Filters on title
          schema:
            $ref: "#/components/schemas/LHSCourseStepTitleFilters"
        - name: contentType
          required: false
          in: query
          description: Filters on content type
          schema:
            $ref: "#/components/schemas/LHSCourseStepContentTypeFilters"
      responses:
        "200":
          description: Courses steps returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListCourseStepsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Course not found
      summary: ""
      tags:
        - course
  /v1/spotMembers/{spotMemberId}/customPropertiesValues~bulkUpsert:
    post:
      description: Upsert custom properties values linked to a spot member
      operationId: upsertCustomPropertiesValues
      parameters:
        - name: spotMemberId
          required: true
          in: path
          description: The id of the spotMember
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: "#/components/schemas/UpsertCustomPropertyValuesApiBody"
      responses:
        "200":
          description: Custom properties values upsert successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/CustomPropertyValueApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Custom property not found
      summary: ""
      tags:
        - customProperty
  /v1/spotMembers/{spotMemberId}/customPropertiesValues/{customPropertySlug}:
    put:
      description: Update custom property values linked to a spot member
      operationId: updateCustomPropertiesValues
      parameters:
        - name: spotMemberId
          required: true
          in: path
          description: The id of the spotMember
          schema:
            type: string
        - name: customPropertySlug
          required: true
          in: path
          description: The slug of the customProperty
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateCustomPropertyValueApiBody"
      responses:
        "200":
          description: Custom property value updated successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CustomPropertyValueApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Custom property not found
      summary: ""
      tags:
        - customProperty
  /v1/spotMembers/{spotMemberId}/customPropertiesValues:
    get:
      description: Get custom properties values linked to a spot member
      operationId: listCustomPropertiesValues
      parameters:
        - name: spotMemberId
          required: true
          in: path
          description: The id of the spotMember
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
      responses:
        "200":
          description: Custom properties value returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListCustomPropertyValueApiResponse"
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - customProperty
  /v1/collections/{collectionId}/documents:
    get:
      description: Get the documents of a collection
      operationId: listDocuments
      parameters:
        - name: collectionId
          required: true
          in: path
          description: The id of the collection
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: title
          required: false
          in: query
          description: Filters on title
          schema:
            $ref: "#/components/schemas/LHSDocumentTitleFilters"
        - name: type
          required: false
          in: query
          description: Filters on type
          schema:
            $ref: "#/components/schemas/LHSDocumentTypeFilters"
        - name: status
          required: false
          in: query
          description: Filters on status
          schema:
            $ref: "#/components/schemas/LHSDocumentStatusFilters"
      responses:
        "200":
          description: Documents returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListDocumentsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Collection not found
      summary: ""
      tags:
        - document
  /v1/collections/{collectionId}/documents/{documentId}:
    get:
      description: Get a document of a collection, with its content rendered as
        Markdown for a Page document
      operationId: getDocument
      parameters:
        - name: collectionId
          required: true
          in: path
          description: The id of the collection
          schema:
            type: string
        - name: documentId
          required: true
          in: path
          description: The id of the document
          schema:
            type: string
      responses:
        "200":
          description: Document found and returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DocumentWithContentApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Document not found
      summary: ""
      tags:
        - document
  /v1/forums/{forumId}:
    get:
      description: Get a forum
      operationId: getForum
      parameters:
        - name: forumId
          required: true
          in: path
          description: The id of the forum
          schema:
            type: string
      responses:
        "200":
          description: Forum found and returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForumApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Forum not found
      summary: ""
      tags:
        - forum
    put:
      description: Update a forum
      operationId: updateForum
      parameters:
        - name: forumId
          required: true
          in: path
          description: The id of the forum
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateForumApiBody"
      responses:
        "200":
          description: Forum successfully updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForumApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Forum not found
      summary: ""
      tags:
        - forum
    delete:
      description: Delete a forum
      operationId: deleteForum
      parameters:
        - name: forumId
          required: true
          in: path
          description: The id of the forum
          schema:
            type: string
      responses:
        "204":
          description: Forum successfully deleted
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Forum not found
      summary: ""
      tags:
        - forum
  /v1/forums:
    get:
      description: List forums
      operationId: listForums
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: name
          required: false
          in: query
          description: Filters on name
          schema:
            $ref: "#/components/schemas/LHSForumNameFilters"
      responses:
        "200":
          description: Forums returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListForumsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - forum
    post:
      description: Create a forum
      operationId: createForum
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateForumApiBody"
      responses:
        "201":
          description: The forum has been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForumApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - forum
  /v1/forums/{forumId}/spotMembers:
    get:
      description: List Forum Members
      operationId: listForumMembers
      parameters:
        - name: forumId
          required: true
          in: path
          description: The id of the forum
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: email
          required: false
          in: query
          description: Filters on emails of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberEmailFilters"
        - name: firstname
          required: false
          in: query
          description: Filters on firstnames of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberFirstNameFilters"
        - name: lastname
          required: false
          in: query
          description: Filters on lastname of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberLastNameFilters"
        - name: role
          required: false
          in: query
          description: Filters on role of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberRoleFilters"
        - name: registrationDate
          required: false
          in: query
          description: Filters on registration date of Spot member
          schema:
            $ref: "#/components/schemas/LHSSpotMemberRegistrationDateFilters"
      responses:
        "200":
          description: Forum members returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListSpotMembersApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - forum
    post:
      description: Add member to a forum
      operationId: addMemberToForum
      parameters:
        - name: forumId
          required: true
          in: path
          description: The id of the forum
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddMemberToForumApiBody"
      responses:
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Forum not found
      summary: ""
      tags:
        - forum
  /v1/forums/{forumId}/spotMembers~bulkAdd:
    post:
      description: Add members to a forum
      operationId: addMembersToForum
      parameters:
        - name: forumId
          required: true
          in: path
          description: The id of the forum
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddMembersToForumApiBody"
      responses:
        "200":
          description: Members successfully added
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AddMembersToForumApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Forum not found
      summary: ""
      tags:
        - forum
  /v1/forums/{forumId}/spotMembers~bulkRemove:
    post:
      description: Remove members from a forum
      operationId: removeMembersFromForum
      parameters:
        - name: forumId
          required: true
          in: path
          description: The id of the forum
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RemoveMembersFromForumApiBody"
      responses:
        "200":
          description: Members successfully removed
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RemoveMembersFromForumApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Forum not found
      summary: ""
      tags:
        - forum
  /v1/forums~bulkCreate:
    post:
      description: Create multiple forums
      operationId: createForums
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: "#/components/schemas/CreateForumApiBody"
      responses:
        "201":
          description: Forums has been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ForumsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "413":
          description: Payload is too large
      summary: ""
      tags:
        - forum
  /v1/groups/{groupId}/spotMembers:
    get:
      description: List Group members
      operationId: listGroupMembers
      parameters:
        - name: groupId
          required: true
          in: path
          description: The id of the group
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: email
          required: false
          in: query
          description: Filters on emails of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberEmailFilters"
        - name: firstname
          required: false
          in: query
          description: Filters on firstnames of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberFirstNameFilters"
        - name: lastname
          required: false
          in: query
          description: Filters on lastname of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberLastNameFilters"
        - name: role
          required: false
          in: query
          description: Filters on role of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberRoleFilters"
        - name: registrationDate
          required: false
          in: query
          description: Filters on registration date of Spot member
          schema:
            $ref: "#/components/schemas/LHSSpotMemberRegistrationDateFilters"
      responses:
        "200":
          description: Group members returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListSpotMembersApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - group
    post:
      description: Add member to a group
      operationId: addMemberToGroup
      parameters:
        - name: groupId
          required: true
          in: path
          description: The id of the group
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddMemberToGroupApiBody"
      responses:
        "204":
          description: Member successfully added
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Group not found
      summary: ""
      tags:
        - group
  /v1/groups:
    post:
      description: Create a group
      operationId: createGroup
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateGroupApiBody"
      responses:
        "201":
          description: Group has been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GroupApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - group
    get:
      description: List groups
      operationId: listGroups
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: name
          required: false
          in: query
          description: Filters on name of group to include in the result
          schema:
            $ref: "#/components/schemas/LHSGroupNameFilters"
      responses:
        "200":
          description: Groups returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListGroupsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - group
  /v1/groups/{groupId}:
    delete:
      description: Delete a group
      operationId: deleteGroup
      parameters:
        - name: groupId
          required: true
          in: path
          description: The id of the group
          schema:
            type: string
      responses:
        "204":
          description: Group successfully deleted
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Group not found
      summary: ""
      tags:
        - group
    put:
      description: Update a group
      operationId: updateGroup
      parameters:
        - name: groupId
          required: true
          in: path
          description: The id of the group
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateGroupApiBody"
      responses:
        "200":
          description: Group successfully updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GroupApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Group not found
      summary: ""
      tags:
        - group
    get:
      description: Get a group
      operationId: getGroup
      parameters:
        - name: groupId
          required: true
          in: path
          description: The id of the group
          schema:
            type: string
      responses:
        "200":
          description: Group found and returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GroupApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Group not found
      summary: ""
      tags:
        - group
  /v1/groups/{groupId}/spotMembers~bulkAdd:
    post:
      description: Add members to a group
      operationId: addMembersToGroup
      parameters:
        - name: groupId
          required: true
          in: path
          description: The id of the group
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddMembersToGroupApiBody"
      responses:
        "200":
          description: Members successfully added
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AddMembersToGroupApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Group not found
      summary: ""
      tags:
        - group
  /v1/groups/{groupId}/spotMembers~bulkRemove:
    post:
      description: Remove members from a group
      operationId: removeMembersFromGroup
      parameters:
        - name: groupId
          required: true
          in: path
          description: ID of the group
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RemoveMembersFromGroupApiBody"
      responses:
        "200":
          description: Members successfully removed
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RemoveMembersFromGroupApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Group not found
      summary: ""
      tags:
        - group
  /v1/groups~bulkCreate:
    post:
      description: Create multiple groups
      operationId: createGroups
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: "#/components/schemas/CreateGroupApiBody"
      responses:
        "201":
          description: Groups has been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GroupsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "413":
          description: Payload is too large
      summary: ""
      tags:
        - group
  /v1/learningPaths:
    get:
      description: Get Learning Paths
      operationId: listLearningPaths
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: privacy
          required: false
          in: query
          description: Filters on privacy
          schema:
            $ref: "#/components/schemas/LHSLearningPathPrivacyFilters"
      responses:
        "200":
          description: Learning Paths returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListLearningPathsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - learningPath
  /v1/learningPaths/{learningPathId}/groups~bulkAdd:
    post:
      description: Link groups to a learning path
      operationId: linkLearningPathGroups
      parameters:
        - name: learningPathId
          required: true
          in: path
          description: The id of the learning path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddGroupsToLearningPathApiBody"
      responses:
        "204":
          description: Groups linked successfully
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - learningPath
  /v1/learningPaths/{learningPathId}/groups~bulkRemove:
    post:
      description: Unlink groups from a learning path
      operationId: unlinkLearningPathGroups
      parameters:
        - name: learningPathId
          required: true
          in: path
          description: The id of the learning path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LinkGroupsApiBody"
      responses:
        "204":
          description: Groups unlinked successfully
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - learningPath
  /v1/learningPaths/{learningPathId}/groups:
    get:
      description: List groups linked to a learning path
      operationId: listLearningPathGroups
      parameters:
        - name: learningPathId
          required: true
          in: path
          description: The id of the learning path
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
      responses:
        "200":
          description: Group returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LinkedGroupsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Learning path not found
      summary: ""
      tags:
        - learningPath
  /v1/learningPaths/{learningPathId}/participants/{learningPathParticipantId}:
    get:
      description: Get Learning path participant
      operationId: getLearningPathParticipant
      parameters:
        - name: learningPathId
          required: true
          in: path
          description: The id of the learning path
          schema:
            type: string
        - name: learningPathParticipantId
          required: true
          in: path
          description: The id of the learning path participant
          schema:
            type: string
      responses:
        "200":
          description: Learning path participant returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LearningPathParticipantApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Learning path not found
      summary: ""
      tags:
        - learningPath
  /v1/learningPaths/{learningPathId}/participants:
    get:
      description: List Learning path participants
      operationId: listLearningPathParticipants
      parameters:
        - name: learningPathId
          required: true
          in: path
          description: The id of the learning path
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: firstname
          required: false
          in: query
          description: Filters on firstname
          schema:
            $ref: "#/components/schemas/LHSSpotMemberFirstNameFilters"
        - name: lastname
          required: false
          in: query
          description: Filters on lastname
          schema:
            $ref: "#/components/schemas/LHSSpotMemberLastNameFilters"
        - name: email
          required: false
          in: query
          description: Filters on email
          schema:
            $ref: "#/components/schemas/LHSSpotMemberEmailFilters"
        - name: status
          required: false
          in: query
          description: Filters on status
          schema:
            $ref: "#/components/schemas/LHSLearningPathParticipantStatusFilters"
      responses:
        "200":
          description: Learning path participants returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListLearningPathParticipantsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Learning path not found
      summary: ""
      tags:
        - learningPath
    post:
      description: Invite a member as Learning path participant
      operationId: inviteLearningPathParticipant
      parameters:
        - name: learningPathId
          required: true
          in: path
          description: The id of the learning path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InviteLearningPathParticipantApiBody"
      responses:
        "201":
          description: Member has been successfully invited
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LearningPathParticipantApiResponse"
        "204":
          description: Member already invited
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Learning path not found
      summary: ""
      tags:
        - learningPath
  /v1/learningPaths/{learningPathId}/participants~bulkInvite:
    post:
      description: Invite members as Learning path participants
      operationId: inviteLearningPathParticipants
      parameters:
        - name: learningPathId
          required: true
          in: path
          description: The id of the learning path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InviteLearningPathParticipantsApiBody"
      responses:
        "201":
          description: Members have been successfully invited
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/LearningPathParticipantApiResponse"
        "204":
          description: Members already invited
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Learning path not found
      summary: ""
      tags:
        - learningPath
  /v1/learningPaths/{learningPathId}/steps:
    get:
      description: List Learning path steps
      operationId: listLearningPathSteps
      parameters:
        - name: learningPathId
          required: true
          in: path
          description: The id of the learning path
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: contentTitle
          required: false
          in: query
          description: Filters on title
          schema:
            $ref: "#/components/schemas/LHSLearningPathStepContentTitleFilters"
        - name: contentType
          required: false
          in: query
          description: Filters on content type
          schema:
            $ref: "#/components/schemas/LHSLearningPathStepContentTypeFilters"
      responses:
        "200":
          description: Learning Path steps returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListLearningPathStepsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - learningPath
  /v1/learningPaths/{learningPathId}/participants/{learningPathParticipantId}/stepCompletions:
    get:
      description: List Learning path step completions
      operationId: listLearningPathStepCompletions
      parameters:
        - name: learningPathId
          required: true
          in: path
          description: The id of the learning path
          schema:
            type: string
        - name: learningPathParticipantId
          required: true
          in: path
          description: The id of the learning path participant
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: completedAt
          required: false
          in: query
          description: Filters on completed at date
          schema:
            $ref: "#/components/schemas/LHSLearningPathStepCompletionDateFilters"
        - name: contentType
          required: false
          in: query
          description: Filters on content type
          schema:
            $ref: "#/components/schemas/LHSLearningPathStepCompletionContentTypeFilters"
      responses:
        "200":
          description: Learning path step completions returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListLearningPathStepCompletionsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - learningPath
  /v1/learningPaths/{learningPathId}/participants/{learningPathParticipantId}/stepCompletions/{stepCompletionId}:
    get:
      description: Get learning path step completion
      operationId: getLearningPathStepCompletion
      parameters:
        - name: learningPathId
          required: true
          in: path
          description: The id of the learning path
          schema:
            type: string
        - name: learningPathParticipantId
          required: true
          in: path
          description: The id of the learning path participant
          schema:
            type: string
        - name: stepCompletionId
          required: true
          in: path
          description: The id of the learning path step completion
          schema:
            type: string
      responses:
        "200":
          description: Learning path step completion returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LearningPathStepCompletionApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Learning path step completion not found
      summary: ""
      tags:
        - learningPath
  /v1/lives:
    get:
      description: List Lives
      operationId: listLives
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: title
          required: false
          in: query
          description: Filters on title
          schema:
            $ref: "#/components/schemas/LHSLiveTitleFilters"
        - name: status
          required: false
          in: query
          description: Filters on status
          schema:
            $ref: "#/components/schemas/LHSLiveStatusFilters"
        - name: startDate
          required: false
          in: query
          description: Filters on start date
          schema:
            $ref: "#/components/schemas/LHSLiveStartDateFilters"
        - name: solution
          required: false
          in: query
          description: Filters on solution
          schema:
            $ref: "#/components/schemas/LHSLiveSolutionFilters"
        - name: replay
          required: false
          in: query
          description: Filters on replay
          schema:
            $ref: "#/components/schemas/LHSLiveReplayFilters"
        - name: builtInType
          required: false
          in: query
          description: Filters on builtIn type
          schema:
            $ref: "#/components/schemas/LHSLiveBuiltInTypeFilters"
        - name: averageViewTime
          required: false
          in: query
          description: Filters on average view time
          schema:
            $ref: "#/components/schemas/LHSLiveAverageViewTimeFilters"
        - name: invited
          required: false
          in: query
          description: Filters on invited
          schema:
            $ref: "#/components/schemas/LHSLiveInvitedFilters"
        - name: registrant
          required: false
          in: query
          description: Filters on registrant
          schema:
            $ref: "#/components/schemas/LHSLiveRegistrantFilters"
        - name: attendee
          required: false
          in: query
          description: Filters on attendee
          schema:
            $ref: "#/components/schemas/LHSLiveAttendeeFilters"
        - name: attendanceRate
          required: false
          in: query
          description: Filters on attendance rate
          schema:
            $ref: "#/components/schemas/LHSLiveAttendanceRateFilters"
        - name: totalReplayView
          required: false
          in: query
          description: Filters on total replay view
          schema:
            $ref: "#/components/schemas/LHSLiveTotalReplayViewFilters"
      responses:
        "200":
          description: Lives returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListLivesApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - live
    post:
      description: Create a Live
      operationId: createLive
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateLiveApiBody"
      responses:
        "201":
          description: Live has been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LiveApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - live
  /v1/lives/{liveId}:
    delete:
      description: Delete a Live
      operationId: deleteLive
      parameters:
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
      responses:
        "204":
          description: Live successfully deleted
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Live not found
        "409":
          description: Live not deletable
      summary: ""
      tags:
        - live
    put:
      description: Update a Live
      operationId: updateLive
      parameters:
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateLiveApiBody"
      responses:
        "200":
          description: Live successfully updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LiveApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Live not found
      summary: ""
      tags:
        - live
    get:
      description: Get a Live
      operationId: getLive
      parameters:
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
      responses:
        "200":
          description: Live found and returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LiveApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Live not found
      summary: ""
      tags:
        - live
  /v1/lives/{liveId}/groups/{groupId}:
    delete:
      description: Unlink a group from a live
      operationId: unlinkLiveGroup
      parameters:
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
        - name: groupId
          required: true
          in: path
          description: The id of the group
          schema:
            type: string
      responses:
        "204":
          description: Group successfully unlink
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Live or Group not found
      summary: ""
      tags:
        - live
  /v1/lives/{liveId}/groups~bulkRemove:
    post:
      description: Unlink groups from a live
      operationId: unlinkLiveGroups
      parameters:
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LinkGroupsApiBody"
      responses:
        "204":
          description: Groups successfully unlink
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Live not found
      summary: ""
      tags:
        - live
  /v1/lives/{liveId}/groups:
    get:
      description: List groups linked to a Live
      operationId: listLiveGroups
      parameters:
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
      responses:
        "200":
          description: Group returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LinkedGroupsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Live not found
      summary: ""
      tags:
        - live
    post:
      description: Link a group
      operationId: linkLiveGroup
      parameters:
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LinkLiveGroupApiBody"
      responses:
        "204":
          description: Group linked successfully
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Live not found
      summary: ""
      tags:
        - live
  /v1/lives/{liveId}/groups~bulkAdd:
    post:
      description: Link groups
      operationId: linkLiveGroups
      parameters:
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LinkLiveGroupsApiBody"
      responses:
        "204":
          description: Groups linked successfully
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Live not found
      summary: ""
      tags:
        - live
  /v1/lives/{liveId}/speakers:
    post:
      description: Invite a member as Live speaker
      operationId: inviteLiveSpeaker
      parameters:
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InviteLiveSpeakerApiBody"
      responses:
        "200":
          description: Member already invited & ignored because invalid status
        "201":
          description: Member has been successfully invited
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LiveParticipantApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - liveParticipant
    get:
      description: List Live speakers
      operationId: listLiveSpeakers
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: firstname
          required: false
          in: query
          description: Filters on firstname
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantFirstNameFilters"
        - name: lastname
          required: false
          in: query
          description: Filters on lastname
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantLastNameFilters"
        - name: email
          required: false
          in: query
          description: Filters on email
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantEmailFilters"
        - name: status
          required: false
          in: query
          description: Filters on status
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantStatusFilters"
        - name: hasReplayed
          required: false
          in: query
          description: Filters on hasReplayed
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantHasReplayedFilters"
        - name: hasParticipated
          required: false
          in: query
          description: Filters on hasParticipated
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantHasParticipatedFilters"
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
      responses:
        "200":
          description: Live speakers returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListLiveParticipantsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - liveParticipant
  /v1/lives/{liveId}/participants:
    post:
      description: Invite a member as Live participant
      operationId: inviteLiveParticipant
      parameters:
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InviteLiveParticipantApiBody"
      responses:
        "200":
          description: Member already invited
        "201":
          description: Member has been successfully invited
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LiveParticipantApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - liveParticipant
    get:
      description: List Live participants
      operationId: listLiveParticipants
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: firstname
          required: false
          in: query
          description: Filters on firstname
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantFirstNameFilters"
        - name: lastname
          required: false
          in: query
          description: Filters on lastname
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantLastNameFilters"
        - name: email
          required: false
          in: query
          description: Filters on email
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantEmailFilters"
        - name: type
          required: false
          in: query
          description: Filters on type
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantTypeFilters"
        - name: status
          required: false
          in: query
          description: Filters on status
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantStatusFilters"
        - name: hasReplayed
          required: false
          in: query
          description: Filters on hasReplayed
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantHasReplayedFilters"
        - name: hasParticipated
          required: false
          in: query
          description: Filters on hasParticipated
          schema:
            $ref: "#/components/schemas/LHSLiveParticipantHasParticipatedFilters"
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
      responses:
        "200":
          description: Live participants returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListLiveParticipantsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - liveParticipant
  /v1/lives/{liveId}/speakers~bulkInvite:
    post:
      description: Invite multiple members as Live speaker
      operationId: inviteLiveSpeakers
      parameters:
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InviteLiveSpeakersApiBody"
      responses:
        "200":
          description: Members has been successfully invited
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/LiveParticipantApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "413":
          description: Payload is too large
      summary: ""
      tags:
        - liveParticipant
  /v1/lives/{liveId}/participants~bulkInvite:
    post:
      description: Invite multiple members as Live participant
      operationId: inviteLiveParticipants
      parameters:
        - name: liveId
          required: true
          in: path
          description: The id of the Live
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InviteLiveParticipantsApiBody"
      responses:
        "200":
          description: Members has been successfully invited
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/LiveParticipantApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "413":
          description: Payload is too large
      summary: ""
      tags:
        - liveParticipant
  /v1/spots/{spotId}:
    put:
      description: Update a spot
      operationId: updateSpot
      parameters:
        - name: spotId
          required: true
          in: path
          description: The id of the spot
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateSpotApiBody"
      responses:
        "200":
          description: The spot has been successfully updated.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpotApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Spot not found
      summary: ""
      tags:
        - spot
  /v1/spotMembers:
    get:
      description: List Spot members
      operationId: listSpotMembers
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: email
          required: false
          in: query
          description: Filters on emails of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberEmailFilters"
        - name: firstname
          required: false
          in: query
          description: Filters on firstnames of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberFirstNameFilters"
        - name: lastname
          required: false
          in: query
          description: Filters on lastname of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberLastNameFilters"
        - name: role
          required: false
          in: query
          description: Filters on role of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberRoleFilters"
        - name: customRoleId
          required: false
          in: query
          description: Filters on custom role ID of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberCustomRoleIdFilters"
        - name: status
          required: false
          in: query
          description: Filters on status of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberStatusFilters"
        - name: invitationDate
          required: false
          in: query
          description: Filters on invitation date of Spot member
          schema:
            $ref: "#/components/schemas/LHSSpotMemberInvitationDateFilters"
        - name: registrationDate
          required: false
          in: query
          description: Filters on registration date of Spot member
          schema:
            $ref: "#/components/schemas/LHSSpotMemberRegistrationDateFilters"
        - name: updatedAt
          required: false
          in: query
          description: Filters on updated date of Spot member
          schema:
            $ref: "#/components/schemas/LHSSpotMemberUpdatedAtFilters"
      responses:
        "200":
          description: Spot members returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListSpotMembersApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - spotMember
    post:
      description: Invite a spot member
      operationId: inviteSpotMember
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InviteSpotMemberApiBody"
      responses:
        "201":
          description: Spot member has been successfully invited
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpotMemberApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - spotMember
  /v1/spotMembers/{spotMemberId}:
    get:
      description: Get a spot member
      operationId: getSpotMember
      parameters:
        - name: spotMemberId
          required: true
          in: path
          description: The id of the spotMember
          schema:
            type: string
      responses:
        "200":
          description: Spot member returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpotMemberApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Spot member not found
      summary: ""
      tags:
        - spotMember
    put:
      description: Update a spot member
      operationId: updateSpotMember
      parameters:
        - name: spotMemberId
          required: true
          in: path
          description: The id of the spotMember
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateSpotMemberApiBody"
      responses:
        "200":
          description: Spot member successfully updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpotMemberApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Spot member not found
      summary: ""
      tags:
        - spotMember
  /v1/spotMembers/{spotMemberId}/customFormAnswers:
    get:
      description: Get custom form answers for a spot member
      operationId: listSpotMemberCustomFormAnswers
      parameters:
        - name: spotMemberId
          required: true
          in: path
          description: The id of the spotMember
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: questionLabel
          required: false
          in: query
          description: Filters on question label of custom form answers to include in the
            result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberCustomFormAnswerQuestionLabelFilters"
      responses:
        "200":
          description: Custom form answers returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListCustomFormAnswerApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Custom form answers not found
      summary: ""
      tags:
        - spotMember
  /v1/spotMembers~bulkInvite:
    post:
      description: Invite multiple spot members
      operationId: inviteSpotMembers
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InviteSpotMembersApiBody"
      responses:
        "201":
          description: Spot members has been successfully invited
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpotMembersApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "413":
          description: Payload is too large
      summary: ""
      tags:
        - spotMember
  /v1/spotMemberCustomRole/{customRoleId}:
    put:
      description: Update a custom role
      operationId: updateSpotMemberCustomRole
      parameters:
        - name: customRoleId
          required: true
          in: path
          description: The id of the custom role
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateSpotMemberCustomRoleApiBody"
      responses:
        "200":
          description: Custom role successfully updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpotMemberCustomRoleApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Custom role not found
      summary: ""
      tags:
        - spotMemberCustomRole
    get:
      description: Get a custom role
      operationId: getSpotMemberCustomRole
      parameters:
        - name: customRoleId
          required: true
          in: path
          description: The id of the custom role
          schema:
            type: string
      responses:
        "200":
          description: Custom role found and returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpotMemberCustomRoleApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Custom role not found
      summary: ""
      tags:
        - spotMemberCustomRole
    delete:
      description: Delete a Spot member custom role
      operationId: deleteSpotMemberCustomRole
      parameters:
        - name: customRoleId
          required: true
          in: path
          description: The id of the custom role
          schema:
            type: string
      responses:
        "204":
          description: Custom role successfully deleted
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Custom role not found
      summary: ""
      tags:
        - spotMemberCustomRole
  /v1/spotMemberCustomRole:
    post:
      description: Create spot member custom role
      operationId: createSpotMemberCustomRole
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateSpotMemberCustomRoleApiBody"
      responses:
        "201":
          description: Spot member custom role been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpotMemberCustomRoleApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - spotMemberCustomRole
    get:
      description: List Spot member custom roles
      operationId: listSpotMemberCustomRoles
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: label
          required: false
          in: query
          description: Filters on label
          schema:
            $ref: "#/components/schemas/LHSSpotMemberCustomRoleLabelFilters"
      responses:
        "200":
          description: Custom roles returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListSpotMemberCustomRolesApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - spotMemberCustomRole
  /v1/tags:
    get:
      description: List tags
      operationId: listTags
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: name
          required: false
          in: query
          description: Filters on name of tag to include in the result
          schema:
            $ref: "#/components/schemas/LHSTagNameFilters"
      responses:
        "200":
          description: Tags returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListTagsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - tag
    post:
      description: Create a tag
      operationId: createTag
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateTagApiBody"
      responses:
        "201":
          description: The tag has been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TagApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - tag
  /v1/tags/{tagId}:
    get:
      description: Get a tag
      operationId: getTag
      parameters:
        - name: tagId
          required: true
          in: path
          description: The id of the tag
          schema:
            type: string
      responses:
        "200":
          description: Tag found and returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TagApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Tag not found
      summary: ""
      tags:
        - tag
    delete:
      description: Delete a tag
      operationId: deleteTag
      parameters:
        - name: tagId
          required: true
          in: path
          description: The id of the tag
          schema:
            type: string
      responses:
        "204":
          description: Tag successfully deleted
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Tag not found
      summary: ""
      tags:
        - tag
    put:
      description: Update a tag
      operationId: updateTag
      parameters:
        - name: tagId
          required: true
          in: path
          description: The id of the tag
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateTagApiBody"
      responses:
        "200":
          description: Tag successfully updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TagApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Tag not found
      summary: ""
      tags:
        - tag
  /v1/tags/{tagId}/spotMembers~bulkAssign:
    post:
      description: Assign spot members to a tag
      operationId: assignSpotMembers
      parameters:
        - name: tagId
          required: true
          in: path
          description: The id of the tag
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AssignSpotMembersApiBody"
      responses:
        "204":
          description: Spot members successfully assigned
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - tag
  /v1/tags/{tagId}/spotMembers~bulkUnassign:
    post:
      description: Unassign spot members to a tag
      operationId: unassignSpotMembers
      parameters:
        - name: tagId
          required: true
          in: path
          description: The id of the tag
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UnassignSpotMembersApiBody"
      responses:
        "204":
          description: Spot members successfully unassigned
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - tag
  /v1/tags/{tagId}/spotMembers:
    get:
      description: List Tagged members
      operationId: listTaggedSpotMembers
      parameters:
        - name: tagId
          required: true
          in: path
          description: The id of the tag
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: email
          required: false
          in: query
          description: Filters on emails of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberEmailFilters"
        - name: firstname
          required: false
          in: query
          description: Filters on firstnames of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberFirstNameFilters"
        - name: lastname
          required: false
          in: query
          description: Filters on lastname of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberLastNameFilters"
        - name: role
          required: false
          in: query
          description: Filters on role of Spot member to include in the result
          schema:
            $ref: "#/components/schemas/LHSSpotMemberRoleFilters"
        - name: registrationDate
          required: false
          in: query
          description: Filters on registration date of Spot member
          schema:
            $ref: "#/components/schemas/LHSSpotMemberRegistrationDateFilters"
      responses:
        "200":
          description: Tagged members returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListSpotMembersApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - tag
  /v1/tags~bulkCreate:
    post:
      description: Create multiple tags
      operationId: createTags
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: "#/components/schemas/CreateTagApiBody"
      responses:
        "201":
          description: Tags has been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TagsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "413":
          description: Payload is too large
      summary: ""
      tags:
        - tag
  /v1/forums/{forumId}/topics/{topicId}:
    get:
      description: Get a topic
      operationId: getTopic
      parameters:
        - name: forumId
          required: true
          in: path
          description: The id of the forum
          schema:
            type: string
        - name: topicId
          required: true
          in: path
          description: The id of the topic
          schema:
            type: string
      responses:
        "200":
          description: Topic found and returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TopicApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Topic not found
      summary: ""
      tags:
        - topic
    put:
      description: Update a topic
      operationId: updateTopic
      parameters:
        - name: forumId
          required: true
          in: path
          description: The id of the forum
          schema:
            type: string
        - name: topicId
          required: true
          in: path
          description: The id of the topic
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateTopicApiBody"
      responses:
        "200":
          description: Topic successfully updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TopicApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Topic not found
      summary: ""
      tags:
        - topic
    delete:
      description: Delete a topic
      operationId: deleteTopic
      parameters:
        - name: forumId
          required: true
          in: path
          description: The id of the forum
          schema:
            type: string
        - name: topicId
          required: true
          in: path
          description: The id of the topic
          schema:
            type: string
      responses:
        "204":
          description: Topic successfully deleted
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "404":
          description: Topic not found
      summary: ""
      tags:
        - topic
  /v1/forums/{forumId}/topics:
    post:
      description: Create a topic
      operationId: createTopic
      parameters:
        - name: forumId
          required: true
          in: path
          description: The id of the forum
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateTopicApiBody"
      responses:
        "201":
          description: Topic has been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TopicApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - topic
    get:
      description: List topics
      operationId: listTopics
      parameters:
        - name: forumId
          required: true
          in: path
          description: The id of the forum
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: name
          required: false
          in: query
          description: Filters on name
          schema:
            $ref: "#/components/schemas/LHSTopicNameFilters"
      responses:
        "200":
          description: Topics returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListTopicsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      summary: ""
      tags:
        - topic
  /v1/forums/{forumId}/topics~bulkCreate:
    post:
      description: Create multiple topics
      operationId: createTopics
      parameters:
        - name: forumId
          required: true
          in: path
          description: ID of the forum
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: "#/components/schemas/CreateTopicApiBody"
      responses:
        "201":
          description: Topics has been successfully created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ChannelsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
        "413":
          description: Payload is too large
      summary: ""
      tags:
        - topic
  /v1/search:
    get:
      description: Search for resources in the spot
      operationId: search
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: query
          required: true
          in: query
          description: The search query to be performed
          schema:
            type: string
        - name: userId
          required: false
          in: query
          description: The unique identifier of the user performing the search
          schema:
            type: string
        - name: groupId
          required: false
          in: query
          description: Filters on entities related to this group
          schema:
            type: string
        - name: excludeGroupId
          required: false
          in: query
          description: Excludes the entities already related to this group
          schema:
            type: string
        - name: searchableTypes
          required: false
          in: query
          description: Filters on types of entities to include in the search
          schema:
            $ref: "#/components/schemas/LHSSearchTypesFilters"
      responses:
        "200":
          description: Search results
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SearchApiResponse"
        "400":
          description: Malformed payload
      summary: ""
      tags:
        - search
  /v1/spotMembers/{spotMemberId}/notifications~unreadCount:
    get:
      description: Get unread notifications count
      operationId: getUnreadNotificationsCount
      parameters:
        - name: spotMemberId
          required: true
          in: path
          description: The id of the Spot member
          schema:
            type: string
        - name: types
          required: false
          in: query
          description: Filters on types of notifications to include in the result
          schema:
            $ref: "#/components/schemas/LHSNotificationTypesFilters"
      responses:
        "200":
          description: Counter of unread notification returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnreadNotificationsCountApiResponse"
        "400":
          description: Malformed payload
        "404":
          description: Spot member not found
      summary: ""
      tags:
        - notification
  /v1/spotMembers/{spotMemberId}/notifications~markAsRead:
    post:
      description: Mark notifications as read
      operationId: markNotificationsAsRead
      parameters:
        - name: spotMemberId
          required: true
          in: path
          description: The id of the Spot member
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MarkNotificationsAsReadApiBody"
      responses:
        "200":
          description: Notifications successfully marked as read
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/NotificationApiResponse"
        "400":
          description: Malformed payload
      summary: ""
      tags:
        - notification
  /v1/spotMembers/{spotMemberId}/notifications:
    get:
      description: List notifications
      operationId: listNotifications
      parameters:
        - name: spotMemberId
          required: true
          in: path
          description: The id of the Spot member
          schema:
            type: string
        - name: before
          required: false
          in: query
          description: To list elements before a specific ID
          schema:
            type: string
        - name: after
          required: false
          in: query
          description: To list elements after a specific ID
          schema:
            type: string
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned
          schema:
            type: number
        - name: types
          required: false
          in: query
          description: Filters on types of notifications to include in the result
          schema:
            $ref: "#/components/schemas/LHSNotificationTypesFilters"
        - name: isRead
          required: false
          in: query
          description: Filters on reading state
          schema:
            $ref: "#/components/schemas/LHSNotificationIsReadFilters"
      responses:
        "200":
          description: Notifications returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListNotificationsApiResponse"
        "400":
          description: Malformed payload
        "404":
          description: Spot member not found
      summary: ""
      tags:
        - notification
  /v1/reportedResources/{reportedResourceId}/reports:
    get:
      description: List Reports
      operationId: listReports
      parameters:
        - name: reportedResourceId
          required: true
          in: path
          description: The id of the reported resource
          schema:
            type: string
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: status
          required: false
          in: query
          description: Filters for the status of the report
          schema:
            $ref: "#/components/schemas/LHSReportStatusFilters"
        - name: reason
          required: false
          in: query
          description: Filters for the reason of the report
          schema:
            $ref: "#/components/schemas/LHSReportReasonFilters"
        - name: creationDate
          required: false
          in: query
          description: Filters on creation date of the report
          schema:
            $ref: "#/components/schemas/LHSReportCreationDateFilters"
      responses:
        "200":
          description: Reports returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListSpotMembersApiResponse"
        "400":
          description: Malformed payload
      summary: ""
      tags:
        - report
  /v1/reportedResources/{reportedResourceId}/reports/{reportId}:
    get:
      description: Get a report
      operationId: getReport
      parameters:
        - name: reportedResourceId
          required: true
          in: path
          description: The id of the reported resource
          schema:
            type: string
        - name: reportId
          required: true
          in: path
          description: The id of the report
          schema:
            type: string
      responses:
        "200":
          description: Report found and returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReportApiResponse"
        "400":
          description: Malformed payload
        "404":
          description: Report not found
      summary: ""
      tags:
        - report
  /v1/reportedResources/{reportedResourceId}/context:
    get:
      description: Get a reported resource context
      operationId: getReportedResourceContext
      parameters:
        - name: reportedResourceId
          required: true
          in: path
          description: The id of the reported resource
          schema:
            type: string
      responses:
        "200":
          description: Report found and returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReportedResourceContextApiResponse"
        "400":
          description: Malformed payload
        "404":
          description: Reported resource not found
      summary: ""
      tags:
        - reportedResource
  /v1/reportedResources~bulkValidate:
    post:
      description: Validate reported resources
      operationId: validateReportedResources
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ValidateReportedResourcesApiBody"
      responses:
        "200":
          description: Reported resources validated successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidatedReportedResourcesApiResponse"
        "400":
          description: Malformed payload
      summary: ""
      tags:
        - reportedResource
  /v1/reportedResources/{reportedResourceId}/validate:
    post:
      description: Validate a reported resource
      operationId: validateReportedResource
      parameters:
        - name: reportedResourceId
          required: true
          in: path
          description: The id of the reported resource
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ValidateReportedResourceApiBody"
      responses:
        "200":
          description: Reported resource validated successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReportedResourceApiResponse"
        "400":
          description: Malformed payload
        "404":
          description: Reported resource not found
      summary: ""
      tags:
        - reportedResource
  /v1/reportedResources:
    get:
      description: List Reported resources
      operationId: listReportedResources
      parameters:
        - name: page
          required: false
          in: query
          description: The page number in a paginated set of results
          schema:
            nullable: true
            type: integer
        - name: limit
          required: false
          in: query
          description: The limit of results to be returned per page
          schema:
            nullable: true
            type: integer
        - name: status
          required: false
          in: query
          description: Filters for the status of the reported resource
          schema:
            $ref: "#/components/schemas/LHSReportedResourceStatusFilters"
        - name: lastReportReason
          required: false
          in: query
          description: Filters for the reason of the last report of the reported resource
          schema:
            $ref: "#/components/schemas/LHSReportedResourceReasonFilters"
        - name: creationDate
          required: false
          in: query
          description: Filters on creation date of the reported resource
          schema:
            $ref: "#/components/schemas/LHSReportedResourceCreationDateFilters"
      responses:
        "200":
          description: Reported resources returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListReportedResourcesApiResponse"
        "400":
          description: Malformed payload
      summary: ""
      tags:
        - reportedResource
  /v1/reportedResources/{reportedResourceId}:
    get:
      description: Get a reported resource
      operationId: getReportedResource
      parameters:
        - name: reportedResourceId
          required: true
          in: path
          description: The id of the reported resource
          schema:
            type: string
      responses:
        "200":
          description: Report found and returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ReportedResourceApiResponse"
        "400":
          description: Malformed payload
        "404":
          description: Reported resource not found
      summary: ""
      tags:
        - reportedResource
info:
  title: MeltingSpot API
  description: The MeltingSpot REST API will allow you to manipulate MeltingSpot
    objects (Members, Groups, Forums, Lives...).
  version: v1
  contact: {}
tags: []
servers:
  - url: https://openapi.meltingspot.io
components:
  schemas:
    LHSActivityFromDateFilters:
      type: object
      properties:
        fromDate[eq]:
          type: integer
          description: Search activities from this date
    LHSActivityToDateFilters:
      type: object
      properties:
        toDate[eq]:
          type: integer
          description: Search activities to this date
    LHSActivityEventTypeFilters:
      type: object
      properties:
        eventType[eq]:
          type: string
          description: Search activities with a specific event type
          enum:
            - ChannelJoined
            - ChannelLeft
            - ChannelMessageReacted
            - ChannelMessageSent
            - CourseStarted
            - CourseCompleted
            - CourseStepViewed
            - CourseStepCompleted
            - DiscussionMessageSent
            - DocumentLinkOpened
            - DocumentLinkReacted
            - DocumentPageReacted
            - DocumentPageViewed
            - LearningPathCompleted
            - LearningPathStarted
            - LiveAttended
            - LiveInvitationDeclined
            - LiveMessageReacted
            - LiveMessageSent
            - LiveParticipantRegistered
            - LiveReplayWatched
            - SpotMemberLeft
            - SpotMemberRegistered
            - SpotMemberRegistrationRequested
            - TopicAnswerCreated
            - TopicAnswerVoted
            - TopicCreated
            - TopicVoted
        eventType[in]:
          type: array
          description: Search activities which have the following event types
          items:
            type: string
            enum:
              - ChannelJoined
              - ChannelLeft
              - ChannelMessageReacted
              - ChannelMessageSent
              - CourseStarted
              - CourseCompleted
              - CourseStepViewed
              - CourseStepCompleted
              - DiscussionMessageSent
              - DocumentLinkOpened
              - DocumentLinkReacted
              - DocumentPageReacted
              - DocumentPageViewed
              - LearningPathCompleted
              - LearningPathStarted
              - LiveAttended
              - LiveInvitationDeclined
              - LiveMessageReacted
              - LiveMessageSent
              - LiveParticipantRegistered
              - LiveReplayWatched
              - SpotMemberLeft
              - SpotMemberRegistered
              - SpotMemberRegistrationRequested
              - TopicAnswerCreated
              - TopicAnswerVoted
              - TopicCreated
              - TopicVoted
    AppendAnalyticsEventApiBody:
      type: object
      properties:
        eventId:
          type: string
          description: Unique identifier of the event (client-generated UUID v4)
        eventType:
          type: string
          description: Type of the analytics event to register
          enum:
            - ChannelJoined
            - ChannelLeft
            - ChannelMessageReacted
            - ChannelMessageSent
            - CourseStepCompleted
            - CourseStarted
            - CourseCompleted
            - CourseStepViewed
            - DiscussionMessageSent
            - DocumentLinkOpened
            - DocumentLinkReacted
            - DocumentPageReacted
            - DocumentPageViewed
            - LearningPathCompleted
            - LearningPathStarted
            - LiveAttended
            - LiveInvitationDeclined
            - LiveMessageReacted
            - LiveMessageSent
            - LiveParticipantRegistered
            - LiveReplayWatched
            - LiveViewDuration
            - MeltyIntentAutoDismissed
            - MeltyIntentDismissed
            - MeltyIntentGoClicked
            - MeltyIntentLaterClicked
            - MeltyIntentMutedHandClicked
            - MeltyIntentPopped
            - ReplayViewDuration
            - SpotMemberLeft
            - SpotMemberRegistered
            - SpotMemberRegistrationRequested
            - TopicAnswerCreated
            - TopicAnswerVoted
            - TopicCreated
            - TopicVoted
            - WidgetCollectionClicked
            - WidgetCourseClicked
            - WidgetForumClicked
            - WidgetLearningPathClicked
            - WidgetContentClicked
            - WidgetCollectionViewed
            - WidgetCourseViewed
            - WidgetForumViewed
            - WidgetLearningPathViewed
            - WidgetDocumentViewed
            - WidgetDocumentLinkViewed
            - WidgetLiveViewed
            - WidgetContentViewed
            - WidgetTopicViewed
            - WidgetChannelViewed
        timestamp:
          format: date-time
          type: string
          description: Timestamp at which the event occurred on the client
        body:
          type: object
          description: Event-specific payload (shape depends on eventType). spotId and
            userId are auto-injected from the x-spot-id header and JWT
            respectively. The server validates the shape against eventType in
            the use case.
      required:
        - eventId
        - eventType
        - timestamp
        - body
    ChannelReportingApiResponse:
      type: object
      properties:
        name:
          type: string
          description: The name of the channel.
        createdAt:
          type: integer
          description: Timestamp in ms of creation date
        createdBy:
          type: string
          description: The full name of the user who created the channel.
        lastActivityAt:
          type: integer
          description: Timestamp in ms of the last activity date
          nullable: true
        membersCount:
          type: integer
          description: The number of members in the channel.
        messagesCount:
          type: integer
          description: The number of messages in the channel.
        privacy:
          type: string
          enum:
            - Private
            - Public
          description: The privacy of the channel.
        lastMessageDate:
          type: integer
          description: Timestamp in ms of the last message date
          nullable: true
        showMembers:
          type: boolean
          description: Whether the channel will show its members.
        readonly:
          type: boolean
          description: Whether the channel will be in read-only for non admin.
        description:
          type: string
          description: The description of the channel.
          nullable: true
      required:
        - name
        - createdAt
        - createdBy
        - lastActivityAt
        - membersCount
        - messagesCount
        - privacy
        - lastMessageDate
        - showMembers
        - readonly
        - description
    LHSSpotMemberEmailFilters:
      type: object
      properties:
        email[in]:
          description: The emails of spot member to include in the result
          type: array
          items:
            type: string
    LHSSpotMemberFirstNameFilters:
      type: object
      properties:
        firstname[in]:
          description: The firstnames of spot member to include in the result
          type: array
          items:
            type: string
    LHSSpotMemberLastNameFilters:
      type: object
      properties:
        lastname[in]:
          description: The lastnames of spot member to include in the result
          type: array
          items:
            type: string
    LHSSpotMemberRoleFilters:
      type: object
      properties:
        role[in]:
          type: array
          description: The roles of spot member to include in the result
          items:
            type: string
            enum:
              - Member
              - Admin
    LHSSpotMemberRegistrationDateFilters:
      type: object
      properties:
        registrationDate[before]:
          type: integer
          description: Spot members where registration date is before a specific date
            (Unix timestamp format)
        registrationDate[after]:
          type: integer
          description: Spot members where registration date is after a specific date (Unix
            timestamp format)
    SpotMemberApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the spot member.
        spotId:
          type: string
          description: The id of the spot.
        userId:
          type: string
          nullable: true
          description: The id of the user.
        email:
          type: string
          description: The email of the spot member.
        title:
          type: string
          nullable: true
          description: The title of the spot member.
        lang:
          type: string
          enum:
            - en
            - fr
            - de
            - it
            - es
            - pt
            - nl
          description: The lang of the spot member.
        role:
          type: string
          enum:
            - Member
            - Admin
          description: The role of the spot member.
        customRoleId:
          type: string
          description: The custom role ID of the spot member.
          nullable: true
        status:
          type: string
          enum:
            - Accepted
            - Deactivated
            - DeclinedInvitation
            - Invited
            - Left
            - Pending
            - Rejected
          description: The status of the spot member.
        firstname:
          type: string
          description: The firstname of the spot member.
        lastname:
          type: string
          description: The lastname of the spot member.
        warnings:
          type: number
          description: The number of warnings the spot member has.
        embedBaseUrls:
          type: object
          description: The custom embed base URLs of the spot member.
          properties:
            default:
              type: string
          additionalProperties:
            type: string
        updatedAt:
          type: integer
          description: Timestamp in ms of updated date
          nullable: true
        lastActivityAt:
          type: integer
          description: Timestamp in ms of last activity date
          nullable: true
      required:
        - id
        - spotId
        - userId
        - email
        - title
        - lang
        - role
        - customRoleId
        - status
        - firstname
        - lastname
        - warnings
        - embedBaseUrls
        - updatedAt
        - lastActivityAt
    ListSpotMembersApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/SpotMemberApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    CreateChannelApiBody:
      type: object
      properties:
        name:
          type: string
          description: The name of the channel.
        description:
          type: string
          description: The description of the channel
        emoji:
          type: string
          description: The emoji of the channel
        autoJoin:
          type: boolean
          description: Whether the channel should be auto-joined by new members.
        showMembers:
          type: boolean
          description: Whether the channel should show its members.
        readonly:
          type: boolean
          description: Whether the channel will be in read-only for non admin.
        privacy:
          type: string
          enum:
            - Private
            - Public
          description: Privacy setting of the channel
      required:
        - name
        - autoJoin
        - showMembers
        - privacy
    ChannelApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the channel.
        name:
          type: string
          description: The name of the channel.
        emoji:
          type: string
          description: The emoji of the channel
        description:
          type: object
          description: The description of the channel.
          nullable: true
        privacy:
          type: string
          enum:
            - Private
            - Public
          description: The privacy of the channel.
        autoJoin:
          type: boolean
          description: Whether the channel will be auto-joined by new members.
        readonly:
          type: boolean
          description: Whether the channel will be in read-only for non admin.
        showMembers:
          type: boolean
          description: Whether the channel will show its members.
      required:
        - id
        - name
        - description
        - privacy
        - autoJoin
        - readonly
        - showMembers
    UpdateChannelApiBody:
      type: object
      properties:
        name:
          type: string
          description: The name of the channel.
        description:
          type: string
          description: The description of the channel
        emoji:
          type: string
          description: The emoji of the channel
        autoJoin:
          type: boolean
          description: Whether the channel should be auto-joined by new members.
        showMembers:
          type: boolean
          description: Whether the channel should show its members.
        readonly:
          type: boolean
          description: Whether the channel will be in read-only for non admin.
        privacy:
          type: string
          enum:
            - Private
            - Public
          description: Privacy setting of the channel
    AddMembersToChannelApiBody:
      type: object
      properties:
        spotMemberIds:
          description: An array of strings representing the unique identifiers of spot
            members to add to channel
          type: array
          items:
            type: string
      required:
        - spotMemberIds
    AddMembersToChannelApiResponse:
      type: object
      properties:
        addedSpotMemberIds:
          description: The list of spot member id that were successfully added to the
            channel.
          type: array
          items:
            type: string
        failedSpotMemberIds:
          description: The list of spot member id that failed to be added to the channel.
          type: array
          items:
            type: string
      required:
        - addedSpotMemberIds
        - failedSpotMemberIds
    AddMemberToChannelApiBody:
      type: object
      properties:
        spotMemberId:
          type: string
          description: An uuid representing the unique identifier of the spot member to
            add to channel
      required:
        - spotMemberId
    RemoveMembersFromChannelApiBody:
      type: object
      properties:
        spotMemberIds:
          description: An array of strings representing the unique identifiers of spot
            members to remove from channel
          type: array
          items:
            type: string
      required:
        - spotMemberIds
    RemoveMembersFromChannelApiResponse:
      type: object
      properties:
        removedSpotMembersCount:
          type: integer
          description: The number of members removed from the channel.
      required:
        - removedSpotMembersCount
    ListChannelsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/ChannelApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    ChannelsApiResponse:
      type: object
      properties:
        created:
          description: The channels that were created.
          type: array
          items:
            $ref: "#/components/schemas/ChannelApiResponse"
        failed:
          description: The channels that failed to be created.
          type: array
          items:
            $ref: "#/components/schemas/CreateChannelApiBody"
      required:
        - created
        - failed
    LinkGroupApiBody:
      type: object
      properties:
        groupId:
          type: string
          description: The id of the group to link
      required:
        - groupId
    LinkGroupsApiBody:
      type: object
      properties:
        groupIds:
          description: The ids of the groups to link
          type: array
          items:
            type: string
      required:
        - groupIds
    GroupApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the group.
        name:
          type: string
          description: The name of the group.
        description:
          type: string
          description: The description of the group
        emoji:
          type: string
          description: The emoji of the group
      required:
        - id
        - name
    LinkedChannelGroupListApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/GroupApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    LHSCollectionNameFilters:
      type: object
      properties:
        name[eq]:
          type: string
          description: Search Collection with a specific name
        name[contains]:
          type: string
          description: Search Collections that contains this in the name
    LHSCollectionPrivacyFilters:
      type: object
      properties:
        privacy[eq]:
          type: string
          description: Search Collection with a specific privacy
          enum:
            - Private
            - Public
        privacy[in]:
          type: array
          description: Search Collection which have the following privacy
          items:
            type: string
            enum:
              - Private
              - Public
    CollectionApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the collection.
        name:
          type: string
          description: The name of the collection.
        description:
          type: string
          description: The description of the collection.
        emoji:
          type: string
          description: The emoji illustrating the collection. Null when the collection has
            none.
          nullable: true
        privacy:
          type: string
          description: The privacy of the collection.
          enum:
            - Private
            - Public
      required:
        - id
        - name
        - description
        - emoji
        - privacy
    ListCollectionsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/CollectionApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    CreateCollectionApiBody:
      type: object
      properties:
        name:
          type: string
          description: Name of the collection
        description:
          type: string
          description: Description of the collection
        emoji:
          type: string
          description: Emoji illustrating the collection
        privacy:
          type: string
          description: Privacy of the collection. Defaults to Public.
          enum:
            - Private
            - Public
      required:
        - name
    LHSCourseStatusFilters:
      type: object
      properties:
        status[eq]:
          type: string
          description: Search Course with a specific status
          enum:
            - Draft
            - Published
        status[in]:
          type: array
          description: Search Course which have the following statuses
          items:
            type: string
            enum:
              - Draft
              - Published
    LHSCoursePrivacyFilters:
      type: object
      properties:
        privacy[eq]:
          type: string
          description: Search Course with a specific privacy
          enum:
            - Secret
            - Public
        privacy[in]:
          type: array
          description: Search Course which have the following privacy
          items:
            type: string
            enum:
              - Secret
              - Public
    LHSCourseModuleNameFilters:
      type: object
      properties:
        moduleName[eq]:
          type: string
          description: Search Courses with a specific module name
        moduleName[contains]:
          type: string
          description: Search Courses that contains this in the module name
    CourseModuleApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the module.
        name:
          type: string
          description: The name of the module.
      required:
        - id
        - name
    CourseApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the course.
        title:
          type: string
          description: The title of the course.
        description:
          type: string
          description: The description of the course.
        privacy:
          type: string
          description: The privacy of the course.
          enum:
            - Secret
            - Public
        status:
          type: string
          description: The status of the course.
          enum:
            - Draft
            - Published
        navigationMode:
          type: string
          description: The navigation mode in the course.
          enum:
            - Flexible
            - Sequential
        moduleName:
          type: string
          deprecated: true
          description: Name of the module this course belongs to, if applicable.
            @deprecated A course can now belong to several modules — use
            `modules`. This returns the first linked module for backward
            compatibility.
          nullable: true
        modules:
          description: The modules this course belongs to (COM-9363).
          type: array
          items:
            $ref: "#/components/schemas/CourseModuleApiResponse"
      required:
        - id
        - title
        - description
        - privacy
        - status
        - navigationMode
        - moduleName
        - modules
    ListCoursesApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/CourseApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    AddGroupsToCourseApiBody:
      type: object
      properties:
        groupIds:
          description: The ids of the groups to link
          type: array
          items:
            type: string
        withEmailNotification:
          type: boolean
          description: To send an email notification to each invited member. Disable by
            default.
          default: false
        withInAppNotification:
          type: boolean
          description: To send an in-app notification to each invited member. Enabled by
            default.
          default: true
      required:
        - groupIds
    LinkedGroupApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the group.
        name:
          type: string
          description: The name of the group.
        description:
          type: string
          description: The description of the group
        emoji:
          type: string
          description: The emoji of the group
        emailNotificationEnabled:
          type: boolean
          description: Email notifications activation state
        inAppNotificationEnabled:
          type: boolean
          description: In-app notifications activation state
      required:
        - id
        - name
        - emailNotificationEnabled
        - inAppNotificationEnabled
    LinkedGroupsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/LinkedGroupApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    CourseParticipantApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the course participant.
        courseId:
          type: string
          description: The id of the course.
        spotMemberId:
          type: string
          description: The ID of the Spot member associated to the participant
        spotMemberEmail:
          type: string
          description: The email of the Spot member associated to the participant
        spotMemberFirstname:
          type: object
          description: The Spot member firstname associated to the participant. Can be
            null for a participant invited by email.
          nullable: true
        spotMemberLastname:
          type: object
          description: The Spot member lastname associated to the participant. Can be null
            for a participant invited by email.
          nullable: true
        status:
          type: string
          description: The status of the course participant.
          enum:
            - Invited
            - Started
            - Completed
            - Unenrolled
        invitedAt:
          format: date-time
          type: string
          description: The invitation date of the participant.
          nullable: true
        startedAt:
          format: date-time
          type: string
          description: The start date of the participant.
          nullable: true
        completedAt:
          format: date-time
          type: string
          description: The completion date of the participant.
          nullable: true
        unenrolledAt:
          format: date-time
          type: string
          description: The unenrollment date of the participant.
          nullable: true
        lastActivityAt:
          format: date-time
          type: string
          description: The last activity date of the participant.
          nullable: true
        completionRate:
          type: integer
          description: The completion rate of the participant.
      required:
        - id
        - courseId
        - spotMemberId
        - spotMemberEmail
        - spotMemberFirstname
        - spotMemberLastname
        - status
        - invitedAt
        - startedAt
        - completedAt
        - unenrolledAt
        - lastActivityAt
        - completionRate
    LHSCourseParticipantStatusFilters:
      type: object
      properties:
        status[eq]:
          type: string
          description: Search participants with a specific status
          enum:
            - Invited
            - Started
            - Completed
            - Unenrolled
        status[in]:
          type: array
          description: Search participants with one of theses status
          items:
            type: string
            enum:
              - Invited
              - Started
              - Completed
              - Unenrolled
    ListCourseParticipantsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/CourseParticipantApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    InviteCourseParticipantApiBody:
      type: object
      properties:
        spotMemberId:
          type: string
          description: An uuid representing the unique identifier of the spot member to
            add to course
        invitedBySpotMemberId:
          type: string
          description: The Spot member ID on the initiative of the invitation
        withEmailNotification:
          type: boolean
          description: Set to true to send notification mail to each invited members
      required:
        - spotMemberId
    InviteCourseParticipantsApiBody:
      type: object
      properties:
        spotMemberIds:
          description: An array of uuid representing the unique identifier of the spot
            members to add to course
          type: array
          items:
            type: string
        invitedBySpotMemberId:
          type: string
          description: The Spot member ID on the initiative of the invitation
        withEmailNotification:
          type: boolean
          description: Set to true to send notification mail to each invited members
      required:
        - spotMemberIds
    QuizScoreApiResponse:
      type: object
      properties:
        totalQuestionsCount:
          type: integer
          description: The number of questions of the quiz.
        correctAnswersCount:
          type: integer
          description: The number of correct answers of the quiz.
        score:
          type: integer
          description: Score of the quiz (between 0 and 1).
      required:
        - totalQuestionsCount
        - correctAnswersCount
        - score
    CourseStepCompletionWithDetailsApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the course completion.
        stepId:
          type: string
          description: The id of the course step.
        courseParticipantId:
          type: string
          description: The id of the course participant.
        contentType:
          type: string
          description: The type of the course step.
          enum:
            - Page
            - Quiz
        completedAt:
          type: integer
          description: Timestamp in ms of completion date
        quizScore:
          description: The details of the quiz score.
          nullable: true
          type: object
          allOf:
            - $ref: "#/components/schemas/QuizScoreApiResponse"
      required:
        - id
        - stepId
        - courseParticipantId
        - contentType
        - completedAt
        - quizScore
    LHSCourseStepCompletionDateFilters:
      type: object
      properties:
        completedAt[lt]:
          type: integer
          description: Return elements with date before than this
        completedAt[lte]:
          type: integer
          description: Return elements with date before than or equal to this
        completedAt[gt]:
          type: integer
          description: Return elements with date after than this
        completedAt[gte]:
          type: integer
          description: Return elements with date after than or equal to this
        completedAt[eq]:
          type: integer
          description: Return elements with date equal to this
    LHSCourseStepCompletionContentTypeFilters:
      type: object
      properties:
        solution[in]:
          type: array
          description: Search course step completions with theses types of course content
          items:
            type: string
            enum:
              - Page
              - Quiz
        solution[eq]:
          type: string
          description: Search course step completions with a specific content type
          enum:
            - Page
            - Quiz
    CourseStepCompletionApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the course completion.
        stepId:
          type: string
          description: The id of the course step.
        courseParticipantId:
          type: string
          description: The id of the course participant.
        contentType:
          type: string
          description: The type of the course step.
          enum:
            - Page
            - Quiz
        completedAt:
          type: integer
          description: Timestamp in ms of completion date
      required:
        - id
        - stepId
        - courseParticipantId
        - contentType
        - completedAt
    ListCourseStepCompletionsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/CourseStepCompletionApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    LHSCourseStepTitleFilters:
      type: object
      properties:
        title[eq]:
          type: string
          description: Search course steps with a specific title
        title[contains]:
          type: string
          description: Search course steps that contains this in the title
    LHSCourseStepContentTypeFilters:
      type: object
      properties:
        solution[in]:
          type: array
          description: Search course steps with theses types of content
          items:
            type: string
            enum:
              - Page
              - Quiz
        solution[eq]:
          type: string
          description: Search course steps with a specific content type
          enum:
            - Page
            - Quiz
    CourseStepApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the course step.
        title:
          type: string
          description: The title of the course step.
        duration:
          type: integer
          description: The duration of the course step.
          nullable: true
        contentType:
          type: string
          description: The type of the course step.
          enum:
            - Page
            - Quiz
        createdAt:
          type: integer
          description: Timestamp in ms of creation date
      required:
        - id
        - title
        - duration
        - contentType
        - createdAt
    ListCourseStepsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/CourseStepApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    UpsertCustomPropertyValuesApiBody:
      type: object
      properties:
        value:
          description: Value of the custom property
          oneOf:
            - type: string
            - type: number
            - type: boolean
            - type: array
              items:
                type: string
        customPropertySlug:
          type: string
          description: The slug of the custom property
      required:
        - value
        - customPropertySlug
    CustomPropertyValueApiResponse:
      type: object
      properties:
        customPropertyId:
          type: string
          description: The id of the custom property
        customPropertyLabel:
          type: string
          description: The label of the custom property
        customPropertySlug:
          type: string
          description: The slug of the custom property
        customPropertyDescription:
          type: string
          description: The description of the custom property
        customPropertyType:
          type: string
          description: The type of the custom property
          enum:
            - Text
            - Boolean
            - Number
            - SingleSelect
            - MultipleSelect
            - Date
        possibleValues:
          description: The possible values of the custom property
          nullable: true
          type: array
          items:
            type: string
        value:
          description: The values of the custom property
          oneOf:
            - type: string
            - type: number
            - type: boolean
            - type: array
              items:
                type: string
      required:
        - customPropertyId
        - customPropertyLabel
        - customPropertySlug
        - customPropertyDescription
        - customPropertyType
        - possibleValues
        - value
    UpdateCustomPropertyValueApiBody:
      type: object
      properties:
        value:
          description: Value of the custom property
          oneOf:
            - type: string
            - type: number
            - type: boolean
            - type: array
              items:
                type: string
      required:
        - value
    ListCustomPropertyValueApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/CustomPropertyValueApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    LHSDocumentTitleFilters:
      type: object
      properties:
        title[eq]:
          type: string
          description: Search Document with a specific title
        title[contains]:
          type: string
          description: Search Documents that contains this in the title
    LHSDocumentTypeFilters:
      type: object
      properties:
        type[eq]:
          type: string
          description: Search Document with a specific type
          enum:
            - Link
            - Page
        type[in]:
          type: array
          description: Search Document which have the following types
          items:
            type: string
            enum:
              - Link
              - Page
    LHSDocumentStatusFilters:
      type: object
      properties:
        status[eq]:
          type: string
          description: Search Document with a specific status
          enum:
            - Draft
            - Published
        status[in]:
          type: array
          description: Search Document which have the following statuses
          items:
            type: string
            enum:
              - Draft
              - Published
    DocumentApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the document.
        title:
          type: string
          description: The title of the document.
        type:
          type: string
          description: The type of the document.
          enum:
            - Link
            - Page
        status:
          type: string
          description: The status of the document.
          enum:
            - Draft
            - Published
      required:
        - id
        - title
        - type
        - status
    ListDocumentsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/DocumentApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    DocumentWithContentApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the document.
        title:
          type: string
          description: The title of the document.
        type:
          type: string
          description: The type of the document.
          enum:
            - Link
            - Page
        status:
          type: string
          description: The status of the document.
          enum:
            - Draft
            - Published
        description:
          type: string
          description: The description of the document. Empty string when unset.
        link:
          type: string
          description: The target URL of a Link document. Null for a Page document.
          nullable: true
        content:
          type: string
          description: The Markdown content of a Page document. Null for a Link document,
            empty string when the page has no content.
          nullable: true
      required:
        - id
        - title
        - type
        - status
        - description
        - link
        - content
    ForumReportingApiResponse:
      type: object
      properties:
        name:
          type: string
          description: The name of the forum.
        createdAt:
          type: integer
          description: Timestamp in ms of creation date
        createdBy:
          type: string
          description: The full name of the user who created the forum.
        description:
          type: string
          description: The description of the forum.
          nullable: true
      required:
        - name
        - createdAt
        - createdBy
        - description
    ForumApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the forum.
        name:
          type: string
          description: The name of the forum.
        emoji:
          type: string
          description: The emoji of the forum
        description:
          type: string
          description: The description of the forum
        createdAt:
          type: integer
          description: Timestamp in ms of creation date
        privacy:
          type: string
          enum:
            - Private
            - Secret
          description: Privacy of the forum
      required:
        - id
        - name
        - description
        - createdAt
        - privacy
    LHSForumNameFilters:
      type: object
      properties:
        name[eq]:
          type: string
          description: Search Forum with a specified name
        name[contains]:
          type: string
          description: Search Forum that contains this value in his name
    ListForumsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/ForumApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    AddMemberToForumApiBody:
      type: object
      properties:
        spotMemberId:
          type: string
          description: An uuid representing the unique identifier of the spot member to
            add to forum
      required:
        - spotMemberId
    AddMembersToForumApiBody:
      type: object
      properties:
        spotMemberIds:
          description: An array of strings representing the unique identifiers of spot
            members to add to forum
          type: array
          items:
            type: string
      required:
        - spotMemberIds
    AddMembersToForumApiResponse:
      type: object
      properties:
        addedSpotMemberIds:
          description: The list of spot member id that were successfully added to the forum.
          type: array
          items:
            type: string
        failedSpotMemberIds:
          description: The list of spot member id that failed to be added to the forum.
          type: array
          items:
            type: string
      required:
        - addedSpotMemberIds
        - failedSpotMemberIds
    UpdateForumApiBody:
      type: object
      properties:
        name:
          type: string
          description: The name of the forum
        description:
          type: string
          description: The description of the forum
          nullable: true
        emoji:
          type: string
          description: The emoji of the forum
          nullable: true
        privacy:
          type: string
          enum:
            - Private
            - Secret
          description: Privacy of the forum
    RemoveMembersFromForumApiBody:
      type: object
      properties:
        spotMemberIds:
          description: An array of strings representing the unique identifiers of spot
            members to remove from forum
          type: array
          items:
            type: string
      required:
        - spotMemberIds
    RemoveMembersFromForumApiResponse:
      type: object
      properties:
        removedSpotMembersCount:
          type: integer
          description: The number of members removed from the forum.
      required:
        - removedSpotMembersCount
    CreateForumApiBody:
      type: object
      properties:
        name:
          type: string
          description: Name of the forum
        description:
          type: string
          description: Description of the forum
        emoji:
          type: string
          description: Emoji of the forum
        privacy:
          type: string
          enum:
            - Private
            - Secret
          description: Privacy of the forum
          default: Private
      required:
        - name
    ForumsApiResponse:
      type: object
      properties:
        created:
          description: The forums that were created.
          type: array
          items:
            $ref: "#/components/schemas/ForumApiResponse"
        failed:
          description: The forums that failed to be created.
          type: array
          items:
            $ref: "#/components/schemas/CreateForumApiBody"
      required:
        - created
        - failed
    CreateGroupApiBody:
      type: object
      properties:
        name:
          type: string
          description: The name of the group
        description:
          type: string
          description: The description of the group
        emoji:
          type: string
          description: The emoji of the group
      required:
        - name
    LHSGroupNameFilters:
      type: object
      properties:
        name[eq]:
          type: string
          description: Get a group by a specific name
        name[contains]:
          type: string
          description: Get a group that contains this name
    ListGroupsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/GroupApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    UpdateGroupApiBody:
      type: object
      properties:
        name:
          type: string
          description: The name of the group
        description:
          type: string
          description: The description of the group
          nullable: true
        emoji:
          type: string
          description: The emoji of the group
          nullable: true
    AddMembersToGroupApiBody:
      type: object
      properties:
        spotMemberIds:
          description: An array of strings representing the unique identifiers of spot
            members to add to group
          type: array
          items:
            type: string
      required:
        - spotMemberIds
    AddMembersToGroupApiResponse:
      type: object
      properties:
        addedSpotMemberIds:
          description: The list of spot member id that were successfully added to the group.
          type: array
          items:
            type: string
        failedSpotMemberIds:
          description: The list of spot member id that failed to be added to the group.
          type: array
          items:
            type: string
      required:
        - addedSpotMemberIds
        - failedSpotMemberIds
    RemoveMembersFromGroupApiBody:
      type: object
      properties:
        spotMemberIds:
          description: An array of strings representing the unique identifiers of spot
            members to remove from group
          type: array
          items:
            type: string
      required:
        - spotMemberIds
    RemoveMembersFromGroupApiResponse:
      type: object
      properties:
        removedSpotMembersCount:
          type: integer
          description: The number of members removed from the group.
      required:
        - removedSpotMembersCount
    AddMemberToGroupApiBody:
      type: object
      properties:
        spotMemberId:
          type: string
          description: An uuid representing the unique identifier of the spot member to
            add to the group
      required:
        - spotMemberId
    GroupsApiResponse:
      type: object
      properties:
        created:
          description: The groups that were created.
          type: array
          items:
            $ref: "#/components/schemas/GroupApiResponse"
        failed:
          description: The groups that failed to be created.
          type: array
          items:
            $ref: "#/components/schemas/CreateGroupApiBody"
      required:
        - created
        - failed
    LHSLearningPathPrivacyFilters:
      type: object
      properties:
        privacy[eq]:
          type: string
          description: Search Learning Path with a specific privacy
          enum:
            - Public
            - Private
            - Secret
        privacy[in]:
          type: array
          description: Search Learning Path which have the following privacy
          items:
            type: string
            enum:
              - Public
              - Private
              - Secret
    LearningPathApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the learning path.
        title:
          type: string
          description: The title of the learning path.
        description:
          type: string
          description: The description of the learning path.
        privacy:
          type: string
          description: The privacy of the learning path.
          enum:
            - Public
            - Private
            - Secret
        navigationMode:
          type: string
          description: The navigation mode in the learning path.
          enum:
            - Flexible
            - Sequential
      required:
        - id
        - title
        - description
        - privacy
        - navigationMode
    ListLearningPathsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/LearningPathApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    AddGroupsToLearningPathApiBody:
      type: object
      properties:
        groupIds:
          description: The ids of the groups to link
          type: array
          items:
            type: string
        withEmailNotification:
          type: boolean
          description: To send an email notification to each invited member. Disable by
            default.
          default: false
        withInAppNotification:
          type: boolean
          description: To send an in-app notification to each invited member. Enabled by
            default.
          default: true
      required:
        - groupIds
    LearningPathParticipantApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the learning path participant.
        learningPathId:
          type: string
          description: The id of the learning path.
        spotMemberId:
          type: string
          description: The ID of the Spot member associated to the participant
        spotMemberEmail:
          type: string
          description: The email of the Spot member associated to the participant
        spotMemberFirstname:
          type: object
          description: The Spot member firstname associated to the participant. Can be
            null for a participant invited by email.
          nullable: true
        spotMemberLastname:
          type: object
          description: The Spot member lastname associated to the participant. Can be null
            for a participant invited by email.
          nullable: true
        status:
          type: string
          description: The status of the learning path participant.
          enum:
            - Invited
            - Started
            - Completed
            - Unenrolled
        invitedAt:
          type: integer
          description: Timestamp in ms of invitation date of the participant.
          nullable: true
        startedAt:
          type: integer
          description: Timestamp in ms of start date of the participant.
          nullable: true
        completedAt:
          type: integer
          description: Timestamp in ms of completion date of the participant.
          nullable: true
        unenrolledAt:
          type: integer
          description: Timestamp in ms of unenrollment date of the participant.
          nullable: true
        lastActivityAt:
          type: integer
          description: Timestamp in ms of last activity date of the participant.
          nullable: true
        completionRate:
          type: integer
          description: The completion rate of the participant.
      required:
        - id
        - learningPathId
        - spotMemberId
        - spotMemberEmail
        - spotMemberFirstname
        - spotMemberLastname
        - status
        - invitedAt
        - startedAt
        - completedAt
        - unenrolledAt
        - lastActivityAt
        - completionRate
    LHSLearningPathParticipantStatusFilters:
      type: object
      properties:
        status[eq]:
          type: string
          description: Search participants with a specific status
          enum:
            - Invited
            - Started
            - Completed
            - Unenrolled
        status[in]:
          type: array
          description: Search participants with one of these status
          items:
            type: string
            enum:
              - Invited
              - Started
              - Completed
              - Unenrolled
    ListLearningPathParticipantsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/LearningPathParticipantApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    InviteLearningPathParticipantApiBody:
      type: object
      properties:
        spotMemberId:
          type: string
          description: An uuid representing the unique identifier of the spot member to
            add to learning path
        invitedBySpotMemberId:
          type: string
          description: The Spot member ID on the initiative of the invitation
        withEmailNotification:
          type: boolean
          description: Set to true to send notification mail to each invited members
      required:
        - spotMemberId
    InviteLearningPathParticipantsApiBody:
      type: object
      properties:
        spotMemberIds:
          description: An array of uuid representing the unique identifier of the spot
            members to add to learning path
          type: array
          items:
            type: string
        invitedBySpotMemberId:
          type: string
          description: The Spot member ID on the initiative of the invitation
        withEmailNotification:
          type: boolean
          description: Set to true to send notification mail to each invited members
      required:
        - spotMemberIds
    LHSLearningPathStepContentTitleFilters:
      type: object
      properties:
        contentTitle[eq]:
          type: string
          description: Search learning path steps with a specific title
        contentTitle[contains]:
          type: string
          description: Search learning path steps whose title contains this string
    LHSLearningPathStepContentTypeFilters:
      type: object
      properties:
        contentType[in]:
          type: array
          description: Search learning path steps with these types of content
          items:
            type: string
            enum:
              - Course
              - Link
              - Live
              - Page
        contentType[eq]:
          type: string
          description: Search learning path steps with a specific content type
          enum:
            - Course
            - Link
            - Live
            - Page
    LearningPathStepApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the learning path step.
        title:
          type: string
          description: The title of the learning path step.
        contentType:
          type: string
          description: The type of the learning path step.
          enum:
            - Course
            - Link
            - Live
            - Page
        createdAt:
          type: integer
          description: Timestamp in ms of creation date
      required:
        - id
        - title
        - contentType
        - createdAt
    ListLearningPathStepsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/LearningPathStepApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    LHSLearningPathStepCompletionDateFilters:
      type: object
      properties:
        completedAt[lt]:
          type: integer
          description: Return elements with date before than this
        completedAt[lte]:
          type: integer
          description: Return elements with date before than or equal to this
        completedAt[gt]:
          type: integer
          description: Return elements with date after than this
        completedAt[gte]:
          type: integer
          description: Return elements with date after than or equal to this
        completedAt[eq]:
          type: integer
          description: Return elements with date equal to this
    LHSLearningPathStepCompletionContentTypeFilters:
      type: object
      properties:
        contentType[in]:
          type: array
          description: Search learning path content completions with these types of content
          items:
            type: string
            enum:
              - Course
              - Link
              - Live
              - Page
        contentType[eq]:
          type: string
          description: Search learning path content completions with a specific content type
          enum:
            - Course
            - Link
            - Live
            - Page
    LearningPathStepCompletionApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the learning path content completion.
        stepContentId:
          type: string
          description: The id of the learning path content.
        learningPathParticipantId:
          type: string
          description: The id of the learning path participant.
        contentType:
          type: string
          description: The type of the learning path content.
          enum:
            - Course
            - Link
            - Live
            - Page
        completedAt:
          type: integer
          description: Timestamp in ms of completion date
      required:
        - id
        - stepContentId
        - learningPathParticipantId
        - contentType
        - completedAt
    ListLearningPathStepCompletionsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/LearningPathStepCompletionApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    LiveReportingApiResponse:
      type: object
      properties:
        name:
          type: string
          description: The name of the live.
        startDate:
          type: integer
          description: Timestamp in ms of the start date of the live.
        status:
          type: string
          enum:
            - Ended
            - Planned
            - Live
          description: The status of the live.
        participantsCount:
          type: integer
          description: The number of participants in the live.
        hosts:
          description: The name of the live hosts.
          type: array
          items:
            type: string
        messagesCount:
          type: integer
          description: The number of messages in the live.
        duration:
          type: integer
          description: The duration of the live in minutes.
        description:
          type: array
          description: The description of the Live.
          items:
            type: object
            additionalProperties: true
          example:
            - type: p
              children:
                - text: My new live
        tags:
          description: The name of the live tags.
          type: array
          items:
            type: string
        visibility:
          type: string
          description: The visibility of the Live
          enum:
            - AnyOne
            - OnlySpotMembers
            - InvitedMembersOnly
        solution:
          type: string
          description: The solution of the Live.
          enum:
            - Youtube
            - Vimeo
            - BuiltIn
            - NoSolution
        builtInType:
          type: string
          description: The builtIn type of the Live.
          nullable: true
          enum:
            - Workshop
            - Conference
        chatEnabled:
          type: boolean
          description: Whether the chat is enabled in the live.
        recorded:
          type: object
          description: Whether the live is recorded. (only for BuiltIn solution)
          nullable: true
        replayAvailable:
          type: object
          description: Whether the replay is available. (only for BuiltIn solution)
          nullable: true
        createdBy:
          type: string
          description: The full name of the user who created the live.
      required:
        - name
        - startDate
        - status
        - participantsCount
        - hosts
        - messagesCount
        - duration
        - description
        - tags
        - visibility
        - solution
        - builtInType
        - chatEnabled
        - recorded
        - replayAvailable
        - createdBy
    LHSLiveTitleFilters:
      type: object
      properties:
        title[eq]:
          type: string
          description: Search Lives with a specific title
        title[contains]:
          type: string
          description: Search Lives that contains this in the title
    LHSLiveStatusFilters:
      type: object
      properties:
        status[eq]:
          type: string
          description: Search Lives with a specific status
          enum:
            - Ended
            - Planned
            - Live
    LHSLiveStartDateFilters:
      type: object
      properties:
        startDate[lt]:
          type: integer
          description: Return elements with date before than this
        startDate[lte]:
          type: integer
          description: Return elements with date before than or equal to this
        startDate[gt]:
          type: integer
          description: Return elements with date after than this
        startDate[gte]:
          type: integer
          description: Return elements with date after than or equal to this
        startDate[eq]:
          type: integer
          description: Return elements with date equal to this
    LHSLiveSolutionFilters:
      type: object
      properties:
        solution[in]:
          type: array
          description: Search Lives with theses types of solution
          items:
            type: string
            enum:
              - Youtube
              - Vimeo
              - BuiltIn
              - NoSolution
        solution[eq]:
          type: string
          description: Search Lives with a specific solution
          enum:
            - Youtube
            - Vimeo
            - BuiltIn
            - NoSolution
    LHSLiveReplayFilters:
      type: object
      properties:
        replay[eq]:
          type: string
          description: Search Lives with or without replay
    LHSLiveBuiltInTypeFilters:
      type: object
      properties:
        builtInType[in]:
          type: array
          description: Search Lives with theses types of BuiltInType
          items:
            type: string
            enum:
              - Workshop
              - Conference
        builtInType[eq]:
          type: string
          description: Search Lives with a specific BuiltInType
          enum:
            - Workshop
            - Conference
    LHSLiveAverageViewTimeFilters:
      type: object
      properties:
        averageViewTime[lt]:
          type: integer
          description: Return elements with value lower than this
        averageViewTime[lte]:
          type: integer
          description: Return elements with value lower than or equal to this
        averageViewTime[gt]:
          type: integer
          description: Return elements with value greater than this
        averageViewTime[gte]:
          type: integer
          description: Return elements with value greater than or equal to this
        averageViewTime[eq]:
          type: integer
          description: Return elements with value equal to this
    LHSLiveInvitedFilters:
      type: object
      properties:
        invited[lt]:
          type: integer
          description: Return elements with value lower than this
        invited[lte]:
          type: integer
          description: Return elements with value lower than or equal to this
        invited[gt]:
          type: integer
          description: Return elements with value greater than this
        invited[gte]:
          type: integer
          description: Return elements with value greater than or equal to this
        invited[eq]:
          type: integer
          description: Return elements with value equal to this
    LHSLiveRegistrantFilters:
      type: object
      properties:
        registrant[lt]:
          type: integer
          description: Return elements with value lower than this
        registrant[lte]:
          type: integer
          description: Return elements with value lower than or equal to this
        registrant[gt]:
          type: integer
          description: Return elements with value greater than this
        registrant[gte]:
          type: integer
          description: Return elements with value greater than or equal to this
        registrant[eq]:
          type: integer
          description: Return elements with value equal to this
    LHSLiveAttendeeFilters:
      type: object
      properties:
        attendee[lt]:
          type: integer
          description: Return elements with value lower than this
        attendee[lte]:
          type: integer
          description: Return elements with value lower than or equal to this
        attendee[gt]:
          type: integer
          description: Return elements with value greater than this
        attendee[gte]:
          type: integer
          description: Return elements with value greater than or equal to this
        attendee[eq]:
          type: integer
          description: Return elements with value equal to this
    LHSLiveAttendanceRateFilters:
      type: object
      properties:
        attendanceRate[lt]:
          type: integer
          description: Return elements with value lower than this
        attendanceRate[lte]:
          type: integer
          description: Return elements with value lower than or equal to this
        attendanceRate[gt]:
          type: integer
          description: Return elements with value greater than this
        attendanceRate[gte]:
          type: integer
          description: Return elements with value greater than or equal to this
        attendanceRate[eq]:
          type: integer
          description: Return elements with value equal to this
    LHSLiveTotalReplayViewFilters:
      type: object
      properties:
        totalReplayView[lt]:
          type: integer
          description: Return elements with value lower than this
        totalReplayView[lte]:
          type: integer
          description: Return elements with value lower than or equal to this
        totalReplayView[gt]:
          type: integer
          description: Return elements with value greater than this
        totalReplayView[gte]:
          type: integer
          description: Return elements with value greater than or equal to this
        totalReplayView[eq]:
          type: integer
          description: Return elements with value equal to this
    LiveMetricsApiResponse:
      type: object
      properties:
        averageViewTime:
          type: integer
          description: The average view time on the Live.
          nullable: true
        noShow:
          type: integer
          description: The counter of no show of the Live.
          nullable: true
        totalReplayView:
          type: integer
          description: The counter of total replay viewed on the Live.
          nullable: true
        registrant:
          type: integer
          description: The counter of registrant on the Live.
          nullable: true
        attendee:
          type: integer
          description: The counter of attendee on the Live.
          nullable: true
        attendanceRate:
          type: integer
          description: The attendance rate on the Live.
          nullable: true
        invited:
          type: integer
          description: The counter of invited on the Live.
          nullable: true
      required:
        - averageViewTime
        - noShow
        - totalReplayView
        - registrant
        - attendee
        - attendanceRate
        - invited
    LivePrivacyApiResponse:
      type: object
      properties:
        visibility:
          type: string
          description: The visibility of the Live
          enum:
            - AnyOne
            - OnlySpotMembers
            - InvitedMembersOnly
        participation:
          type: string
          description: What kind of members can participate to the Live
          enum:
            - AnySpotMembers
            - InvitedMembersOnly
      required:
        - visibility
        - participation
    LiveConfigApiResponse:
      type: object
      properties:
        chatVisibility:
          type: string
          description: The chat visibility on the Live
          enum:
            - Display
            - Hidden
        participantsVisibility:
          type: string
          description: The participants visibility on the Live.
          enum:
            - Ended
            - Planned
            - Live
      required:
        - chatVisibility
        - participantsVisibility
    LiveVideoInfosApiResponse:
      type: object
      properties:
        url:
          type: string
          description: URL to the video
        quality:
          type: string
          description: Quality of the video
        encoding:
          type: string
          description: Encoding of the video
          enum:
            - hls
            - mp4
        createdAt:
          format: date-time
          type: string
          description: Creation date of the video
          nullable: true
      required:
        - url
        - quality
        - encoding
        - createdAt
    LiveBuiltInConfigApiResponse:
      type: object
      properties:
        isRecorded:
          type: boolean
          description: Indicates if the Live is recorded
        recordAvailable:
          type: boolean
          description: If Live is recorded, indicates if the record is available
        enableBreakoutRooms:
          type: boolean
          description: Indicates if the Live has breakout rooms enabled
        enableRaiseHand:
          type: boolean
          description: Indicates if the Live has raise hand enabled
        enablePictureInPicture:
          type: boolean
          description: Indicates if the Live has picture-in-picture enabled
        videos:
          description: Videos of the replay in multiple formats
          allOf:
            - $ref: "#/components/schemas/LiveVideoInfosApiResponse"
        replayVideo:
          type: object
          description: URL to video replay
          nullable: true
      required:
        - isRecorded
        - recordAvailable
        - enableBreakoutRooms
        - enableRaiseHand
        - enablePictureInPicture
        - videos
        - replayVideo
    LiveApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the Live.
        title:
          type: string
          description: The title of the Live.
        startDate:
          format: date-time
          type: string
          description: The startDate of the Live.
        endDate:
          format: date-time
          type: string
          description: The endDate of the Live.
        metrics:
          description: The metrics of the Live.
          allOf:
            - $ref: "#/components/schemas/LiveMetricsApiResponse"
        description:
          type: array
          description: The description of the Live.
          items:
            type: object
            additionalProperties: true
          example:
            - type: p
              children:
                - text: My new live
        status:
          type: string
          description: The status of the Live.
          enum:
            - Ended
            - Planned
            - Live
        computedStatus:
          type: string
          description: The computed status of the Live.
          enum:
            - Ended
            - Planned
            - Live
        solution:
          type: string
          description: The solution of the Live.
          enum:
            - Youtube
            - Vimeo
            - BuiltIn
            - NoSolution
        privacy:
          description: The privacy of the Live.
          allOf:
            - $ref: "#/components/schemas/LivePrivacyApiResponse"
        config:
          description: The configuration of the Live.
          allOf:
            - $ref: "#/components/schemas/LiveConfigApiResponse"
        builtInType:
          type: string
          description: The builtIn type of the Live.
          nullable: true
          enum:
            - Workshop
            - Conference
        videoUrl:
          type: object
          description: The video URL of the Live.
          nullable: true
        createdAt:
          format: date-time
          type: string
          description: The creation date of the Live.
        spotId:
          type: string
          description: The spot ID of the Live.
        builtInConfig:
          description: The builtIn configuration of the Live.
          nullable: true
          type: object
          allOf:
            - $ref: "#/components/schemas/LiveBuiltInConfigApiResponse"
      required:
        - id
        - title
        - startDate
        - endDate
        - metrics
        - description
        - status
        - computedStatus
        - solution
        - privacy
        - config
        - builtInType
        - videoUrl
        - createdAt
        - spotId
        - builtInConfig
    ListLivesApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/LiveApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    UpdateLiveApiBody:
      type: object
      properties:
        title:
          type: string
          description: The title of the Live
        description:
          type: string
          description: Description of the Live (in Markdown)
        startDate:
          type: integer
          description: Start date of the Live (Unix timestamp format)
        endDate:
          type: integer
          description: End date of the Live (Unix timestamp format)
        chatVisibility:
          type: string
          description: The chat visibility on the Live
          enum:
            - Display
            - Hidden
        participantsVisibility:
          type: string
          description: The participant list visibility on the Live
          enum:
            - Display
            - Hidden
        visibility:
          type: string
          description: The Live visibility
          enum:
            - AnyOne
            - OnlySpotMembers
            - InvitedMembersOnly
        participation:
          type: string
          description: Who kind of members can participate to the Live
          enum:
            - AnySpotMembers
            - InvitedMembersOnly
        solution:
          type: string
          description: Solution of the Live
          enum:
            - Youtube
            - Vimeo
            - BuiltIn
            - NoSolution
        builtInType:
          type: string
          description: BuiltIn type of the Live (if solution is BuiltIn)
          enum:
            - Workshop
            - Conference
        record:
          type: boolean
          description: Active the record on the Live
        recordAvailable:
          type: boolean
          description: Make available the record of the Live
        enableBreakoutRooms:
          type: boolean
          description: Enable breakout rooms on the Live (only for BuiltIn Workshop lives)
        videoUrl:
          type: string
          description: Video URL of the Live (if solution is Youtube or Vimeo)
        replayVideoUrl:
          type: object
          description: Video URL of the Live (if solution is Youtube or Vimeo)
          nullable: true
      required:
        - title
        - startDate
        - endDate
        - solution
    CreateLiveApiBody:
      type: object
      properties:
        title:
          type: string
          description: The title of the Live
        description:
          type: string
          description: Description of the Live (in Markdown)
        spotMemberHostId:
          type: string
          description: The Spot member host of the Live
        startDate:
          type: integer
          description: Start date of the Live (Unix timestamp format)
        endDate:
          type: integer
          description: End date of the Live (Unix timestamp format)
        solution:
          type: string
          description: Solution of the Live
          enum:
            - Youtube
            - Vimeo
            - BuiltIn
            - NoSolution
        builtInType:
          type: string
          description: BuiltIn type of the Live (if solution is BuiltIn)
          enum:
            - Workshop
            - Conference
          nullable: true
        videoUrl:
          type: object
          description: Video URL of the Live (if solution is Youtube or Vimeo)
          nullable: true
        chatVisibility:
          type: string
          description: The chat visibility on the Live
          enum:
            - Display
            - Hidden
        participantsVisibility:
          type: string
          description: The participant list visibility on the Live
          enum:
            - Display
            - Hidden
        visibility:
          type: string
          description: The Live visibility
          enum:
            - AnyOne
            - OnlySpotMembers
            - InvitedMembersOnly
        participation:
          type: string
          description: Who kind of members can participate to the Live
          enum:
            - AnySpotMembers
            - InvitedMembersOnly
        record:
          type: boolean
          description: Active the record on the Live
        enableBreakoutRooms:
          type: boolean
          description: Enable breakout rooms on the Live (only for BuiltIn Workshop lives)
      required:
        - title
        - spotMemberHostId
        - startDate
        - endDate
        - solution
    LinkLiveGroupsApiBody:
      type: object
      properties:
        groupIds:
          description: The ids of the groups to link
          type: array
          items:
            type: string
        withEmailNotification:
          type: boolean
          description: To send an email notification to each added member. Disable by
            default.
          default: false
        withInAppNotification:
          type: boolean
          description: To send an in-app notification to each added member. Enabled by
            default.
          default: true
      required:
        - groupIds
    LinkLiveGroupApiBody:
      type: object
      properties:
        groupId:
          type: string
          description: The id of the group to link
        withEmailNotification:
          type: boolean
          description: To send an email notification to each added member. Disable by
            default.
      required:
        - groupId
    CreateLiveSpeakerApiBody:
      type: object
      properties:
        spotMemberId:
          type: string
          description: ID of the associated Spot member
        highlighted:
          type: boolean
          description: Set to true to highlight the Speaker.
          default: false
        grantHostRights:
          type: boolean
          description: Set to true to grant Host rights to the Speaker.
          default: false
      required:
        - spotMemberId
    LiveParticipantMetricsApiResponse:
      type: object
      properties:
        viewTime:
          type: integer
          description: The view time on the participant.
          nullable: true
        hasReplayed:
          type: boolean
          description: Indicates if the participant has seen the Live replay
          nullable: true
        hasParticipated:
          type: boolean
          description: Indicates if the participant has participated to the Live.
          nullable: true
      required:
        - viewTime
        - hasReplayed
        - hasParticipated
    LiveParticipantApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the participant.
        liveId:
          type: string
          description: The Live id of the participant.
        spotMemberId:
          type: string
          description: The ID of the Spot member associated to the participant
        spotMemberEmail:
          type: string
          description: The email of the Spot member associated to the participant
        spotMemberFirstname:
          type: object
          description: The Spot member firstname associated to the participant. Can be
            null for a participant invited by email.
          nullable: true
        spotMemberLastname:
          type: object
          description: The Spot member lastname associated to the participant. Can be null
            for a participant invited by email.
          nullable: true
        status:
          type: string
          description: The status of the participant.
          enum:
            - Accepted
            - Invited
            - Declined
        type:
          type: string
          description: The type of the participant.
          enum:
            - Participant
            - Speaker
            - Host
        invitedAt:
          format: date-time
          type: string
          description: The invitation date of the participant.
          nullable: true
        registeredAt:
          format: date-time
          type: string
          description: The registration date of the participant.
          nullable: true
        isHighlighted:
          type: boolean
          description: The highlight value of the participant.
        metrics:
          description: The metrics of the participant.
          allOf:
            - $ref: "#/components/schemas/LiveParticipantMetricsApiResponse"
      required:
        - id
        - liveId
        - spotMemberId
        - spotMemberEmail
        - spotMemberFirstname
        - spotMemberLastname
        - status
        - type
        - invitedAt
        - registeredAt
        - isHighlighted
        - metrics
    CreateLiveParticipantApiBody:
      type: object
      properties:
        spotMemberId:
          type: string
          description: Spot member id of Live participant to create
      required:
        - spotMemberId
    InviteLiveSpeakerApiBody:
      type: object
      properties:
        member:
          description: Member to invite as Live participant from email address or existing
            Spot member ID
          oneOf:
            - $ref: "#/components/schemas/InviteLiveSpeakerByEmailApiBody"
            - type: string
        invitedBySpotMemberId:
          type: string
          description: The Spot member ID on the initiative of the invitation
        highlighted:
          type: boolean
          description: Set to true to highlight the Speaker.
          default: false
        grantHostRights:
          type: boolean
          description: Set to true to grant Host rights to the Speaker.
          default: false
        withEmailNotification:
          type: boolean
          description: Set to true to send notification mail to each invited members
          default: false
      required:
        - member
    LHSLiveParticipantFirstNameFilters:
      type: object
      properties:
        firstname[eq]:
          type: string
          description: Search participants with a specific firstname
        firstname[contains]:
          type: string
          description: Search participants that contains this in the firstname
    LHSLiveParticipantLastNameFilters:
      type: object
      properties:
        lastname[eq]:
          type: string
          description: Search participants with a specific lastname
        lastname[contains]:
          type: string
          description: Search participants that contains this in the lastname
    LHSLiveParticipantEmailFilters:
      type: object
      properties:
        email[eq]:
          type: string
          description: Search participants with a specific email
        email[contains]:
          type: string
          description: Search participants that contains this in the email
    LHSLiveParticipantStatusFilters:
      type: object
      properties:
        status[eq]:
          type: string
          description: Search participants with a specific status
          enum:
            - Accepted
            - Invited
            - Declined
        status[in]:
          type: array
          description: Search participants with one of theses status
          items:
            type: string
            enum:
              - Accepted
              - Invited
              - Declined
    LHSLiveParticipantHasReplayedFilters:
      type: object
      properties:
        hasReplayed[eq]:
          type: string
          description: Search for participants who replayed the Live
    LHSLiveParticipantHasParticipatedFilters:
      type: object
      properties:
        hasParticipated[eq]:
          type: string
          description: Search for participants who participated to the Live
    ListLiveParticipantsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/LiveParticipantApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    InviteLiveParticipantApiBody:
      type: object
      properties:
        member:
          type: string
          description: Member to invite as Live participant from email address or existing
            Spot member ID
        invitedBySpotMemberId:
          type: string
          description: The Spot member ID on the initiative of the invitation
        withEmailNotification:
          type: boolean
          description: Set to true to send notification mail to each invited members
      required:
        - member
    LHSLiveParticipantTypeFilters:
      type: object
      properties:
        type[eq]:
          type: string
          description: Search participants with a specific type
          enum:
            - Participant
            - Speaker
            - Host
        type[in]:
          type: array
          description: Search participants with one of theses types
          items:
            type: string
            enum:
              - Participant
              - Speaker
              - Host
    InviteLiveSpeakersApiBody:
      type: object
      properties:
        invitedBySpotMemberId:
          type: string
          description: The Spot member ID on the initiative of the invitation
        highlighted:
          type: boolean
          description: Set to true to highlight the Speaker.
          default: false
        grantHostRights:
          type: boolean
          description: Set to true to grant Host rights to the Speaker.
          default: false
        withEmailNotification:
          type: boolean
          description: Set to true to send notification mail to each invited members
          default: false
        spotMemberIds:
          description: Spot members to invite as Live speaker
          type: array
          items:
            type: string
      required:
        - spotMemberIds
    CreateLiveSpeakersApiBody:
      type: object
      properties:
        speakers:
          description: Live speakers to create
          type: array
          items:
            type: string
      required:
        - speakers
    CreateLiveParticipantsApiResponse:
      type: object
      properties:
        participants:
          description: The created participants
          type: array
          items:
            $ref: "#/components/schemas/LiveParticipantApiResponse"
        failed:
          description: Participants that failed to be created.
          type: array
          items:
            type: string
      required:
        - participants
        - failed
    CreateLiveParticipantsApiBody:
      type: object
      properties:
        spotMemberIds:
          description: Spot member ids of Live participants to create
          type: array
          items:
            type: string
      required:
        - spotMemberIds
    InviteLiveParticipantsMembersField:
      type: object
      properties:
        spotMemberIds:
          description: To invite members from the Spot member ID
          type: array
          items:
            type: string
        emails:
          description: To invite members from email address
          type: array
          items:
            type: string
    InviteLiveParticipantsApiBody:
      type: object
      properties:
        invitedBySpotMemberId:
          type: string
          description: The Spot member ID on the initiative of the invitation
        withEmailNotification:
          type: boolean
          description: Set to true to send notification mail to each invited members
        members:
          description: Members to invite
          allOf:
            - $ref: "#/components/schemas/InviteLiveParticipantsMembersField"
      required:
        - members
    OwnerApiBody:
      type: object
      properties:
        email:
          type: string
          description: Email of the spot owner
        title:
          type: string
          description: Title of the spot owner
        firstName:
          type: string
          description: First name of the spot owner
        lastName:
          type: string
          description: Last name of the spot owner
        avatarUrl:
          type: string
          description: Avatar of the spot owner
      required:
        - email
        - title
        - firstName
        - lastName
    SpotModuleConfigApiBody:
      type: object
      properties:
        type:
          type: string
          enum:
            - SpotHomePage
            - LearningPaths
            - Lives
            - Courses
            - Channels
            - Collections
            - MemberDirectory
          description: Type of the spot module configuration
        enabled:
          type: boolean
          description: Indicates if the module is enabled
      required:
        - type
        - enabled
    ThemeFontsApiBody:
      type: object
      properties:
        default:
          type: string
          enum:
            - Archivo
            - Barlow
            - BodoniModa
            - BricolageGrotesque
            - DMSans
            - FiraSans
            - Fraunces
            - Fredoka
            - GillSans
            - InclusiveSans
            - Inter
            - Lato
            - Lora
            - Manrope
            - Merriweather
            - Montserrat
            - Noto
            - NunitoSans
            - OpenSans
            - Poppins
            - Raleway
            - Roboto
            - Rubik
            - SourceSans
            - SpaceGrotesk
            - Syne
            - Ubuntu
            - Urbanist
            - VarelaRound
            - WorkSans
          description: Default font of the theme
    ThemePaletteApiBody:
      type: object
      properties:
        primary:
          type: string
          description: Background color in hex format (#FFFFFF)
        primaryText:
          type: string
          description: Primary text color in hex format (#FFFFFF)
        secondary:
          type: string
          description: Secondary color in hex format (#FFFFFF)
        secondaryText:
          type: string
          description: Secondary text color in hex format (#FFFFFF)
        link:
          type: string
          description: Link color in hex format (#FFFFFF)
    ThemePalettesApiBody:
      type: object
      properties:
        light:
          description: Colors of the theme in light mode  in hex format (#FFFFFF)
          allOf:
            - $ref: "#/components/schemas/ThemePaletteApiBody"
        dark:
          description: Colors of the theme in dark mode  in hex format (#FFFFFF)
          allOf:
            - $ref: "#/components/schemas/ThemePaletteApiBody"
    ThemeApiBody:
      type: object
      properties:
        fonts:
          description: Fonts of the theme
          allOf:
            - $ref: "#/components/schemas/ThemeFontsApiBody"
        palettes:
          description: Palettes of the theme in hex format (#FFFFFF)
          allOf:
            - $ref: "#/components/schemas/ThemePalettesApiBody"
    CreateSpotApiBody:
      type: object
      properties:
        name:
          type: string
          description: Name of the spot
        privacy:
          type: string
          enum:
            - Public
            - Private
          description: Privacy setting of the spot
        owner:
          description: Owner ID of the spot
          allOf:
            - $ref: "#/components/schemas/OwnerApiBody"
        spotModuleConfigs:
          description: Configurations of the spot modules
          type: array
          items:
            $ref: "#/components/schemas/SpotModuleConfigApiBody"
        lang:
          type: string
          enum:
            - en
            - fr
            - de
            - it
            - es
            - pt
            - nl
          description: Language of the spot
        theme:
          description: Theme of the spot
          allOf:
            - $ref: "#/components/schemas/ThemeApiBody"
      required:
        - name
        - privacy
        - owner
        - spotModuleConfigs
    SpotApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the spot.
        name:
          type: string
          description: The name of the spot.
        description:
          type: string
          description: The description of the spot.
        privacy:
          type: string
          enum:
            - Public
            - Private
          description: The privacy of the spot.
        ownerId:
          type: string
          description: The ownerId of the spot. Corresponds to the userId of the user who
            created the spot.
      required:
        - id
        - name
        - description
        - privacy
        - ownerId
    UpdateSpotModuleConfigApiBody:
      type: object
      properties:
        type:
          type: string
          enum:
            - SpotHomePage
            - LearningPaths
            - Lives
            - Courses
            - Channels
            - Collections
            - MemberDirectory
          description: Type of the spot module configuration
        enabled:
          type: boolean
          description: Indicates if the module is enabled
        id:
          type: string
          description: ID of the spot module configuration
      required:
        - type
        - enabled
        - id
    UpdateThemeApiBody:
      type: object
      properties:
        fonts:
          type: object
          description: Fonts of the theme
          nullable: true
        palettes:
          type: object
          description: Palettes of the theme in hex format (#FFFFFF)
          nullable: true
    UpdateSpotApiBody:
      type: object
      properties:
        name:
          type: string
          description: Name of the spot
        description:
          type: string
          description: Description of the spot
        privacy:
          type: string
          enum:
            - Public
            - Private
          description: Privacy setting of the spot
        spotModuleConfigs:
          description: Configurations of the spot modules
          type: array
          items:
            $ref: "#/components/schemas/UpdateSpotModuleConfigApiBody"
        lang:
          type: string
          enum:
            - en
            - fr
            - de
            - it
            - es
            - pt
            - nl
          description: Language of the spot
        theme:
          description: Theme of the spot
          nullable: true
          type: object
          allOf:
            - $ref: "#/components/schemas/UpdateThemeApiBody"
    LHSListSpotsForMeSpotMemberRoleFilters:
      type: object
      properties:
        spotMemberRole[eq]:
          type: string
          description: The spot member role to filter by
          enum:
            - Member
            - Admin
    ListSpotsForMeApiResponse:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: "#/components/schemas/SpotApiResponse"
        total:
          type: number
      required:
        - items
        - total
    SpotMemberReportingApiResponse:
      type: object
      properties:
        createdBy:
          type: string
          description: The full name of the user.
        topicsCreatedCount:
          type: integer
          description: The number of topics created by the user.
        channelMessagesCreatedCount:
          type: integer
          description: The number of channel messages written by the user.
        reactionsCount:
          type: integer
          description: The number of reactions submitted by the user.
        topicVotesCount:
          type: integer
          description: The number of topic votes submitted by the user.
        livesParticipatedCount:
          type: integer
          description: The number of live participated by the user.
        livesWatchedCount:
          type: integer
          description: The number of live watched by the user.
        replaysWatchedCount:
          type: integer
          description: The number of replays watched by the user.
        totalViewingDuration:
          type: integer
          description: The total viewing duration of the user in seconds.
      required:
        - createdBy
        - topicsCreatedCount
        - channelMessagesCreatedCount
        - reactionsCount
        - topicVotesCount
        - livesParticipatedCount
        - livesWatchedCount
        - replaysWatchedCount
        - totalViewingDuration
    LHSSpotMemberCustomRoleIdFilters:
      type: object
      properties:
        customRoleId[eq]:
          type: string
          description: The custom role ID of Spot member
    LHSSpotMemberStatusFilters:
      type: object
      properties:
        status[in]:
          type: array
          description: The status of spot member to include in the result
          items:
            type: string
            enum:
              - Accepted
              - Deactivated
              - DeclinedInvitation
              - Invited
              - Left
              - Pending
              - Rejected
    LHSSpotMemberInvitationDateFilters:
      type: object
      properties:
        invitationDate[before]:
          type: integer
          description: Spot members where invitation date is before a specific date (Unix
            timestamp format)
        invitationDate[after]:
          type: integer
          description: Spot members where invitation date is after a specific date (Unix
            timestamp format)
    LHSSpotMemberUpdatedAtFilters:
      type: object
      properties:
        updatedAt[before]:
          type: integer
          description: Spot members where updated date is before a specific date (Unix
            timestamp format)
        updatedAt[after]:
          type: integer
          description: Spot members where updated date is after a specific date (Unix
            timestamp format)
    SpotMemberForAdminApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the spot member.
        firstname:
          type: string
          description: The firstname of the spot member.
        lastname:
          type: string
          description: The lastname of the spot member.
        email:
          type: string
          description: The email of the spot member.
        role:
          type: string
          enum:
            - Member
            - Admin
          description: The role of the spot member.
        avatarUrl:
          type: string
          nullable: true
          description: The public avatar url of the spot member.
      required:
        - id
        - firstname
        - lastname
        - email
        - role
        - avatarUrl
    SearchSpotMembersForAdminApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/SpotMemberForAdminApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    JoinSpotMemberFromSsoApiBody:
      type: object
      properties:
        token:
          type: string
          description: The SSO JWT token, re-validated server-side to source signed claims
      required:
        - token
    LHSSpotMemberCustomFormAnswerQuestionLabelFilters:
      type: object
      properties:
        questionLabel[contains]:
          type: string
          description: The question label of custom form answers to include in the result
    CustomFormAnswerApiResponse:
      type: object
      properties:
        questionId:
          type: string
          description: The id of the question
        questionLabel:
          type: string
          description: The label of the question
        visibility:
          type: string
          description: The visibility of the question
        order:
          type: number
          description: The order of the question
        isRequired:
          type: boolean
          description: The required status of the question
        type:
          type: string
          description: The type of the question
          enum:
            - Description
            - CheckBox
            - Text
            - LongText
            - Number
            - SingleSelect
            - MultipleSelect
        possibleAnswers:
          description: The possible answers of the question
          type: array
          items:
            type: string
        answers:
          description: The value of the answers
          type: array
          items:
            type: string
      required:
        - questionId
        - questionLabel
        - visibility
        - order
        - isRequired
        - type
        - possibleAnswers
        - answers
    ListCustomFormAnswerApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/CustomFormAnswerApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    InviteSpotMemberApiBody:
      type: object
      properties:
        email:
          type: string
          description: The email of the spot member
        withEmailNotification:
          type: boolean
          description: Set to true to send notification mail to each invited members
          default: false
      required:
        - email
    CreateSpotMemberApiBody:
      type: object
      properties:
        email:
          type: string
          description: The email of the spot member
        firstname:
          type: string
          description: The first name of the spot member
        lastname:
          type: string
          description: The last name of the spot member
        title:
          type: string
          description: The title of the spot member
        role:
          type: string
          description: The role of the spot member
          enum:
            - Member
            - Admin
        avatarUrl:
          type: string
        lang:
          type: string
          description: The preferred language of the spot member
          enum:
            - en
            - fr
            - de
            - it
            - es
            - pt
            - nl
        theme:
          type: string
          description: The preferred theme of the spot member
          enum:
            - light
            - dark
            - system
        timezone:
          type: string
          description: The preferred timezone of the spot member
          enum:
            - Africa/Abidjan
            - Africa/Accra
            - Africa/Addis_Ababa
            - Africa/Algiers
            - Africa/Asmara
            - Africa/Asmera
            - Africa/Bamako
            - Africa/Bangui
            - Africa/Banjul
            - Africa/Bissau
            - Africa/Blantyre
            - Africa/Brazzaville
            - Africa/Bujumbura
            - Africa/Cairo
            - Africa/Casablanca
            - Africa/Ceuta
            - Africa/Conakry
            - Africa/Dakar
            - Africa/Dar_es_Salaam
            - Africa/Djibouti
            - Africa/Douala
            - Africa/El_Aaiun
            - Africa/Freetown
            - Africa/Gaborone
            - Africa/Harare
            - Africa/Johannesburg
            - Africa/Juba
            - Africa/Kampala
            - Africa/Khartoum
            - Africa/Kigali
            - Africa/Kinshasa
            - Africa/Lagos
            - Africa/Libreville
            - Africa/Lome
            - Africa/Luanda
            - Africa/Lubumbashi
            - Africa/Lusaka
            - Africa/Malabo
            - Africa/Maputo
            - Africa/Maseru
            - Africa/Mbabane
            - Africa/Mogadishu
            - Africa/Monrovia
            - Africa/Nairobi
            - Africa/Ndjamena
            - Africa/Niamey
            - Africa/Nouakchott
            - Africa/Ouagadougou
            - Africa/Porto-Novo
            - Africa/Sao_Tome
            - Africa/Timbuktu
            - Africa/Tripoli
            - Africa/Tunis
            - Africa/Windhoek
            - America/Adak
            - America/Anchorage
            - America/Anguilla
            - America/Antigua
            - America/Araguaina
            - America/Argentina/Buenos_Aires
            - America/Argentina/Catamarca
            - America/Argentina/ComodRivadavia
            - America/Argentina/Cordoba
            - America/Argentina/Jujuy
            - America/Argentina/La_Rioja
            - America/Argentina/Mendoza
            - America/Argentina/Rio_Gallegos
            - America/Argentina/Salta
            - America/Argentina/San_Juan
            - America/Argentina/San_Luis
            - America/Argentina/Tucuman
            - America/Argentina/Ushuaia
            - America/Aruba
            - America/Asuncion
            - America/Atikokan
            - America/Atka
            - America/Bahia
            - America/Bahia_Banderas
            - America/Barbados
            - America/Belem
            - America/Belize
            - America/Blanc-Sablon
            - America/Boa_Vista
            - America/Bogota
            - America/Boise
            - America/Buenos_Aires
            - America/Cambridge_Bay
            - America/Campo_Grande
            - America/Cancun
            - America/Caracas
            - America/Catamarca
            - America/Cayenne
            - America/Cayman
            - America/Chicago
            - America/Chihuahua
            - America/Coral_Harbour
            - America/Cordoba
            - America/Costa_Rica
            - America/Creston
            - America/Cuiaba
            - America/Curacao
            - America/Danmarkshavn
            - America/Dawson
            - America/Dawson_Creek
            - America/Denver
            - America/Detroit
            - America/Dominica
            - America/Edmonton
            - America/Eirunepe
            - America/El_Salvador
            - America/Ensenada
            - America/Fort_Nelson
            - America/Fort_Wayne
            - America/Fortaleza
            - America/Glace_Bay
            - America/Godthab
            - America/Goose_Bay
            - America/Grand_Turk
            - America/Grenada
            - America/Guadeloupe
            - America/Guatemala
            - America/Guayaquil
            - America/Guyana
            - America/Halifax
            - America/Havana
            - America/Hermosillo
            - America/Indiana/Indianapolis
            - America/Indiana/Knox
            - America/Indiana/Marengo
            - America/Indiana/Petersburg
            - America/Indiana/Tell_City
            - America/Indiana/Vevay
            - America/Indiana/Vincennes
            - America/Indiana/Winamac
            - America/Indianapolis
            - America/Inuvik
            - America/Iqaluit
            - America/Jamaica
            - America/Jujuy
            - America/Juneau
            - America/Kentucky/Louisville
            - America/Kentucky/Monticello
            - America/Knox_IN
            - America/Kralendijk
            - America/La_Paz
            - America/Lima
            - America/Los_Angeles
            - America/Louisville
            - America/Lower_Princes
            - America/Maceio
            - America/Managua
            - America/Manaus
            - America/Marigot
            - America/Martinique
            - America/Matamoros
            - America/Mazatlan
            - America/Mendoza
            - America/Menominee
            - America/Merida
            - America/Metlakatla
            - America/Mexico_City
            - America/Miquelon
            - America/Moncton
            - America/Monterrey
            - America/Montevideo
            - America/Montreal
            - America/Montserrat
            - America/Nassau
            - America/New_York
            - America/Nipigon
            - America/Nome
            - America/Noronha
            - America/North_Dakota/Beulah
            - America/North_Dakota/Center
            - America/North_Dakota/New_Salem
            - America/Ojinaga
            - America/Panama
            - America/Pangnirtung
            - America/Paramaribo
            - America/Phoenix
            - America/Port-au-Prince
            - America/Port_of_Spain
            - America/Porto_Acre
            - America/Porto_Velho
            - America/Puerto_Rico
            - America/Punta_Arenas
            - America/Rainy_River
            - America/Rankin_Inlet
            - America/Recife
            - America/Regina
            - America/Resolute
            - America/Rio_Branco
            - America/Rosario
            - America/Santa_Isabel
            - America/Santarem
            - America/Santiago
            - America/Santo_Domingo
            - America/Sao_Paulo
            - America/Scoresbysund
            - America/Shiprock
            - America/Sitka
            - America/St_Barthelemy
            - America/St_Johns
            - America/St_Kitts
            - America/St_Lucia
            - America/St_Thomas
            - America/St_Vincent
            - America/Swift_Current
            - America/Tegucigalpa
            - America/Thule
            - America/Thunder_Bay
            - America/Tijuana
            - America/Toronto
            - America/Tortola
            - America/Vancouver
            - America/Virgin
            - America/Whitehorse
            - America/Winnipeg
            - America/Yakutat
            - America/Yellowknife
            - Antarctica/Casey
            - Antarctica/Davis
            - Antarctica/DumontDUrville
            - Antarctica/Macquarie
            - Antarctica/Mawson
            - Antarctica/McMurdo
            - Antarctica/Palmer
            - Antarctica/Rothera
            - Antarctica/South_Pole
            - Antarctica/Syowa
            - Antarctica/Troll
            - Antarctica/Vostok
            - Arctic/Longyearbyen
            - Asia/Aden
            - Asia/Almaty
            - Asia/Amman
            - Asia/Anadyr
            - Asia/Aqtau
            - Asia/Aqtobe
            - Asia/Ashgabat
            - Asia/Ashkhabad
            - Asia/Atyrau
            - Asia/Baghdad
            - Asia/Bahrain
            - Asia/Baku
            - Asia/Bangkok
            - Asia/Barnaul
            - Asia/Beirut
            - Asia/Bishkek
            - Asia/Brunei
            - Asia/Calcutta
            - Asia/Chita
            - Asia/Choibalsan
            - Asia/Chongqing
            - Asia/Chungking
            - Asia/Colombo
            - Asia/Dacca
            - Asia/Damascus
            - Asia/Dhaka
            - Asia/Dili
            - Asia/Dubai
            - Asia/Dushanbe
            - Asia/Famagusta
            - Asia/Gaza
            - Asia/Harbin
            - Asia/Hebron
            - Asia/Ho_Chi_Minh
            - Asia/Hong_Kong
            - Asia/Hovd
            - Asia/Irkutsk
            - Asia/Istanbul
            - Asia/Jakarta
            - Asia/Jayapura
            - Asia/Jerusalem
            - Asia/Kabul
            - Asia/Kamchatka
            - Asia/Karachi
            - Asia/Kashgar
            - Asia/Kathmandu
            - Asia/Katmandu
            - Asia/Khandyga
            - Asia/Kolkata
            - Asia/Krasnoyarsk
            - Asia/Kuala_Lumpur
            - Asia/Kuching
            - Asia/Kuwait
            - Asia/Macao
            - Asia/Macau
            - Asia/Magadan
            - Asia/Makassar
            - Asia/Manila
            - Asia/Muscat
            - Asia/Nicosia
            - Asia/Novokuznetsk
            - Asia/Novosibirsk
            - Asia/Omsk
            - Asia/Oral
            - Asia/Phnom_Penh
            - Asia/Pontianak
            - Asia/Pyongyang
            - Asia/Qatar
            - Asia/Qostanay
            - Asia/Qyzylorda
            - Asia/Rangoon
            - Asia/Riyadh
            - Asia/Saigon
            - Asia/Sakhalin
            - Asia/Samarkand
            - Asia/Seoul
            - Asia/Shanghai
            - Asia/Singapore
            - Asia/Srednekolymsk
            - Asia/Taipei
            - Asia/Tashkent
            - Asia/Tbilisi
            - Asia/Tehran
            - Asia/Tel_Aviv
            - Asia/Thimbu
            - Asia/Thimphu
            - Asia/Tokyo
            - Asia/Tomsk
            - Asia/Ujung_Pandang
            - Asia/Ulaanbaatar
            - Asia/Ulan_Bator
            - Asia/Urumqi
            - Asia/Ust-Nera
            - Asia/Vientiane
            - Asia/Vladivostok
            - Asia/Yakutsk
            - Asia/Yangon
            - Asia/Yekaterinburg
            - Asia/Yerevan
            - Atlantic/Azores
            - Atlantic/Bermuda
            - Atlantic/Canary
            - Atlantic/Cape_Verde
            - Atlantic/Faeroe
            - Atlantic/Faroe
            - Atlantic/Jan_Mayen
            - Atlantic/Madeira
            - Atlantic/Reykjavik
            - Atlantic/South_Georgia
            - Atlantic/St_Helena
            - Atlantic/Stanley
            - Australia/ACT
            - Australia/Adelaide
            - Australia/Brisbane
            - Australia/Broken_Hill
            - Australia/Canberra
            - Australia/Currie
            - Australia/Darwin
            - Australia/Eucla
            - Australia/Hobart
            - Australia/LHI
            - Australia/Lindeman
            - Australia/Lord_Howe
            - Australia/Melbourne
            - Australia/NSW
            - Australia/North
            - Australia/Perth
            - Australia/Queensland
            - Australia/South
            - Australia/Sydney
            - Australia/Tasmania
            - Australia/Victoria
            - Australia/West
            - Australia/Yancowinna
            - Brazil/Acre
            - Brazil/DeNoronha
            - Brazil/East
            - Brazil/West
            - CST6CDT
            - Canada/Atlantic
            - Canada/Central
            - Canada/Eastern
            - Canada/Mountain
            - Canada/Newfoundland
            - Canada/Pacific
            - Canada/Saskatchewan
            - Canada/Yukon
            - Chile/Continental
            - Chile/EasterIsland
            - Etc/GMT
            - Etc/GMT+0
            - Etc/GMT+1
            - Etc/GMT+10
            - Etc/GMT+11
            - Etc/GMT+12
            - Etc/GMT+2
            - Etc/GMT+3
            - Etc/GMT+4
            - Etc/GMT+5
            - Etc/GMT+6
            - Etc/GMT+7
            - Etc/GMT+8
            - Etc/GMT+9
            - Etc/GMT-0
            - Etc/GMT-1
            - Etc/GMT-10
            - Etc/GMT-11
            - Etc/GMT-12
            - Etc/GMT-13
            - Etc/GMT-14
            - Etc/GMT-2
            - Etc/GMT-3
            - Etc/GMT-4
            - Etc/GMT-5
            - Etc/GMT-6
            - Etc/GMT-7
            - Etc/GMT-8
            - Etc/GMT-9
            - Etc/GMT0
            - Etc/Greenwich
            - Etc/UCT
            - Etc/UTC
            - Etc/Universal
            - Etc/Zulu
            - Europe/Amsterdam
            - Europe/Andorra
            - Europe/Astrakhan
            - Europe/Athens
            - Europe/Belfast
            - Europe/Belgrade
            - Europe/Berlin
            - Europe/Bratislava
            - Europe/Brussels
            - Europe/Bucharest
            - Europe/Budapest
            - Europe/Busingen
            - Europe/Chisinau
            - Europe/Copenhagen
            - Europe/Dublin
            - Europe/Gibraltar
            - Europe/Guernsey
            - Europe/Helsinki
            - Europe/Isle_of_Man
            - Europe/Istanbul
            - Europe/Jersey
            - Europe/Kaliningrad
            - Europe/Kiev
            - Europe/Kirov
            - Europe/Lisbon
            - Europe/Ljubljana
            - Europe/London
            - Europe/Luxembourg
            - Europe/Madrid
            - Europe/Malta
            - Europe/Mariehamn
            - Europe/Minsk
            - Europe/Monaco
            - Europe/Moscow
            - Europe/Nicosia
            - Europe/Oslo
            - Europe/Paris
            - Europe/Podgorica
            - Europe/Prague
            - Europe/Riga
            - Europe/Rome
            - Europe/Samara
            - Europe/San_Marino
            - Europe/Sarajevo
            - Europe/Saratov
            - Europe/Simferopol
            - Europe/Skopje
            - Europe/Sofia
            - Europe/Stockholm
            - Europe/Tallinn
            - Europe/Tirane
            - Europe/Tiraspol
            - Europe/Ulyanovsk
            - Europe/Uzhgorod
            - Europe/Vaduz
            - Europe/Vatican
            - Europe/Vienna
            - Europe/Vilnius
            - Europe/Volgograd
            - Europe/Warsaw
            - Europe/Zagreb
            - Europe/Zaporozhye
            - Europe/Zurich
            - GB-Eire
            - GMT+0
            - GMT-0
            - Indian/Antananarivo
            - Indian/Chagos
            - Indian/Christmas
            - Indian/Cocos
            - Indian/Comoro
            - Indian/Kerguelen
            - Indian/Mahe
            - Indian/Maldives
            - Indian/Mauritius
            - Indian/Mayotte
            - Indian/Reunion
            - MST7MDT
            - Mexico/BajaNorte
            - Mexico/BajaSur
            - Mexico/General
            - NZ-CHAT
            - PST8PDT
            - Pacific/Apia
            - Pacific/Auckland
            - Pacific/Bougainville
            - Pacific/Chatham
            - Pacific/Chuuk
            - Pacific/Easter
            - Pacific/Efate
            - Pacific/Enderbury
            - Pacific/Fakaofo
            - Pacific/Fiji
            - Pacific/Funafuti
            - Pacific/Galapagos
            - Pacific/Gambier
            - Pacific/Guadalcanal
            - Pacific/Guam
            - Pacific/Honolulu
            - Pacific/Johnston
            - Pacific/Kiritimati
            - Pacific/Kosrae
            - Pacific/Kwajalein
            - Pacific/Majuro
            - Pacific/Marquesas
            - Pacific/Midway
            - Pacific/Nauru
            - Pacific/Niue
            - Pacific/Norfolk
            - Pacific/Noumea
            - Pacific/Pago_Pago
            - Pacific/Palau
            - Pacific/Pitcairn
            - Pacific/Pohnpei
            - Pacific/Ponape
            - Pacific/Port_Moresby
            - Pacific/Rarotonga
            - Pacific/Saipan
            - Pacific/Samoa
            - Pacific/Tahiti
            - Pacific/Tarawa
            - Pacific/Tongatapu
            - Pacific/Truk
            - Pacific/Wake
            - Pacific/Wallis
            - Pacific/Yap
            - US/Alaska
            - US/Aleutian
            - US/Arizona
            - US/Central
            - US/East-Indiana
            - US/Eastern
            - US/Hawaii
            - US/Indiana-Starke
            - US/Michigan
            - US/Mountain
            - US/Pacific
            - US/Pacific-New
            - US/Samoa
            - W-SU
            - CET
            - Cuba
            - EET
            - EST
            - EST5EDT
            - Egypt
            - Eire
            - Factory
            - GB
            - GMT
            - GMT0
            - Greenwich
            - HST
            - Hongkong
            - Iceland
            - Iran
            - Israel
            - Jamaica
            - Japan
            - Kwajalein
            - Libya
            - MET
            - MST
            - NZ
            - Navajo
            - PRC
            - Poland
            - Portugal
            - ROC
            - ROK
            - Singapore
            - Turkey
            - UCT
            - UTC
            - Universal
            - WET
            - Zulu
      required:
        - email
        - firstname
        - lastname
        - title
        - role
    UpdateSpotMemberApiBody:
      type: object
      properties:
        firstname:
          type: string
          description: The first name of the spot member
        lastname:
          type: string
          description: The last name of the spot member
        title:
          type: string
          description: The title of the spot member
        role:
          type: string
          description: The role of the spot member
          enum:
            - Member
            - Admin
        status:
          type: string
          description: The status of the spot member
          enum:
            - Accepted
            - Deactivated
            - Rejected
        avatarUrl:
          type: string
          description: The URL of the spot member avatar
          nullable: true
        embedBaseUrls:
          type: object
          description: The custom embed base URLs of the spot member.
          properties:
            default:
              type: string
          additionalProperties:
            type: string
        customRoleId:
          type: string
          description: The custom role ID of spot member
          nullable: true
    SsoTokenApiResponse:
      type: object
      properties:
        token:
          type: string
          description: The token.
      required:
        - token
    GeneratePreviewAccessKeyApiBody:
      type: object
      properties:
        targetSpotMemberId:
          type: string
          description: The spot member to impersonate in preview mode.
      required:
        - targetSpotMemberId
    PreviewAccessKeyApiResponse:
      type: object
      properties:
        token:
          type: string
          description: The short-lived preview access-key.
        expiresAt:
          type: number
          description: Access-key expiry as a UNIX timestamp (seconds).
      required:
        - token
        - expiresAt
    InviteSpotMembersApiBody:
      type: object
      properties:
        emails:
          description: The emails of members to invite
          minItems: 1
          maxItems: 200
          type: array
          items:
            type: string
        withEmailNotification:
          type: boolean
          description: Set to true to send notification mail to each invited members
          default: false
    SpotMembersApiResponse:
      type: object
      properties:
        created:
          description: The spot members that were created.
          type: array
          items:
            $ref: "#/components/schemas/SpotMemberApiResponse"
        failed:
          description: The spot members that failed to be created.
          type: array
          items:
            $ref: "#/components/schemas/CreateSpotMemberApiBody"
      required:
        - created
        - failed
    UpdateSpotMemberCustomRoleApiBody:
      type: object
      properties:
        label:
          type: string
          description: The label of the custom role.
        description:
          type: string
          description: The description of the custom role.
        permissions:
          type: array
          description: The permissions of the custom role.
          items:
            type: string
            enum:
              - live.*
              - live.full.*
              - live.limited.*
              - moderation.*
              - spot.member.invite.*
              - course.limited.*
              - course.full.*
              - collection.full.*
              - collection.limited.*
    SpotMemberCustomRoleApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the custom role.
        label:
          type: string
          description: The label of the custom role.
        description:
          type: string
          description: The description of the custom role.
        permissions:
          type: array
          description: The permissions of the custom role.
          items:
            type: string
            enum:
              - live.*
              - live.full.*
              - live.limited.*
              - moderation.*
              - spot.member.invite.*
              - course.limited.*
              - course.full.*
              - collection.full.*
              - collection.limited.*
      required:
        - id
        - label
        - description
        - permissions
    CreateSpotMemberCustomRoleApiBody:
      type: object
      properties:
        label:
          type: string
          description: The label of the custom role.
        description:
          type: string
          description: The description of the custom role.
        permissions:
          type: array
          description: The permissions of the custom role.
          items:
            type: string
            enum:
              - live.*
              - live.full.*
              - live.limited.*
              - moderation.*
              - spot.member.invite.*
              - course.limited.*
              - course.full.*
              - collection.full.*
              - collection.limited.*
      required:
        - label
    LHSSpotMemberCustomRoleLabelFilters:
      type: object
      properties:
        label[eq]:
          type: string
          description: Search custom role with a specified label
        label[contains]:
          type: string
          description: Search custom role that contains this value in his label
        label[in]:
          description: Search custom role which have the following label
          type: array
          items:
            type: string
    ListSpotMemberCustomRolesApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/SpotMemberCustomRoleApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    LHSTagNameFilters:
      type: object
      properties:
        name[eq]:
          type: string
          description: Get a tag by a specific name
        name[contains]:
          type: string
          description: Get a tag that contains this name
    TagApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the tag.
        name:
          type: string
          description: The name of the tag.
        emoji:
          type: string
          description: The emoji of the tag
        order:
          type: integer
          description: The order of the tag.
      required:
        - id
        - name
        - order
    ListTagsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/TagApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    CreateTagApiBody:
      type: object
      properties:
        name:
          type: string
          description: Name of the tag
        emoji:
          type: string
          description: Emoji of the tag
      required:
        - name
    UpdateTagApiBody:
      type: object
      properties:
        name:
          type: string
          description: The name of the tag
        emoji:
          type: string
          description: The emoji of the tag
          nullable: true
    AssignSpotMembersApiBody:
      type: object
      properties:
        spotMemberIds:
          description: The ids of the spotMembers to assign to the tag
          type: array
          items:
            type: string
      required:
        - spotMemberIds
    UnassignSpotMembersApiBody:
      type: object
      properties:
        spotMemberIds:
          description: The ids of the spotMembers to unassign to the tag
          type: array
          items:
            type: string
      required:
        - spotMemberIds
    TagsApiResponse:
      type: object
      properties:
        created:
          description: The tags that were created.
          type: array
          items:
            $ref: "#/components/schemas/TagApiResponse"
        failed:
          description: The tags that failed to be created.
          type: array
          items:
            $ref: "#/components/schemas/CreateTagApiBody"
      required:
        - created
        - failed
    TopicApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the topic.
        name:
          type: string
          description: The name of the topic.
        closedAt:
          type: integer
          description: Date at which the topic has been closed (Unix timestamp format), or
            null if the topic is active
          nullable: true
      required:
        - id
        - name
        - closedAt
    CreateTopicApiBody:
      type: object
      properties:
        name:
          type: string
          description: Name of the topic
        content:
          type: string
          description: Content of the topic (in Markdown)
      required:
        - name
    UpdateTopicApiBody:
      type: object
      properties:
        name:
          type: string
          description: Name of the topic
        content:
          type: string
          description: Content of the topic
    LHSTopicNameFilters:
      type: object
      properties:
        name[eq]:
          type: string
          description: Search Topic with a specified name
        name[contains]:
          type: string
          description: Search Topic that contains this value in his name
    ListTopicsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/TopicApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    CreateTokensWithEmailApiBody:
      type: object
      properties:
        email:
          type: string
          description: The user's email address.
        password:
          type: string
          description: The user's password.
      required:
        - email
        - password
    AuthTokenApiResponse:
      type: object
      properties:
        token:
          type: string
          description: The token.
        expiresAt:
          type: integer
          description: Timestamp in s of expiration date
      required:
        - token
        - expiresAt
    AuthTokensApiResponse:
      type: object
      properties:
        accessToken:
          description: The access token.
          allOf:
            - $ref: "#/components/schemas/AuthTokenApiResponse"
        refreshToken:
          description: The refresh token.
          allOf:
            - $ref: "#/components/schemas/AuthTokenApiResponse"
      required:
        - accessToken
        - refreshToken
    CreateAuthTokensWithJwtSsoApiBody:
      type: object
      properties:
        token:
          type: string
          description: The Jwt Sso token
        lang:
          type: string
          description: The default language.
          enum:
            - en
            - fr
            - de
            - it
            - es
            - pt
            - nl
        timezone:
          type: string
          description: The default timezone.
          enum:
            - Africa/Abidjan
            - Africa/Accra
            - Africa/Addis_Ababa
            - Africa/Algiers
            - Africa/Asmara
            - Africa/Asmera
            - Africa/Bamako
            - Africa/Bangui
            - Africa/Banjul
            - Africa/Bissau
            - Africa/Blantyre
            - Africa/Brazzaville
            - Africa/Bujumbura
            - Africa/Cairo
            - Africa/Casablanca
            - Africa/Ceuta
            - Africa/Conakry
            - Africa/Dakar
            - Africa/Dar_es_Salaam
            - Africa/Djibouti
            - Africa/Douala
            - Africa/El_Aaiun
            - Africa/Freetown
            - Africa/Gaborone
            - Africa/Harare
            - Africa/Johannesburg
            - Africa/Juba
            - Africa/Kampala
            - Africa/Khartoum
            - Africa/Kigali
            - Africa/Kinshasa
            - Africa/Lagos
            - Africa/Libreville
            - Africa/Lome
            - Africa/Luanda
            - Africa/Lubumbashi
            - Africa/Lusaka
            - Africa/Malabo
            - Africa/Maputo
            - Africa/Maseru
            - Africa/Mbabane
            - Africa/Mogadishu
            - Africa/Monrovia
            - Africa/Nairobi
            - Africa/Ndjamena
            - Africa/Niamey
            - Africa/Nouakchott
            - Africa/Ouagadougou
            - Africa/Porto-Novo
            - Africa/Sao_Tome
            - Africa/Timbuktu
            - Africa/Tripoli
            - Africa/Tunis
            - Africa/Windhoek
            - America/Adak
            - America/Anchorage
            - America/Anguilla
            - America/Antigua
            - America/Araguaina
            - America/Argentina/Buenos_Aires
            - America/Argentina/Catamarca
            - America/Argentina/ComodRivadavia
            - America/Argentina/Cordoba
            - America/Argentina/Jujuy
            - America/Argentina/La_Rioja
            - America/Argentina/Mendoza
            - America/Argentina/Rio_Gallegos
            - America/Argentina/Salta
            - America/Argentina/San_Juan
            - America/Argentina/San_Luis
            - America/Argentina/Tucuman
            - America/Argentina/Ushuaia
            - America/Aruba
            - America/Asuncion
            - America/Atikokan
            - America/Atka
            - America/Bahia
            - America/Bahia_Banderas
            - America/Barbados
            - America/Belem
            - America/Belize
            - America/Blanc-Sablon
            - America/Boa_Vista
            - America/Bogota
            - America/Boise
            - America/Buenos_Aires
            - America/Cambridge_Bay
            - America/Campo_Grande
            - America/Cancun
            - America/Caracas
            - America/Catamarca
            - America/Cayenne
            - America/Cayman
            - America/Chicago
            - America/Chihuahua
            - America/Coral_Harbour
            - America/Cordoba
            - America/Costa_Rica
            - America/Creston
            - America/Cuiaba
            - America/Curacao
            - America/Danmarkshavn
            - America/Dawson
            - America/Dawson_Creek
            - America/Denver
            - America/Detroit
            - America/Dominica
            - America/Edmonton
            - America/Eirunepe
            - America/El_Salvador
            - America/Ensenada
            - America/Fort_Nelson
            - America/Fort_Wayne
            - America/Fortaleza
            - America/Glace_Bay
            - America/Godthab
            - America/Goose_Bay
            - America/Grand_Turk
            - America/Grenada
            - America/Guadeloupe
            - America/Guatemala
            - America/Guayaquil
            - America/Guyana
            - America/Halifax
            - America/Havana
            - America/Hermosillo
            - America/Indiana/Indianapolis
            - America/Indiana/Knox
            - America/Indiana/Marengo
            - America/Indiana/Petersburg
            - America/Indiana/Tell_City
            - America/Indiana/Vevay
            - America/Indiana/Vincennes
            - America/Indiana/Winamac
            - America/Indianapolis
            - America/Inuvik
            - America/Iqaluit
            - America/Jamaica
            - America/Jujuy
            - America/Juneau
            - America/Kentucky/Louisville
            - America/Kentucky/Monticello
            - America/Knox_IN
            - America/Kralendijk
            - America/La_Paz
            - America/Lima
            - America/Los_Angeles
            - America/Louisville
            - America/Lower_Princes
            - America/Maceio
            - America/Managua
            - America/Manaus
            - America/Marigot
            - America/Martinique
            - America/Matamoros
            - America/Mazatlan
            - America/Mendoza
            - America/Menominee
            - America/Merida
            - America/Metlakatla
            - America/Mexico_City
            - America/Miquelon
            - America/Moncton
            - America/Monterrey
            - America/Montevideo
            - America/Montreal
            - America/Montserrat
            - America/Nassau
            - America/New_York
            - America/Nipigon
            - America/Nome
            - America/Noronha
            - America/North_Dakota/Beulah
            - America/North_Dakota/Center
            - America/North_Dakota/New_Salem
            - America/Ojinaga
            - America/Panama
            - America/Pangnirtung
            - America/Paramaribo
            - America/Phoenix
            - America/Port-au-Prince
            - America/Port_of_Spain
            - America/Porto_Acre
            - America/Porto_Velho
            - America/Puerto_Rico
            - America/Punta_Arenas
            - America/Rainy_River
            - America/Rankin_Inlet
            - America/Recife
            - America/Regina
            - America/Resolute
            - America/Rio_Branco
            - America/Rosario
            - America/Santa_Isabel
            - America/Santarem
            - America/Santiago
            - America/Santo_Domingo
            - America/Sao_Paulo
            - America/Scoresbysund
            - America/Shiprock
            - America/Sitka
            - America/St_Barthelemy
            - America/St_Johns
            - America/St_Kitts
            - America/St_Lucia
            - America/St_Thomas
            - America/St_Vincent
            - America/Swift_Current
            - America/Tegucigalpa
            - America/Thule
            - America/Thunder_Bay
            - America/Tijuana
            - America/Toronto
            - America/Tortola
            - America/Vancouver
            - America/Virgin
            - America/Whitehorse
            - America/Winnipeg
            - America/Yakutat
            - America/Yellowknife
            - Antarctica/Casey
            - Antarctica/Davis
            - Antarctica/DumontDUrville
            - Antarctica/Macquarie
            - Antarctica/Mawson
            - Antarctica/McMurdo
            - Antarctica/Palmer
            - Antarctica/Rothera
            - Antarctica/South_Pole
            - Antarctica/Syowa
            - Antarctica/Troll
            - Antarctica/Vostok
            - Arctic/Longyearbyen
            - Asia/Aden
            - Asia/Almaty
            - Asia/Amman
            - Asia/Anadyr
            - Asia/Aqtau
            - Asia/Aqtobe
            - Asia/Ashgabat
            - Asia/Ashkhabad
            - Asia/Atyrau
            - Asia/Baghdad
            - Asia/Bahrain
            - Asia/Baku
            - Asia/Bangkok
            - Asia/Barnaul
            - Asia/Beirut
            - Asia/Bishkek
            - Asia/Brunei
            - Asia/Calcutta
            - Asia/Chita
            - Asia/Choibalsan
            - Asia/Chongqing
            - Asia/Chungking
            - Asia/Colombo
            - Asia/Dacca
            - Asia/Damascus
            - Asia/Dhaka
            - Asia/Dili
            - Asia/Dubai
            - Asia/Dushanbe
            - Asia/Famagusta
            - Asia/Gaza
            - Asia/Harbin
            - Asia/Hebron
            - Asia/Ho_Chi_Minh
            - Asia/Hong_Kong
            - Asia/Hovd
            - Asia/Irkutsk
            - Asia/Istanbul
            - Asia/Jakarta
            - Asia/Jayapura
            - Asia/Jerusalem
            - Asia/Kabul
            - Asia/Kamchatka
            - Asia/Karachi
            - Asia/Kashgar
            - Asia/Kathmandu
            - Asia/Katmandu
            - Asia/Khandyga
            - Asia/Kolkata
            - Asia/Krasnoyarsk
            - Asia/Kuala_Lumpur
            - Asia/Kuching
            - Asia/Kuwait
            - Asia/Macao
            - Asia/Macau
            - Asia/Magadan
            - Asia/Makassar
            - Asia/Manila
            - Asia/Muscat
            - Asia/Nicosia
            - Asia/Novokuznetsk
            - Asia/Novosibirsk
            - Asia/Omsk
            - Asia/Oral
            - Asia/Phnom_Penh
            - Asia/Pontianak
            - Asia/Pyongyang
            - Asia/Qatar
            - Asia/Qostanay
            - Asia/Qyzylorda
            - Asia/Rangoon
            - Asia/Riyadh
            - Asia/Saigon
            - Asia/Sakhalin
            - Asia/Samarkand
            - Asia/Seoul
            - Asia/Shanghai
            - Asia/Singapore
            - Asia/Srednekolymsk
            - Asia/Taipei
            - Asia/Tashkent
            - Asia/Tbilisi
            - Asia/Tehran
            - Asia/Tel_Aviv
            - Asia/Thimbu
            - Asia/Thimphu
            - Asia/Tokyo
            - Asia/Tomsk
            - Asia/Ujung_Pandang
            - Asia/Ulaanbaatar
            - Asia/Ulan_Bator
            - Asia/Urumqi
            - Asia/Ust-Nera
            - Asia/Vientiane
            - Asia/Vladivostok
            - Asia/Yakutsk
            - Asia/Yangon
            - Asia/Yekaterinburg
            - Asia/Yerevan
            - Atlantic/Azores
            - Atlantic/Bermuda
            - Atlantic/Canary
            - Atlantic/Cape_Verde
            - Atlantic/Faeroe
            - Atlantic/Faroe
            - Atlantic/Jan_Mayen
            - Atlantic/Madeira
            - Atlantic/Reykjavik
            - Atlantic/South_Georgia
            - Atlantic/St_Helena
            - Atlantic/Stanley
            - Australia/ACT
            - Australia/Adelaide
            - Australia/Brisbane
            - Australia/Broken_Hill
            - Australia/Canberra
            - Australia/Currie
            - Australia/Darwin
            - Australia/Eucla
            - Australia/Hobart
            - Australia/LHI
            - Australia/Lindeman
            - Australia/Lord_Howe
            - Australia/Melbourne
            - Australia/NSW
            - Australia/North
            - Australia/Perth
            - Australia/Queensland
            - Australia/South
            - Australia/Sydney
            - Australia/Tasmania
            - Australia/Victoria
            - Australia/West
            - Australia/Yancowinna
            - Brazil/Acre
            - Brazil/DeNoronha
            - Brazil/East
            - Brazil/West
            - CST6CDT
            - Canada/Atlantic
            - Canada/Central
            - Canada/Eastern
            - Canada/Mountain
            - Canada/Newfoundland
            - Canada/Pacific
            - Canada/Saskatchewan
            - Canada/Yukon
            - Chile/Continental
            - Chile/EasterIsland
            - Etc/GMT
            - Etc/GMT+0
            - Etc/GMT+1
            - Etc/GMT+10
            - Etc/GMT+11
            - Etc/GMT+12
            - Etc/GMT+2
            - Etc/GMT+3
            - Etc/GMT+4
            - Etc/GMT+5
            - Etc/GMT+6
            - Etc/GMT+7
            - Etc/GMT+8
            - Etc/GMT+9
            - Etc/GMT-0
            - Etc/GMT-1
            - Etc/GMT-10
            - Etc/GMT-11
            - Etc/GMT-12
            - Etc/GMT-13
            - Etc/GMT-14
            - Etc/GMT-2
            - Etc/GMT-3
            - Etc/GMT-4
            - Etc/GMT-5
            - Etc/GMT-6
            - Etc/GMT-7
            - Etc/GMT-8
            - Etc/GMT-9
            - Etc/GMT0
            - Etc/Greenwich
            - Etc/UCT
            - Etc/UTC
            - Etc/Universal
            - Etc/Zulu
            - Europe/Amsterdam
            - Europe/Andorra
            - Europe/Astrakhan
            - Europe/Athens
            - Europe/Belfast
            - Europe/Belgrade
            - Europe/Berlin
            - Europe/Bratislava
            - Europe/Brussels
            - Europe/Bucharest
            - Europe/Budapest
            - Europe/Busingen
            - Europe/Chisinau
            - Europe/Copenhagen
            - Europe/Dublin
            - Europe/Gibraltar
            - Europe/Guernsey
            - Europe/Helsinki
            - Europe/Isle_of_Man
            - Europe/Istanbul
            - Europe/Jersey
            - Europe/Kaliningrad
            - Europe/Kiev
            - Europe/Kirov
            - Europe/Lisbon
            - Europe/Ljubljana
            - Europe/London
            - Europe/Luxembourg
            - Europe/Madrid
            - Europe/Malta
            - Europe/Mariehamn
            - Europe/Minsk
            - Europe/Monaco
            - Europe/Moscow
            - Europe/Nicosia
            - Europe/Oslo
            - Europe/Paris
            - Europe/Podgorica
            - Europe/Prague
            - Europe/Riga
            - Europe/Rome
            - Europe/Samara
            - Europe/San_Marino
            - Europe/Sarajevo
            - Europe/Saratov
            - Europe/Simferopol
            - Europe/Skopje
            - Europe/Sofia
            - Europe/Stockholm
            - Europe/Tallinn
            - Europe/Tirane
            - Europe/Tiraspol
            - Europe/Ulyanovsk
            - Europe/Uzhgorod
            - Europe/Vaduz
            - Europe/Vatican
            - Europe/Vienna
            - Europe/Vilnius
            - Europe/Volgograd
            - Europe/Warsaw
            - Europe/Zagreb
            - Europe/Zaporozhye
            - Europe/Zurich
            - GB-Eire
            - GMT+0
            - GMT-0
            - Indian/Antananarivo
            - Indian/Chagos
            - Indian/Christmas
            - Indian/Cocos
            - Indian/Comoro
            - Indian/Kerguelen
            - Indian/Mahe
            - Indian/Maldives
            - Indian/Mauritius
            - Indian/Mayotte
            - Indian/Reunion
            - MST7MDT
            - Mexico/BajaNorte
            - Mexico/BajaSur
            - Mexico/General
            - NZ-CHAT
            - PST8PDT
            - Pacific/Apia
            - Pacific/Auckland
            - Pacific/Bougainville
            - Pacific/Chatham
            - Pacific/Chuuk
            - Pacific/Easter
            - Pacific/Efate
            - Pacific/Enderbury
            - Pacific/Fakaofo
            - Pacific/Fiji
            - Pacific/Funafuti
            - Pacific/Galapagos
            - Pacific/Gambier
            - Pacific/Guadalcanal
            - Pacific/Guam
            - Pacific/Honolulu
            - Pacific/Johnston
            - Pacific/Kiritimati
            - Pacific/Kosrae
            - Pacific/Kwajalein
            - Pacific/Majuro
            - Pacific/Marquesas
            - Pacific/Midway
            - Pacific/Nauru
            - Pacific/Niue
            - Pacific/Norfolk
            - Pacific/Noumea
            - Pacific/Pago_Pago
            - Pacific/Palau
            - Pacific/Pitcairn
            - Pacific/Pohnpei
            - Pacific/Ponape
            - Pacific/Port_Moresby
            - Pacific/Rarotonga
            - Pacific/Saipan
            - Pacific/Samoa
            - Pacific/Tahiti
            - Pacific/Tarawa
            - Pacific/Tongatapu
            - Pacific/Truk
            - Pacific/Wake
            - Pacific/Wallis
            - Pacific/Yap
            - US/Alaska
            - US/Aleutian
            - US/Arizona
            - US/Central
            - US/East-Indiana
            - US/Eastern
            - US/Hawaii
            - US/Indiana-Starke
            - US/Michigan
            - US/Mountain
            - US/Pacific
            - US/Pacific-New
            - US/Samoa
            - W-SU
            - CET
            - Cuba
            - EET
            - EST
            - EST5EDT
            - Egypt
            - Eire
            - Factory
            - GB
            - GMT
            - GMT0
            - Greenwich
            - HST
            - Hongkong
            - Iceland
            - Iran
            - Israel
            - Jamaica
            - Japan
            - Kwajalein
            - Libya
            - MET
            - MST
            - NZ
            - Navajo
            - PRC
            - Poland
            - Portugal
            - ROC
            - ROK
            - Singapore
            - Turkey
            - UCT
            - UTC
            - Universal
            - WET
            - Zulu
      required:
        - token
    RefreshAccessTokenApiBody:
      type: object
      properties:
        refreshToken:
          type: string
          description: The refresh token.
      required:
        - refreshToken
    RequestPasswordResetApiBody:
      type: object
      properties:
        email:
          type: string
          description: The user's email address.
      required:
        - email
    UpdateUserApiBody:
      type: object
      properties:
        email:
          type: string
          description: The user's email address.
        lang:
          type: string
          description: The preferred language of the user
          enum:
            - en
            - fr
            - de
            - it
            - es
            - pt
            - nl
        theme:
          type: string
          description: The preferred theme of the user
          enum:
            - light
            - dark
            - system
        timezone:
          type: string
          description: The preferred timezone of the user
    UtmParametersApiResponse:
      type: object
      properties:
        medium:
          type: string
          nullable: true
        source:
          type: string
          nullable: true
        campaign:
          type: string
          nullable: true
        content:
          type: string
          nullable: true
        term:
          type: string
          nullable: true
        referer:
          type: string
          nullable: true
      required:
        - medium
        - source
        - campaign
        - content
        - term
        - referer
    UserApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The user id
        email:
          type: string
          description: The user email
        lang:
          type: string
          enum:
            - en
            - fr
            - de
            - it
            - es
            - pt
            - nl
          description: The user language
        theme:
          type: string
          enum:
            - light
            - dark
            - system
          description: The user theme
        timezone:
          type: string
          description: The user timezone
        marketingOptinAcceptedAt:
          format: date-time
          type: string
          nullable: true
          description: The date the user accepted the marketing optin
        utmParameters:
          nullable: true
          description: The user UTM parameters
          type: object
          allOf:
            - $ref: "#/components/schemas/UtmParametersApiResponse"
      required:
        - id
        - email
        - lang
        - theme
        - timezone
        - marketingOptinAcceptedAt
        - utmParameters
    LHSSearchTypesFilters:
      type: object
      properties:
        searchableTypes[in]:
          type: array
          description: The types of entities to include in the search
          items:
            type: string
            enum:
              - Channel
              - Collection
              - CollectionLink
              - CollectionPage
              - Course
              - CourseStep
              - Forum
              - LearningPath
              - Live
              - SpotMember
              - Topic
              - TopicAnswer
    SearchApiResponse:
      type: object
      properties:
        items:
          type: array
          items:
            anyOf:
              - $ref: "#/components/schemas/SearchableTopicApiResponse"
              - $ref: "#/components/schemas/SearchableForumApiResponse"
              - $ref: "#/components/schemas/SearchableTopicAnswerApiResponse"
              - $ref: "#/components/schemas/SearchableSpotMemberApiResponse"
              - $ref: "#/components/schemas/SearchableCollectionLinkApiResponse"
              - $ref: "#/components/schemas/SearchableCollectionPageApiResponse"
              - $ref: "#/components/schemas/SearchableCollectionApiResponse"
              - $ref: "#/components/schemas/SearchableLiveApiResponse"
              - $ref: "#/components/schemas/SearchableChannelApiResponse"
              - $ref: "#/components/schemas/SearchableCourseApiResponse"
              - $ref: "#/components/schemas/SearchableCourseStepApiResponse"
              - $ref: "#/components/schemas/SearchableLearningPathApiResponse"
          description: The items found
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    LHSNotificationTypesFilters:
      type: object
      properties:
        types[in]:
          type: array
          description: The types of notifications to include in the result
          items:
            type: string
            enum:
              - AskJoinPrivateSpot
              - ChannelMessageMention
              - ChannelMessageReported
              - CourseGeneratedFailed
              - CourseGeneratedSuccess
              - CourseGenerationPending
              - CourseParticipantInvited
              - DiscussionMessageReported
              - DocumentMention
              - HubspotConnectionLost
              - LearningPathParticipantInvited
              - LiveMention
              - LiveMessageMention
              - LiveMessageReported
              - LiveParticipantInvited
              - LiveStarted
              - MeltyFallbackTargetInvalidated
              - MemberAddedOnChannel
              - MemberAddedToForum
              - MemberAddedToCollection
              - MessageReplied
              - NewDirectMessage
              - NewMessage
              - ReportStatusUpdated
              - SmtpServerConnectionFailed
              - SpotMemberRoleUpdated
              - SpotMention
              - TopicAnswerReported
              - TopicCreated
              - TopicMention
              - TopicMessageCreated
              - TopicMessageMention
              - TopicReported
              - UserInvitedToSpot
              - UserJoinedPublicSpot
    UnreadNotificationsCountByTypeApiResponse:
      type: object
      properties:
        type:
          type: string
          description: Type of notification
          enum:
            - AskJoinPrivateSpot
            - ChannelMessageMention
            - ChannelMessageReported
            - CourseGeneratedFailed
            - CourseGeneratedSuccess
            - CourseGenerationPending
            - CourseParticipantInvited
            - DiscussionMessageReported
            - DocumentMention
            - HubspotConnectionLost
            - LearningPathParticipantInvited
            - LiveMention
            - LiveMessageMention
            - LiveMessageReported
            - LiveParticipantInvited
            - LiveStarted
            - MeltyFallbackTargetInvalidated
            - MemberAddedOnChannel
            - MemberAddedToForum
            - MemberAddedToCollection
            - MessageReplied
            - NewDirectMessage
            - NewMessage
            - ReportStatusUpdated
            - SmtpServerConnectionFailed
            - SpotMemberRoleUpdated
            - SpotMention
            - TopicAnswerReported
            - TopicCreated
            - TopicMention
            - TopicMessageCreated
            - TopicMessageMention
            - TopicReported
            - UserInvitedToSpot
            - UserJoinedPublicSpot
        count:
          type: number
          description: Number of unread notifications
      required:
        - type
        - count
    UnreadNotificationsCountApiResponse:
      type: object
      properties:
        count:
          type: number
          description: Sum of counters
        countByTypes:
          description: Unread notifications by types
          type: array
          items:
            $ref: "#/components/schemas/UnreadNotificationsCountByTypeApiResponse"
      required:
        - count
        - countByTypes
    LHSNotificationIdsFilters:
      type: object
      properties:
        id[in]:
          description: The notifications to include in the result
          type: array
          items:
            type: string
    MarkNotificationsAsReadApiBody:
      type: object
      properties:
        id:
          description: Filters on notifications to include
          allOf:
            - $ref: "#/components/schemas/LHSNotificationIdsFilters"
    NotificationLogApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the notification log.
        spotId:
          type: string
          description: The spot id of the notification log.
        type:
          type: string
          enum:
            - AskJoinPrivateSpot
            - ChannelMessageMention
            - ChannelMessageReported
            - CourseGeneratedFailed
            - CourseGeneratedSuccess
            - CourseGenerationPending
            - CourseParticipantInvited
            - DiscussionMessageReported
            - DocumentMention
            - HubspotConnectionLost
            - LearningPathParticipantInvited
            - LiveMention
            - LiveMessageMention
            - LiveMessageReported
            - LiveParticipantInvited
            - LiveStarted
            - MeltyFallbackTargetInvalidated
            - MemberAddedOnChannel
            - MemberAddedToForum
            - MemberAddedToCollection
            - MessageReplied
            - NewDirectMessage
            - NewMessage
            - ReportStatusUpdated
            - SmtpServerConnectionFailed
            - SpotMemberRoleUpdated
            - SpotMention
            - TopicAnswerReported
            - TopicCreated
            - TopicMention
            - TopicMessageCreated
            - TopicMessageMention
            - TopicReported
            - UserInvitedToSpot
            - UserJoinedPublicSpot
          description: The type of the notification log.
        body:
          type: object
          description: The body of the notification log.
      required:
        - id
        - spotId
        - type
        - body
    NotificationApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the notification.
        userId:
          type: string
          description: The user id of the notification.
        logId:
          type: string
          description: The log id of the notification.
        isRead:
          type: boolean
          description: To know if notification was read
        createdAt:
          format: date-time
          type: string
          description: The creation date of the notification.
        log:
          nullable: true
          type: object
          allOf:
            - $ref: "#/components/schemas/NotificationLogApiResponse"
      required:
        - id
        - userId
        - logId
        - isRead
        - createdAt
        - log
    LHSNotificationIsReadFilters:
      type: object
      properties:
        isRead[eq]:
          type: boolean
          description: List notifications read or unread
    ListNotificationsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/NotificationApiResponse"
        hasMore:
          type: boolean
          description: Indicate if more items are available
      required:
        - items
        - hasMore
    LHSReportStatusFilters:
      type: object
      properties:
        status[in]:
          type: array
          description: The status of the report
          items:
            type: string
            enum:
              - PendingReview
              - Declined
              - Accepted
    LHSReportReasonFilters:
      type: object
      properties:
        reason[in]:
          type: array
          description: The reason of the report
          items:
            type: string
            enum:
              - Misinformation
              - InappropriateContent
              - HateSpeechOrDiscrimination
              - HarassmentOrOffensive
              - Spam
              - Other
    LHSReportCreationDateFilters:
      type: object
      properties:
        creationDate[before]:
          type: integer
          description: Reports where creation date is before a specific date (Unix
            timestamp format)
        creationDate[after]:
          type: integer
          description: Reports where creation date is after a specific date (Unix
            timestamp format)
    ReporterApiResponse:
      type: object
      properties:
        firstName:
          type: string
          description: The firstName of the reporter.
        lastName:
          type: string
          description: The lastName of the reporter.
        spotMemberId:
          type: string
          description: The spotMemberId of the reporter.
      required:
        - firstName
        - lastName
        - spotMemberId
    ReportApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the report.
        content:
          oneOf:
            - $ref: "#/components/schemas/ThreadMessageReportedContentApiResponse"
            - $ref: "#/components/schemas/TopicReportedContentApiResponse"
          description: The content of the report
        status:
          type: string
          description: The status of the report.
          enum:
            - PendingReview
            - Declined
            - Accepted
        reason:
          type: string
          description: The reason of the report.
          enum:
            - Misinformation
            - InappropriateContent
            - HateSpeechOrDiscrimination
            - HarassmentOrOffensive
            - Spam
            - Other
        reporter:
          description: The reporter of the report.
          allOf:
            - $ref: "#/components/schemas/ReporterApiResponse"
        internalNote:
          type: string
          description: The internal note of the report.
          nullable: true
        createdAt:
          type: integer
          description: Timestamp in ms of creation date
      required:
        - id
        - content
        - status
        - reason
        - reporter
        - internalNote
        - createdAt
    AuthorApiResponse:
      type: object
      properties:
        firstName:
          type: string
          description: The firstName of the author.
        lastName:
          type: string
          description: The lastName of the author.
        profilePicture:
          type: string
          description: The profile picture of the author.
          nullable: true
        spotMemberId:
          type: string
          description: The spotMemberId of the author.
      required:
        - firstName
        - lastName
        - profilePicture
        - spotMemberId
    ReportedResourceApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the reported resource.
        ownerId:
          type: string
          description: The ownerId of the reported resource.
        ownerType:
          type: string
          description: The type of the owner of the reported resource.
          enum:
            - ThreadMessage
            - Topic
        status:
          type: string
          description: The status of the reported resource.
          enum:
            - PendingReview
            - Declined
            - Accepted
        author:
          description: The author of the reported resource.
          allOf:
            - $ref: "#/components/schemas/AuthorApiResponse"
        lastReportId:
          type: string
          description: The id of the last report.
          nullable: true
        createdAt:
          type: integer
          description: Timestamp in ms of creation date
      required:
        - id
        - ownerId
        - ownerType
        - status
        - author
        - lastReportId
        - createdAt
    ReportedResourceContextApiResponse:
      type: object
      properties:
        reportedResource:
          description: The reported resource
          allOf:
            - $ref: "#/components/schemas/ReportedResourceApiResponse"
        context:
          oneOf:
            - $ref: "#/components/schemas/ChannelMessageReportedResourceApiResponse"
            - $ref: "#/components/schemas/DiscussionMessageReportedResourceApiResponse"
            - $ref: "#/components/schemas/LiveMessageReportedResourceApiResponse"
            - $ref: "#/components/schemas/TopicAnswerReportedResourceApiResponse"
            - $ref: "#/components/schemas/TopicReportedResourceApiResponse"
          description: The context of the reported resource
      required:
        - reportedResource
        - context
    ValidateReportedResourcesApiBody:
      type: object
      properties:
        status:
          type: string
          description: The status that the reported resource will be set to
          enum:
            - Accepted
            - Declined
        reportedResourceIds:
          description: The ids of the reported resources to validate
          type: array
          items:
            type: string
      required:
        - status
        - reportedResourceIds
    ValidatedReportedResourcesApiResponse:
      type: object
      properties:
        updatedReportedResources:
          description: The updated reported resources.
          type: array
          items:
            $ref: "#/components/schemas/ReportedResourceApiResponse"
      required:
        - updatedReportedResources
    ValidateReportedResourceApiBody:
      type: object
      properties:
        status:
          type: string
          description: The status that the reported resource will be set to
          enum:
            - Accepted
            - Declined
      required:
        - status
    LHSReportedResourceStatusFilters:
      type: object
      properties:
        status[in]:
          type: array
          description: The status of the reported resource
          items:
            type: string
            enum:
              - PendingReview
              - Declined
              - Accepted
    LHSReportedResourceReasonFilters:
      type: object
      properties:
        reason[in]:
          type: array
          description: The reason of the report
          items:
            type: string
            enum:
              - Misinformation
              - InappropriateContent
              - HateSpeechOrDiscrimination
              - HarassmentOrOffensive
              - Spam
              - Other
    LHSReportedResourceCreationDateFilters:
      type: object
      properties:
        creationDate[before]:
          type: integer
          description: Reports where creation date is before a specific date (Unix
            timestamp format)
        creationDate[after]:
          type: integer
          description: Reports where creation date is after a specific date (Unix
            timestamp format)
    ListReportedResourcesApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/ReportedResourceApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    IntegrationSchemaApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The ID of the integration
        integration:
          type: string
          description: The name of the integration
        baseUrls:
          description: The base URLs for the integration
          type: array
          items:
            type: string
        themeMode:
          type: string
          description: The theme mode for the integration
          enum:
            - light
            - dark
            - system
        touchPoints:
          type: array
          description: The touch points for the integration
          items:
            type: object
            additionalProperties: true
      required:
        - id
        - integration
        - baseUrls
        - themeMode
        - touchPoints
    ListIntegrationSchemaApiResponse:
      type: object
      properties:
        items:
          description: The list of integration schema responses
          type: array
          items:
            $ref: "#/components/schemas/IntegrationSchemaApiResponse"
      required:
        - items
    LHSPlaybookDomainFilters:
      type: object
      properties:
        domain[eq]:
          type: string
          description: Domain to filter playbooks by
    PlaybookApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the playbook
        title:
          type: string
          description: The title of the playbook
        domain:
          type: string
          description: The domain of the playbook
        faviconUrl:
          type: object
          description: The favicon URL of the playbook
          nullable: true
        createdAt:
          type: string
          description: The creation date of the playbook
      required:
        - id
        - title
        - domain
        - faviconUrl
        - createdAt
    ListPlaybooksApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/PlaybookApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    LHSPlaybookHotspotIntentStatusFilters:
      type: object
      properties:
        intentStatus[eq]:
          type: string
          description: Filter by intent status
          enum:
            - Draft
            - Pending
            - Published
    LHSPlaybookHotspotWidgetTypeFilters:
      type: object
      properties:
        widgetType[eq]:
          type: string
          description: Filter by widget type
          enum:
            - Channel
            - Collection
            - Content
            - Course
            - Discussion
            - Document
            - DocumentLink
            - Forum
            - Live
            - LearningPath
            - Topic
    PlaybookHotspotApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the hotspot
        pageId:
          type: string
          description: The id of the parent page
        name:
          type: string
          description: The name of the hotspot
        location:
          type: string
          description: The location type of the hotspot
          enum:
            - Element
            - FullPage
        cssSelector:
          type: object
          description: The CSS selector targeting the element
          nullable: true
        strictness:
          type: object
          description: The strictness level for CSS selector matching (0-4)
          nullable: true
        highlighted:
          type: boolean
          description: Whether the hotspot is highlighted
        createdAt:
          type: string
          description: The creation date of the hotspot
      required:
        - id
        - pageId
        - name
        - location
        - cssSelector
        - strictness
        - highlighted
        - createdAt
    ListPlaybookHotspotsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/PlaybookHotspotApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    CreatePlaybookHotspotApiBody:
      type: object
      properties:
        name:
          type: string
          description: The name of the hotspot
        location:
          type: string
          description: The location type of the hotspot
          enum:
            - Element
            - FullPage
        cssSelector:
          type: string
          description: The CSS selector targeting the element
        strictness:
          type: number
          description: The strictness level for CSS selector matching (0-4)
        highlighted:
          type: boolean
          description: Whether the hotspot should be highlighted
      required:
        - name
        - location
    AccessiblePlaybookIntentApiResponse:
      type: object
      properties:
        hotspotId:
          type: string
          description: The id of the hotspot
        intentId:
          type: string
          description: The id of the intent
        widgetId:
          type: string
          description: The id of the widget
        location:
          type: string
          description: The hotspot location type
          enum:
            - Element
            - FullPage
        cssSelector:
          type: object
          description: The CSS selector targeting the DOM element
          nullable: true
        highlighted:
          type: boolean
          description: Whether the Melty icon is highlighted (shown) on the hotspot element
        mode:
          type: string
          description: The rendering mode for the widget
          enum:
            - Beacon
            - List
        widgetMetadata:
          type: array
          description: The widget contents metadata
          items:
            anyOf:
              - $ref: "#/components/schemas/ChannelWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/CollectionWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/CourseWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/DocumentLinkWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/DocumentPageWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/ForumWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/LearningPathWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/LiveWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/RichTextWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/TopicWidgetContentMetadataApiResponse"
      required:
        - hotspotId
        - intentId
        - widgetId
        - location
        - cssSelector
        - highlighted
        - mode
        - widgetMetadata
    ListAccessiblePlaybookIntentsApiResponse:
      type: object
      properties:
        items:
          description: The list of accessible playbook intents with widget metadata
          type: array
          items:
            $ref: "#/components/schemas/AccessiblePlaybookIntentApiResponse"
      required:
        - items
    UpdatePlaybookHotspotApiBody:
      type: object
      properties:
        name:
          type: string
          description: The name of the hotspot
        location:
          type: string
          description: The location type of the hotspot
          enum:
            - Element
            - FullPage
        cssSelector:
          type: string
          description: The CSS selector targeting the element
        strictness:
          type: number
          description: The strictness level for CSS selector matching (0-4)
        highlighted:
          type: boolean
          description: Whether the hotspot should be highlighted
        pageId:
          type: string
          description: The target page ID to move the hotspot to
    LHSPlaybookIntentStatusFilters:
      type: object
      properties:
        status[eq]:
          type: string
          description: Status to filter intents by
          enum:
            - Draft
            - Pending
            - Published
    PlaybookIntentWidgetApiResponse:
      type: object
      properties:
        title:
          type: string
          description: The title of the widget
        type:
          type: string
          description: The type of the widget
          enum:
            - Channel
            - Collection
            - Content
            - Course
            - Discussion
            - Document
            - DocumentLink
            - Forum
            - Live
            - LearningPath
            - Topic
        privacy:
          type: string
          description: The privacy setting of the widget
          enum:
            - Private
            - Public
            - Secret
          nullable: true
      required:
        - title
        - type
        - privacy
    PlaybookIntentWithDetailsApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the intent
        hotspotId:
          type: string
          description: The id of the parent hotspot
        description:
          type: string
          description: The description of the intent
        status:
          type: string
          description: The status of the intent
          enum:
            - Draft
            - Pending
            - Published
        widgetId:
          type: object
          description: The id of the associated widget
          nullable: true
        order:
          type: number
          description: The order of the intent within the hotspot
        spotMemberId:
          type: string
          description: The id of the spot member who created the intent
        createdAt:
          type: string
          description: The creation date of the intent
        widget:
          description: The associated widget details
          nullable: true
          type: object
          allOf:
            - $ref: "#/components/schemas/PlaybookIntentWidgetApiResponse"
      required:
        - id
        - hotspotId
        - description
        - status
        - widgetId
        - order
        - spotMemberId
        - createdAt
        - widget
    ListPlaybookIntentsWithDetailsApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/PlaybookIntentWithDetailsApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    CreatePlaybookIntentApiBody:
      type: object
      properties:
        description:
          type: string
          description: The description of the intent
        status:
          type: string
          description: Optional. Defaults to Pending if not provided. Draft and Published
            require a widgetId.
          enum:
            - Draft
            - Pending
            - Published
        widgetId:
          type: string
          description: Optional. Required if status is Draft or Published. Ignored if
            status is Pending.
        order:
          type: number
          description: The order of the intent within the hotspot
      required:
        - description
    PlaybookIntentApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the intent
        hotspotId:
          type: string
          description: The id of the parent hotspot
        description:
          type: string
          description: The description of the intent
        status:
          type: string
          description: The status of the intent
          enum:
            - Draft
            - Pending
            - Published
        widgetId:
          type: object
          description: The id of the associated widget
          nullable: true
        order:
          type: number
          description: The order of the intent within the hotspot
        spotMemberId:
          type: string
          description: The id of the spot member who created the intent
        createdAt:
          type: string
          description: The creation date of the intent
      required:
        - id
        - hotspotId
        - description
        - status
        - widgetId
        - order
        - spotMemberId
        - createdAt
    UpdatePlaybookIntentApiBody:
      type: object
      properties:
        description:
          type: string
          description: The new description for the intent
        hotspotId:
          type: string
          description: The target hotspot id to reassign the intent to
        status:
          type: string
          description: The new status for the intent. Only Draft and Published are
            accepted; returning to Pending is not allowed via this endpoint.
          enum:
            - Draft
            - Published
    LHSPlaybookPageUrlFilters:
      type: object
      properties:
        url[eq]:
          type: string
          description: URL to match against page matchingRules
    PlaybookPageApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The id of the page
        playbookId:
          type: string
          description: The id of the parent playbook
        name:
          type: string
          description: The name of the page
        sampleUrl:
          type: string
          description: The sample URL of the page
        matchingRules:
          type: object
          description: The matching rules for URL matching
          nullable: true
        createdAt:
          type: string
          description: The creation date of the page
      required:
        - id
        - playbookId
        - name
        - sampleUrl
        - matchingRules
        - createdAt
    ListPlaybookPagesApiResponse:
      type: object
      properties:
        items:
          description: The items found
          type: array
          items:
            $ref: "#/components/schemas/PlaybookPageApiResponse"
        total:
          type: integer
          description: The total number of items found
      required:
        - items
        - total
    CreatePlaybookPageApiBody:
      type: object
      properties:
        name:
          type: string
          description: The name of the page
        url:
          type: string
          description: The full URL of the page
          example: https://example.com/settings/billing?tab=1
      required:
        - name
        - url
    WidgetMetadataResponse:
      type: object
      properties:
        widgetId:
          type: string
          description: The ID of the widget
        widgetMetadata:
          type: array
          description: The widget contents metadata
          items:
            anyOf:
              - $ref: "#/components/schemas/ChannelWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/CollectionWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/CourseWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/DocumentLinkWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/DocumentPageWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/ForumWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/LearningPathWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/LiveWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/RichTextWidgetContentMetadataApiResponse"
              - $ref: "#/components/schemas/TopicWidgetContentMetadataApiResponse"
      required:
        - widgetId
        - widgetMetadata
    ListWidgetMetadataResponse:
      type: object
      properties:
        items:
          description: The list of widget metadata responses
          type: array
          items:
            $ref: "#/components/schemas/WidgetMetadataResponse"
      required:
        - items
    MeltyConfigPlaybookFallbackApiResponse:
      type: object
      properties:
        playbookId:
          type: string
          description: Playbook this fallback config belongs to.
        fallbackEnabled:
          type: boolean
          description: Whether the fallback affordance is enabled.
        fallbackMode:
          type: string
          enum:
            - ChatWithAdmin
            - SpotDiscussion
            - SpotForum
            - ExternalLink
          nullable: true
          description: Fallback redirection kind; null when no fallback is set.
        fallbackTargetId:
          type: object
          nullable: true
          description: Target id (channel/forum/admin) for non-ExternalLink modes; null
            otherwise.
        fallbackExternalUrl:
          type: object
          nullable: true
          description: External URL for ExternalLink mode; null otherwise.
        fallbackExternalLabel:
          type: object
          nullable: true
          description: Optional label for the ExternalLink button; null otherwise.
        fallbackTargetEmoji:
          type: object
          nullable: true
          description: Channel/forum emoji for SpotDiscussion/SpotForum; null otherwise or
            when unset/unresolved.
        fallbackTargetAvatarUrl:
          type: object
          nullable: true
          description: Referent member avatar URL for ChatWithAdmin; null otherwise or
            when unset/unresolved.
        fallbackTargetName:
          type: object
          nullable: true
          description: Resolved target display name (channel/forum name, referent full
            name) for non-ExternalLink modes; used by the SDK to personalize the
            inline suggestion card. Null when unset/unresolved.
      required:
        - playbookId
        - fallbackEnabled
        - fallbackMode
        - fallbackTargetId
        - fallbackExternalUrl
        - fallbackExternalLabel
        - fallbackTargetEmoji
        - fallbackTargetAvatarUrl
        - fallbackTargetName
    MeltyConfigCapabilitiesApiResponse:
      type: object
      properties:
        fallbackDisabled:
          type: boolean
          description: Whether the fallback (1-1 / discussion) affordance is disabled
            (true in preview).
        contentNavigable:
          type: boolean
          description: Whether opening a suggested content is navigable (false in preview).
        statusBadge:
          type: boolean
          description: Whether to show the status pill on the mascot ("Preview mode ON");
            true in preview.
        multipleIntent:
          type: boolean
          description: Whether the coach evaluates every intent candidate per hotspot and
            opens the first non-muted one (next-intent fallthrough). Derived
            from the `feature-coach-multiple-intent` flag (backend-resolved);
            the coach calls the grouped v2 endpoint when true, v1 otherwise.
            Fail-closed to false.
        displayRulesEnabled:
          type: boolean
          description: Master gate for the per-intent display-rules engine. Derived from
            the global `feature-melty-intent-display-rules` flag
            (backend-resolved); when true the SDK runs the new eligibility
            engine and consumes each candidate display config, otherwise it
            keeps the legacy engine. Fail-closed to false; the SDK never talks
            to Unleash.
        previewSession:
          type: boolean
          description: Whether this is an admin preview (impersonation) session, derived
            from the impersonation context. Threaded into the SDK engine so
            preview bypasses the display-rule gates; false outside preview.
        coachMuteDisabled:
          type: boolean
          description: Whether the coach mute control must be hidden/inert for this
            session; true in preview (an admin impersonating a member cannot
            mute on their behalf — the write endpoints refuse preview
            access-keys).
      required:
        - fallbackDisabled
        - contentNavigable
        - statusBadge
        - multipleIntent
        - displayRulesEnabled
        - previewSession
        - coachMuteDisabled
    GetMeltyConfigApiResponse:
      type: object
      properties:
        enabled:
          type: boolean
          description: Whether Melty is enabled for the spot.
        proactiveEnabled:
          type: boolean
          description: Whether the proactive beacon is enabled.
        conversationEnabled:
          type: boolean
          description: Admin intent to enable the SDK conversation mode.
        feedbackEnabled:
          type: boolean
          description: Whether the message-feedback feature is enabled for the spot
            (feature flag, backend-resolved). The SDK gates the feedback control
            on this. Fail-closed to false.
        historyEnabled:
          type: boolean
          description: Whether the conversation history is enabled for the spot (feature
            flag, backend-resolved). The SDK lands on the conversation list when
            true, and keeps its findOrNew resume path when false. Fail-closed to
            false.
        muteEnabled:
          type: boolean
          description: "Whether the coach mute feature is enabled for the spot (feature
            flag, backend-resolved). Kill-switch: false ⇒ the SDK offers no mute
            control and `muted` is false even if a mute is stored. Fail-closed
            to false."
        muted:
          type: boolean
          description: Whether the calling member has the coach muted on this spot, still
            live at read time (the mute is spot-level). False when the gate is
            off, in a preview session, or when the caller carries no user
            (admin/dev-tool read path).
        mutedUntil:
          type: string
          nullable: true
          format: date-time
          description: "When the mute lapses. `null` with `muted: true` is the `Always`
            preset — an indefinite mute, NOT an expired one; `null` with `muted:
            false` simply means nothing is muted."
        conversationStatus:
          type: string
          enum:
            - Pending
            - Indexing
            - Ready
            - Failed
          description: RAG indexation state, maintained by the indexation job.
        playbooks:
          description: Per-playbook fallback config. Empty when the spot has no playbook.
          type: array
          items:
            $ref: "#/components/schemas/MeltyConfigPlaybookFallbackApiResponse"
        iframelyApiKey:
          type: object
          nullable: true
          description: Iframely api key dedicated to the coach, used by the SDK to render
            embeds (video…) in rich-text tooltips. Null when not provisioned.
        capabilities:
          description: Session-level capabilities (fallback/content/status badge) derived
            from the preview context. Non-restrictive outside preview.
          allOf:
            - $ref: "#/components/schemas/MeltyConfigCapabilitiesApiResponse"
      required:
        - enabled
        - proactiveEnabled
        - conversationEnabled
        - feedbackEnabled
        - historyEnabled
        - muteEnabled
        - muted
        - mutedUntil
        - conversationStatus
        - playbooks
        - iframelyApiKey
        - capabilities
    CheckProactiveApiBody:
      type: object
      properties:
        url:
          type: string
          description: The page URL the user is currently visiting
        domain:
          type: string
          description: Domain key used to generate links for any widget content the
            trigger returns (remapped server-side to a stored domain URL)
      required:
        - url
    CreateConversationApiBody:
      type: object
      properties:
        intentId:
          type: string
          description: PlaybookIntent id when the conversation is anchored on a
            conversational hotspot.
        testMode:
          type: boolean
          description: Sandbox flag. `true` when the conversation is started from the
            admin "Test AI Coach" modal — keeps it isolated from the real member
            coach. Defaults to false.
    CreateConversationApiResponse:
      type: object
      properties:
        conversationId:
          type: string
          description: Id of the freshly created conversation.
      required:
        - conversationId
    IntroWidgetActionBody:
      type: object
      properties:
        widgetType:
          type: string
          enum:
            - Channel
            - Collection
            - Course
            - Forum
            - Link
            - Live
            - LearningPath
            - Page
            - RichText
            - Topic
        widgetId:
          type: string
        metadata:
          type: array
          items:
            type: object
      required:
        - widgetType
        - widgetId
        - metadata
    IntroConversationApiBody:
      type: object
      properties:
        conversationId:
          type: string
          description: Id of the (freshly created) conversation to stream the intro into.
        intentId:
          type: string
          description: PlaybookIntent id backing the surfaced resource — grounds the
            generative intro on the intent description.
        widgetActions:
          description: The surfaced resource card the SDK displays, so it is persisted on
            the intro message (card under the intro) and replays identically.
            The card is display metadata round-tripped from the ACL-scoped
            accessible-intents payload; opening the resource re-enforces ACL, so
            a forged card cannot leak content. Omitted for a Content/RichText
            tooltip (nothing to surface).
          type: array
          items:
            $ref: "#/components/schemas/IntroWidgetActionBody"
      required:
        - conversationId
        - intentId
    ConversationApiResponse:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
          enum:
            - Active
            - Closed
            - Expired
        createdAt:
          type: string
        triggerType:
          type: string
          enum:
            - Welcome
            - Resume
            - Discover
            - Recommend
            - UserInitiated
            - PlaybookIntent
          nullable: true
        triggerResourceId:
          type: object
          nullable: true
      required:
        - id
        - status
        - createdAt
        - triggerType
        - triggerResourceId
    ListConversationsApiResponse:
      type: object
      properties:
        conversations:
          type: array
          items:
            $ref: "#/components/schemas/ConversationApiResponse"
      required:
        - conversations
    ConversationHistoryTagApiResponse:
      type: object
      properties:
        widgetId:
          type: string
        widgetType:
          type: string
          enum:
            - Channel
            - Collection
            - Course
            - Forum
            - Link
            - Live
            - LearningPath
            - Page
            - RichText
            - Topic
        label:
          type: string
          description: Resource title as cited in the conversation.
      required:
        - widgetId
        - widgetType
        - label
    ConversationHistoryItemApiResponse:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
          nullable: true
          description: Generated title. Null while the generation has not run yet and on
            conversations predating the feature — the SDK renders its own
            generic label.
        summary:
          type: string
          nullable: true
          description: Generated member-facing recap. Null when not generated yet.
        lastActivityAt:
          type: string
          format: date-time
          nullable: true
          description: ISO date of the last user/assistant message. Drives the ordering;
            null sorts last.
        status:
          type: string
          enum:
            - Active
            - Closed
            - Expired
        tags:
          description: Resources cited in the conversation, deduplicated.
          type: array
          items:
            $ref: "#/components/schemas/ConversationHistoryTagApiResponse"
        later:
          type: boolean
          description: Whether the member postponed the linked intent less than 24h ago.
      required:
        - id
        - title
        - summary
        - lastActivityAt
        - status
        - tags
        - later
    ListConversationHistoryApiResponse:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: "#/components/schemas/ConversationHistoryItemApiResponse"
        hasMore:
          type: boolean
          description: Whether another page exists past this one. Drives the end of the
            infinite scroll.
      required:
        - items
        - hasMore
    SendMessageApiBody:
      type: object
      properties:
        content:
          type: string
          description: Text content of the user message to send to the agent.
          maxLength: 8000
        playbookId:
          type: string
          description: Active playbook id of the current page (UserInitiated turns only).
      required:
        - content
    MessageFeedbackApiResponse:
      type: object
      properties:
        signal:
          type: string
          enum:
            - up
            - down
        reason:
          type: string
          enum:
            - poor_explanation
            - false_information
            - not_following_request
            - incomplete_response
            - chat_history_issue
            - personalization_issue
            - other
          nullable: true
      required:
        - signal
    MessageApiResponse:
      type: object
      properties:
        id:
          type: string
        role:
          type: string
          enum:
            - User
            - Assistant
            - System
        content:
          type: array
          items:
            type: string
        metadata:
          type: object
          nullable: true
        createdAt:
          type: string
          description: ISO 8601 timestamp
        feedbackEligible:
          type: boolean
          description: Server-driven feedback eligibility (COM-9471). True only for
            coach-authored content (proactive intro or genuine reply with a
            card); false for admin-configured intent openings, handoffs, no-card
            and user turns. The SDK gates its control on this flag.
        feedback:
          description: The member feedback on this message, when voted. Absent otherwise.
          allOf:
            - $ref: "#/components/schemas/MessageFeedbackApiResponse"
      required:
        - id
        - role
        - content
        - createdAt
        - feedbackEligible
    GetConversationMessagesApiResponse:
      type: object
      properties:
        conversationId:
          type: string
        status:
          type: string
          enum:
            - Active
            - Closed
            - Expired
        createdAt:
          type: string
          description: ISO 8601 timestamp
        messages:
          type: array
          items:
            $ref: "#/components/schemas/MessageApiResponse"
      required:
        - conversationId
        - status
        - createdAt
        - messages
    SubmitMessageFeedbackApiBody:
      type: object
      properties:
        signal:
          type: string
          enum:
            - up
            - down
          description: Definitive vote on the assistant message. `up` (helpful) or `down`
            (not helpful). Immutable once created — a reason is added later via
            PATCH.
      required:
        - signal
    UpdateMessageFeedbackReasonApiBody:
      type: object
      properties:
        reason:
          type: string
          enum:
            - poor_explanation
            - false_information
            - not_following_request
            - incomplete_response
            - chat_history_issue
            - personalization_issue
            - other
          description: Reason for the down vote. Only meaningful on a `down` feedback; a
            `up` feedback is rejected.
        freeText:
          type: string
          description: Optional free-text detail for the down vote.
          maxLength: 1000
    MeltyIntentUserStateEntryApiResponse:
      type: object
      properties:
        intentId:
          type: string
          description: Playbook intent id this entry belongs to.
        lastActionAt:
          type: number
          nullable: true
          description: Timestamp (epoch ms) of the last persisted user action. Null when
            the user has never interacted with this intent.
        lastActionState:
          type: string
          nullable: true
          enum:
            - CloseA
            - CloseB
            - Later
          description: Last persisted action state for this intent.
        completionStatus:
          type: boolean
          nullable: true
          description: Whether the underlying content is marked completed. Null when
            completion is not tracked for the widget type.
      required:
        - intentId
        - lastActionAt
        - lastActionState
        - completionStatus
    ListMeltyIntentUserStatesApiResponse:
      type: object
      properties:
        entries:
          description: Flat list of persisted (intent → state) entries for the
            authenticated user, scoped to the current spot.
          type: array
          items:
            $ref: "#/components/schemas/MeltyIntentUserStateEntryApiResponse"
      required:
        - entries
    GetCoachStateApiResponse:
      type: object
      properties:
        hasUnread:
          type: boolean
          description: Whether the playbook fallback target has unread content concerning
            the user. Identical to the `fallback/unread` resource.
        muted:
          type: boolean
          description: Whether the coach is muted for the calling member on this SPOT
            right now. The mute is spot-level, so the `:playbookId` of the route
            does not scope it — only `hasUnread` is per playbook. False when the
            feature is disabled for the spot or the caller is a preview session.
        mutedUntil:
          type: string
          nullable: true
          format: date-time
          description: Deadline of the active mute; `null` either because nothing is muted
            or because the mute is the `Always` preset (indefinite). `muted`
            disambiguates.
      required:
        - hasUnread
        - muted
        - mutedUntil
    MuteCoachApiBody:
      type: object
      properties:
        preset:
          type: string
          enum:
            - Mute30Min
            - Mute1Hour
            - Mute2Hours
            - UntilTomorrow
            - UntilNextWeek
            - Always
          description: How long the coach stays paused. The deadline itself is computed
            server-side from this preset, in the member timezone — the client
            never sends a date or a timezone. `Always` pauses indefinitely,
            until an explicit unmute.
      required:
        - preset
    MuteCoachApiResponse:
      type: object
      properties:
        mutedUntil:
          type: string
          nullable: true
          format: date-time
          description: When the mute lapses. `null` for the `Always` preset — no deadline.
            Expiry is evaluated server-side at read time; no client-side timer
            is needed.
      required:
        - mutedUntil
    UnmuteCoachApiResponse:
      type: object
      properties:
        deleted:
          type: boolean
          description: Whether a mute was actually removed. `false` when the spot was not
            muted — unmuting is idempotent, not an error.
      required:
        - deleted
    ResolveFallbackWidgetApiResponse:
      type: object
      properties:
        widgetId:
          type: string
          description: Id of the widget to open for the configured channel/forum fallback.
      required:
        - widgetId
    GenerateFallbackDraftApiBody:
      type: object
      properties:
        conversationId:
          type: string
          description: Conversation the draft is built from — its tail is the agent context.
      required:
        - conversationId
    GenerateFallbackDraftApiResponse:
      type: object
      properties:
        title:
          type: string
          nullable: true
          description: Short title for the forum format (summary of the question); null
            for the 1-1 and channel formats.
        body:
          type: string
          description: The pre-filled draft body, in the session language.
      required:
        - title
        - body
    GetFallbackUnreadApiResponse:
      type: object
      properties:
        hasUnread:
          type: boolean
          description: Whether the playbook fallback target has unread content concerning
            the user.
      required:
        - hasUnread
    MeltyAccessiblePlaybookIntentLegacyApiResponse:
      type: object
      properties:
        hotspotId:
          type: string
          description: The id of the hotspot
        intentId:
          type: string
          description: The id of the intent
        widgetId:
          type: string
          description: The id of the widget
        location:
          type: string
          description: The hotspot location type
          enum:
            - Element
            - FullPage
        cssSelector:
          type: object
          description: The CSS selector targeting the DOM element
          nullable: true
        highlighted:
          type: boolean
          description: Whether the Melty icon is highlighted (shown) on the hotspot element
        mode:
          type: string
          description: The rendering mode for the widget
          enum:
            - Beacon
            - List
        widgetMetadata:
          type: array
          description: The widget contents metadata
          items:
            type: object
        lastActionAt:
          type: number
          nullable: true
          description: Timestamp (epoch ms) of the last persisted user action on this
            intent. Null when never interacted with.
        lastActionState:
          type: string
          nullable: true
          enum:
            - CloseA
            - CloseB
            - Later
          description: Last persisted action state for this intent.
        completionStatus:
          type: boolean
          nullable: true
          description: Whether the underlying content is marked completed. Null when
            completion is not tracked for the widget type.
      required:
        - hotspotId
        - intentId
        - widgetId
        - location
        - cssSelector
        - highlighted
        - mode
        - widgetMetadata
        - lastActionAt
        - lastActionState
        - completionStatus
    ListMeltyAccessiblePlaybookIntentsLegacyApiResponse:
      type: object
      properties:
        items:
          description: Accessible playbook intents for the page, each enriched with the
            caller state + completion.
          type: array
          items:
            $ref: "#/components/schemas/MeltyAccessiblePlaybookIntentLegacyApiResponse"
      required:
        - items
    MeltyDisplayRuleTimerApiResponse:
      type: object
      properties:
        value:
          type: number
          nullable: true
          description: Timer magnitude. Null when the unit is Never (the timer never
            elapses).
        unit:
          type: string
          enum:
            - Hours
            - Days
            - Never
          description: The time unit of the timer.
      required:
        - value
        - unit
    MeltyIntentDisplayConfigApiResponse:
      type: object
      properties:
        repetitionMode:
          type: string
          enum:
            - NoLimit
            - OnlyOnce
            - OncePerDays
            - UntilContentCompletion
          description: How often the coach may re-surface the intent.
        later:
          description: Reappear delay after the member explicitly postpones (Later).
          allOf:
            - $ref: "#/components/schemas/MeltyDisplayRuleTimerApiResponse"
        closeA:
          description: Reappear delay after a close from the preview/teaser, before
            opening (CloseA).
          allOf:
            - $ref: "#/components/schemas/MeltyDisplayRuleTimerApiResponse"
        closeB:
          description: Reappear delay after the member viewed the full content then closed
            it (CloseB).
          allOf:
            - $ref: "#/components/schemas/MeltyDisplayRuleTimerApiResponse"
      required:
        - repetitionMode
        - later
        - closeA
        - closeB
    MeltyAccessibleIntentCandidateApiResponse:
      type: object
      properties:
        intentId:
          type: string
          description: The id of the intent
        widgetId:
          type: string
          description: The id of the widget
        mode:
          type: string
          description: The rendering mode for the widget
          enum:
            - Beacon
            - List
        widgetMetadata:
          type: array
          description: The widget contents metadata
          items:
            type: object
        lastActionAt:
          type: number
          nullable: true
          description: Timestamp (epoch ms) of the last persisted user action on this
            intent. Null when never interacted with.
        lastActionState:
          type: string
          nullable: true
          enum:
            - CloseA
            - CloseB
            - Later
          description: Last persisted action state for this intent.
        completionStatus:
          type: boolean
          nullable: true
          description: Whether the underlying content is marked completed. Null when
            completion is not tracked for the widget type.
        displayConfig:
          description: Per-intent display-rules config. Omitted entirely when no config
            row exists (the SDK reads absence as legacy NoLimit — AD-13); only
            emitted when the display-rules flag is on (AD-8).
          allOf:
            - $ref: "#/components/schemas/MeltyIntentDisplayConfigApiResponse"
      required:
        - intentId
        - widgetId
        - mode
        - widgetMetadata
        - lastActionAt
        - lastActionState
        - completionStatus
    MeltyAccessiblePlaybookHotspotApiResponse:
      type: object
      properties:
        hotspotId:
          type: string
          description: The id of the hotspot
        location:
          type: string
          description: The hotspot location type
          enum:
            - Element
            - FullPage
        cssSelector:
          type: object
          description: The CSS selector targeting the DOM element
          nullable: true
        highlighted:
          type: boolean
          description: Whether the Melty icon is highlighted (shown) on the hotspot element
        intents:
          description: Ordered accessible intent candidates for this hotspot (lowest order
            first).
          type: array
          items:
            $ref: "#/components/schemas/MeltyAccessibleIntentCandidateApiResponse"
      required:
        - hotspotId
        - location
        - cssSelector
        - highlighted
        - intents
    ListMeltyAccessiblePlaybookIntentsApiResponse:
      type: object
      properties:
        items:
          description: Accessible hotspots for the page, each with its ordered enriched
            intent candidates.
          type: array
          items:
            $ref: "#/components/schemas/MeltyAccessiblePlaybookHotspotApiResponse"
      required:
        - items
    SearchableTopicApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum:
            - Channel
            - Collection
            - CollectionLink
            - CollectionPage
            - Course
            - CourseStep
            - Forum
            - LearningPath
            - Live
            - SpotMember
            - Topic
            - TopicAnswer
        topicTitle:
          type: string
          description: The title of the topic
        topicContent:
          type: string
          description: The content of the topic
        forumName:
          type: string
          description: The name of the forum
        forumPrivacy:
          type: string
          description: The privacy of the forum
          enum:
            - Private
            - Secret
        topicAuthorPictureUrl:
          type: string
          nullable: true
          description: The picture url of the author
        topicAuthorName:
          type: string
          description: The name of the author
        spotId:
          type: string
          description: The spot id of the topic
        forumId:
          type: string
          description: The forum id
        topicId:
          type: string
          description: The topic id
      required:
        - id
        - type
        - topicTitle
        - topicContent
        - forumName
        - forumPrivacy
        - topicAuthorPictureUrl
        - topicAuthorName
        - spotId
        - forumId
        - topicId
    SearchableForumApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum:
            - Channel
            - Collection
            - CollectionLink
            - CollectionPage
            - Course
            - CourseStep
            - Forum
            - LearningPath
            - Live
            - SpotMember
            - Topic
            - TopicAnswer
        forumName:
          type: string
          description: The name of the forum
        forumDescription:
          type: string
          description: The description of the forum
        forumPrivacy:
          type: string
          description: The privacy of the forum
          enum:
            - Private
            - Secret
        spotId:
          type: string
          description: The spot id of the forum
        forumGroupsIds:
          description: The ids of the groups assigned to the forum
          type: array
          items:
            type: string
        forumId:
          type: string
          description: The forum id
      required:
        - id
        - type
        - forumName
        - forumDescription
        - forumPrivacy
        - spotId
        - forumGroupsIds
        - forumId
    SearchableTopicAnswerApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum:
            - Channel
            - Collection
            - CollectionLink
            - CollectionPage
            - Course
            - CourseStep
            - Forum
            - LearningPath
            - Live
            - SpotMember
            - Topic
            - TopicAnswer
        topicTitle:
          type: string
          description: The title of the topic
        topicAnswerContent:
          type: string
          description: The content of the topic answer
        forumName:
          type: string
          description: The name of the forum
        forumPrivacy:
          type: string
          description: The privacy of the forum
          enum:
            - Private
            - Secret
        topicAnswerAuthorPictureUrl:
          type: string
          nullable: true
          description: The picture url of the author answer
        topicAnswerAuthorName:
          type: string
          description: The name of the author answer
        spotId:
          type: string
          description: The spot id of the topic answer
        forumId:
          type: string
          description: The forum id of the topic answer
        topicId:
          type: string
          description: The topic id of the topic answer
      required:
        - id
        - type
        - topicTitle
        - topicAnswerContent
        - forumName
        - forumPrivacy
        - topicAnswerAuthorPictureUrl
        - topicAnswerAuthorName
        - spotId
        - forumId
        - topicId
    SearchableSpotMemberApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum:
            - Channel
            - Collection
            - CollectionLink
            - CollectionPage
            - Course
            - CourseStep
            - Forum
            - LearningPath
            - Live
            - SpotMember
            - Topic
            - TopicAnswer
        firstname:
          type: string
          description: The first name of the member
        lastname:
          type: string
          description: The last name of the member
        email:
          type: string
          nullable: true
          description: The email of the member
        headline:
          type: string
          description: The headline of the member
        pictureUrl:
          type: string
          nullable: true
          description: The picture url of the member
        status:
          type: string
          description: The status of the member
        role:
          type: string
          description: The role of the member
        tags:
          description: The tags of the member
          type: array
          items:
            type: string
        spotId:
          type: string
          description: The spot id of the member
        spotMemberId:
          type: string
          description: The member id
      required:
        - id
        - type
        - firstname
        - lastname
        - email
        - headline
        - pictureUrl
        - status
        - role
        - tags
        - spotId
        - spotMemberId
    SearchableCollectionLinkApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum:
            - Channel
            - Collection
            - CollectionLink
            - CollectionPage
            - Course
            - CourseStep
            - Forum
            - LearningPath
            - Live
            - SpotMember
            - Topic
            - TopicAnswer
        collectionLinkTitle:
          type: string
          description: The title of the collection document link
        collectionLinkUrl:
          type: string
          description: The description of the collection  documentlink
        collectionLinkTags:
          description: The tags of the collection document link
          type: array
          items:
            type: string
        collectionName:
          type: string
          description: The name of the collection
        collectionPrivacy:
          type: string
          description: The privacy of the collection
          enum:
            - Private
            - Public
        isDraft:
          type: boolean
          description: is the document is in draft mode
        spotId:
          type: string
          description: The spot id of the collection
        collectionId:
          type: string
          description: The collection id
        linkId:
          type: string
          description: The id of the document link
      required:
        - id
        - type
        - collectionLinkTitle
        - collectionLinkUrl
        - collectionLinkTags
        - collectionName
        - collectionPrivacy
        - isDraft
        - spotId
        - collectionId
        - linkId
    SearchableCollectionPageApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum:
            - Channel
            - Collection
            - CollectionLink
            - CollectionPage
            - Course
            - CourseStep
            - Forum
            - LearningPath
            - Live
            - SpotMember
            - Topic
            - TopicAnswer
        collectionPageTitle:
          type: string
          description: The title of the collection page
        collectionPageContent:
          type: string
          description: The content of the collection page
        collectionPageTags:
          description: The tags of the collection page
          type: array
          items:
            type: string
        collectionName:
          type: string
          description: The name of the collection
        collectionPrivacy:
          type: string
          description: The privacy of the collection
          enum:
            - Private
            - Public
        isDraft:
          type: boolean
          description: is the document is in draft mode
        spotId:
          type: string
          description: The spot id of the collection
        collectionId:
          type: string
          description: The collection id
        pageId:
          type: string
          description: The id of the page
      required:
        - id
        - type
        - collectionPageTitle
        - collectionPageContent
        - collectionPageTags
        - collectionName
        - collectionPrivacy
        - isDraft
        - spotId
        - collectionId
        - pageId
    SearchableCollectionApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum:
            - Channel
            - Collection
            - CollectionLink
            - CollectionPage
            - Course
            - CourseStep
            - Forum
            - LearningPath
            - Live
            - SpotMember
            - Topic
            - TopicAnswer
        collectionName:
          type: string
          description: The name of the collection
        collectionDescription:
          type: string
          description: The description of the collection
        collectionPrivacy:
          type: string
          description: The privacy of the collection
          enum:
            - Private
            - Public
        spotId:
          type: string
          description: The spot id of the collection
        collectionGroupsIds:
          description: The ids of the groups assigned to the collection
          type: array
          items:
            type: string
        collectionId:
          type: string
          description: The collection id
      required:
        - id
        - type
        - collectionName
        - collectionDescription
        - collectionPrivacy
        - spotId
        - collectionGroupsIds
        - collectionId
    SearchableLiveApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum:
            - Channel
            - Collection
            - CollectionLink
            - CollectionPage
            - Course
            - CourseStep
            - Forum
            - LearningPath
            - Live
            - SpotMember
            - Topic
            - TopicAnswer
        liveTitle:
          type: string
          description: The title of the live
        liveDescription:
          type: string
          description: The description of the live
        liveStartDate:
          format: date-time
          type: string
          description: The start date of the live
        liveTags:
          description: The tags of the live
          type: array
          items:
            type: string
        livePrivacy:
          type: string
          description: The visibility privacy of the live
          enum:
            - AnyOne
            - OnlySpotMembers
            - InvitedMembersOnly
        spotId:
          type: string
          description: The spot id of the live
        liveGroupsIds:
          description: The ids of the groups assigned to the live
          type: array
          items:
            type: string
        liveId:
          type: string
          description: The live id
      required:
        - id
        - type
        - liveTitle
        - liveDescription
        - liveStartDate
        - liveTags
        - livePrivacy
        - spotId
        - liveGroupsIds
        - liveId
    SearchableChannelApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum:
            - Channel
            - Collection
            - CollectionLink
            - CollectionPage
            - Course
            - CourseStep
            - Forum
            - LearningPath
            - Live
            - SpotMember
            - Topic
            - TopicAnswer
        channelName:
          type: string
          description: The name of the channel
        channelDescription:
          type: string
          description: The description of the channel
        channelPrivacy:
          type: string
          description: The privacy of the channel
          enum:
            - Private
            - Public
        spotId:
          type: string
          description: The spot id of the channel
        channelGroupsIds:
          description: The ids of the groups assigned to the channel
          type: array
          items:
            type: string
        channelId:
          type: string
          description: The channel id
      required:
        - id
        - type
        - channelName
        - channelDescription
        - channelPrivacy
        - spotId
        - channelGroupsIds
        - channelId
    SearchableCourseApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum:
            - Channel
            - Collection
            - CollectionLink
            - CollectionPage
            - Course
            - CourseStep
            - Forum
            - LearningPath
            - Live
            - SpotMember
            - Topic
            - TopicAnswer
        courseTitle:
          type: string
          description: The name of the course
        courseDescription:
          type: string
          description: The description of the course
        coursePrivacy:
          type: string
          description: The privacy of the course
          enum:
            - Secret
            - Public
        isDraft:
          type: boolean
          description: To know if the course is in draft
        spotId:
          type: string
          description: The spot id of the course
        courseGroupsIds:
          description: The ids of the groups assigned to the course
          type: array
          items:
            type: string
        courseId:
          type: string
          description: The course id
      required:
        - id
        - type
        - courseTitle
        - courseDescription
        - coursePrivacy
        - isDraft
        - spotId
        - courseGroupsIds
        - courseId
    SearchableCourseStepApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum:
            - Channel
            - Collection
            - CollectionLink
            - CollectionPage
            - Course
            - CourseStep
            - Forum
            - LearningPath
            - Live
            - SpotMember
            - Topic
            - TopicAnswer
        courseTitle:
          type: string
          description: The title of the course containing the step
        isDraft:
          type: boolean
          description: Indicates if the course is still in draft
        stepTitle:
          type: string
          description: The title of the step
        stepContent:
          type: string
          description: The content of the step
        stepCount:
          type: number
          description: The total number of steps in the course
        stepOrder:
          type: number
          description: The order of the step within the course
        spotId:
          type: string
          description: The spot id of the course step
        courseId:
          type: string
          description: The course id of the course step
        stepId:
          type: string
          description: The identifier of the course step
      required:
        - id
        - type
        - courseTitle
        - isDraft
        - stepTitle
        - stepContent
        - stepCount
        - stepOrder
        - spotId
        - courseId
        - stepId
    SearchableLearningPathApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum:
            - Channel
            - Collection
            - CollectionLink
            - CollectionPage
            - Course
            - CourseStep
            - Forum
            - LearningPath
            - Live
            - SpotMember
            - Topic
            - TopicAnswer
        learningPathId:
          type: string
          description: The learning path id
        spotId:
          type: string
          description: The spot id of the learning path
        learningPathTitle:
          type: string
          description: The title of the learning path
        learningPathDescription:
          type: string
          description: The description of the learning path
        learningPathPrivacy:
          type: string
          description: The privacy of the learning path
          enum:
            - Public
            - Private
            - Secret
      required:
        - id
        - type
        - learningPathId
        - spotId
        - learningPathTitle
        - learningPathDescription
        - learningPathPrivacy
    InviteLiveSpeakerByEmailApiBody:
      type: object
      properties:
        email:
          type: string
          description: Email address of member to invite
        firstName:
          type: string
          description: Firstname of member to invite
        lastName:
          type: string
          description: Lastname of member to invite
        title:
          type: string
          description: Title of member to invite
        biography:
          type: string
          description: Biography of member to invite
      required:
        - email
        - firstName
        - lastName
    ThreadMessageReportedContentApiResponse:
      type: object
      properties:
        content:
          type: array
          description: The content of the report.
          items:
            type: object
            additionalProperties: true
      required:
        - content
    TopicReportedContentApiResponse:
      type: object
      properties:
        content:
          type: array
          description: The content of the report.
          items:
            type: object
            additionalProperties: true
        title:
          type: string
          description: The title of the topic.
      required:
        - content
        - title
    ChannelMessageReportedResourceApiResponse:
      type: object
      properties:
        createdAt:
          type: integer
          description: Timestamp in ms of creation date
        content:
          description: The content of the reported message
          allOf:
            - $ref: "#/components/schemas/ThreadMessageReportedContentApiResponse"
        channelId:
          type: string
          description: The id of the channel.
        channelName:
          type: string
          description: The name of the channel.
      required:
        - createdAt
        - content
        - channelId
        - channelName
    DiscussionMessageReportedResourceApiResponse:
      type: object
      properties:
        createdAt:
          type: integer
          description: Timestamp in ms of creation date
        content:
          description: The content of the reported message
          allOf:
            - $ref: "#/components/schemas/ThreadMessageReportedContentApiResponse"
        channelId:
          type: string
          description: The id of the channel used for the discussion.
      required:
        - createdAt
        - content
        - channelId
    LiveMessageReportedResourceApiResponse:
      type: object
      properties:
        createdAt:
          type: integer
          description: Timestamp in ms of creation date
        content:
          description: The content of the reported message
          allOf:
            - $ref: "#/components/schemas/ThreadMessageReportedContentApiResponse"
        liveId:
          type: string
          description: The id of the live.
        liveName:
          type: string
          description: The name of the live.
      required:
        - createdAt
        - content
        - liveId
        - liveName
    TopicAnswerReportedResourceApiResponse:
      type: object
      properties:
        createdAt:
          type: integer
          description: Timestamp in ms of creation date
        content:
          description: The content of the reported message
          allOf:
            - $ref: "#/components/schemas/ThreadMessageReportedContentApiResponse"
        topicId:
          type: string
          description: The id of the topic.
        topicName:
          type: string
          description: The name of the topic.
      required:
        - createdAt
        - content
        - topicId
        - topicName
    TopicReportedResourceApiResponse:
      type: object
      properties:
        createdAt:
          type: integer
          description: Timestamp in ms of creation date
        content:
          description: The content of the reported topic
          allOf:
            - $ref: "#/components/schemas/TopicReportedContentApiResponse"
        forumId:
          type: string
          description: The id of the forum.
        forumName:
          type: string
          description: The name of the forum.
      required:
        - createdAt
        - content
        - forumId
        - forumName
    ChannelWidgetContentMetadataApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the widget content metadata
        type:
          type: string
          enum:
            - Channel
            - Collection
            - Course
            - Forum
            - Link
            - Live
            - LearningPath
            - Page
            - RichText
            - Topic
          description: The type of the widget content metadata
        widgetId:
          type: string
          description: The id of the widget that contains the widget content metadata
        spotId:
          type: string
          description: The id of the spot that contains the widget
        widgetContentId:
          type: string
          description: The id of the widget content junction entity (only set for Content
            widget items)
        title:
          type: string
          description: The title of the channel
        emoji:
          type: string
          nullable: true
          description: The emoji of the channel
        messagesCount:
          type: integer
          description: The number of messages in the channel
        description:
          type: string
          description: The description of the channel
        link:
          type: string
          description: The link of the channel
      required:
        - id
        - type
        - widgetId
        - spotId
        - title
        - emoji
        - messagesCount
        - description
        - link
    CollectionWidgetContentMetadataApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the widget content metadata
        type:
          type: string
          enum:
            - Channel
            - Collection
            - Course
            - Forum
            - Link
            - Live
            - LearningPath
            - Page
            - RichText
            - Topic
          description: The type of the widget content metadata
        widgetId:
          type: string
          description: The id of the widget that contains the widget content metadata
        spotId:
          type: string
          description: The id of the spot that contains the widget
        widgetContentId:
          type: string
          description: The id of the widget content junction entity (only set for Content
            widget items)
        title:
          type: string
          description: The title of the collection
        emoji:
          type: string
          nullable: true
          description: The emoji of the collection
        pagesCount:
          type: integer
          description: The number of document pages in the collection
        linksCount:
          type: integer
          description: The number of document link in the collection
        description:
          type: string
          description: The description of the collection
        link:
          type: string
          description: The link of the collection
      required:
        - id
        - type
        - widgetId
        - spotId
        - title
        - emoji
        - pagesCount
        - linksCount
        - description
        - link
    CourseWidgetContentMetadataApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the widget content metadata
        type:
          type: string
          enum:
            - Channel
            - Collection
            - Course
            - Forum
            - Link
            - Live
            - LearningPath
            - Page
            - RichText
            - Topic
          description: The type of the widget content metadata
        widgetId:
          type: string
          description: The id of the widget that contains the widget content metadata
        spotId:
          type: string
          description: The id of the spot that contains the widget
        widgetContentId:
          type: string
          description: The id of the widget content junction entity (only set for Content
            widget items)
        title:
          type: string
          description: The title of the course
        description:
          type: string
          description: The description of the course
        cover:
          type: string
          nullable: true
          description: The link of the cover of the course.
        completionRate:
          type: number
          nullable: true
          description: The completion rate of the course participant if he/she is enrolled
            in the course
        duration:
          type: integer
          description: The duration in min of the course
        stepsCount:
          type: integer
          description: The number of steps in the course
        link:
          type: string
          description: The link of the course
      required:
        - id
        - type
        - widgetId
        - spotId
        - title
        - description
        - cover
        - completionRate
        - duration
        - stepsCount
        - link
    DocumentLinkWidgetContentMetadataApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the widget content metadata
        type:
          type: string
          enum:
            - Channel
            - Collection
            - Course
            - Forum
            - Link
            - Live
            - LearningPath
            - Page
            - RichText
            - Topic
          description: The type of the widget content metadata
        widgetId:
          type: string
          description: The id of the widget that contains the widget content metadata
        spotId:
          type: string
          description: The id of the spot that contains the widget
        widgetContentId:
          type: string
          description: The id of the widget content junction entity (only set for Content
            widget items)
        title:
          type: string
          description: The title of the document link
        cover:
          type: string
          nullable: true
          description: The link of the cover of the document link.
        collectionEmoji:
          type: string
          nullable: true
          description: The emoji of the collection that contains the document link
        collectionTitle:
          type: string
          description: The title of the collection that contains the document link
        collectionId:
          type: string
          description: The id of the collection that contains the document link
        link:
          type: string
          description: The link of the document link
      required:
        - id
        - type
        - widgetId
        - spotId
        - title
        - cover
        - collectionEmoji
        - collectionTitle
        - collectionId
        - link
    DocumentPageWidgetContentMetadataApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the widget content metadata
        type:
          type: string
          enum:
            - Channel
            - Collection
            - Course
            - Forum
            - Link
            - Live
            - LearningPath
            - Page
            - RichText
            - Topic
          description: The type of the widget content metadata
        widgetId:
          type: string
          description: The id of the widget that contains the widget content metadata
        spotId:
          type: string
          description: The id of the spot that contains the widget
        widgetContentId:
          type: string
          description: The id of the widget content junction entity (only set for Content
            widget items)
        title:
          type: string
          description: The title of the document page
        cover:
          type: string
          nullable: true
          description: The page of the cover of the document page.
        collectionEmoji:
          type: string
          nullable: true
          description: The emoji of the collection that contains the document page
        collectionTitle:
          type: string
          description: The title of the collection that contains the document page
        collectionId:
          type: string
          description: The id of the collection that contains the document page
        link:
          type: string
          description: The link of the document page
      required:
        - id
        - type
        - widgetId
        - spotId
        - title
        - cover
        - collectionEmoji
        - collectionTitle
        - collectionId
        - link
    ForumWidgetContentMetadataApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the widget content metadata
        type:
          type: string
          enum:
            - Channel
            - Collection
            - Course
            - Forum
            - Link
            - Live
            - LearningPath
            - Page
            - RichText
            - Topic
          description: The type of the widget content metadata
        widgetId:
          type: string
          description: The id of the widget that contains the widget content metadata
        spotId:
          type: string
          description: The id of the spot that contains the widget
        widgetContentId:
          type: string
          description: The id of the widget content junction entity (only set for Content
            widget items)
        title:
          type: string
          description: The title of the forum
        emoji:
          type: string
          nullable: true
          description: The emoji of the forum
        description:
          type: string
          description: The description of the forum
        topicsCount:
          type: integer
          description: The number of topic in the forum
        link:
          type: string
          description: The link of the forum
      required:
        - id
        - type
        - widgetId
        - spotId
        - title
        - emoji
        - description
        - topicsCount
        - link
    LearningPathWidgetContentMetadataContentApiResponse:
      type: object
      properties:
        type:
          type: string
          enum:
            - Course
            - Link
            - Live
            - Page
          description: The type of the learning path content
        count:
          type: integer
          description: The number of contents for this type
      required:
        - type
        - count
    LearningPathWidgetContentMetadataApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the widget content metadata
        type:
          type: string
          enum:
            - Channel
            - Collection
            - Course
            - Forum
            - Link
            - Live
            - LearningPath
            - Page
            - RichText
            - Topic
          description: The type of the widget content metadata
        widgetId:
          type: string
          description: The id of the widget that contains the widget content metadata
        spotId:
          type: string
          description: The id of the spot that contains the widget
        widgetContentId:
          type: string
          description: The id of the widget content junction entity (only set for Content
            widget items)
        title:
          type: string
          description: The title of the learning path
        description:
          type: string
          description: The description of the learning path
        completionRate:
          type: number
          nullable: true
          description: The completion rate of the learning path participant if he/she is
            enrolled in the learning path
        contents:
          description: The list of ordered content counts by type
          type: array
          items:
            $ref: "#/components/schemas/LearningPathWidgetContentMetadataContentApiResponse"
        link:
          type: string
          description: The link of the learning path
      required:
        - id
        - type
        - widgetId
        - spotId
        - title
        - description
        - completionRate
        - contents
        - link
    LiveWidgetContentMetadataApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the widget content metadata
        type:
          type: string
          enum:
            - Channel
            - Collection
            - Course
            - Forum
            - Link
            - Live
            - LearningPath
            - Page
            - RichText
            - Topic
          description: The type of the widget content metadata
        widgetId:
          type: string
          description: The id of the widget that contains the widget content metadata
        spotId:
          type: string
          description: The id of the spot that contains the widget
        widgetContentId:
          type: string
          description: The id of the widget content junction entity (only set for Content
            widget items)
        title:
          type: string
          description: The title of the live
        cover:
          type: string
          nullable: true
          description: The link of the cover of the live.
        startDate:
          type: integer
          description: Timestamp in ms of the start date of the live.
        endDate:
          type: integer
          description: Timestamp in ms of the end date of the live.
        liveSolution:
          type: string
          enum:
            - Youtube
            - Vimeo
            - BuiltIn
            - NoSolution
          description: The solution use for the live
        liveType:
          type: string
          enum:
            - Workshop
            - Conference
          description: The type of the live
          nullable: true
        status:
          type: string
          enum:
            - Ended
            - Planned
            - Live
          description: The status of the live
        messagesCount:
          type: integer
          description: The number of messages in the live
        link:
          type: string
          description: The link of the live
      required:
        - id
        - type
        - widgetId
        - spotId
        - title
        - cover
        - startDate
        - endDate
        - liveSolution
        - liveType
        - status
        - messagesCount
        - link
    RichTextWidgetContentMetadataApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the widget content metadata
        type:
          type: string
          enum:
            - Channel
            - Collection
            - Course
            - Forum
            - Link
            - Live
            - LearningPath
            - Page
            - RichText
            - Topic
          description: The type of the widget content metadata
        widgetId:
          type: string
          description: The id of the widget that contains the widget content metadata
        spotId:
          type: string
          description: The id of the spot that contains the widget
        widgetContentId:
          type: string
          description: The id of the widget content junction entity (only set for Content
            widget items)
        content:
          type: array
          description: The text content.
          items:
            type: object
            additionalProperties: true
          example:
            - type: p
              children:
                - text: My new live
      required:
        - id
        - type
        - widgetId
        - spotId
        - content
    TopicWidgetContentMetadataApiResponse:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier of the widget content metadata
        type:
          type: string
          enum:
            - Channel
            - Collection
            - Course
            - Forum
            - Link
            - Live
            - LearningPath
            - Page
            - RichText
            - Topic
          description: The type of the widget content metadata
        widgetId:
          type: string
          description: The id of the widget that contains the widget content metadata
        spotId:
          type: string
          description: The id of the spot that contains the widget
        widgetContentId:
          type: string
          description: The id of the widget content junction entity (only set for Content
            widget items)
        title:
          type: string
          description: The title of the topic
        description:
          type: string
          description: The description of the topic
        forumEmoji:
          type: string
          nullable: true
          description: The emoji of the forum that contains the topic
        forumTitle:
          type: string
          description: The title of the forum that contains the topic
        forumId:
          type: string
          description: The id of the forum that contains the topic
        score:
          type: integer
          description: The score of the topic
        answersCount:
          type: integer
          description: The number of answers in the topic
        link:
          type: string
          description: The link of the topic
      required:
        - id
        - type
        - widgetId
        - spotId
        - title
        - description
        - forumEmoji
        - forumTitle
        - forumId
        - score
        - answersCount
        - link
