openapi: 3.0.0
paths:
  /v1/activities~export:
    get:
      operationId: exportActivities
      summary: ""
      description: Export members activities for a spot
      parameters:
        - description: Search activities from this date
          name: fromDate[eq]
          required: false
          in: query
          schema:
            type: integer
        - 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
        - description: Search activities to this date
          name: toDate[eq]
          required: false
          in: query
          schema:
            type: integer
        - description: Search activities with a specific event type
          name: eventType[eq]
          required: false
          in: query
          schema:
            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
            type: string
        - description: Search activities which have the following event types
          name: eventType[in]
          required: false
          in: query
          schema:
            type: array
            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
        - 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
      tags:
        - activities
  /v1/channels/{channelId}/spotMembers:
    get:
      operationId: listChannelMembers
      summary: ""
      description: List Channel members
      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
        - description: The emails of spot member to include in the result
          name: email[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The firstnames of spot member to include in the result
          name: firstname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The lastnames of spot member to include in the result
          name: lastname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The roles of spot member to include in the result
          name: role[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Member
                - Admin
        - description: Spot members where registration date is before a specific date
            (Unix timestamp format)
          name: registrationDate[before]
          required: false
          in: query
          schema:
            type: integer
        - description: Spot members where registration date is after a specific date (Unix
            timestamp format)
          name: registrationDate[after]
          required: false
          in: query
          schema:
            type: integer
      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
      tags: &a1
        - channel
    post:
      operationId: addMemberToChannel
      summary: ""
      description: Add member to a channel
      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
      tags: *a1
  /v1/channels:
    post:
      operationId: createChannel
      summary: ""
      description: Create a channel
      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
      tags: *a1
    get:
      operationId: listChannels
      summary: ""
      description: List channels
      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
      tags: *a1
  /v1/channels/{channelId}:
    delete:
      operationId: deleteChannel
      summary: ""
      description: Delete a channel
      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
      tags: *a1
    put:
      operationId: updateChannel
      summary: ""
      description: Update a channel
      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
      tags: *a1
    get:
      operationId: getChannel
      summary: ""
      description: Get a channel
      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
      tags: *a1
  /v1/channels/{channelId}/spotMembers~bulkAdd:
    post:
      operationId: addMembersToChannel
      summary: ""
      description: Add members to a channel
      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
      tags: *a1
  /v1/channels/{channelId}/spotMembers~bulkRemove:
    post:
      operationId: removeMembersFromChannel
      summary: ""
      description: Remove members from a channel
      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
      tags: *a1
  /v1/channels~bulkCreate:
    post:
      operationId: createChannels
      summary: ""
      description: Create multiple channels
      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
      tags:
        - channel
  /v1/channels/{channelId}/groups:
    post:
      operationId: linkChannelGroup
      summary: ""
      description: Link a group
      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
      tags: &a2
        - channel
    get:
      operationId: listChannelGroups
      summary: ""
      description: list a group
      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
      tags: *a2
  /v1/channels/{channelId}/groups/{groupId}:
    delete:
      operationId: unlinkChannelGroup
      summary: ""
      description: Unlink a group from a channel
      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
      tags: *a2
  /v1/channels/{channelId}/groups~bulkAdd:
    post:
      operationId: linkChannelGroups
      summary: ""
      description: Link groups
      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
      tags: *a2
  /v1/channels/{channelId}/groups~bulkRemove:
    post:
      operationId: unlinkChannelGroups
      summary: ""
      description: Unlink groups from a channel
      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
      tags: *a2
  /v1/courses:
    get:
      operationId: listCourses
      summary: ""
      description: Get Courses
      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
        - description: Search Course with a specific status
          name: status[eq]
          required: false
          in: query
          schema:
            enum:
              - Draft
              - Published
            type: string
        - description: Search Course which have the following statuses
          name: status[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Draft
                - Published
        - description: Search Course with a specific privacy
          name: privacy[eq]
          required: false
          in: query
          schema:
            enum:
              - Secret
              - Public
            type: string
        - description: Search Course which have the following privacy
          name: privacy[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Secret
                - Public
        - description: Search Courses with a specific module name
          name: moduleName[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search Courses that contains this in the module name
          name: moduleName[contains]
          required: false
          in: query
          schema:
            type: string
      responses:
        "200":
          description: Courses returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListCoursesApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      tags:
        - course
  /v1/courses/{courseId}/groups~bulkAdd:
    post:
      operationId: linkCourseGroups
      summary: ""
      description: Link groups to a course
      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
      tags: &a3
        - course
  /v1/courses/{courseId}/groups~bulkRemove:
    post:
      operationId: unlinkCourseGroups
      summary: ""
      description: Unlink groups from a course
      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
      tags: *a3
  /v1/courses/{courseId}/groups:
    get:
      operationId: listCourseGroups
      summary: ""
      description: List groups linked to a course
      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
      tags: *a3
  /v1/courses/{courseId}/participants/{courseParticipantId}:
    get:
      operationId: getCourseParticipant
      summary: ""
      description: Get Course participant
      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
      tags: &a4
        - courseParticipant
  /v1/courses/{courseId}/participants:
    get:
      operationId: listCourseParticipants
      summary: ""
      description: Get Courses participants
      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
        - description: The firstnames of spot member to include in the result
          name: firstname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The lastnames of spot member to include in the result
          name: lastname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The emails of spot member to include in the result
          name: email[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: Search participants with a specific status
          name: status[eq]
          required: false
          in: query
          schema:
            enum:
              - Invited
              - Started
              - Completed
              - Unenrolled
            type: string
        - description: Search participants with one of theses status
          name: status[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Invited
                - Started
                - Completed
                - Unenrolled
      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
      tags: *a4
    post:
      operationId: inviteCourseParticipant
      summary: ""
      description: Invite a member as Course participant
      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
      tags: *a4
  /v1/courses/{courseId}/participants~bulkInvite:
    post:
      operationId: inviteCourseParticipants
      summary: ""
      description: Invite a members as Course participants
      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
      tags:
        - courseParticipant
  /v1/courses/{courseId}/participants/{courseParticipantId}/stepCompletions/{stepCompletionId}:
    get:
      operationId: getCourseStepCompletion
      summary: ""
      description: Get course step completion
      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
      tags: &a5
        - course
  /v1/courses/{courseId}/participants/{courseParticipantId}/stepCompletions:
    get:
      operationId: listCourseStepCompletions
      summary: ""
      description: List Course step completions
      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
        - description: Return elements with date before than this
          name: completedAt[lt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with date before than or equal to this
          name: completedAt[lte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with date after than this
          name: completedAt[gt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with date after than or equal to this
          name: completedAt[gte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with date equal to this
          name: completedAt[eq]
          required: false
          in: query
          schema:
            type: integer
        - description: Search course step completions with theses types of course content
          name: solution[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Page
                - Quiz
        - description: Search course step completions with a specific content type
          name: solution[eq]
          required: false
          in: query
          schema:
            enum:
              - Page
              - Quiz
            type: string
      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
      tags: *a5
  /v1/courses/{courseId}/steps:
    get:
      operationId: listCourseSteps
      summary: ""
      description: List Course steps
      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
        - description: Search course steps with a specific title
          name: title[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search course steps that contains this in the title
          name: title[contains]
          required: false
          in: query
          schema:
            type: string
        - description: Search course steps with theses types of content
          name: solution[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Page
                - Quiz
        - description: Search course steps with a specific content type
          name: solution[eq]
          required: false
          in: query
          schema:
            enum:
              - Page
              - Quiz
            type: string
      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
      tags:
        - course
  /v1/spotMembers/{spotMemberId}/customPropertiesValues~bulkUpsert:
    post:
      operationId: upsertCustomPropertiesValues
      summary: ""
      description: Upsert custom properties values linked to a spot member
      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
      tags: &a6
        - customProperty
  /v1/spotMembers/{spotMemberId}/customPropertiesValues/{customPropertySlug}:
    put:
      operationId: updateCustomPropertiesValues
      summary: ""
      description: Update custom property values linked to a spot member
      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
      tags: *a6
  /v1/spotMembers/{spotMemberId}/customPropertiesValues:
    get:
      operationId: listCustomPropertiesValues
      summary: ""
      description: Get custom properties values linked to a spot member
      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
      tags: *a6
  /v1/forums/{forumId}:
    get:
      operationId: getForum
      summary: ""
      description: Get a forum
      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
      tags: &a7
        - forum
    put:
      operationId: updateForum
      summary: ""
      description: Update a forum
      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
      tags: *a7
    delete:
      operationId: deleteForum
      summary: ""
      description: Delete a forum
      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
      tags: *a7
  /v1/forums:
    get:
      operationId: listForums
      summary: ""
      description: List forums
      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
        - description: Search Forum with a specified name
          name: name[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search Forum that contains this value in his name
          name: name[contains]
          required: false
          in: query
          schema:
            type: string
      responses:
        "200":
          description: Forums returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListForumsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      tags: *a7
    post:
      operationId: createForum
      summary: ""
      description: Create a forum
      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
      tags: *a7
  /v1/forums/{forumId}/spotMembers:
    get:
      operationId: listForumMembers
      summary: ""
      description: List Forum Members
      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
        - description: The emails of spot member to include in the result
          name: email[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The firstnames of spot member to include in the result
          name: firstname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The lastnames of spot member to include in the result
          name: lastname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The roles of spot member to include in the result
          name: role[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Member
                - Admin
        - description: Spot members where registration date is before a specific date
            (Unix timestamp format)
          name: registrationDate[before]
          required: false
          in: query
          schema:
            type: integer
        - description: Spot members where registration date is after a specific date (Unix
            timestamp format)
          name: registrationDate[after]
          required: false
          in: query
          schema:
            type: integer
      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
      tags: *a7
    post:
      operationId: addMemberToForum
      summary: ""
      description: Add member to a forum
      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
      tags: *a7
  /v1/forums/{forumId}/spotMembers~bulkAdd:
    post:
      operationId: addMembersToForum
      summary: ""
      description: Add members to a forum
      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
      tags: *a7
  /v1/forums/{forumId}/spotMembers~bulkRemove:
    post:
      operationId: removeMembersFromForum
      summary: ""
      description: Remove members from a forum
      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
      tags: *a7
  /v1/forums~bulkCreate:
    post:
      operationId: createForums
      summary: ""
      description: Create multiple forums
      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
      tags:
        - forum
  /v1/groups/{groupId}/spotMembers:
    get:
      operationId: listGroupMembers
      summary: ""
      description: List Group members
      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
        - description: The emails of spot member to include in the result
          name: email[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The firstnames of spot member to include in the result
          name: firstname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The lastnames of spot member to include in the result
          name: lastname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The roles of spot member to include in the result
          name: role[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Member
                - Admin
        - description: Spot members where registration date is before a specific date
            (Unix timestamp format)
          name: registrationDate[before]
          required: false
          in: query
          schema:
            type: integer
        - description: Spot members where registration date is after a specific date (Unix
            timestamp format)
          name: registrationDate[after]
          required: false
          in: query
          schema:
            type: integer
      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
      tags: &a8
        - group
    post:
      operationId: addMemberToGroup
      summary: ""
      description: Add member to a group
      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
      tags: *a8
  /v1/groups:
    post:
      operationId: createGroup
      summary: ""
      description: Create a group
      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
      tags: *a8
    get:
      operationId: listGroups
      summary: ""
      description: List groups
      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
        - description: Get a group by a specific name
          name: name[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Get a group that contains this name
          name: name[contains]
          required: false
          in: query
          schema:
            type: string
      responses:
        "200":
          description: Groups returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListGroupsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      tags: *a8
  /v1/groups/{groupId}:
    delete:
      operationId: deleteGroup
      summary: ""
      description: Delete a group
      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
      tags: *a8
    put:
      operationId: updateGroup
      summary: ""
      description: Update a group
      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
      tags: *a8
    get:
      operationId: getGroup
      summary: ""
      description: Get a group
      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
      tags: *a8
  /v1/groups/{groupId}/spotMembers~bulkAdd:
    post:
      operationId: addMembersToGroup
      summary: ""
      description: Add members to a group
      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
      tags: *a8
  /v1/groups/{groupId}/spotMembers~bulkRemove:
    post:
      operationId: removeMembersFromGroup
      summary: ""
      description: Remove members from a group
      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
      tags: *a8
  /v1/groups~bulkCreate:
    post:
      operationId: createGroups
      summary: ""
      description: Create multiple groups
      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
      tags:
        - group
  /v1/learningPaths:
    get:
      operationId: listLearningPaths
      summary: ""
      description: Get Learning Paths
      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
        - description: Search Learning Path with a specific privacy
          name: privacy[eq]
          required: false
          in: query
          schema:
            enum:
              - Public
              - Private
              - Secret
            type: string
        - description: Search Learning Path which have the following privacy
          name: privacy[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Public
                - Private
                - Secret
      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
      tags:
        - learningPath
  /v1/learningPaths/{learningPathId}/groups~bulkAdd:
    post:
      operationId: linkLearningPathGroups
      summary: ""
      description: Link groups to a learning path
      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
      tags: &a9
        - learningPath
  /v1/learningPaths/{learningPathId}/groups~bulkRemove:
    post:
      operationId: unlinkLearningPathGroups
      summary: ""
      description: Unlink groups from a learning path
      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
      tags: *a9
  /v1/learningPaths/{learningPathId}/groups:
    get:
      operationId: listLearningPathGroups
      summary: ""
      description: List groups linked to a learning path
      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
      tags: *a9
  /v1/learningPaths/{learningPathId}/participants/{learningPathParticipantId}:
    get:
      operationId: getLearningPathParticipant
      summary: ""
      description: Get Learning path participant
      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
      tags: &a10
        - learningPath
  /v1/learningPaths/{learningPathId}/participants:
    get:
      operationId: listLearningPathParticipants
      summary: ""
      description: List Learning path participants
      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
        - description: The firstnames of spot member to include in the result
          name: firstname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The lastnames of spot member to include in the result
          name: lastname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The emails of spot member to include in the result
          name: email[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: Search participants with a specific status
          name: status[eq]
          required: false
          in: query
          schema:
            enum:
              - Invited
              - Started
              - Completed
              - Unenrolled
            type: string
        - description: Search participants with one of these status
          name: status[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Invited
                - Started
                - Completed
                - Unenrolled
      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
      tags: *a10
    post:
      operationId: inviteLearningPathParticipant
      summary: ""
      description: Invite a member as Learning path participant
      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
      tags: *a10
  /v1/learningPaths/{learningPathId}/participants~bulkInvite:
    post:
      operationId: inviteLearningPathParticipants
      summary: ""
      description: Invite members as Learning path participants
      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
      tags:
        - learningPath
  /v1/learningPaths/{learningPathId}/steps:
    get:
      operationId: listLearningPathSteps
      summary: ""
      description: List Learning path steps
      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
        - description: Search learning path steps with a specific title
          name: contentTitle[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search learning path steps whose title contains this string
          name: contentTitle[contains]
          required: false
          in: query
          schema:
            type: string
        - description: Search learning path steps with these types of content
          name: contentType[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Course
                - Link
                - Live
                - Page
        - description: Search learning path steps with a specific content type
          name: contentType[eq]
          required: false
          in: query
          schema:
            enum:
              - Course
              - Link
              - Live
              - Page
            type: string
      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
      tags:
        - learningPath
  /v1/learningPaths/{learningPathId}/participants/{learningPathParticipantId}/stepCompletions:
    get:
      operationId: listLearningPathStepCompletions
      summary: ""
      description: List Learning path step completions
      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
        - description: Return elements with date before than this
          name: completedAt[lt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with date before than or equal to this
          name: completedAt[lte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with date after than this
          name: completedAt[gt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with date after than or equal to this
          name: completedAt[gte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with date equal to this
          name: completedAt[eq]
          required: false
          in: query
          schema:
            type: integer
        - description: Search learning path content completions with these types of content
          name: contentType[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Course
                - Link
                - Live
                - Page
        - description: Search learning path content completions with a specific content type
          name: contentType[eq]
          required: false
          in: query
          schema:
            enum:
              - Course
              - Link
              - Live
              - Page
            type: string
      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
      tags: &a11
        - learningPath
  /v1/learningPaths/{learningPathId}/participants/{learningPathParticipantId}/stepCompletions/{stepCompletionId}:
    get:
      operationId: getLearningPathStepCompletion
      summary: ""
      description: Get learning path step completion
      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
      tags: *a11
  /v1/lives:
    get:
      operationId: listLives
      summary: ""
      description: List Lives
      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
        - description: Search Lives with a specific title
          name: title[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search Lives that contains this in the title
          name: title[contains]
          required: false
          in: query
          schema:
            type: string
        - description: Search Lives with a specific status
          name: status[eq]
          required: false
          in: query
          schema:
            enum:
              - Ended
              - Planned
              - Live
            type: string
        - description: Return elements with date before than this
          name: startDate[lt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with date before than or equal to this
          name: startDate[lte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with date after than this
          name: startDate[gt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with date after than or equal to this
          name: startDate[gte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with date equal to this
          name: startDate[eq]
          required: false
          in: query
          schema:
            type: integer
        - description: Search Lives with theses types of solution
          name: solution[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Youtube
                - Vimeo
                - BuiltIn
                - NoSolution
        - description: Search Lives with a specific solution
          name: solution[eq]
          required: false
          in: query
          schema:
            enum:
              - Youtube
              - Vimeo
              - BuiltIn
              - NoSolution
            type: string
        - description: Search Lives with or without replay
          name: replay[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search Lives with theses types of BuiltInType
          name: builtInType[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Workshop
                - Conference
        - description: Search Lives with a specific BuiltInType
          name: builtInType[eq]
          required: false
          in: query
          schema:
            enum:
              - Workshop
              - Conference
            type: string
        - description: Return elements with value lower than this
          name: averageViewTime[lt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value lower than or equal to this
          name: averageViewTime[lte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value greater than this
          name: averageViewTime[gt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value greater than or equal to this
          name: averageViewTime[gte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value equal to this
          name: averageViewTime[eq]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value lower than this
          name: invited[lt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value lower than or equal to this
          name: invited[lte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value greater than this
          name: invited[gt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value greater than or equal to this
          name: invited[gte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value equal to this
          name: invited[eq]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value lower than this
          name: registrant[lt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value lower than or equal to this
          name: registrant[lte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value greater than this
          name: registrant[gt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value greater than or equal to this
          name: registrant[gte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value equal to this
          name: registrant[eq]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value lower than this
          name: attendee[lt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value lower than or equal to this
          name: attendee[lte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value greater than this
          name: attendee[gt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value greater than or equal to this
          name: attendee[gte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value equal to this
          name: attendee[eq]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value lower than this
          name: attendanceRate[lt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value lower than or equal to this
          name: attendanceRate[lte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value greater than this
          name: attendanceRate[gt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value greater than or equal to this
          name: attendanceRate[gte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value equal to this
          name: attendanceRate[eq]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value lower than this
          name: totalReplayView[lt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value lower than or equal to this
          name: totalReplayView[lte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value greater than this
          name: totalReplayView[gt]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value greater than or equal to this
          name: totalReplayView[gte]
          required: false
          in: query
          schema:
            type: integer
        - description: Return elements with value equal to this
          name: totalReplayView[eq]
          required: false
          in: query
          schema:
            type: integer
      responses:
        "200":
          description: Lives returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListLivesApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      tags: &a12
        - live
    post:
      operationId: createLive
      summary: ""
      description: Create a Live
      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
      tags: *a12
  /v1/lives/{liveId}:
    delete:
      operationId: deleteLive
      summary: ""
      description: Delete a Live
      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
      tags: *a12
    put:
      operationId: updateLive
      summary: ""
      description: Update a Live
      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
      tags: *a12
    get:
      operationId: getLive
      summary: ""
      description: Get a Live
      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
      tags: *a12
  /v1/lives/{liveId}/groups/{groupId}:
    delete:
      operationId: unlinkLiveGroup
      summary: ""
      description: Unlink a group from a live
      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
      tags: &a13
        - live
  /v1/lives/{liveId}/groups~bulkRemove:
    post:
      operationId: unlinkLiveGroups
      summary: ""
      description: Unlink groups from a live
      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
      tags: *a13
  /v1/lives/{liveId}/groups:
    get:
      operationId: listLiveGroups
      summary: ""
      description: List groups linked to a Live
      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
      tags: *a13
    post:
      operationId: linkLiveGroup
      summary: ""
      description: Link a group
      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
      tags: *a13
  /v1/lives/{liveId}/groups~bulkAdd:
    post:
      operationId: linkLiveGroups
      summary: ""
      description: Link groups
      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
      tags: *a13
  /v1/lives/{liveId}/speakers:
    post:
      operationId: inviteLiveSpeaker
      summary: ""
      description: Invite a member as Live speaker
      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
      tags: &a14
        - liveParticipant
    get:
      operationId: listLiveSpeakers
      summary: ""
      description: List Live speakers
      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
        - description: Search participants with a specific firstname
          name: firstname[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search participants that contains this in the firstname
          name: firstname[contains]
          required: false
          in: query
          schema:
            type: string
        - description: Search participants with a specific lastname
          name: lastname[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search participants that contains this in the lastname
          name: lastname[contains]
          required: false
          in: query
          schema:
            type: string
        - description: Search participants with a specific email
          name: email[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search participants that contains this in the email
          name: email[contains]
          required: false
          in: query
          schema:
            type: string
        - description: Search participants with a specific status
          name: status[eq]
          required: false
          in: query
          schema:
            enum:
              - Accepted
              - Invited
              - Declined
            type: string
        - description: Search participants with one of theses status
          name: status[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Accepted
                - Invited
                - Declined
        - description: Search for participants who replayed the Live
          name: hasReplayed[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search for participants who participated to the Live
          name: hasParticipated[eq]
          required: false
          in: query
          schema:
            type: string
        - 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
      tags: *a14
  /v1/lives/{liveId}/participants:
    post:
      operationId: inviteLiveParticipant
      summary: ""
      description: Invite a member as Live participant
      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
      tags: *a14
    get:
      operationId: listLiveParticipants
      summary: ""
      description: List Live participants
      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
        - description: Search participants with a specific firstname
          name: firstname[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search participants that contains this in the firstname
          name: firstname[contains]
          required: false
          in: query
          schema:
            type: string
        - description: Search participants with a specific lastname
          name: lastname[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search participants that contains this in the lastname
          name: lastname[contains]
          required: false
          in: query
          schema:
            type: string
        - description: Search participants with a specific email
          name: email[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search participants that contains this in the email
          name: email[contains]
          required: false
          in: query
          schema:
            type: string
        - description: Search participants with a specific type
          name: type[eq]
          required: false
          in: query
          schema:
            enum:
              - Participant
              - Speaker
              - Host
            type: string
        - description: Search participants with one of theses types
          name: type[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Participant
                - Speaker
                - Host
        - description: Search participants with a specific status
          name: status[eq]
          required: false
          in: query
          schema:
            enum:
              - Accepted
              - Invited
              - Declined
            type: string
        - description: Search participants with one of theses status
          name: status[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Accepted
                - Invited
                - Declined
        - description: Search for participants who replayed the Live
          name: hasReplayed[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search for participants who participated to the Live
          name: hasParticipated[eq]
          required: false
          in: query
          schema:
            type: string
        - 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
      tags: *a14
  /v1/lives/{liveId}/speakers~bulkInvite:
    post:
      operationId: inviteLiveSpeakers
      summary: ""
      description: Invite multiple members as Live speaker
      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
      tags: &a15
        - liveParticipant
  /v1/lives/{liveId}/participants~bulkInvite:
    post:
      operationId: inviteLiveParticipants
      summary: ""
      description: Invite multiple members as Live participant
      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
      tags: *a15
  /v1/spots/{spotId}:
    put:
      operationId: updateSpot
      summary: ""
      description: Update a spot
      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
      tags:
        - spot
  /v1/spotMembers:
    get:
      operationId: listSpotMembers
      summary: ""
      description: List Spot members
      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
        - description: The emails of spot member to include in the result
          name: email[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The firstnames of spot member to include in the result
          name: firstname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The lastnames of spot member to include in the result
          name: lastname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The roles of spot member to include in the result
          name: role[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Member
                - Admin
        - description: The custom role ID of Spot member
          name: customRoleId[eq]
          required: false
          in: query
          schema:
            type: string
        - description: The status of spot member to include in the result
          name: status[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Accepted
                - Deactivated
                - DeclinedInvitation
                - Invited
                - Left
                - Pending
                - Rejected
        - description: Spot members where invitation date is before a specific date (Unix
            timestamp format)
          name: invitationDate[before]
          required: false
          in: query
          schema:
            type: integer
        - description: Spot members where invitation date is after a specific date (Unix
            timestamp format)
          name: invitationDate[after]
          required: false
          in: query
          schema:
            type: integer
        - description: Spot members where registration date is before a specific date
            (Unix timestamp format)
          name: registrationDate[before]
          required: false
          in: query
          schema:
            type: integer
        - description: Spot members where registration date is after a specific date (Unix
            timestamp format)
          name: registrationDate[after]
          required: false
          in: query
          schema:
            type: integer
        - description: Spot members where updated date is before a specific date (Unix
            timestamp format)
          name: updatedAt[before]
          required: false
          in: query
          schema:
            type: integer
        - description: Spot members where updated date is after a specific date (Unix
            timestamp format)
          name: updatedAt[after]
          required: false
          in: query
          schema:
            type: integer
      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
      tags: &a16
        - spotMember
    post:
      operationId: inviteSpotMember
      summary: ""
      description: Invite a spot member
      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
      tags: *a16
  /v1/spotMembers/{spotMemberId}:
    get:
      operationId: getSpotMember
      summary: ""
      description: Get a spot member
      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
      tags: *a16
    put:
      operationId: updateSpotMember
      summary: ""
      description: Update a spot member
      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
      tags: *a16
  /v1/spotMembers/{spotMemberId}/customFormAnswers:
    get:
      operationId: listSpotMemberCustomFormAnswers
      summary: ""
      description: Get custom form answers for a spot member
      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
        - description: The question label of custom form answers to include in the result
          name: questionLabel[contains]
          required: false
          in: query
          schema:
            type: string
      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
      tags: *a16
  /v1/spotMembers~bulkInvite:
    post:
      operationId: inviteSpotMembers
      summary: ""
      description: Invite multiple spot members
      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
      tags:
        - spotMember
  /v1/spotMemberCustomRole/{customRoleId}:
    put:
      operationId: updateSpotMemberCustomRole
      summary: ""
      description: Update a custom role
      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
      tags: &a17
        - spotMemberCustomRole
    get:
      operationId: getSpotMemberCustomRole
      summary: ""
      description: Get a custom role
      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
      tags: *a17
    delete:
      operationId: deleteSpotMemberCustomRole
      summary: ""
      description: Delete a Spot member custom role
      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
      tags: *a17
  /v1/spotMemberCustomRole:
    post:
      operationId: createSpotMemberCustomRole
      summary: ""
      description: Create spot member custom role
      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
      tags: *a17
    get:
      operationId: listSpotMemberCustomRoles
      summary: ""
      description: List Spot member custom roles
      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
        - description: Search custom role with a specified label
          name: label[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search custom role that contains this value in his label
          name: label[contains]
          required: false
          in: query
          schema:
            type: string
        - description: Search custom role which have the following label
          name: label[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
      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
      tags: *a17
  /v1/tags:
    get:
      operationId: listTags
      summary: ""
      description: List tags
      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
        - description: Get a tag by a specific name
          name: name[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Get a tag that contains this name
          name: name[contains]
          required: false
          in: query
          schema:
            type: string
      responses:
        "200":
          description: Tags returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListTagsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      tags: &a18
        - tag
    post:
      operationId: createTag
      summary: ""
      description: Create a tag
      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
      tags: *a18
  /v1/tags/{tagId}:
    get:
      operationId: getTag
      summary: ""
      description: Get a tag
      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
      tags: *a18
    delete:
      operationId: deleteTag
      summary: ""
      description: Delete a tag
      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
      tags: *a18
    put:
      operationId: updateTag
      summary: ""
      description: Update a tag
      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
      tags: *a18
  /v1/tags/{tagId}/spotMembers~bulkAssign:
    post:
      operationId: assignSpotMembers
      summary: ""
      description: Assign spot members to a tag
      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
      tags: *a18
  /v1/tags/{tagId}/spotMembers~bulkUnassign:
    post:
      operationId: unassignSpotMembers
      summary: ""
      description: Unassign spot members to a tag
      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
      tags: *a18
  /v1/tags/{tagId}/spotMembers:
    get:
      operationId: listTaggedSpotMembers
      summary: ""
      description: List Tagged members
      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
        - description: The emails of spot member to include in the result
          name: email[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The firstnames of spot member to include in the result
          name: firstname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The lastnames of spot member to include in the result
          name: lastname[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
        - description: The roles of spot member to include in the result
          name: role[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Member
                - Admin
        - description: Spot members where registration date is before a specific date
            (Unix timestamp format)
          name: registrationDate[before]
          required: false
          in: query
          schema:
            type: integer
        - description: Spot members where registration date is after a specific date (Unix
            timestamp format)
          name: registrationDate[after]
          required: false
          in: query
          schema:
            type: integer
      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
      tags: *a18
  /v1/tags~bulkCreate:
    post:
      operationId: createTags
      summary: ""
      description: Create multiple tags
      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
      tags:
        - tag
  /v1/forums/{forumId}/topics/{topicId}:
    get:
      operationId: getTopic
      summary: ""
      description: Get a topic
      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
      tags: &a19
        - topic
    put:
      operationId: updateTopic
      summary: ""
      description: Update a topic
      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
      tags: *a19
    delete:
      operationId: deleteTopic
      summary: ""
      description: Delete a topic
      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
      tags: *a19
  /v1/forums/{forumId}/topics:
    post:
      operationId: createTopic
      summary: ""
      description: Create a topic
      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
      tags: *a19
    get:
      operationId: listTopics
      summary: ""
      description: List topics
      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
        - description: Search Topic with a specified name
          name: name[eq]
          required: false
          in: query
          schema:
            type: string
        - description: Search Topic that contains this value in his name
          name: name[contains]
          required: false
          in: query
          schema:
            type: string
      responses:
        "200":
          description: Topics returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListTopicsApiResponse"
        "400":
          description: Malformed payload
        "401":
          description: Unauthorized
        "403":
          description: Forbidden
      tags: *a19
  /v1/forums/{forumId}/topics~bulkCreate:
    post:
      operationId: createTopics
      summary: ""
      description: Create multiple topics
      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
      tags:
        - topic
  /v1/search:
    get:
      operationId: search
      summary: ""
      description: Search for resources in the spot
      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
        - description: The types of entities to include in the search
          name: searchableTypes[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Channel
                - Collection
                - CollectionLink
                - CollectionPage
                - Course
                - CourseStep
                - Forum
                - LearningPath
                - Live
                - SpotMember
                - Topic
                - TopicAnswer
      responses:
        "200":
          description: Search results
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SearchApiResponse"
        "400":
          description: Malformed payload
      tags:
        - search
  /v1/spotMembers/{spotMemberId}/notifications~unreadCount:
    get:
      operationId: getUnreadNotificationsCount
      summary: ""
      description: Get unread notifications count
      parameters:
        - name: spotMemberId
          required: true
          in: path
          description: The id of the Spot member
          schema:
            type: string
        - description: The types of notifications to include in the result
          name: types[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - AskJoinPrivateSpot
                - ChannelMessageMention
                - ChannelMessageReported
                - CourseGeneratedFailed
                - CourseGeneratedSuccess
                - CourseGenerationPending
                - CourseParticipantInvited
                - DiscussionMessageReported
                - DocumentMention
                - HubspotConnectionLost
                - LearningPathParticipantInvited
                - LiveMention
                - LiveMessageMention
                - LiveMessageReported
                - LiveParticipantInvited
                - LiveStarted
                - MemberAddedOnChannel
                - MemberAddedToForum
                - MemberAddedToCollection
                - MessageReplied
                - NewDirectMessage
                - NewMessage
                - ReportStatusUpdated
                - SmtpServerConnectionFailed
                - SpotMemberRoleUpdated
                - SpotMention
                - TopicAnswerReported
                - TopicCreated
                - TopicMention
                - TopicMessageCreated
                - TopicMessageMention
                - TopicReported
                - UserInvitedToSpot
                - UserJoinedPublicSpot
      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
      tags: &a20
        - notification
  /v1/spotMembers/{spotMemberId}/notifications~markAsRead:
    post:
      operationId: markNotificationsAsRead
      summary: ""
      description: Mark notifications as read
      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
      tags: *a20
  /v1/spotMembers/{spotMemberId}/notifications:
    get:
      operationId: listNotifications
      summary: ""
      description: List notifications
      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
        - description: The types of notifications to include in the result
          name: types[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - AskJoinPrivateSpot
                - ChannelMessageMention
                - ChannelMessageReported
                - CourseGeneratedFailed
                - CourseGeneratedSuccess
                - CourseGenerationPending
                - CourseParticipantInvited
                - DiscussionMessageReported
                - DocumentMention
                - HubspotConnectionLost
                - LearningPathParticipantInvited
                - LiveMention
                - LiveMessageMention
                - LiveMessageReported
                - LiveParticipantInvited
                - LiveStarted
                - MemberAddedOnChannel
                - MemberAddedToForum
                - MemberAddedToCollection
                - MessageReplied
                - NewDirectMessage
                - NewMessage
                - ReportStatusUpdated
                - SmtpServerConnectionFailed
                - SpotMemberRoleUpdated
                - SpotMention
                - TopicAnswerReported
                - TopicCreated
                - TopicMention
                - TopicMessageCreated
                - TopicMessageMention
                - TopicReported
                - UserInvitedToSpot
                - UserJoinedPublicSpot
        - description: List notifications read or unread
          name: isRead[eq]
          required: false
          in: query
          schema:
            type: boolean
      responses:
        "200":
          description: Notifications returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListNotificationsApiResponse"
        "400":
          description: Malformed payload
        "404":
          description: Spot member not found
      tags: *a20
  /v1/reportedResources/{reportedResourceId}/reports:
    get:
      operationId: listReports
      summary: ""
      description: List Reports
      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
        - description: The status of the report
          name: status[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - PendingReview
                - Declined
                - Accepted
        - description: The reason of the report
          name: reason[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Misinformation
                - InappropriateContent
                - HateSpeechOrDiscrimination
                - HarassmentOrOffensive
                - Spam
                - Other
        - description: Reports where creation date is before a specific date (Unix
            timestamp format)
          name: creationDate[before]
          required: false
          in: query
          schema:
            type: integer
        - description: Reports where creation date is after a specific date (Unix
            timestamp format)
          name: creationDate[after]
          required: false
          in: query
          schema:
            type: integer
      responses:
        "200":
          description: Reports returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListSpotMembersApiResponse"
        "400":
          description: Malformed payload
      tags: &a21
        - report
  /v1/reportedResources/{reportedResourceId}/reports/{reportId}:
    get:
      operationId: getReport
      summary: ""
      description: Get a report
      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
      tags: *a21
  /v1/reportedResources/{reportedResourceId}/context:
    get:
      operationId: getReportedResourceContext
      summary: ""
      description: Get a reported resource context
      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
      tags: &a22
        - reportedResource
  /v1/reportedResources~bulkValidate:
    post:
      operationId: validateReportedResources
      summary: ""
      description: Validate reported resources
      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
      tags: *a22
  /v1/reportedResources/{reportedResourceId}/validate:
    post:
      operationId: validateReportedResource
      summary: ""
      description: Validate a reported resource
      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
      tags: *a22
  /v1/reportedResources:
    get:
      operationId: listReportedResources
      summary: ""
      description: List Reported resources
      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
        - description: The status of the reported resource
          name: status[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - PendingReview
                - Declined
                - Accepted
        - description: The reason of the report
          name: reason[in]
          required: false
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - Misinformation
                - InappropriateContent
                - HateSpeechOrDiscrimination
                - HarassmentOrOffensive
                - Spam
                - Other
        - description: Reports where creation date is before a specific date (Unix
            timestamp format)
          name: creationDate[before]
          required: false
          in: query
          schema:
            type: integer
        - description: Reports where creation date is after a specific date (Unix
            timestamp format)
          name: creationDate[after]
          required: false
          in: query
          schema:
            type: integer
      responses:
        "200":
          description: Reported resources returned successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListReportedResourcesApiResponse"
        "400":
          description: Malformed payload
      tags: *a22
  /v1/reportedResources/{reportedResourceId}:
    get:
      operationId: getReportedResource
      summary: ""
      description: Get a reported resource
      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
      tags: *a22
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:
    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
    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
    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
          description: Name of the module this course belongs to, if applicable.
          nullable: true
      required:
        - id
        - title
        - description
        - privacy
        - status
        - navigationMode
        - moduleName
    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
    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: &a23
            - Page
            - Quiz
        completedAt:
          type: integer
          description: Timestamp in ms of completion date
        quizScore:
          description: The details of the quiz score.
          nullable: true
          allOf:
            - $ref: "#/components/schemas/QuizScoreApiResponse"
      required:
        - id
        - stepId
        - courseParticipantId
        - contentType
        - completedAt
        - quizScore
    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: *a23
        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
    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: &a24
            - 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: *a24
      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
    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
    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
    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
    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
    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
    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
    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:
          description: The description of the Live.
          example:
            - type: p
              children:
                - text: My new live
          type: array
          items:
            type: object
        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
    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:
          description: The description of the Live.
          example:
            - type: p
              children:
                - text: My new live
          type: array
          items:
            type: object
        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
          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
    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
    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: &a25
            - 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
            - 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: *a25
          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
          allOf:
            - $ref: "#/components/schemas/UpdateThemeApiBody"
    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
    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
    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
    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
    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
    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
          allOf:
            - $ref: "#/components/schemas/UtmParametersApiResponse"
      required:
        - id
        - email
        - lang
        - theme
        - timezone
        - marketingOptinAcceptedAt
        - utmParameters
    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
    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
            - 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
    LHSIdsFilters:
      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/LHSIdsFilters"
    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
            - 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
          allOf:
            - $ref: "#/components/schemas/NotificationLogApiResponse"
      required:
        - id
        - userId
        - logId
        - isRead
        - createdAt
        - log
    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
    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: &a26
            - 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: *a26
      required:
        - status
    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:
          description: The touch points for the integration
          type: array
          items:
            type: object
      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
    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
    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
        mode:
          type: string
          description: The rendering mode for the widget
          enum:
            - Beacon
            - List
        widgetMetadata:
          type: array
          description: The widget contents metadata
          items:
            anyOf: &a28
              - $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
        - 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
    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
            - 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: &a27
            - 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
          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: *a27
        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
    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: *a28
      required:
        - widgetId
        - widgetMetadata
    ListWidgetMetadataResponse:
      type: object
      properties:
        items:
          description: The list of widget metadata responses
          type: array
          items:
            $ref: "#/components/schemas/WidgetMetadataResponse"
      required:
        - items
    CheckProactiveApiBody:
      type: object
      properties:
        url:
          type: string
          description: The page URL the user is currently visiting
      required:
        - url
    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.
        conversationStatus:
          type: string
          enum:
            - Pending
            - Indexing
            - Ready
            - Failed
          description: RAG indexation state, maintained by the indexation job.
      required:
        - enabled
        - proactiveEnabled
        - conversationEnabled
        - conversationStatus
    CreateConversationApiBody:
      type: object
      properties:
        intentId:
          type: string
          description: PlaybookIntent id when the conversation is anchored on a
            conversational hotspot.
    CreateConversationApiResponse:
      type: object
      properties:
        conversationId:
          type: string
          description: Id of the freshly created conversation.
      required:
        - conversationId
    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
    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
    SendMessageApiBody:
      type: object
      properties:
        content:
          type: string
          description: Text content of the user message to send to the agent.
          maxLength: 8000
      required:
        - content
    MessageApiResponse:
      type: object
      properties:
        id:
          type: string
        role:
          type: string
          enum:
            - User
            - Assistant
            - System
        content:
          type: string
        metadata:
          type: object
          nullable: true
        createdAt:
          type: string
          description: ISO 8601 timestamp
      required:
        - id
        - role
        - content
        - createdAt
    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
    SearchableTopicApiResponse:
      type: object
      properties:
        id:
          type: string
          description: Entity unique identifier
        type:
          type: string
          description: Entity type
          enum: &a29
            - 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: *a29
        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: *a29
        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: *a29
        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: *a29
        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: *a29
        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: *a29
        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: *a29
        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: *a29
        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: *a29
        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: *a29
        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: *a29
        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:
          description: The content of the report.
          type: array
          items:
            type: object
      required:
        - content
    TopicReportedContentApiResponse:
      type: object
      properties:
        content:
          description: The content of the report.
          type: array
          items:
            type: object
        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: &a30
            - 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: *a30
          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: *a30
          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: *a30
          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: *a30
          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: *a30
          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: *a30
          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: *a30
          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: *a30
          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:
          description: The text content.
          example:
            - type: p
              children:
                - text: My new live
          type: array
          items:
            type: object
      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: *a30
          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
