openapi: 3.0.0
servers:
  - url: https://api.iqualify.com/v1
info:
  contact:
    x-twitter: hello_iqualify
  description: |+
    The iQualify API offers management responses for building
    learning experiences using your iQualify instance data.

    Once you’ve registered with iQualify, you can request an API access token by
    navigating to the API access section of the "Account Settings" area.

    Find out how to [Request your API access token](https://www.iqualify.com/help/connecting-iqualify-to-other-systems/api/how-to-access-and-manage-your-api-token)
    on our Knowledge base.

    All endpoints are only accessible via https and are located at
    api.iqualify.com. For instance: you can find your current offerings by
    accessing the following URL:

        https://api.iqualify.com/v1/offerings/current

  title: iQualify Management API
  version: v1
  x-apisguru-categories:
    - education
  x-logo:
    url: https://twitter.com/hello_iqualify/profile_image?size=original
  x-origin:
    - format: openapi
      url: https://api.iqualify.com/v1/management.json
      version: "3.0"
  x-providerName: iqualify.com
security:
  - Authorization: []
tags: []
paths:
  /:
    get:
      description: Responds with all supported endpoints URLs for v2 version.
      responses:
        "200":
          content:
            application/json:
              schema:
                type: object
          description: Supported endpoints
      summary: List supported endpoints URLs
      tags:
        - API info
  /course-mappings:
    get:
      description: Returns all course mappings for course offerings.
      responses:
        "200":
          content:
            application/json:
              schema:
                additionalProperties:
                  type: string
                title: course mappings
                type: object
          description: Course Mappings
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
      summary: Find course mappings
      tags:
        - Course mappings
  "/course-mappings/externalcourse/{externalCourseId}":
    get:
      description: Responds with course mapping details by externalCourseId.
      parameters:
        - $ref: "#/components/parameters/externalCourseId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  type: string
                type: array
          description: Course Mapping
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find course mappings by externalCourseId
      tags:
        - Course mappings
  "/course-mappings/{offeringId}":
    get:
      description: Responds with course mapping details by offeringId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  type: string
                type: array
          description: Course Mapping
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find course mappings by offeringId
      tags:
        - Course mappings
  "/course-mappings/{offeringId}/{externalCourseId}":
    delete:
      description: Removes the course mapping between the offering and the externalCourseId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/externalCourseId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  type: string
                type: array
          description: Course Mapping
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Remove course mapping
      tags:
        - Course mappings
    put:
      description: Creates a mapping between the offering and the externalCourseId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/externalCourseId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  type: string
                type: array
          description: Course Mapping
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Add course mapping
      tags:
        - Course mappings
  /courses:
    get:
      description: Responds with all courses (draft and published.)
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/CourseResponse"
                title: Courses
                type: array
          description: All courses (draft and published) in the organisation.
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
      summary: Find courses
      tags:
        - Courses
  "/courses/{contentId}":
    get:
      description: Responds with a course matching the contentId.
      parameters:
        - description: The content Id
          in: path
          name: contentId
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CourseMetaResponse"
          description: Course detail
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find course by contentId
      tags:
        - Courses
  "/courses/{contentId}/activations":
    get:
      description: Responds with all activations for the contentId provided.
      parameters:
        - description: The content Id
          in: path
          name: contentId
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ActivationResponse"
          description: Activation list.
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find activations for a contentId
      tags:
        - Courses
  "/courses/{contentId}/metadata/category":
    put:
      description: Add or update course category in the metadata of a course.
      parameters:
        - description: The content Id
          in: path
          name: contentId
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                category:
                  type: string
              type: object
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CourseMetaResponse"
          description: Course detail
        "400":
          content:
            application/json:
              examples:
                SchemaAdditionalPropertiesError:
                  $ref: "#/components/examples/SchemaAdditionalPropertiesError"
                SchemaRequiredError:
                  $ref: "#/components/examples/SchemaRequiredError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update course category
      tags:
        - Course metadata
  "/courses/{contentId}/metadata/level":
    put:
      description: Add or update the course level in the metadata of a course.
      parameters:
        - description: The content Id
          in: path
          name: contentId
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                level:
                  type: string
              type: object
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CourseMetaResponse"
          description: Course detail
        "400":
          content:
            application/json:
              examples:
                SchemaAdditionalPropertiesError:
                  $ref: "#/components/examples/SchemaAdditionalPropertiesError"
                SchemaRequiredError:
                  $ref: "#/components/examples/SchemaRequiredError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update course level
      tags:
        - Course metadata
  "/courses/{contentId}/metadata/tags":
    put:
      description: Add or update course tags in the metadata of a course.
      parameters:
        - description: The content Id
          in: path
          name: contentId
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                tags:
                  items:
                    type: string
                  type: array
              type: object
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CourseMetaResponse"
          description: Course detail
        "400":
          content:
            application/json:
              examples:
                SchemaAdditionalPropertiesError:
                  $ref: "#/components/examples/SchemaAdditionalPropertiesError"
                SchemaRequiredError:
                  $ref: "#/components/examples/SchemaRequiredError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update course tags
      tags:
        - Course metadata
  "/courses/{contentId}/metadata/topic":
    put:
      description: Add or update the course topic in the metadata of a course.
      parameters:
        - description: The content Id
          in: path
          name: contentId
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                topic:
                  type: string
              type: object
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CourseMetaResponse"
          description: Course detail
        "400":
          content:
            application/json:
              examples:
                SchemaAdditionalPropertiesError:
                  $ref: "#/components/examples/SchemaAdditionalPropertiesError"
                SchemaRequiredError:
                  $ref: "#/components/examples/SchemaRequiredError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update course topic
      tags:
        - Course metadata
  "/courses/{contentId}/permissions":
    get:
      description: Responds with users who have access to a specific course by contentId.
      parameters:
        - description: The content Id
          in: path
          name: contentId
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserPermission"
          description: List of users who have access to the content ID provided.
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find users who have access to the contentId provided
      tags:
        - Courses
  "/courses/{rootContentId}/permissions/{userEmail}":
    post:
      description: Provide a user with access to a specific course by rootContentId.
      parameters:
        - description: The content Id
          in: path
          name: rootContentId
          required: true
          schema:
            type: string
        - description: The user email
          in: path
          name: userEmail
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              properties:
                isBuilder:
                  default: true
                  type: boolean
                isReviewer:
                  default: false
                  type: boolean
              title: permission to be granted to the user.
              type: object
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                properties:
                  contentId:
                    type: string
                type: object
          description: user successfully added to the course with the specified permission.
        "400":
          content:
            application/json:
              examples:
                MultipleObjectsError:
                  $ref: "#/components/examples/MultipleObjectsError"
                ObjectIsNotError:
                  $ref: "#/components/examples/ObjectIsNotError"
                SchemaRequiredError:
                  $ref: "#/components/examples/SchemaRequiredError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update course access
      tags:
        - Courses
  /offerings:
    get:
      description: Responds with all offerings for your organisation.
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/OfferingMetadataResponse"
                title: Offerings
                type: array
          description: all offerings (current, past and future ones)
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
      summary: Find current, past and future offerings
      tags:
        - Offerings
    post:
      description: Creates a new offering.
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OfferingRequired"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OfferingMetadataResponse"
          description: offering created
        "400":
          content:
            application/json:
              examples:
                IncompatibleParametersError:
                  $ref: "#/components/examples/IncompatibleParametersError"
                InvalidContentError:
                  $ref: "#/components/examples/InvalidContentError"
                MissingInfoError:
                  $ref: "#/components/examples/MissingInfoError"
                OfferingIncompatibleDatesError:
                  $ref: "#/components/examples/OfferingIncompatibleDatesError"
                SchemaFormatError:
                  $ref: "#/components/examples/SchemaFormatError"
                SchemaRequiredError:
                  $ref: "#/components/examples/SchemaRequiredError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Create offering
      tags:
        - Offerings
  /offerings/current:
    get:
      description: Responds with active offerings for your organisation.
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/OfferingMetadataResponse"
                title: Offerings
                type: array
          description: current offerings
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
      summary: Find active offerings
      tags:
        - Offerings
  /offerings/future:
    get:
      description: Responds with scheduled offerings for your organisation. Scheduled offerings have a start date after today's date (inclusive).
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/OfferingMetadataResponse"
                title: Offerings
                type: array
          description: future offerings
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
      summary: Find scheduled offerings
      tags:
        - Offerings
  "/offerings/info/{textPattern}":
    get:
      description: Find offerings where info field matches the specified text pattern.
      parameters:
        - description: Text pattern to search for (minimum of 3 characters length).
          in: path
          name: textPattern
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/PortfolioActivations"
                title: Offerings
                type: array
          description: Offerings
        "400":
          content:
            application/json:
              examples:
                TextPatternError:
                  $ref: "#/components/examples/TextPatternError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find offerings where info field matches the specified textPattern
      tags:
        - Offerings
  /offerings/past:
    get:
      description: Responds with past offerings for your organisation.
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/OfferingMetadataResponse"
                title: Offerings
                type: array
          description: past offerings
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
      summary: Find past offerings
      tags:
        - Offerings
  /offerings/summary:
    get:
      description: Responds with a summary of all offerings for your organisation.
      parameters:
        - description: Returns only the first n results.
          in: query
          name: $top
          schema:
            default: "50"
            type: string
        - description: Sorts the results.
          in: query
          name: $orderby
          schema:
            type: string
        - allowReserved: true
          description: Filters the results, based on a Boolean condition.
          in: query
          name: $filter
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/PortfolioActivations"
                title: Offerings
                type: array
          description: all offerings.
        "400":
          content:
            application/json:
              examples:
                ApiValidationError:
                  $ref: "#/components/examples/ApiValidationError"
                SchemaQueryError:
                  $ref: "#/components/examples/SchemaQueryError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
      summary: Offerings summary
      tags:
        - Offerings
  "/offerings/{offeringId}":
    get:
      description: Responds with an offering matching the offeringId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OfferingMetadataResponse"
          description: offering
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find offering by ID
      tags:
        - Offerings
    patch:
      description: Updates the offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Offering"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OfferingMetadataResponse"
          description: offering updated
        "400":
          content:
            application/json:
              examples:
                IncompatibleParametersError:
                  $ref: "#/components/examples/IncompatibleParametersError"
                MissingInfoError:
                  $ref: "#/components/examples/MissingInfoError"
                ObjectExistsError:
                  $ref: "#/components/examples/ObjectExistsError"
                OfferingIncompatibleDatesError:
                  $ref: "#/components/examples/OfferingIncompatibleDatesError"
                SchemaFormatError:
                  $ref: "#/components/examples/SchemaFormatError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update offering
      tags:
        - Offerings
  "/offerings/{offeringId}/activities/openresponse":
    get:
      description: Responds with the activities in a specific offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/OfferingActivitiesResponse"
                title: Activities
                type: array
          description: offering's learners
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find offering's activities
      tags:
        - Assessment management
  "/offerings/{offeringId}/analytics/activities/responses":
    get:
      description: Responds with all learner activity attempts for open response activities in an offering matching the offeringId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/ActivityAttemptOpenResponse"
                title: OfferingActivityAttemptOpenResponses
                type: array
          description: Offering activity attempt open responses
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find open response activity attempts
      tags:
        - Assessment data
  "/offerings/{offeringId}/analytics/channels/{channelId}/comments":
    get:
      description: Responds with a list of comments made in any posts in a specified channel, within an offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/channelId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/Comment"
                title: Comments
                type: array
          description: Successful response
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find comments
      tags:
        - Channels
  "/offerings/{offeringId}/analytics/channels/{channelId}/posts":
    get:
      description: Responds with a list of posts made in a specified channel, within an offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/channelId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/httpPost"
                title: Posts
                type: array
          description: Successful response
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find posts
      tags:
        - Channels
  "/offerings/{offeringId}/analytics/channels/{channelId}/replies":
    get:
      description: Responds with a list of replies to comments in any posts in a specified channel, within an offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/channelId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/Comment"
                title: Comments
                type: array
          description: Successful response
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find replies
      tags:
        - Channels
  "/offerings/{offeringId}/analytics/learners-progress":
    get:
      description: Responds with all learner progress in the offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/LearnerProgressResponse"
                title: LearnersProgress
                type: array
          description: Learners progress
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find learner progress in a specified offering
      tags:
        - Learner activity
  "/offerings/{offeringId}/analytics/marks/assignments":
    get:
      description: Responds with all learner assessment marks in an offering matching the offeringId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/AssignmentMarkResponse"
                title: AssignmentsMarks
                type: array
          description: Assignments marks
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find assessment marks
      tags:
        - Assessment data
  "/offerings/{offeringId}/analytics/marks/quizzes":
    get:
      description: Responds with all learner quiz marks in an offering matching the offeringId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/QuizMarkResponse"
                title: QuizzesMarks
                type: array
          description: Quizzes marks
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find quiz marks
      tags:
        - Assessment data
  "/offerings/{offeringId}/analytics/pulses":
    get:
      description: Responds with the IDs of all pulses that learners have responded to in a specified offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  type: string
                type: array
          description: Pulses' ids
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find all pulse IDs in the specified offering
      tags:
        - Pulses
  "/offerings/{offeringId}/analytics/pulses/responses":
    get:
      description: Responds with pulse's responses in an offering matching the offeringId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - description: Filter pulse responses by type.
          in: query
          name: pulseType
          schema:
            enum:
              - submit_text
              - MCQ
              - spatial_triangular
              - spatial_planar
              - spatial_linear
            type: string
        - allowReserved: true
          description: Filter pulse responses by responseTime. Lower then (`lt`), lower then or equal (`lte`), greater then (`gt`) and greater then or equal (`gte`) operators are available. Example of filtering by time range __gte__2017-03-14T07:30:00Z__
          in: query
          name: responseTime
          schema:
            oneOf:
              - minLength: 1
                type: string
              - items:
                  type: string
                type: array
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/PulseResponse"
                title: Pulses
                type: array
          description: All pulses' responses
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find pulses by offeringId
      tags:
        - Pulses
  "/offerings/{offeringId}/analytics/pulses/{pulseId}/responses":
    get:
      description: Responds with pulse's responses, matching the pulseId, in an offering matching the offeringId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - description: pulse's base id
          in: path
          name: pulseId
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/PulseResponse"
                title: Pulses
                type: array
          description: Pulse data matching pulseId
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find pulses by offeringId and pulseId
      tags:
        - Pulses
  "/offerings/{offeringId}/analytics/social-notes":
    get:
      description: Responds with all shared social notes in a specified offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/SocialNotesResponse"
                title: OfferingSocialNotes
                type: array
          description: Offering social notes
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find shared social notes in an offering
      tags:
        - Learner activity
  "/offerings/{offeringId}/analytics/submissions/assignments":
    get:
      description: Responds with all learner assessment submissions and marks, if any, in an offering matching the offeringId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/AssignmentMarkResponse"
                title: AssignmentsSubmissions
                type: array
          description: Assignments submissions
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find submissions to assessments, including marks if any
      tags:
        - Assessment data
  "/offerings/{offeringId}/analytics/submissions/open-response/{assessmentId}":
    get:
      description: Responds with all learner assessment submissions and marks, if any, in a specified open response assessment.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/assessmentId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/SubmissionMarkResponse"
                title: SubmissionMarkResponse
                type: array
          description: Responds with assignment submissions for the specified assignment.
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find submissions to a specified open response assessment, including marks if any
      tags:
        - Assessment data
  "/offerings/{offeringId}/analytics/submissions/{userEmail}/assignments/{assessmentId}":
    get:
      description: Responds with the learner's assessment submission and any marks for the submission.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/userEmail"
        - $ref: "#/components/parameters/assessmentId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/SubmissionMarkResponse"
                title: SubmissionMarkResponse
                type: array
          description: Responds with the learner's assessment submission and any marks for the submission.
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find a learner's submission to a specified assessment, including marks if any
      tags:
        - Assessment data
  "/offerings/{offeringId}/analytics/unit-reactions":
    get:
      description: Responds with user reactions to units in a specified offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/UnitReactionsAnalyticsResponse"
                title: UnitReactiosAnalytics
                type: array
          description: Unit Reactions
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find unit reactions
      tags:
        - Learner activity
  "/offerings/{offeringId}/assessments":
    get:
      description: Responds with all assessments in an offering matching the offeringId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/AssessmentResponse"
                title: Assessments
                type: array
          description: offering's assessments
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find offering's assessments
      tags:
        - Assessment management
  "/offerings/{offeringId}/assessments/{assessmentId}":
    patch:
      description: Updates the assessment details for a specified assessment in an offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - description: assessment's id
          in: path
          name: assessmentId
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Assessment"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AssessmentResponse"
          description: assessment successfully updated
        "400":
          content:
            application/json:
              examples:
                SchemaFormatError:
                  $ref: "#/components/examples/SchemaFormatError"
                SchemaMinLengthError:
                  $ref: "#/components/examples/SchemaMinLengthError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update assessment details
      tags:
        - Assessment management
  "/offerings/{offeringId}/assessments/{assessmentId}/documents": {}
  "/offerings/{offeringId}/assessments/{assessmentId}/documents/{documentId}":
    delete:
      description: Removes the assessment document file for a specified assessment in an offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - description: assessment's id
          in: path
          name: assessmentId
          required: true
          schema:
            type: string
        - description: documents's id
          in: path
          name: documentId
          required: true
          schema:
            type: string
      responses:
        "204":
          description: assessment document successfully removed
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Remove assessment document
      tags:
        - Assessment management
  "/offerings/{offeringId}/assessments/{assessmentId}/{userEmail}":
    patch:
      description: Updates the due dates for a learner's quiz attempt specified by the assessmentId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - description: assessment's id
          in: path
          name: assessmentId
          required: true
          schema:
            type: string
        - description: user's email
          in: path
          name: userEmail
          required: true
          schema:
            format: email
            type: string
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                dueDate:
                  format: date-time
                  type: string
              type: object
        required: true
      responses:
        "204":
          description: Successfully updated assessment due date.
        "400":
          content:
            application/json:
              examples:
                InvalidParameterError:
                  $ref: "#/components/examples/InvalidParameterError"
                ObjectInvalidPropertyError:
                  $ref: "#/components/examples/ObjectInvalidPropertyError"
                SchemaFormatError:
                  $ref: "#/components/examples/SchemaFormatError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update the due dates for a learner's quiz attempt
      tags:
        - Assessment management
  "/offerings/{offeringId}/badges":
    get:
      description: Responds with the badge for an offering matching the offeringId.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Badge"
          description: badges
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find offering badges
      tags:
        - Badges
  "/offerings/{offeringId}/channels":
    get:
      description: Responds with a list of channels in an offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/ChannelResponse"
                title: List of channels in a offering
                type: array
          description: Succesful response
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find channels
      tags:
        - Channels
    post:
      description: Adds new channel to the specified offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ChannelRequired"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ChannelResponse"
          description: channel successfully added
        "400":
          content:
            application/json:
              examples:
                SchemaMinLengthError:
                  $ref: "#/components/examples/SchemaMinLengthError"
                SchemaRequiredError:
                  $ref: "#/components/examples/SchemaRequiredError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Add channel
      tags:
        - Channels
  "/offerings/{offeringId}/channels/{channelId}":
    patch:
      description: Updates a channel in an offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/channelId"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Channel"
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ChannelResponse"
          description: channel successfully updated
        "400":
          content:
            application/json:
              examples:
                SchemaMinLengthError:
                  $ref: "#/components/examples/SchemaMinLengthError"
                SchemaRequiredError:
                  $ref: "#/components/examples/SchemaRequiredError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update channel
      tags:
        - Channels
  "/offerings/{offeringId}/channels/{channelId}/learners":
    delete:
      description: Removes a learner from the specified group channel.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/channelId"
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                email:
                  type: string
              type: object
        required: true
      responses:
        "204":
          description: Learner successfully removed from the channel.
        "400":
          content:
            application/json:
              examples:
                InvalidGroupChannelError:
                  $ref: "#/components/examples/InvalidGroupChannelError"
                UserNotInOfferingError:
                  $ref: "#/components/examples/UserNotInOfferingError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Remove learners from a group channel
      tags:
        - Channels
    get:
      description: Finds all learners in a specified group channel.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/channelId"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ChannelResponse"
          description: channel data
        "400":
          content:
            application/json:
              examples:
                InvalidGroupChannelError:
                  $ref: "#/components/examples/InvalidGroupChannelError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find learners in a group channel
      tags:
        - Channels
    post:
      description: Adds a learner to a specified group channel.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/channelId"
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                email:
                  type: string
              type: object
        required: true
      responses:
        "204":
          description: Learner successfully added to the channel.
        "400":
          content:
            application/json:
              examples:
                InvalidGroupChannelError:
                  $ref: "#/components/examples/InvalidGroupChannelError"
                ObjectExistsError:
                  $ref: "#/components/examples/ObjectExistsError"
                SchemaMinLengthError:
                  $ref: "#/components/examples/SchemaMinLengthError"
                SchemaRequiredError:
                  $ref: "#/components/examples/SchemaRequiredError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
                UserNotInOfferingError:
                  $ref: "#/components/examples/UserNotInOfferingError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Add learners to a group channel
      tags:
        - Channels
  "/offerings/{offeringId}/cover-image": {}
  "/offerings/{offeringId}/groups":
    get:
      description: Responds with a list of assessment groups in an offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/AssessmentGroupResponse"
                title: List of assessment groups in an offering
                type: array
          description: Succesful response
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find assessment groups
      tags:
        - Assessment groups
    post:
      description: Creates a new assessment group in an offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AssessmentGroupRequired"
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AssessmentGroupResponse"
          description: assessment group successfully added
        "400":
          content:
            application/json:
              examples:
                SchemaMinLengthError:
                  $ref: "#/components/examples/SchemaMinLengthError"
                SchemaRequiredError:
                  $ref: "#/components/examples/SchemaRequiredError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Add an assessment group
      tags:
        - Assessment groups
  "/offerings/{offeringId}/groups/{groupId}/learners":
    get:
      description: Responds with a list of learners in a specified assessment group.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/groupId"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/UserResponse"
                title: List of learners
                type: array
          description: Succesful response
        "400":
          content:
            application/json:
              examples:
                SchemaMinLengthError:
                  $ref: "#/components/examples/SchemaMinLengthError"
                SchemaRequiredError:
                  $ref: "#/components/examples/SchemaRequiredError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find learners in an assessment group
      tags:
        - Assessment groups
    post:
      description: Adds a learner into the specified assessment group.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/groupId"
      requestBody:
        content:
          application/json:
            schema:
              properties:
                email:
                  type: string
              type: object
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserResponse"
          description: Succesful response
        "400":
          content:
            application/json:
              examples:
                ApiValidationError:
                  $ref: "#/components/examples/ApiValidationError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Add a learner to an assessment group
      tags:
        - Assessment groups
  "/offerings/{offeringId}/groups/{groupId}/learners/{userEmail}":
    delete:
      description: Removes a learner from the specified assessment group.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/groupId"
        - $ref: "#/components/parameters/userEmail"
      responses:
        "204":
          description: user successfully removed from the assessment group
        "400":
          content:
            application/json:
              examples:
                ApiValidationError:
                  $ref: "#/components/examples/ApiValidationError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Remove a learner from an assessment group
      tags:
        - Assessment groups
  "/offerings/{offeringId}/learners/pending-submission":
    get:
      description: Responds with learners who have one or more assessments due x days before the due date, with each assessment that is due, where x = the number of days specified in the request. The default is 3 days.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - description: days to assessment due date. Default is 3 days
          in: query
          name: days
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/AssessmentPendingSubmission"
                title: Assessments
                type: array
          description: offering's learners
        "400":
          content:
            application/json:
              examples:
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find learners with assessments pending x days before due date within the specified offeringId
      tags:
        - Assessment management
  "/offerings/{offeringId}/metadata/category":
    put:
      description: Updates the offering category metadata.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                category:
                  type: string
              type: object
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OfferingMetadataResponse"
          description: offering updated
        "400":
          content:
            application/json:
              examples:
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update offering category metadata
      tags:
        - Offering metadata
  "/offerings/{offeringId}/metadata/level":
    put:
      description: Updates the offering level metadata.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                level:
                  type: string
              type: object
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OfferingMetadataResponse"
          description: offering updated
        "400":
          content:
            application/json:
              examples:
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update offering level metadata
      tags:
        - Offering metadata
  "/offerings/{offeringId}/metadata/tags":
    put:
      description: Updates the offering tags metadata.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                tags:
                  items:
                    type: string
                  type: array
              type: object
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OfferingMetadataResponse"
          description: offering updated
        "400":
          content:
            application/json:
              examples:
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update offering tags metadata
      tags:
        - Offering metadata
  "/offerings/{offeringId}/metadata/topic":
    put:
      description: Updates the offering topic metadata.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                topic:
                  type: string
              type: object
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OfferingMetadataResponse"
          description: offering updated
        "400":
          content:
            application/json:
              examples:
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update offering topic metadata
      tags:
        - Offering metadata
  "/offerings/{offeringId}/study-plan": {}
  "/offerings/{offeringId}/users":
    get:
      description: Responds with a list of users in the offering (facilitators, learners and markers.).
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - description: If true, facilitators are included in the results.
          in: query
          name: facilitators
          schema:
            default: "true"
            enum:
              - "true"
              - "false"
            type: string
        - description: If true, learners are included in the results.
          in: query
          name: learners
          schema:
            default: "true"
            enum:
              - "true"
              - "false"
            type: string
        - description: If true, markers are included in the results.
          in: query
          name: markers
          schema:
            default: "true"
            enum:
              - "true"
              - "false"
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/OfferingUserResponse"
                title: offering's users
                type: array
          description: offering's users
        "400":
          content:
            application/json:
              examples:
                SchemaAllowedValuesError:
                  $ref: "#/components/examples/SchemaAllowedValuesError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find offering's users
      tags:
        - Offering learners
    post:
      description: Adds one or more users to the offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
      requestBody:
        content:
          application/json:
            schema:
              items:
                $ref: "#/components/schemas/OfferingUser"
              title: users to be added to the offering.
              type: array
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/OfferingUserAddResponse"
                type: array
          description: user successfully added to the offering
        "207":
          content:
            application/json:
              schema:
                items:
                  oneOf:
                    - $ref: "#/components/schemas/OfferingUserAddResponse"
                    - $ref: "#/components/schemas/Error"
                type: array
          description: Partially successful response
        "400":
          content:
            application/json:
              examples:
                ApiValidationError:
                  $ref: "#/components/examples/ApiValidationError"
                ObjectExistsError:
                  $ref: "#/components/examples/ObjectExistsError"
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
                SchemaRequiredError:
                  $ref: "#/components/examples/SchemaRequiredError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Adds user to the offering
      tags:
        - Offering learners
  "/offerings/{offeringId}/users/{markerEmail}/marks":
    delete:
      description: Removes an array of learners from coach's marking list.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - description: marker's email
          in: path
          name: markerEmail
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              items:
                type: string
              type: array
        description: array of learners e-mails
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/OfferingUser"
                title: learners marked by the marker
                type: array
          description: learners marked by the marker
        "400":
          content:
            application/json:
              examples:
                ObjectIsNotError:
                  $ref: "#/components/examples/ObjectIsNotError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Remove learners from coach's marking list
      tags:
        - Offering learners
    get:
      description: Responds with all learners marked by the specified coach.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - description: marker's email
          in: path
          name: markerEmail
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/OfferingUser"
                title: learners marked by the marker
                type: array
          description: learners marked by the marker
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find Learners marked by a coach
      tags:
        - Offering learners
    post:
      description: Adds an array of learners to be marked by the specified coach.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - description: marker's email
          in: path
          name: markerEmail
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              items:
                type: string
              type: array
        description: array of learners e-mails
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/OfferingUser"
                title: learners marked by the marker
                type: array
          description: learners marked by the marker
        "400":
          content:
            application/json:
              examples:
                ObjectIsNotError:
                  $ref: "#/components/examples/ObjectIsNotError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Add learners to be marked by a coach
      tags:
        - Offering learners
  "/offerings/{offeringId}/users/{userEmail}":
    delete:
      description: Removes a user from the offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/userEmail"
      responses:
        "204":
          description: user successfully removed from the offering
        "400":
          content:
            application/json:
              examples:
                ApiValidationError:
                  $ref: "#/components/examples/ApiValidationError"
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Removes user from the offering
      tags:
        - Offering learners
  "/offerings/{offeringId}/users/{userEmail}/assessments/{assessmentId}":
    delete:
      description: Resets the user's submitted assessment to a draft state.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/userEmail"
        - $ref: "#/components/parameters/assessmentId"
      responses:
        "204":
          description: User's assessment successfully moved to draft state.
        "400":
          content:
            application/json:
              examples:
                AssessmentNotSubmittedError:
                  $ref: "#/components/examples/AssessmentNotSubmittedError"
                ObjectInvalidPropertyError:
                  $ref: "#/components/examples/ObjectInvalidPropertyError"
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Reset user's assessment to draft state
      tags:
        - Assessment management
  "/offerings/{offeringId}/users/{userEmail}/badges/award":
    post:
      description: Awards a badge to a user in the offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/userEmail"
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AwardedResponse"
          description: Awarded badge response
        "400":
          content:
            application/json:
              examples:
                MissingInfoError:
                  $ref: "#/components/examples/MissingInfoError"
                UserNotInOfferingError:
                  $ref: "#/components/examples/UserNotInOfferingError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Award badge
      tags:
        - Badges
  "/offerings/{offeringId}/users/{userEmail}/submissions/open-response":
    get:
      description: Responds with open response assessment submissions by a learner in an offering.
      parameters:
        - $ref: "#/components/parameters/offeringId"
        - $ref: "#/components/parameters/userEmail"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/Assignments"
                title: user's assignments
                type: array
          description: user open response submission and mark details
        "400":
          content:
            application/json:
              examples:
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find learner's open response assessment submissions
      tags:
        - Assessment management
  /org:
    get:
      description: Returns the current organisation info.
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrgResponse"
          description: organisation summary data
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Gets the current organisation
      tags:
        - Organisation
  /users:
    post:
      description: Creates a new user.
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/User"
        description: user
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserResponse"
          description: user added
        "400":
          content:
            application/json:
              examples:
                ObjectExistsError:
                  $ref: "#/components/examples/ObjectExistsError"
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
                SchemaFormatError:
                  $ref: "#/components/examples/SchemaFormatError"
                SchemaMinLengthError:
                  $ref: "#/components/examples/SchemaMinLengthError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
                UserSuspendedError:
                  $ref: "#/components/examples/UserSuspendedError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Add new user
      tags:
        - Users in iQualify
  /users/all/progress:
    get:
      description: Responds with all learners' progress in all offerings.
      parameters:
        - description: Returns only the first n results.
          in: query
          name: $top
          schema:
            default: "50"
            type: string
        - description: Sorts the results.
          in: query
          name: $orderby
          schema:
            type: string
        - allowReserved: true
          description: Filters the results, based on a Boolean condition.
          in: query
          name: $filter
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                properties:
                  data:
                    properties:
                      progress:
                        items:
                          $ref: "#/components/schemas/LearnerResponse"
                        title: Learners
                        type: array
                  top:
                    type: integer
          description: Learners progress
        "400":
          content:
            application/json:
              examples:
                ApiValidationError:
                  $ref: "#/components/examples/ApiValidationError"
                SchemaQueryError:
                  $ref: "#/components/examples/SchemaQueryError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
      summary: Find learner progress in all offerings
      tags:
        - Learner activity
  "/users/{userEmail}":
    get:
      description: Responds with a user matching the specified email.
      parameters:
        - $ref: "#/components/parameters/userEmail"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserResponse"
          description: user data
        "400":
          content:
            application/json:
              examples:
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find user by email
      tags:
        - Users in iQualify
    patch:
      description: Updates the specified user by email.
      parameters:
        - $ref: "#/components/parameters/userEmail"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/User"
        required: false
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserResponse"
          description: user updated
        "400":
          content:
            application/json:
              examples:
                ObjectExistsError:
                  $ref: "#/components/examples/ObjectExistsError"
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
                SchemaFormatError:
                  $ref: "#/components/examples/SchemaFormatError"
                SchemaMinLengthError:
                  $ref: "#/components/examples/SchemaMinLengthError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Update user
      tags:
        - Users in iQualify
  "/users/{userEmail}/badges":
    get:
      description: Responds with all badges that the specified user has been awarded.
      parameters:
        - $ref: "#/components/parameters/userEmail"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/UserBadge"
                title: Badges
                type: array
          description: user's badges
        "400":
          content:
            application/json:
              examples:
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find user's badges
      tags:
        - Badges
  "/users/{userEmail}/invite-email":
    post:
      description: Re-sends an invitation e-mail to the specified user.
      parameters:
        - $ref: "#/components/parameters/userEmail"
      responses:
        "204":
          description: successfully requested invitation e-mail sending
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Resend invitation email
      tags:
        - Users in iQualify
  "/users/{userEmail}/offerings":
    get:
      description: Responds with all offerings that the user in.
      parameters:
        - $ref: "#/components/parameters/userEmail"
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/OfferingMetadataResponse"
                title: Offerings
                type: array
          description: user's offerings
        "400":
          content:
            application/json:
              examples:
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find user's offerings
      tags:
        - Users in iQualify
    post:
      description: Adds a user to an array of offerings by offeringId.
      parameters:
        - $ref: "#/components/parameters/userEmail"
      requestBody:
        content:
          application/json:
            schema:
              items:
                type: string
              type: array
        description: offering ids
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/OfferingMetadataResponse"
                title: Offerings
                type: array
          description: user's offerings
        "400":
          content:
            application/json:
              examples:
                MissingInfoError:
                  $ref: "#/components/examples/MissingInfoError"
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Adds the user to the specified offerings as a learner
      tags:
        - Users in iQualify
  "/users/{userEmail}/offerings/{offeringId}/progress":
    get:
      description: Responds with the learner's progress in a specified offering.
      parameters:
        - $ref: "#/components/parameters/userEmail"
        - $ref: "#/components/parameters/offeringId"
      responses:
        "200":
          content:
            application/json:
              schema:
                properties:
                  completion:
                    type: string
                  email:
                    type: string
                  firstName:
                    type: string
                  id:
                    type: string
                  lastName:
                    type: string
                type: object
          description: user's offerings
        "400":
          content:
            application/json:
              examples:
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
                UserNotInOfferingError:
                  $ref: "#/components/examples/UserNotInOfferingError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find learner's progress in a specified offering
      tags:
        - Learner activity
  "/users/{userEmail}/permissions/{permissionName}":
    post:
      description: Adds additional permissions to the specified user.
      parameters:
        - $ref: "#/components/parameters/userEmail"
        - $ref: "#/components/parameters/permissionName"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserResponse"
          description: permission successfully added to user
        "400":
          content:
            application/json:
              examples:
                MissingInfoError:
                  $ref: "#/components/examples/MissingInfoError"
                ObjectAlreadyIsError:
                  $ref: "#/components/examples/ObjectAlreadyIsError"
                SchemaAllowedValuesError:
                  $ref: "#/components/examples/SchemaAllowedValuesError"
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Add permission to user
      tags:
        - Users in iQualify
  "/users/{userEmail}/progress":
    get:
      description: Responds with the specified learner's progress in all offerings.
      parameters:
        - $ref: "#/components/parameters/userEmail"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LearnerResponse"
          description: Learner Progress
        "400":
          content:
            application/json:
              examples:
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Find learner's progress in offerings
      tags:
        - Learner activity
  "/users/{userEmail}/suspend":
    put:
      description: Suspends the specified user's account.
      parameters:
        - $ref: "#/components/parameters/userEmail"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SuspendedRequest"
        required: true
      responses:
        "204":
          description: User suspended.
        "400":
          content:
            application/json:
              examples:
                InvalidParameterError:
                  $ref: "#/components/examples/InvalidParameterError"
                ObjectExistsError:
                  $ref: "#/components/examples/ObjectExistsError"
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
                SchemaFormatError:
                  $ref: "#/components/examples/SchemaFormatError"
                SchemaTypeError:
                  $ref: "#/components/examples/SchemaTypeError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Suspend user
      tags:
        - Users in iQualify
  "/users/{userEmail}/transfer":
    patch:
      description: Moves the user's access and progress from one offering to another.
      parameters:
        - $ref: "#/components/parameters/userEmail"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TransferRequest"
        description: transfer_data
        required: true
      responses:
        "200":
          description: Updated user information
        "400":
          content:
            application/json:
              examples:
                ContentDoNotMatchError:
                  $ref: "#/components/examples/ContentDoNotMatchError"
                InvalidSourceAndTargetError:
                  $ref: "#/components/examples/InvalidSourceAndTargetError"
                SchemaEmailError:
                  $ref: "#/components/examples/SchemaEmailError"
              schema:
                $ref: "#/components/schemas/Error"
          description: Bad Request
        "401":
          $ref: "#/components/responses/NotAuthorizedError"
        "403":
          $ref: "#/components/responses/AccessDeniedError"
        "404":
          $ref: "#/components/responses/ObjectNotFoundError"
      summary: Transfer a user between offerings
      tags:
        - Offering learners
components:
  examples:
    ApiValidationError:
      summary: API validation error
      value:
        details: invalid $filter parameter.
        name: ApiValidationError
    AssessmentNotSubmittedError:
      summary: the specified user has not submitted an assessment
      value:
        details: The user alex.doe@test.te has not submitted assessment as1.
        name: AssessmentNotSubmittedError
    ContentDoNotMatchError:
      summary: The specified content needs to be the same in order to perform the requested operation.
      value:
        details: contentId needs to be the same in order to perform the requested operation.
        name: ContentDoNotMatchError
    IncompatibleParametersError:
      summary: Two properties in the request contains incompatible values with each other
      value:
        details: A cannot be B when C is D
        name: IncompatibleParametersError
    InvalidChannelPropertiesError:
      summary: "A channel can only have one of these properties set as true: groupDiscussion, isBroadcastOnly or privateSupport"
      value:
        details: "A channel can only have one of these properties set as true: groupDiscussion, isBroadcastOnly or privateSupport"
        name: InvalidChannelPropertiesError
    InvalidContentError:
      summary: You need to specify content_id or rootContentId.
      value:
        details: You need to specify content_id or rootContentId.
        name: InvalidContentError
    InvalidGroupChannelError:
      summary: Specified channel is not a group discussion channel.
      value:
        details: Channel channel1 is not a group discussion channel.
        name: InvalidGroupChannelError
    InvalidObjectIdError:
      summary: The user has been suspended.
      value:
        details: The specified task id has an invalid value '1111'.
        name: InvalidObjectIdError
    InvalidParameterError:
      summary: the specified source object already exists in the target object
      value:
        details: The specified parameter file.mimetype (image mimetype) has an invalid value \'text/plain\'.
        name: InvalidParameterError
    InvalidSourceAndTargetError:
      summary: Source and target offerings cannot be the same.
      value:
        details: Source and target offerings cannot be the same.
        name: InvalidSourceAndTargetError
    MissingInfoError:
      summary: Specified info is missing.
      value:
        details: The field 'Offering Badge' is missing or invalid.
        name: MissingInfoError
    MultipleObjectsError:
      summary: The specified object has multiple properties of which should have only one
      value:
        details: There are multiple permission with value true (isBuilder | isReviewer).
        name: ObjectIsNotError
    ObjectAlreadyIsError:
      summary: The specified object already has a property
      value:
        details: The user john.doe@test.te is already a manager.
        name: ObjectAlreadyIsError
    ObjectExistsError:
      summary: the specified source object already exists in the target object
      value:
        details: The badge already exists in the offering OFFERING ID.
        name: ObjectExistsError
    ObjectInvalidPropertyError:
      summary: the specified source object already exists in the target object
      value:
        details: "The A property B is invalid. Expected value: C"
        name: ObjectInvalidPropertyError
    ObjectIsNotError:
      summary: the specified object is not of the specified type
      value:
        details: The user john.doe@test.te is not a builder.
        name: ObjectIsNotError
    ObjectNotFoundError:
      summary: a referenced object is not found
      value:
        details: The content badcontentId was not found.
        name: ObjectNotFoundError
    OfferingIncompatibleDatesError:
      summary: The specified offering has relative dates enabled. Absolute task dates can not be set.
      value:
        details: The specified offering has relative dates enabled. Absolute task dates can not be set.
        name: OfferingIncompatibleDatesError
    SchemaAdditionalPropertiesError:
      summary: The request body should not have extra properties
      value:
        details: should NOT have additional properties
        name: SchemaValidationError
    SchemaAllowedValuesError:
      summary: should be equal to one of the allowed values
      value:
        details: "[PARAMETER_NAME] PARAMETER_VALUE should be equal to one of the allowed values a, b"
        name: SchemaValidationError
    SchemaEmailError:
      summary: Parameter should be a valid e-mail
      value:
        details: PARAMETER_NAME PARAMETER_VALUE should match format "email".
        name: SchemaValidationError
    SchemaFormatError:
      summary: should match specific format
      value:
        details: PARAMETER_NAME PARAMETER_VALUE should match format "example"
        name: SchemaValidationError
    SchemaMediaError:
      summary: unsupported media type in the content-type header
      value:
        details: unsupported media type application/json
        name: SchemaValidationError
    SchemaMinLengthError:
      summary: should be longer than the minimum required
      value:
        details: "[PARAMETER_NAME] PARAMETER_VALUE should NOT be shorter than 3 characters"
        name: SchemaValidationError
    SchemaQueryError:
      summary: Unknown query parameter
      value:
        details: "[PARAMETER_NAME] PARAMETER_VALUE Unknown query parameter 'example'"
        name: SchemaValidationError
    SchemaRequiredError:
      summary: should have a specific required property
      value:
        details: should have required property 'example'
        name: SchemaValidationError
    SchemaTypeError:
      summary: should be of a specific type
      value:
        details: "[PARAMETER_NAME] PARAMETER_VALUE should be string"
        name: SchemaValidationError
    TextPatternError:
      summary: Text pattern must be a minimum of n characters in length.
      value:
        details: Text pattern must be a minimum of 3 characters in length.
        name: TextPatternError
    UserDoesNotHaveBadgeError:
      summary: The specified user does not have a badge in the specified offering
      value:
        details: The user A has not been awarded a badge in the offering B.
        name: UserDoesNotHaveBadgeError
    UserNotInChannelError:
      summary: Specified user is not in the channel.
      value:
        details: The user john.doe@test.te is not a learner in the channel -MEF8kFyURUr6_CZ4IXD.
        name: UserNotInChannelError
    UserNotInOfferingError:
      summary: Specified user is not in the offering.
      value:
        details: The user john.doe@test.te is not a learner in the offering -MEF8kFyURUr6_CZ4IXD.
        name: UserNotInOfferingError
    UserSuspendedError:
      summary: The user has been suspended.
      value:
        details: The user (john.doe@test.te) has been suspended.
        name: UserSuspendedError
    ValidationAllowTasksError:
      summary: The specified parameter offeringId does not have tasks enabled
      value:
        details: The specified parameter offeringId has an invalid value 'The specified parameter offeringId does not have tasks enabled'.
        name: ValidationError
    ValidationError:
      summary: The specified parameter dueDate has an invalid value
      value:
        details: The specified parameter dueDate has an invalid value "Thu Apr 16 2020 19:15:00 GMT-0300 is before the openDate".
        name: ValidationError
    ValidationTaskNotInOfferingError:
      summary: The specified parameter taskId is not in the offering
      value:
        details: The specified parameter taskId has an invalid value 'The specified parameter taskId is not in the offering'.
        name: ValidationError
  parameters:
    assessmentId:
      description: assessment's id
      in: path
      name: assessmentId
      required: true
      schema:
        type: string
    badgeId:
      description: badge's id
      in: path
      name: badgeId
      required: true
      schema:
        type: string
    channelId:
      description: channel's id
      in: path
      name: channelId
      required: true
      schema:
        type: string
    evaluatorEmail:
      description: Evaluator's email
      in: path
      name: evaluatorEmail
      required: true
      schema:
        format: email
        type: string
    externalCourseId:
      description: external course's id
      in: path
      name: externalCourseId
      required: true
      schema:
        type: string
    groupId:
      description: Assessment group id
      in: path
      name: groupId
      required: true
      schema:
        pattern: ^[0-9a-fA-F]{24}$
        type: string
    offeringId:
      description: offering's id
      in: path
      name: offeringId
      required: true
      schema:
        type: string
    permissionName:
      description: permission name
      in: path
      name: permissionName
      required: true
      schema:
        enum:
          - builder
          - manager
        type: string
    rootContentId:
      description: Protfolio root content id
      in: path
      name: rootContentId
      required: true
      schema:
        type: string
    sectionId:
      description: section's id
      in: path
      name: sectionId
      required: true
      schema:
        type: string
    submissionId:
      description: submission id
      in: path
      name: submissionId
      required: true
      schema:
        type: string
    taskId:
      description: task id
      in: path
      name: taskId
      required: true
      schema:
        type: string
    userEmail:
      description: user's email
      in: path
      name: userEmail
      required: true
      schema:
        format: email
        type: string
  responses:
    AccessDeniedError:
      content:
        application/json:
          example:
            details: You are not allowed to access this resource
            name: AccessDeniedError
          schema:
            $ref: "#/components/schemas/Error"
      description: You are not allowed to access this resource.
    InvalidContentError:
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
      description: You need to specify content_id or rootContentId.
    NotAuthorizedError:
      content:
        application/json:
          example:
            details: No authorization token was found.
            name: NotAuthorizedError
          schema:
            $ref: "#/components/schemas/Error"
      description: No authorization token was found.
    NotImplementedError:
      content:
        application/json:
          example:
            details: The endpoint is not implemented.
            name: NotImplementedError
          schema:
            $ref: "#/components/schemas/Error"
      description: Endpoint Not Implemented
    ObjectNotFoundError:
      content:
        application/json:
          example:
            details: The content badcontentId was not found.
            name: ObjectNotFoundError
          schema:
            $ref: "#/components/schemas/Error"
      description: Not Found
    RouteNotFoundError:
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
      description: Invalid path.
    ServerError:
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
      description: We're sorry, but something went wrong.
    TooManyRequestsError:
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
      description: Request rate is too large.
  schemas:
    ActivationResponse:
      properties:
        end:
          type: string
        id:
          type: string
        info:
          type: string
        learnersCount:
          description: number of learners in the offering, excluding facilitators and coaches
          type: string
        metadata:
          properties:
            rootContentId:
              type: string
          type: object
        name:
          type: string
        start:
          type: string
      type: object
    ActivityAttemptOpenResponse:
      properties:
        activityId:
          type: string
        activityType:
          type: string
        feedback:
          $ref: "#/components/schemas/ActivityAttemptOpenResponseFeedback"
        learnerEmail:
          type: string
        offeringId:
          type: string
        responseText:
          type: string
        uploadedFiles:
          $ref: "#/components/schemas/ActivityAttemptOpenResponseFiles"
      type: object
    ActivityAttemptOpenResponseFeedback:
      properties:
        facilitatorEmail:
          type: string
        text:
          type: string
      type: object
    ActivityAttemptOpenResponseFiles:
      properties:
        filename:
          type: string
        mimetype:
          type: string
        size:
          type: string
        url:
          type: string
      type: object
    Assessment:
      properties:
        content:
          type: string
        dueDate:
          format: date-time
          type: string
        markNumber:
          minLength: 1
          type: string
        markType:
          minLength: 1
          type: string
        openDate:
          format: date-time
          type: string
      type: object
    AssessmentGroupRequired:
      properties:
        title:
          minLength: 1
          type: string
      required:
        - title
      type: object
    AssessmentGroupResponse:
      properties:
        createdAt:
          type: string
        id:
          type: string
        title:
          minLength: 1
          type: string
      type: object
    AssessmentPendingSubmission:
      properties:
        content:
          type: string
        documents:
          items:
            $ref: "#/components/schemas/Document"
          type: array
        dueDate:
          format: date-time
          type: string
        durationMinutes:
          format: int32
          type: integer
        filename:
          type: string
        hidden:
          default: false
          type: boolean
        id:
          type: string
        markNumber:
          minLength: 1
          type: string
        markType:
          minLength: 1
          type: string
        maxAttempts:
          format: int32
          type: integer
        offeringId:
          type: string
        offeringName:
          type: string
        openDate:
          format: date-time
          type: string
        pid:
          type: string
        points:
          type: string
        themes:
          items:
            $ref: "#/components/schemas/ThemeResponse"
          type: array
        title:
          type: string
        totalQuestions:
          format: int32
          type: integer
        totalThemes:
          format: int32
          type: integer
        type:
          type: string
        users:
          items:
            $ref: "#/components/schemas/User"
          type: array
      type: object
    AssessmentResponse:
      properties:
        content:
          type: string
        documents:
          items:
            $ref: "#/components/schemas/Document"
          type: array
        dueDate:
          format: date-time
          type: string
        durationMinutes:
          format: int32
          type: integer
        filename:
          type: string
        hidden:
          default: false
          type: boolean
        id:
          type: string
        markNumber:
          minLength: 1
          type: string
        markType:
          minLength: 1
          type: string
        maxAttempts:
          format: int32
          type: integer
        openDate:
          format: date-time
          type: string
        pid:
          type: string
        points:
          type: string
        themes:
          items:
            $ref: "#/components/schemas/ThemeResponse"
          type: array
        title:
          type: string
        totalQuestions:
          format: int32
          type: integer
        totalThemes:
          format: int32
          type: integer
        type:
          type: string
      type: object
    AssignmentMarkResponse:
      properties:
        assessmentId:
          type: string
        assessmentItemDetails:
          type: string
        assessmentItemName:
          type: string
        courseName:
          type: string
        learnerEmail:
          type: string
        learnerFirstName:
          type: string
        learnerLastName:
          type: string
        learnerPersonId:
          type: string
        mark:
          type: string
        markFeedback:
          type: string
        markedBy:
          type: string
        markedByEvaluator:
          type: boolean
        markedByFacilitator:
          type: boolean
        markedByMarker:
          type: boolean
        markedDateTime:
          format: date-time
          type: string
        submissionDateTime:
          format: date-time
          type: string
      title: AssignmentMark
      type: object
    Assignments:
      properties:
        files:
          items:
            $ref: "#/components/schemas/Document"
          type: array
        marks:
          items:
            $ref: "#/components/schemas/Mark"
          type: array
        status:
          type: string
        submittedAt:
          format: date-time
          type: string
        updatedAt:
          format: date-time
          type: string
      type: object
    AwardedResponse:
      properties:
        awarded:
          type: boolean
        badgeId:
          type: string
        badgeUrl:
          type: string
      type: object
    Badge:
      properties:
        badgeExpiry:
          $ref: "#/components/schemas/BadgeExpiry"
        badgeUrl:
          type: string
        criterias:
          allOf:
            - $ref: "#/components/schemas/Criteria"
        description:
          type: string
        openBadge:
          allOf:
            - $ref: "#/components/schemas/OpenBadgeClass"
        title:
          type: string
      type: object
    BadgeExpiry:
      properties:
        expirationDate:
          format: date-time
          type: string
        expires:
          type: boolean
        expiryType:
          enum:
            - date
            - timeframe
          type: string
        timeframeAmount:
          type: number
        timeframeUnit:
          enum:
            - days
            - months
            - years
          type: string
      type: object
    Channel:
      properties:
        group:
          properties:
            autoAssign:
              type: boolean
          type: object
        groupDiscussion:
          type: boolean
        isBroadcastOnly:
          type: boolean
        privateSupport:
          type: boolean
        title:
          minLength: 1
          type: string
      type: object
    ChannelRequired:
      properties:
        isBroadcastOnly:
          default: false
          type: boolean
        title:
          minLength: 1
          type: string
      required:
        - title
      type: object
    ChannelResponse:
      properties:
        id:
          type: string
        isBroadcastOnly:
          default: false
          type: boolean
        title:
          minLength: 1
          type: string
      type: object
    Comment:
      properties:
        content:
          type: string
        createdAt:
          format: date-time
          type: string
        email:
          type: string
        id:
          type: string
        isFacilitatorPost:
          type: boolean
        moderation:
          $ref: "#/components/schemas/Moderation"
        parentCommentId:
          type: string
        postId:
          type: string
      type: object
    CourseMetaResponse:
      properties:
        coverImageUrl:
          type: string
        createdAt:
          format: date-time
          type: string
        id:
          type: string
        metadata:
          properties:
            category:
              type: string
            learning_outcomes:
              items:
                $ref: "#/components/schemas/LearningOutcomes"
              type: array
            level:
              type: string
            rootContentId:
              type: string
            tags:
              items:
                type: string
              type: array
            topic:
              type: string
        name:
          type: string
        tasksEnabled:
          type: boolean
      title: Course
      type: object
    CourseResponse:
      properties:
        coverImageUrl:
          type: string
        createdAt:
          format: date-time
          type: string
        id:
          type: string
        metadata:
          properties:
            learning_outcomes:
              items:
                $ref: "#/components/schemas/LearningOutcomes"
              type: array
        name:
          type: string
      title: Course
      type: object
    Criteria:
      properties:
        hasCompletedCourse:
          default: true
          type: boolean
        hasPassedMandatoryAssessedQuizzes:
          default: true
          type: boolean
      type: object
    Document:
      properties:
        createdAt:
          format: date-time
          type: string
        filename:
          type: string
        id:
          type: string
        mimetype:
          type: string
        size:
          format: int64
          type: integer
        url:
          type: string
      type: object
    DocumentResponse:
      properties:
        id:
          type: string
        mimetype:
          type: string
        size:
          format: int64
          type: integer
        url:
          type: string
      type: object
    Error:
      properties:
        error:
          properties:
            details:
              type: string
            name:
              type: string
          type: object
      type: object
    Invite:
      properties:
        url:
          description: if sendInvite in request is false
          type: string
      type: object
    LearnerOfferingDates:
      properties:
        start:
          format: date-time
          type: string
      type: object
    LearnerProgressResponse:
      properties:
        completion:
          type: string
        courseId:
          type: string
        email:
          type: string
        firstName:
          type: string
        lastLoggedInAt:
          format: date-time
          type: string
        lastName:
          type: string
        personId:
          type: string
      title: LearnerProgress
      type: object
    LearnerResponse:
      properties:
        email:
          type: string
        firstName:
          type: string
        id:
          type: string
        lastName:
          type: string
        offerings:
          items:
            $ref: "#/components/schemas/OfferingProgressRow"
          type: array
        personId:
          type: string
      type: object
    LearningOutcomes:
      properties:
        description:
          type: string
        id:
          type: string
      type: object
    Mark:
      properties:
        createdAt:
          format: date-time
          type: string
        feedback:
          type: string
        id:
          type: string
        mark:
          type: string
        markFeedback:
          items:
            $ref: "#/components/schemas/MarkFeedback"
          type: array
        markedBy:
          type: string
        markerId:
          type: string
    MarkFeedback:
      properties:
        createdAt:
          format: date-time
          type: string
        feedback:
          type: string
        feedbackBy:
          type: string
        id:
          type: string
        mark:
          type: string
        markerId:
          type: string
    Moderation:
      properties:
        isMuted:
          type: boolean
        moderator:
          $ref: "#/components/schemas/Moderator"
        reason:
          type: string
      type: object
    Moderator:
      properties:
        avatarUrl:
          type: string
        firstName:
          type: string
        id:
          type: string
        lastName:
          type: string
      type: object
    Offering:
      properties:
        badge:
          additionalProperties: false
          properties:
            badgeExpiry:
              $ref: "#/components/schemas/BadgeExpiry"
            description:
              type: string
            requiresApproval:
              type: boolean
            title:
              type: string
          type: object
        contentId:
          description: The identifier for a specific version of a course
          minLength: 1
          type: string
        description:
          minLength: 1
          type: string
        earlyCloseOffDate:
          format: date-time
          type: string
        end:
          format: date-time
          type: string
        hasEarlyCloseOff:
          type: boolean
        identifier:
          type: string
        isReadonly:
          type: boolean
        metadata:
          additionalProperties: false
          properties:
            category:
              type: string
            level:
              type: string
            tags:
              items:
                type: string
              type: array
            topic:
              type: string
          type: object
        name:
          minLength: 1
          type: string
        overview:
          type: string
        rootContentId:
          description: Every time a course is republished it is assigned a new contentId. rootContentId is the first original contentId associated with a course.
          type: string
        start:
          format: date-time
          type: string
        trailerVideoUrl:
          minLength: 1
          type: string
        useRelativeDates:
          type: boolean
      type: object
    OfferingActivitiesResponse:
      properties:
        activityId:
          type: string
        time:
          description: expected minutes to complete
          type: number
        title:
          type: string
      type: object
    OfferingMetadata:
      additionalProperties: false
      properties:
        category:
          type: string
        level:
          type: string
        rootContentId:
          type: string
        tags:
          items:
            type: string
          type: array
        topic:
          type: string
      type: object
    OfferingMetadataResponse:
      properties:
        contentId:
          minLength: 1
          type: string
        coverImageUrl:
          minLength: 1
          type: string
        currency:
          type: string
        description:
          minLength: 1
          type: string
        earlyCloseOffDate:
          format: date-time
          type: string
        end:
          format: date-time
          type: string
        enrollmentLimit:
          type: number
        hasEarlyCloseOff:
          type: boolean
        id:
          type: string
        identifier:
          type: string
        isReadonly:
          type: boolean
        metadata:
          $ref: "#/components/schemas/OfferingMetadata"
        name:
          minLength: 1
          type: string
        overview:
          description: content can contain html
          minLength: 1
          type: string
        price:
          type: number
        start:
          format: date-time
          type: string
        tasksEnabled:
          type: boolean
        trailerVideoUrl:
          minLength: 1
          type: string
        useRelativeDates:
          default: false
          type: boolean
      type: object
    OfferingProgressRow:
      properties:
        completion:
          type: string
        id:
          type: string
      type: object
    OfferingRequired:
      properties:
        badge:
          additionalProperties: false
          properties:
            badgeExpiry:
              $ref: "#/components/schemas/BadgeExpiry"
            description:
              type: string
            requiresApproval:
              type: boolean
            title:
              type: string
          type: object
        contentId:
          description: The identifier for a specific version of a course
          minLength: 1
          type: string
        createDefaultChannels:
          default: false
          type: boolean
        description:
          minLength: 1
          type: string
        earlyCloseOffDate:
          format: date-time
          type: string
        end:
          format: date-time
          type: string
        hasEarlyCloseOff:
          type: boolean
        identifier:
          type: string
        isReadonly:
          type: boolean
        metadata:
          additionalProperties: false
          properties:
            category:
              type: string
            level:
              type: string
            tags:
              items:
                type: string
              type: array
            topic:
              type: string
          type: object
        name:
          minLength: 1
          type: string
        rootContentId:
          description: Every time a course is republished it's assigned a new contentId. rootContentId is the first original contentId associated with a course.
          type: string
        start:
          format: date-time
          type: string
        trailerVideoUrl:
          minLength: 1
          type: string
        useRelativeDates:
          default: false
          type: boolean
      required:
        - start
      type: object
    OfferingResponse:
      properties:
        contentId:
          minLength: 1
          type: string
        coverImageUrl:
          minLength: 1
          type: string
        currency:
          type: string
        description:
          minLength: 1
          type: string
        earlyCloseOffDate:
          format: date-time
          type: string
        end:
          format: date-time
          type: string
        enrollmentLimit:
          type: number
        hasEarlyCloseOff:
          type: boolean
        id:
          type: string
        identifier:
          type: string
        isReadonly:
          type: boolean
        name:
          minLength: 1
          type: string
        price:
          type: number
        start:
          format: date-time
          type: string
        tasksEnabled:
          type: boolean
        trailerVideoUrl:
          minLength: 1
          type: string
      type: object
    OfferingUser:
      additionalProperties: false
      properties:
        email:
          minLength: 1
          type: string
        firstName:
          minLength: 1
          type: string
        isFacilitator:
          default: false
          type: boolean
        isMarker:
          default: false
          type: boolean
        isReadonly:
          default: false
          type: boolean
        lastName:
          minLength: 1
          type: string
        metadata:
          $ref: "#/components/schemas/UserMetadata"
        personId:
          minLength: 1
          type: string
        profile:
          $ref: "#/components/schemas/UserProfileRequest"
        sendInvite:
          default: true
          type: boolean
        sendNotificationEmail:
          default: true
          type: boolean
      required:
        - email
      type: object
    OfferingUserAddResponse:
      properties:
        email:
          minLength: 1
          type: string
        firstName:
          minLength: 1
          type: string
        invite:
          $ref: "#/components/schemas/Invite"
        isFacilitator:
          default: false
          type: boolean
        isMarker:
          default: false
          type: boolean
        isReadonly:
          default: false
          type: boolean
        lastName:
          minLength: 1
          type: string
        metadata:
          $ref: "#/components/schemas/UserMetadata"
        personId:
          minLength: 1
          type: string
        profile:
          $ref: "#/components/schemas/UserProfileRequest"
        sendInvite:
          default: true
          type: boolean
        sendNotificationEmail:
          default: true
          type: boolean
      type: object
    OfferingUserResponse:
      properties:
        avatarUrl:
          type: string
        email:
          format: email
          minLength: 1
          type: string
        evaluatedBy:
          items:
            type: string
          type: array
        evaluates:
          items:
            type: string
          type: array
        firstName:
          minLength: 1
          type: string
        id:
          type: string
        isFacilitator:
          default: false
          type: boolean
        isMarker:
          default: false
          type: boolean
        isReadonly:
          default: false
          type: boolean
        lastName:
          minLength: 1
          type: string
        markedBy:
          items:
            type: string
          type: array
        marks:
          items:
            type: string
          type: array
        personId:
          minLength: 1
          type: string
        profile:
          $ref: "#/components/schemas/UserProfile"
      type: object
    OpenBadgeClass:
      properties:
        criteria:
          additionalProperties: false
          properties:
            narrative:
              type: string
          type: object
        description:
          type: string
        id:
          type: string
        image:
          type: string
        issuer:
          type: string
        name:
          type: string
        type:
          type: string
      type: object
    OrgRequest:
      properties:
        id:
          type: string
        name:
          type: string
      required:
        - name
      type: object
    OrgResponse:
      properties:
        id:
          type: string
        name:
          type: string
      type: object
    PortfolioActivations:
      properties:
        contentId:
          type: string
        end:
          format: date-time
          type: string
        id:
          type: string
        info:
          type: string
        learnersCount:
          description: number of learners in the offering, excluding facilitators and coaches
          type: number
        metadata:
          properties:
            rootContentId:
              type: string
          type: object
        name:
          type: string
        start:
          format: date-time
          type: string
      type: object
    PortfolioLicenseResponse:
      properties:
        licenses:
          items:
            type: string
          type: array
        owner:
          type: string
      type: object
    PortfolioMetadata:
      additionalProperties: false
      properties:
        category:
          type: string
        level:
          type: string
        tags:
          items:
            type: string
          type: array
        topic:
          type: string
      type: object
    PulseAnswer:
      properties:
        multiChoiceAnswer:
          items:
            $ref: "#/components/schemas/PulseMCQOption"
          type: array
        spatialAnswer:
          items:
            $ref: "#/components/schemas/PulseSpatialOption"
          type: array
        textAnswer:
          type: string
      title: Answer
      type: object
    PulseMCQOption:
      properties:
        option:
          type: string
        value:
          type: boolean
      title: MultiChoiceOption
      type: object
    PulseResponse:
      properties:
        learnerFirstName:
          type: string
        learnerId:
          type: string
        learnerLastName:
          type: string
        pulseBaseId:
          type: string
        pulseInstanceId:
          type: string
        pulseQuestion:
          type: string
        pulseRunDurationMinutes:
          type: integer
        pulseRunStart:
          format: date-time
          type: string
        pulseType:
          type: string
        response:
          $ref: "#/components/schemas/PulseAnswer"
        responseTime:
          format: date-time
          type: string
      title: Pulse
      type: object
    PulseSpatialOption:
      properties:
        option:
          type: string
        value:
          format: float
          type: number
      title: SpatialOption
      type: object
    QuizMarkResponse:
      properties:
        attempts:
          format: int32
          type: integer
        lastAttemptAt:
          format: date-time
          type: string
        learnerEmail:
          type: string
        learnerFullname:
          type: string
        learnerPersonId:
          type: string
        mark:
          type: string
        quizId:
          type: string
        quizTitle:
          type: string
      title: QuizMark
      type: object
    RevokedResponse:
      properties:
        badgeId:
          type: string
        badgeUrl:
          type: string
        revocationReason:
          type: string
        revoked:
          type: boolean
      type: object
    SocialNotesResponse:
      properties:
        email:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        pageId:
          type: string
        personId:
          type: string
        social-note-content:
          type: string
        social-note-paragraphId:
          type: string
        userId:
          type: string
      type: object
    SubmissionMarkResponse:
      properties:
        assessmentId:
          type: string
        assessmentItemDetails:
          type: string
        assessmentItemName:
          type: string
        courseName:
          type: string
        files:
          items:
            $ref: "#/components/schemas/Document"
          type: array
        html:
          type: string
        learnerEmail:
          type: string
        learnerFirstName:
          type: string
        learnerLastName:
          type: string
        learnerPersonId:
          type: string
        marks:
          items:
            $ref: "#/components/schemas/Mark"
          type: array
        status:
          type: string
        submissionDateTime:
          format: date-time
          type: string
      title: SubmissionMark
    SuspendedRequest:
      properties:
        suspended:
          type: boolean
      type: object
    ThemeResponse:
      properties:
        filter:
          type: string
        numberOfQuestions:
          type: string
      type: object
    TransferRequest:
      properties:
        fromOfferingId:
          type: string
        sendInvite:
          type: boolean
        toOfferingId:
          type: string
      type: object
    UnitReactionsAnalyticsResponse:
      properties:
        feedback:
          $ref: "#/components/schemas/UnitReactionsFeedback"
        pageId:
          type: boolean
      type: object
    UnitReactionsFeedback:
      properties:
        thumbs-down:
          type: number
        thumbs-up:
          type: number
      type: object
    User:
      additionalProperties: false
      properties:
        email:
          format: email
          minLength: 1
          type: string
        firstName:
          minLength: 1
          type: string
        lastName:
          minLength: 1
          type: string
        metadata:
          $ref: "#/components/schemas/UserMetadata"
        personId:
          minLength: 1
          type: string
        profile:
          $ref: "#/components/schemas/UserProfileRequest"
        sendInvite:
          default: true
          type: boolean
      type: object
    UserBadge:
      properties:
        awardedAt:
          format: date-time
          type: string
        badgeExpiry:
          properties:
            expirationDate:
              format: date-time
              type: string
            expires:
              type: boolean
          type: object
        badgeUrl:
          type: string
        criterias:
          allOf:
            - $ref: "#/components/schemas/Criteria"
        description:
          type: string
        offeringId:
          type: string
        openBadge:
          allOf:
            - $ref: "#/components/schemas/OpenBadgeClass"
        title:
          type: string
      type: object
    UserMetadata:
      additionalProperties: false
      properties:
        tags:
          items:
            type: string
          type: array
      type: object
    UserPermission:
      properties:
        email:
          type: string
        isBuilder:
          type: boolean
        isReviewer:
          type: boolean
        name:
          type: string
      title: User
    UserProfile:
      properties:
        displayName:
          type: string
        mobile:
          type: string
      type: object
    UserProfileRequest:
      properties:
        displayName:
          type: string
      type: object
    UserResponse:
      properties:
        avatarUrl:
          type: string
        email:
          format: email
          minLength: 1
          type: string
        firstAccessAt:
          format: date-time
          type: string
        firstName:
          minLength: 1
          type: string
        id:
          type: string
        invite:
          $ref: "#/components/schemas/Invite"
        lastAccessAt:
          format: date-time
          type: string
        lastName:
          minLength: 1
          type: string
        metadata:
          $ref: "#/components/schemas/UserMetadata"
        personId:
          minLength: 1
          type: string
        profile:
          $ref: "#/components/schemas/UserProfile"
      type: object
    httpPost:
      properties:
        attachments:
          items:
            $ref: "#/components/schemas/DocumentResponse"
          type: array
        content:
          type: string
        createdAt:
          format: date-time
          type: string
        email:
          type: string
        id:
          type: string
        isFacilitatorPost:
          type: boolean
        moderation:
          $ref: "#/components/schemas/Moderation"
        title:
          type: string
      type: object
  securitySchemes:
    Authorization:
      in: header
      name: Authorization
      type: apiKey
