360Learning Courses API

The Courses API from 360Learning β€” 9 operation(s) for courses.

OpenAPI Specification

360learning-courses-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Bulk Authentication Courses API
  description: ''
  version: 1.0.0
  contact: {}
servers:
- url: https://app.360learning.com
  description: Production EU
- url: https://app.us.360learning.com
  description: Production US
tags:
- name: Courses
paths:
  /api/v2/courses/{courseId}/archive:
    put:
      description: '> πŸ”‘

        >

        > Required OAuth scope: `courses:write`.


        Archives or restores a course. Archiving a course doesn''t remove it from paths where it is included. It simply prevents the course from being added to new paths. The archived course will still be accessible in existing paths, but it will be hidden from search results. Statistics are kept and not deleted.'
      operationId: v2.courses.ArchiveOrUnarchiveCourseController_archiveOrUnarchiveCourse
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      - name: courseId
        required: true
        in: path
        description: The unique ID of the course.
        schema:
          format: ObjectId
          pattern: ^[a-fA-F0-9]{24}$
          example: 507f1f77bcf86cd799439011
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ArchiveCourseBody'
      responses:
        '200':
          description: Returns the updated course.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CourseDTO'
        '400':
          description: The external course is linked to an inactive integration.
          content:
            application/json:
              schema:
                title: Integration Inactive
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - integrationInactive
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '401':
          description: The given access token is either missing, invalid, has expired, or has been revoked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - invalid_token
                required:
                - error
        '403':
          description: The given access token does not have the required OAuth scope to execute the request.
          content:
            application/json:
              schema:
                title: Invalid Scope
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - invalid_scope
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '404':
          description: The given `courseId` does not correspond to any existing course.
          content:
            application/json:
              schema:
                title: Course Not Found
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - courseNotFound
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '429':
          description: 'The client has sent too many requests in a short amount of time. '
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - tooManyRequests
                required:
                - error
      security:
      - oauth2: []
      summary: Archive or restore a course
      tags:
      - Courses
  /api/v2/courses/elearning-standard:
    post:
      description: '> πŸ”‘

        >

        > Required OAuth scope: `courses:write`.


        Creates a new eLearning standard (SCORM, AICC, xAPI, ...) course with the provided eLearning standard file. This endpoint should not be used to create native 360Learning courses.


        This endpoint has a specific rate limit of 1 request per second.'
      operationId: v2.courses.CreateELearningStandardCourseController_createELearningStandardCourse
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateELearningStandardCourseBody'
      responses:
        '201':
          description: Returns the created course.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CourseDTO'
        '400':
          description: The server cannot or will not process the request due to something that is perceived to be a client error.
          content:
            application/json:
              schema:
                oneOf:
                - description: The given course duration is not a positive integer within the allowed range.
                  title: Invalid Course Duration
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - invalidCourseDuration
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
                - description: The given zip file cannot be processed.
                  title: Invalid File
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - invalidFile
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
                - description: The main author is present in the co-authors list.
                  title: Main Author As Co Author
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - mainAuthorAsCoAuthor
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
                - description: Rustici is not enabled.
                  title: Rustici Not Enabled
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - rusticiNotEnabled
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
                - description: The user `userId` does not correspond to an editor in the company.
                  title: User Is Not An Editor
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - userIsNotAnEditor
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
        '401':
          description: The given access token is either missing, invalid, has expired, or has been revoked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - invalid_token
                required:
                - error
        '403':
          description: The given access token does not have the required OAuth scope to execute the request.
          content:
            application/json:
              schema:
                title: Invalid Scope
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - invalid_scope
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '404':
          description: The server cannot find the requested resource.
          content:
            application/json:
              schema:
                oneOf:
                - description: The given `groupId` does not correspond to any existing group.
                  title: Group Not Found
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - groupNotFound
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
                - description: At least one of the given users does not correspond to any existing and non-deleted user.
                  title: Users Not Found
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - usersNotFound
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
        '429':
          description: The client has sent too many requests in a short amount of time. This endpoint has a specific rate limit of 1 requests per second.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - tooManyRequests
                required:
                - error
      security:
      - oauth2: []
      summary: Create an eLearning standard course
      tags:
      - Courses
  /api/v2/courses/generate-from-prompt:
    post:
      description: '> πŸ”‘

        >

        > Required OAuth scope: `courses:internal`.


        Triggers the generation of a course from a text prompt. This is an internal-only endpoint restricted to demo platforms. The course generation happens asynchronously, and you will receive an email notification when it completes. Retrieve the generated course using GET /courses sorted by created_at.'
      operationId: v2.courses.GenerateFromPromptController_generateFromPrompt
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenerateFromPromptBody'
      responses:
        '200':
          description: The course generation has been successfully triggered. The course will be created asynchronously.
        '400':
          description: The user `userId` does not correspond to an editor in the company.
          content:
            application/json:
              schema:
                title: User Is Not An Editor
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - userIsNotAnEditor
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '401':
          description: The given access token is either missing, invalid, has expired, or has been revoked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - invalid_token
                required:
                - error
        '403':
          description: The given access token does not have the required OAuth scope to execute the request.
          content:
            application/json:
              schema:
                title: Invalid Scope
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - invalid_scope
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '404':
          description: The given `groupId` does not correspond to any existing group.
          content:
            application/json:
              schema:
                title: Group Not Found
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - groupNotFound
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '429':
          description: 'The client has sent too many requests in a short amount of time. '
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - tooManyRequests
                required:
                - error
      security:
      - oauth2: []
      summary: Generate a course from a prompt (internal only)
      tags:
      - Courses
  /api/v2/courses/stats:
    get:
      description: '> πŸ”‘

        >

        > Required OAuth scope: `courseStats:read`.


        > πŸ“–

        >

        > This endpoint is paginated with a page size of 500 courses attempts statistics. For more information, see the [Pagination guide](doc:pagination).


        Lists all courses statistics in your platform.'
      operationId: v2.courses.GetAllCourseStatsController_getAllCourseStats
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      - name: completedAt
        required: false
        in: query
        style: deepObject
        explode: true
        description: 'Filter on **completedAt** property with LHS bracket notation.


          Expected value format is a date (YYYY-MM-DDThh:mm:ss.sssZ). The milliseconds are always set to 0.'
        schema:
          properties:
            lt:
              type: string
              format: date-time
              description: Filter on dates lower than the given one
              example: '2020-01-01T10:30:26.000Z'
            gte:
              type: string
              format: date-time
              description: Filter on dates greater than or equal the given one
              example: '2020-01-01T10:30:26.000Z'
      - name: courseId
        required: false
        in: query
        style: deepObject
        explode: true
        description: 'Filter on **courseId** property with LHS bracket notation.


          Expected value format is a valid ID (24 digits or letters).'
        schema:
          properties:
            eq:
              type: string
              format: ObjectId
              pattern: ^[a-fA-F0-9]{24}$
              description: Filter on values equal to the given one
              example: 507f1f77bcf86cd799439011
            ne:
              type: string
              format: ObjectId
              pattern: ^[a-fA-F0-9]{24}$
              description: Filter on values not equal to the given one
              example: 507f1f77bcf86cd799439011
            in:
              type: array
              description: Filter on values including the given ones
              items:
                type: string
                format: ObjectId
                pattern: ^[a-fA-F0-9]{24}$
                example: 507f1f77bcf86cd799439011
            nin:
              type: array
              description: Filter on values excluding the given ones
              items:
                type: string
                format: ObjectId
                pattern: ^[a-fA-F0-9]{24}$
                example: 507f1f77bcf86cd799439011
      - name: userId
        required: false
        in: query
        style: deepObject
        explode: true
        description: 'Filter on **userId** property with LHS bracket notation.


          Expected value format is a valid ID (24 digits or letters).'
        schema:
          properties:
            eq:
              type: string
              format: ObjectId
              pattern: ^[a-fA-F0-9]{24}$
              description: Filter on values equal to the given one
              example: 507f1f77bcf86cd799439011
            ne:
              type: string
              format: ObjectId
              pattern: ^[a-fA-F0-9]{24}$
              description: Filter on values not equal to the given one
              example: 507f1f77bcf86cd799439011
            in:
              type: array
              description: Filter on values including the given ones
              items:
                type: string
                format: ObjectId
                pattern: ^[a-fA-F0-9]{24}$
                example: 507f1f77bcf86cd799439011
            nin:
              type: array
              description: Filter on values excluding the given ones
              items:
                type: string
                format: ObjectId
                pattern: ^[a-fA-F0-9]{24}$
                example: 507f1f77bcf86cd799439011
      responses:
        '200':
          description: Returns one page of 500 courses attempts statistics.
          headers:
            Link:
              schema:
                type: string
              description: 'URL (between `<` `>`) to fetch the immediate next page of results. For more information, see our [Pagination guide](doc:pagination).


                ⚠️ Only included if there is another page of results.'
              example: <my/resource/url>; rel="next"
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CourseStatDTO'
        '401':
          description: The given access token is either missing, invalid, has expired, or has been revoked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - invalid_token
                required:
                - error
        '403':
          description: The given access token does not have the required OAuth scope to execute the request.
          content:
            application/json:
              schema:
                title: Invalid Scope
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - invalid_scope
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '429':
          description: 'The client has sent too many requests in a short amount of time. '
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - tooManyRequests
                required:
                - error
      security:
      - oauth2: []
      summary: List all courses statistics
      tags:
      - Courses
  /api/v2/courses/{courseId}:
    get:
      description: '> πŸ”‘

        >

        > Required OAuth scope: `courses:read`.


        Retrieves the details of a specific course with the provided course ID.'
      operationId: v2.courses.GetCourseController_getCourse
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      - name: courseId
        required: true
        in: path
        description: The unique ID of the course.
        schema:
          format: ObjectId
          pattern: ^[a-fA-F0-9]{24}$
          example: 507f1f77bcf86cd799439011
          type: string
      responses:
        '200':
          description: Returns the details of the given course.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CourseDTO'
        '401':
          description: The given access token is either missing, invalid, has expired, or has been revoked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - invalid_token
                required:
                - error
        '403':
          description: The given access token does not have the required OAuth scope to execute the request.
          content:
            application/json:
              schema:
                title: Invalid Scope
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - invalid_scope
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '404':
          description: The given `courseId` does not correspond to any existing course.
          content:
            application/json:
              schema:
                title: Course Not Found
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - courseNotFound
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '429':
          description: 'The client has sent too many requests in a short amount of time. '
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - tooManyRequests
                required:
                - error
      security:
      - oauth2: []
      summary: Retrieve a course
      tags:
      - Courses
  /api/v2/courses/{courseId}/custom-fields/values:
    get:
      description: '> πŸ”‘

        >

        > Required OAuth scope: `courses:read`.


        Lists all custom field values in a given course.'
      operationId: v2.courses.GetCourseCustomFieldValuesController_getCourseCustomFieldValues
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      - name: courseId
        required: true
        in: path
        description: The unique ID of the course.
        schema:
          format: ObjectId
          pattern: ^[a-fA-F0-9]{24}$
          example: 507f1f77bcf86cd799439011
          type: string
      responses:
        '200':
          description: Returns all custom field values for the given course.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomFieldValueDTO'
        '400':
          description: Course custom fields are not enabled.
          content:
            application/json:
              schema:
                title: Course Custom Fields Not Enabled
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - courseCustomFieldsNotEnabled
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '401':
          description: The given access token is either missing, invalid, has expired, or has been revoked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - invalid_token
                required:
                - error
        '403':
          description: The given access token does not have the required OAuth scope to execute the request.
          content:
            application/json:
              schema:
                title: Invalid Scope
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - invalid_scope
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '404':
          description: The given `courseId` does not correspond to any existing course.
          content:
            application/json:
              schema:
                title: Course Not Found
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - courseNotFound
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '429':
          description: 'The client has sent too many requests in a short amount of time. '
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - tooManyRequests
                required:
                - error
      security:
      - oauth2: []
      summary: List all custom field values for a course
      tags:
      - Courses
    put:
      description: '> πŸ”‘

        >

        > Required OAuth scope: `courses:write`.


        Replaces all custom field values in the given course with the provided ones. Values not included are removed.'
      operationId: v2.courses.UpdateCourseCustomFieldValuesController_updateCourseCustomFieldValues
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      - name: courseId
        requ

# --- truncated at 32 KB (92 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/360learning/refs/heads/main/openapi/360learning-courses-api-openapi.yml