360Learning Courses API
The Courses API from 360Learning β 9 operation(s) for courses.
The Courses API from 360Learning β 9 operation(s) for courses.
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