openapi: 3.0.3
info:
title: Teachfloor
description: ''
version: 1.0.0
servers:
-
url: 'https://api.teachfloor.com'
paths:
'/v0/activities/{id}':
get:
summary: 'Retrieve an Activity'
description: "Retrieves the details of an existing activity in your organization based on the provided unique activity ID. The response includes comprehensive information about the activity, such as its score, timestamps, associated element details, and related metadata.\n
If the activity is performed by an individual, the member key contains the details of the member who completed the activity.\n
If the activity is performed by a group, the members key provides a list of all members who participated in the activity.\n
The meta object contains additional details and metadata about the activity's completion status. It provides context on the outcome and participant of the activity."
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n\"error\": null,\n\"payload\": {\n \"id\": \"KwJ8VgrmlAp4PBnM\",\n \"object\": \"activity\",\n \"timestamp\" : \"2022-11-27T13:52:02.000000Z\",\n \"status\": \"PASSED\",\n \"passed\": true,\n \"score\": 100,\n \"completed_by\": \"6K8vojJn1xe14abL\",\n \"member\": {\n \"id\": \"6K8vojJn1xe14abL\",\n \"object\": \"member\",\n \"first_name\": \"Adalberto\",\n \"last_name\": \"Bruen\",\n \"full_name\": \"Adalberto Bruen\",\n \"avatar\": null,\n \"email\": \"iva52@example.org\",\n \"is_email_verified\": true,\n \"last_seen\": \"2024-11-27T13:51:52.000000Z\"\n },\n \"context\": {\n \"id\": \"QB8nmEJjqdbLA2K5\",\n \"object\": \"element\",\n \"created_at\": \"2024-11-26T11:37:16.000000Z\",\n \"name\": \"Multiple Choice Quiz\",\n \"cover\": null,\n \"type\": \"QUIZ\",\n \"position\": 3,\n \"course\": \"B4peAvmZ1L9OY3Xr\",\n \"module\": \"no0aApWNyRMD68rv\",\n \"metadata\": {}\n }\n}"
tags:
- Activities
parameters:
-
in: path
name: id
description: 'The ID of the requested activity.'
example: p5v87ERWKR3dkjyD
required: true
schema:
type: string
/v0/activities:
get:
summary: 'List all Activities'
description: "Returns a list of activities within your organization. The activities are sorted by their creation date, with the most recently created activities appearing first. Each activity in the list includes information such as the score, dates, element data and more.\n
If the activity is performed by an individual, the member key contains the details of the member who completed the activity.\n
If the activity is performed by a group, the members key provides a list of all members who participated in the activity."
parameters:
-
in: query
name: course
description: 'The unique ID to filter activities by course'
example: B4peAvmZ1L9OY3Xr
required: false
schema:
type: string
description: 'The unique ID to filter activities by course'
example: B4peAvmZ1L9OY3Xr
-
in: query
name: module
description: 'The unique ID to filter activities by module'
example: no0aApWNyRMD68rv
required: false
schema:
type: string
description: 'The unique ID to filter activities by module'
example: no0aApWNyRMD68rv
-
in: query
name: element
description: 'The unique ID to filter activities by element'
example: QB8nmEJjqdbLA2K5
required: false
schema:
type: string
description: 'The unique ID to filter activities by element'
example: QB8nmEJjqdbLA2K5
-
in: query
name: member
description: 'The unique ID to filter activities by member'
example: 6K8vojJn1xe14abL
required: false
schema:
type: string
description: 'The unique ID to filter activities by member'
example: 6K8vojJn1xe14abL
-
in: query
name: page
description: 'A cursor for pagination across multiple pages of results.'
example: 2
required: false
schema:
type: integer
description: 'A cursor for pagination across multiple pages of results.'
example: 2
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n\"error\": null,\n\"payload\": {\n \"data\": [\n {\n \"id\": \"KwJ8VgrmlAp4PBnM\",\n \"object\": \"activity\",\n \"timestamp\" : \"2022-11-27T13:52:02.000000Z\",\n \"status\": \"PASSED\",\n \"passed\": true,\n \"score\": 100,\n \"completed_by\": \"6K8vojJn1xe14abL\",\n \"member\": {\n \"id\": \"6K8vojJn1xe14abL\",\n \"object\": \"member\",\n \"first_name\": \"Adalberto\",\n \"last_name\": \"Bruen\",\n \"full_name\": \"Adalberto Bruen\",\n \"avatar\": null,\n \"email\": \"iva52@example.org\",\n \"is_email_verified\": true,\n \"last_seen\": \"2024-11-27T13:51:52.000000Z\"\n },\n \"context\": {\n \"id\": \"QB8nmEJjqdbLA2K5\",\n \"object\": \"element\",\n \"created_at\": \"2024-11-26T11:37:16.000000Z\",\n \"name\": \"Multiple Choice Quiz\",\n \"cover\": null,\n \"type\": \"QUIZ\",\n \"position\": 3,\n \"course\": \"B4peAvmZ1L9OY3Xr\",\n \"module\": \"no0aApWNyRMD68rv\",\n \"metadata\": {}\n }\n },\n {...},\n {...},\n ],\n \"pagination\": {\n \"total\": 3,\n \"count\": 3,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 1\n }\n}"
tags:
- Activities
/v0/courses/search:
get:
summary: 'Search Courses'
description: 'Search for existing courses in your organization. You can search by course name. The search is case-insensitive and supports partial matches.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"p5v87ERWKR3dkjyD\",\n \"object\": \"course\",\n \"name\": \"Ultimate Marketing Course\",\n \"status\": \"PUBLISHED\",\n \"created_at\": \"2022-02-03T16:06:42.000000Z\",\n \"cover\": null,\n \"availability\": \"CONTINUOUS\",\n \"visibility\": \"PRIVATE\",\n \"start_date\": null,\n \"end_date\": null,\n \"currency\": \"eur\",\n \"price\": null,\n \"url\": null,\n \"public_url\": null,\n \"join_url\": null,\n \"metadata\": {}\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 5,\n \"count\": 5,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 1\n }\n }\n}"
tags:
- Courses
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
q:
type: string
description: 'The search query to filter courses by name.'
example: Marketing
required:
- q
'/v0/courses/{id}':
get:
summary: 'Retrieve a Course'
description: 'Retrieves the details of an existing course in your organization based on the provided unique course ID. Returns a comprehensive information about the course, including its name, availability, status, dates, and more.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: p5v87ERWKR3dkjyD
object: course
name: 'Ultimate Marketing Course'
status: PUBLISHED
created_at: '2022-02-03T16:06:42.000000Z'
cover: null
availability: CONTINUOUS
visibility: PRIVATE
start_date: null
end_date: null
currency: eur
price: null
content: null
url: null
public_url: null
join_url: null
metadata: { }
properties:
error:
type: string
example: null
payload:
type: object
example:
id: p5v87ERWKR3dkjyD
object: course
name: 'Ultimate Marketing Course'
status: PUBLISHED
created_at: '2022-02-03T16:06:42.000000Z'
cover: null
availability: CONTINUOUS
visibility: PRIVATE
start_date: null
end_date: null
currency: eur
price: null
content: null
url: null
public_url: null
join_url: null
metadata: { }
tags:
- Courses
post:
summary: 'Update a Course'
description: 'Updates the details of an existing course in your organization based on the provided unique course ID. Any parameters not provided will be left unchanged. Returns the updated course details upon successful update.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: p5v87ERWKR3dkjyD
object: course
name: 'Ultimate Marketing Course'
status: PUBLISHED
created_at: '2022-02-03T16:06:42.000000Z'
cover: null
availability: CONTINUOUS
visibility: PRIVATE
start_date: null
end_date: null
currency: eur
price: null
content: "# Introduction\nWelcome to the **Ultimate Marketing Course**."
url: null
public_url: null
join_url: null
metadata: { }
properties:
error:
type: string
example: null
payload:
type: object
example:
id: p5v87ERWKR3dkjyD
object: course
name: 'Ultimate Marketing Course'
status: PUBLISHED
created_at: '2022-02-03T16:06:42.000000Z'
cover: null
availability: CONTINUOUS
visibility: PRIVATE
start_date: null
end_date: null
currency: eur
price: null
content: "# Introduction\nWelcome to the **Ultimate Marketing Course**."
url: null
public_url: null
join_url: null
metadata: { }
tags:
- Courses
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The course name. Must not be greater than 255 characters.'
example: 'Ultimate Marketing Course'
content:
type: string
description: 'The course content in markdown format. Supports headings, bold, italic, strikethrough, highlights, inline code, code blocks, blockquotes, lists, tables, images, links, and math (LaTeX).'
example: '# Introduction\nWelcome to the **Ultimate Marketing Course**.'
availability:
type: string
description: 'The course availability. Must be one of: CONTINUOUS, SCHEDULED. Must be one of CONTINUOUS or SCHEDULED.'
example: CONTINUOUS
start_date:
type: string
description: 'If the course availability is set to SCHEDULED, this defines the course schedule start. Specify the date in `YYYY-MM-DD` format. This field is required when availability is SCHEDULED. Must be a valid date.'
example: '2023-07-12'
end_date:
type: string
description: 'If the course availability is set to SCHEDULED, this defines the course schedule end. Specify the date in `YYYY-MM-DD` format. This field is required when availability is SCHEDULED or date. Must be a date after or equal to start_date.'
example: '2023-07-26'
visibility:
type: string
description: 'The course visibility inside your organization. A course with PUBLIC visibility is shown to all the members of your organization. A course with PRIVATE visibility is shown only to the members of the course but is hidden by the other members of your organization. Must be one of PUBLIC or PRIVATE.'
example: PUBLIC
metadata:
type: string
description: 'Metadata is an attribute that lets you store more information, structured as key-value pairs, for your own use and reference.
You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Keys and values are stored as strings and can contain any characters with one exception: you can''t use square brackets ([ and ]) in keys.'
example:
category: marketing
delete:
summary: 'Delete a Course'
description: 'Deletes a course in your organization. Returns an object with a deleted parameter upon successful deletion.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"id\": \"p5v87ERWKR3dkjyD\",\n \"object\": \"course\",\n \"deleted\": true,\n }\n}"
tags:
- Courses
parameters:
-
in: path
name: id
description: 'The ID of the requested course.'
example: p5v87ERWKR3dkjyD
required: true
schema:
type: string
/v0/courses:
get:
summary: 'List all Courses'
description: 'Returns a list of courses within your organization. The courses are sorted by their creation date, with the most recently created courses appearing first. Each course in the list includes information such as the course name, availability, status, dates, and more.'
parameters:
-
in: query
name: page
description: 'A cursor for pagination across multiple pages of results.'
example: 2
required: false
schema:
type: integer
description: 'A cursor for pagination across multiple pages of results.'
example: 2
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"p5v87ERWKR3dkjyD\",\n \"object\": \"course\",\n \"name\": \"Ultimate Marketing Course\",\n \"status\": \"PUBLISHED\",\n \"created_at\": \"2022-02-03T16:06:42.000000Z\",\n \"cover\": null,\n \"availability\": \"CONTINUOUS\",\n \"visibility\": \"PRIVATE\",\n \"start_date\": null,\n \"end_date\": null,\n \"currency\": \"eur\",\n \"price\": null,\n \"url\": null,\n \"public_url\": null,\n \"join_url\": null,\n \"metadata\": {}\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 15,\n \"count\": 5,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 2\n }\n }\n}"
tags:
- Courses
post:
summary: 'Create a Course'
description: 'Creates a course in your organization. Returns the created course details upon successful creation.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: p5v87ERWKR3dkjyD
object: course
name: 'Ultimate Marketing Course'
status: PUBLISHED
created_at: '2022-02-03T16:06:42.000000Z'
cover: null
availability: CONTINUOUS
visibility: PRIVATE
start_date: null
end_date: null
currency: eur
price: null
content: "# Introduction\nWelcome to the **Ultimate Marketing Course**."
url: null
public_url: null
join_url: null
metadata: { }
properties:
error:
type: string
example: null
payload:
type: object
example:
id: p5v87ERWKR3dkjyD
object: course
name: 'Ultimate Marketing Course'
status: PUBLISHED
created_at: '2022-02-03T16:06:42.000000Z'
cover: null
availability: CONTINUOUS
visibility: PRIVATE
start_date: null
end_date: null
currency: eur
price: null
content: "# Introduction\nWelcome to the **Ultimate Marketing Course**."
url: null
public_url: null
join_url: null
metadata: { }
tags:
- Courses
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The course name. Must not be greater than 255 characters.'
example: 'Ultimate Marketing Course'
content:
type: string
description: 'The course content in markdown format. Supports headings, bold, italic, strikethrough, highlights, inline code, code blocks, blockquotes, lists, tables, images, links, and math (LaTeX).'
example: '# Introduction\nWelcome to the **Ultimate Marketing Course**.'
availability:
type: string
description: 'The course availability. Must be one of: CONTINUOUS, SCHEDULED. Must be one of CONTINUOUS or SCHEDULED.'
example: CONTINUOUS
start_date:
type: string
description: 'If the course availability is set to SCHEDULED, this defines the course schedule start. Specify the date in `YYYY-MM-DD` format. This field is required when availability is SCHEDULED. Must be a valid date.'
example: '2023-07-12'
end_date:
type: string
description: 'If the course availability is set to SCHEDULED, this defines the course schedule end. Specify the date in `YYYY-MM-DD` format. This field is required when availability is SCHEDULED or date. Must be a date after or equal to start_date.'
example: '2023-07-26'
visibility:
type: string
description: 'The course visibility inside your organization. A course with PUBLIC visibility is shown to all the members of your organization. A course with PRIVATE visibility is shown only to the members of the course but is hidden by the other members of your organization. Must be one of PUBLIC or PRIVATE.'
example: PUBLIC
metadata:
type: string
description: 'Metadata is an attribute that lets you store more information, structured as key-value pairs, for your own use and reference.
You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Keys and values are stored as strings and can contain any characters with one exception: you can''t use square brackets ([ and ]) in keys.'
example:
category: marketing
'/v0/courses/{id}/join':
post:
summary: 'Join a Course'
description: 'Joins a member in one of your courses.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload: null
properties:
error:
type: string
example: null
payload:
type: string
example: null
tags:
- Courses
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
member:
type: string
description: 'The unique ID of the member who is being added to the course.'
example: e7W6kP8wvjd3GRBz
role:
type: string
description: 'The role to assign to the member inside the course. If not set the member will be enrolled to the course as a customer. To assign an instructor or assiatant to the course use `lecturer` or `assistant`. Must be one of customer, lecturer, or assistant.'
example: lecturer
required:
- member
parameters:
-
in: path
name: id
description: 'The ID of the course to enroll.'
example: p5v87ERWKR3dkjyD
required: true
schema:
type: string
'/v0/courses/{id}/revoke':
post:
summary: 'Revoke Course Access'
description: 'Revokes a member access to a course.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload: null
properties:
error:
type: string
example: null
payload:
type: string
example: null
tags:
- Courses
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
member:
type: string
description: 'The ID of the member to revoke access to the course.'
example: e7W6kP8wvjd3GRBz
required:
- member
parameters:
-
in: path
name: id
description: 'The ID of the course from which the member should be revoked.'
example: p5v87ERWKR3dkjyD
required: true
schema:
type: string
'/v0/courses/{id}/members':
get:
summary: 'List all Course Members'
description: 'Returns a list of members within the course.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"6jO9XN7mZEVpvxqo\",\n \"object\": \"course_member\",\n \"joined_at\": \"2024-01-22T12:56:04.000000Z\",\n \"member\": {\n \"id\": \"e7W6kP8wvjd3GRBz\",\n \"object\": \"member\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"full_name\": \"John Doe\",\n \"avatar\": null,\n \"email\": null,\n \"is_email_verified\": false,\n \"last_seen\": \"2024-01-22T12:56:04.000000Z\"\n },\n \"course\": {\n \"id\": \"p5v87ERWKR3dkjyD\",\n \"object\": \"course\",\n \"name\": \"Ultimate Marketing Course\",\n \"status\": \"PUBLISHED\",\n \"created_at\": \"2022-02-03T16:06:42.000000Z\",\n \"cover\": null,\n \"availability\": \"CONTINUOUS\",\n \"visibility\": \"PRIVATE\",\n \"start_date\": null,\n \"end_date\": null,\n \"currency\": \"eur\",\n \"price\": null,\n \"url\": null,\n \"public_url\": null,\n \"join_url\": null,\n \"metadata\": {}\n },\n \"custom_fields\": {\n \"field_1\": [\n \"Option A\",\n \"Option B\"\n ]\n },\n \"tags\": [\n \"vip\"\n ]\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 15,\n \"count\": 5,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 2\n }\n }\n}"
tags:
- Courses
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
include_test_user:
type: boolean
description: 'Include test users to the results if set to true.'
example: false
parameters:
-
in: path
name: id
description: 'The ID of the course from which the members should be retrieved.'
example: p5v87ERWKR3dkjyD
required: true
schema:
type: string
'/v0/courses/{id}/modules':
get:
summary: 'List all Course Modules'
description: 'Returns a list of modules within the course.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"LZ6dN0DGgBD3QjxB\",\n \"object\": \"module\",\n \"created_at\": \"2024-01-22T12:55:11.000000Z\",\n \"name\": \"Lesson #1\",\n \"type\": \"LESSON\",\n \"availability\": \"CONTINUOUS\",\n \"position\": 0,\n \"course\": \"B4peAvmZ1L9OY3Xr\",\n \"metadata\": {}\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 15,\n \"count\": 5,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 2\n }\n }\n}"
tags:
- Courses
parameters:
-
in: path
name: id
description: 'The ID of the course from which the modules should be retrieved.'
example: LZ6dN0DGgBD3QjxB
required: true
schema:
type: string
'/v0/courses/{id}/elements':
get:
summary: 'List all Course Elements'
description: 'Returns a list of elements within the course.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"WYxKj5OlrekVAGr7\",\n \"object\": \"element\",\n \"created_at\": \"2024-01-22T12:55:11.000000Z\",\n \"name\": \"Introduction\",\n \"cover\": null,\n \"type\": \"CONTENT\",\n \"position\": 0,\n \"module\": \"LZ6dN0DGgBD3QjxB\",\n \"metadata\": {},\n \"properties\": {}\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 15,\n \"count\": 5,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 2\n }\n }\n}"
tags:
- Courses
parameters:
-
in: path
name: id
description: 'The ID of the course from which the elements should be retrieved.'
example: WYxKj5OlrekVAGr7
required: true
schema:
type: string
'/v0/courses/{id}/members/{member_id}':
get:
summary: 'Retrieve a Course Member'
description: 'Retrieves the details of a specific member in a course, including their progress data.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: 6jO9XN7mZEVpvxqo
object: course_member
joined_at: '2024-01-22T12:56:04.000000Z'
member:
id: e7W6kP8wvjd3GRBz
object: member
first_name: John
last_name: Doe
full_name: 'John Doe'
avatar: null
email: john@example.com
is_email_verified: true
last_seen: '2024-01-22T12:56:04.000000Z'
course:
id: p5v87ERWKR3dkjyD
object: course
name: 'Ultimate Marketing Course'
custom_fields:
field_1:
- 'Option A'
- 'Option B'
field_12: Vegetarian
tags:
- vip
- beta-cohort
progress:
is_completed: false
completion_percentage: 65
completed_elements_count: 8
total_elements_count: 12
completed_modules_count: 3
total_modules_count: 5
started_at: '2024-01-22T12:56:04.000000Z'
completed_at: null
properties:
error:
type: string
example: null
payload:
type: object
example:
id: 6jO9XN7mZEVpvxqo
object: course_member
joined_at: '2024-01-22T12:56:04.000000Z'
member:
id: e7W6kP8wvjd3GRBz
object: member
first_name: John
last_name: Doe
full_name: 'John Doe'
avatar: null
email: john@example.com
is_email_verified: true
last_seen: '2024-01-22T12:56:04.000000Z'
course:
id: p5v87ERWKR3dkjyD
object: course
name: 'Ultimate Marketing Course'
custom_fields:
field_1:
- 'Option A'
- 'Option B'
field_12: Vegetarian
tags:
- vip
- beta-cohort
progress:
is_completed: false
completion_percentage: 65
completed_elements_count: 8
total_elements_count: 12
completed_modules_count: 3
total_modules_count: 5
started_at: '2024-01-22T12:56:04.000000Z'
completed_at: null
tags:
- Courses
post:
summary: 'Update a Course Member'
description: "Updates a member's enrollment in one of your courses. Currently the member's course custom field values are the writable data; any parameters not provided are left unchanged. Returns the updated course member.\n\nThe values written here are the course's own enrollment fields. The organization-level fields carried on a member are written through the member endpoints instead."
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: 6jO9XN7mZEVpvxqo
object: course_member
joined_at: '2024-01-22T12:56:04.000000Z'
member:
id: e7W6kP8wvjd3GRBz
object: member
first_name: John
last_name: Doe
full_name: 'John Doe'
avatar: null
email: null
is_email_verified: false
last_seen: '2024-01-22T12:56:04.000000Z'
course:
id: p5v87ERWKR3dkjyD
object: course
name: 'Ultimate Marketing Course'
custom_fields:
field_12: Vegetarian
tags:
- vip
- beta-cohort
progress:
is_completed: false
completion_percentage: 65
completed_elements_count: 8
total_elements_count: 12
completed_modules_count: 3
total_modules_count: 5
started_at: '2024-01-22T12:56:04.000000Z'
completed_at: null
properties:
error:
type: string
example: null
payload:
type: object
example:
id: 6jO9XN7mZEVpvxqo
object: course_member
joined_at: '2024-01-22T12:56:04.000000Z'
member:
id: e7W6kP8wvjd3GRBz
object: member
first_name: John
last_name: Doe
full_name: 'John Doe'
avatar: null
email: null
is_email_verified: false
last_seen: '2024-01-22T12:56:04.000000Z'
course:
id: p5v87ERWKR3dkjyD
object: course
name: 'Ultimate Marketing Course'
custom_fields:
field_12: Vegetarian
tags:
- vip
- beta-cohort
progress:
is_completed: false
completion_percentage: 65
completed_elements_count: 8
total_elements_count: 12
completed_modules_count: 3
total_modules_count: 5
started_at: '2024-01-22T12:56:04.000000Z'
completed_at: null
tags:
- Courses
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
custom_fields:
type: object
description: 'The member course custom field values, keyed by the field''s key. Merged into the stored values — omitted fields keep their current value, and `null` clears an optional one. Requires a plan that includes custom fields.'
example:
field_12: Vegetarian
properties: []
tags:
type: array
description: 'The tags this member carries in this course, by name. Names that do not exist on the course are created. Omit to leave the member''s tags untouched, send an array to replace them, or an empty array to remove them all. Tags the member carries in other courses are unaffected.'
example:
- vip
- beta-cohort
items:
type: string
parameters:
-
in: path
name: id
description: 'The ID of the course.'
example: p5v87ERWKR3dkjyD
required: true
schema:
type: string
-
in: path
name: member_id
description: 'The ID of the member.'
example: e7W6kP8wvjd3GRBz
required: true
schema:
type: string
'/v0/courses/{id}/custom-fields':
get:
summary: 'List all Course Custom Fields'
description: "Returns the custom fields defined on the course — the ones whose values are carried on a course member. Use the `key` of each field when writing values for a member of this course.\n\nA course either uses the organization-wide set of course fields or its own, depending on how it is configured; this endpoint returns whichever applies. Courses with custom fields switched off return an empty list.\n\nThese are separate from the organization fields carried on a member, which are listed by the custom fields endpoint.\n\nThe full list is returned in a single response; this endpoint is not paginated."
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
-
key: field_12
object: custom-field
created_at: '2024-07-30T16:05:47.000000Z'
name: 'Dietary requirements'
description: null
type: SINGLE_OPTION
options:
- None
- Vegetarian
- Vegan
required: false
properties:
error:
type: string
example: null
payload:
type: array
example:
-
key: field_12
object: custom-field
created_at: '2024-07-30T16:05:47.000000Z'
name: 'Dietary requirements'
description: null
type: SINGLE_OPTION
options:
- None
- Vegetarian
- Vegan
required: false
items:
type: object
tags:
- Courses
parameters:
-
in: path
name: id
description: 'The ID of the course whose custom fields should be retrieved.'
example: p5v87ERWKR3dkjyD
required: true
schema:
type: string
'/v0/elements/{id}/activities':
get:
summary: 'List all activites'
description: 'Returns a list of activites related to the element.
If the activity is performed by an individual, the member key contains the details of the member who completed the activity.
If the activity is performed by a group, the members key provides a list of all members who participated in the activity.'
parameters:
-
in: query
name: member
description: 'The unique ID of the member to filter activities for.'
example: 6K8vojJn1xe14abL
required: false
schema:
type: string
description: 'The unique ID of the member to filter activities for.'
example: 6K8vojJn1xe14abL
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n\"error\": null,\n\"payload\": {\n \"data\": [\n {\n \"id\": \"KwJ8VgrmlAp4PBnM\",\n \"object\": \"activity\",\n \"timestamp\" : \"2022-11-27T13:52:02.000000Z\",\n \"status\": \"PASSED\",\n \"passed\": true,\n \"score\": 100,\n \"completed_by\": \"6K8vojJn1xe14abL\",\n \"member\": {\n \"id\": \"6K8vojJn1xe14abL\",\n \"object\": \"member\",\n \"first_name\": \"Adalberto\",\n \"last_name\": \"Bruen\",\n \"full_name\": \"Adalberto Bruen\",\n \"avatar\": null,\n \"email\": \"iva52@example.org\",\n \"is_email_verified\": true,\n \"last_seen\": \"2024-11-27T13:51:52.000000Z\"\n },\n \"context\": {\n \"id\": \"QB8nmEJjqdbLA2K5\",\n \"object\": \"element\",\n \"created_at\": \"2024-11-26T11:37:16.000000Z\",\n \"name\": \"Multiple Choice Quiz\",\n \"cover\": null,\n \"type\": \"QUIZ\",\n \"content\": null,\n \"position\": 3,\n \"course\": \"B4peAvmZ1L9OY3Xr\",\n \"module\": \"no0aApWNyRMD68rv\",\n \"metadata\": {},\n \"properties\": {\n \"passing_score\": 70,\n \"completion_trigger\": \"on_pass\"\n }\n },\n },\n {...},\n {...},\n ],\n \"pagination\": {\n \"total\": 3,\n \"count\": 3,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 1\n }\n}"
tags:
- Elements
parameters:
-
in: path
name: id
description: 'The ID of the element to retrieve an activities.'
example: e7W6kP8wvjd3GRBz
required: true
schema:
type: string
/v0/elements:
post:
summary: 'Create element'
description: 'Creates an element in the specified module. Returns the created element details upon successful creation.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
data:
id: QB8nmEJjqdbLA2K5
object: element
created_at: '2024-11-26T11:37:16.000000Z'
name: 'Multiple Choice Quiz'
cover: null
type: QUIZ
content: null
position: 3
course: B4peAvmZ1L9OY3Xr
module: no0aApWNyRMD68rv
metadata: { }
properties:
passing_score: 70
completion_trigger: on_pass
properties:
error:
type: string
example: null
payload:
type: object
example:
data:
id: QB8nmEJjqdbLA2K5
object: element
created_at: '2024-11-26T11:37:16.000000Z'
name: 'Multiple Choice Quiz'
cover: null
type: QUIZ
content: null
position: 3
course: B4peAvmZ1L9OY3Xr
module: no0aApWNyRMD68rv
metadata: { }
properties:
passing_score: 70
completion_trigger: on_pass
tags:
- Elements
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The element name. Must not be greater than 255 characters.'
example: 'First knowledge'
content:
type: string
description: 'The element content in markdown format. Supports headings, bold, italic, strikethrough, highlights, inline code, code blocks, blockquotes, lists, tables, images, links, and math (LaTeX).'
example: '# Element Introduction\nWelcome to the **first element**.'
module:
type: string
description: 'The module id of the element.'
example: no0aApWNyRMD68rv
position:
type: integer
description: 'The 0-indexed position of the element within its module. If omitted, the element is appended at the end. Values beyond the last sibling index are clamped to the last position. Siblings are re-ordered automatically. Must be at least 0.'
example: 0
type:
type: string
description: 'The element type. Must be one of: CONTENT, VIDEO, ZOOM_MEETING, MEETING_LINK, QUIZ, SUBMISSION, GROUP_SUBMISSION, EMBED, SURVEY, SCORM, CERTIFICATE, TAG, DATACAMP, SELF_REVIEW, PEER_REVIEW, FEEDBACK_REFLECTION, INSTRUCTOR_REVIEW, INSTRUCTOR_DISCUSSION, AI_REVIEW, CHECKLIST, DISCUSSION, FILE, GROUP_FORMATION, FORM, SCORE, GROUP_PEER_REVIEW, GROUP_FEEDBACK_REFLECTION, MICROSOFT_TEAMS_MEETING.'
example: QUIZ
metadata:
type: string
description: 'Metadata is an attribute that lets you store more information, structured as key-value pairs, for your own use and reference.
You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Keys and values are stored as strings and can contain any characters with one exception: you can''t use square brackets ([ and ]) in keys.'
example:
category: marketing
properties:
type: string
description: 'Type-specific properties for the element. The accepted keys depend on the element type. Unknown keys will be rejected with a validation error.
Supported element types and their properties:
VIDEO
• video_url (string) — The video URL. Supports Vimeo, YouTube, and direct video URLs.
• video_type (string) — The video source type. Must be set to URL when updating the video_url. Must be one of: URL, SOURCE.
QUIZ
• passing_score (integer) — The minimum passing score (0-100).
• completion_trigger (string) — When the quiz should be marked as complete. Must be one of: on_pass, on_submit.
• questions (array) — The quiz questions. Full replacement — the entire questions array is replaced on update. Include existing question/answer IDs to preserve links to student responses. Omit IDs to auto-generate new ones.
Questions
The questions property accepts an array of question objects. The entire questions array is replaced on every update (full replacement, not merge).
Important — Question and Answer IDs:
Each question and answer has an id field. These IDs link to student responses, activity records, and grades. When updating questions:
• Include the id to preserve an existing question/answer and maintain links to student data.
• Omit the id to create a new question/answer with an auto-generated ID.
• Questions/answers not included in the array will be removed.
• If you change or omit an existing ID, the link to student responses for that question/answer will be broken.
Question object:
• id (string, optional) — Existing question ID to preserve. Omit for new questions.
• text (string, required) — The question text.
• shuffle (boolean, optional) — Whether to shuffle answer order. Default: false.
• require_all_correct (boolean, optional) — Require all correct answers selected (multi-choice). Default: false.
• answers (array, required) — Array of answer objects.
Answer object:
• id (string, optional) — Existing answer ID to preserve. Omit for new answers.
• text (string, required) — The answer text.
• is_correct (boolean, required) — Whether this is a correct answer.
EMBED
• embed (string) — The embed code.
FILE
• file_url (string) — The file URL.
SUBMISSION
• questions (array) — The submission questions. Full replacement on update. Each question defines which response types (text, file) are accepted.
Questions
The questions property accepts an array of question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question defines which response types (text, file) are accepted.
Question object:
• id (string, optional) — Existing question ID to preserve. Omit for new questions.
• text (string, required) — The question text.
• accept_text (boolean, optional) — Whether text responses are accepted. Default: true.
• text_required (boolean, optional) — Whether text response is required. Default: false.
• accept_file (boolean, optional) — Whether file uploads are accepted. Default: false.
• file_required (boolean, optional) — Whether file upload is required. Default: false.
• file_multiple (boolean, optional) — Whether multiple files can be uploaded. Default: false.
GROUP_SUBMISSION
• questions (array) — The submission questions. Full replacement on update. Each question defines which response types (text, file) are accepted.
Questions
The questions property accepts an array of question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question defines which response types (text, file) are accepted.
Question object:
• id (string, optional) — Existing question ID to preserve. Omit for new questions.
• text (string, required) — The question text.
• accept_text (boolean, optional) — Whether text responses are accepted. Default: true.
• text_required (boolean, optional) — Whether text response is required. Default: false.
• accept_file (boolean, optional) — Whether file uploads are accepted. Default: false.
• file_required (boolean, optional) — Whether file upload is required. Default: false.
• file_multiple (boolean, optional) — Whether multiple files can be uploaded. Default: false.
SURVEY
• questions (array) — The survey questions. Full replacement on update. Each question has a text and a list of options participants can choose from.
Questions
The questions property accepts an array of survey (poll-style) questions. The entire questions array is replaced on every update (full replacement, not merge). Each question has a text and a list of answer options participants can choose from. There are no correct answers and no scoring.
Question object:
• id (string, optional) — Existing question ID to preserve. Omit for new questions.
• text (string, required) — The question text.
• options (array, required) — Answer options (at least 2).
Option object:
• id (string, optional) — Existing option ID to preserve.
• text (string, required) — The option text.
FORM
• questions (array) — The form questions. Full replacement — the entire questions array is replaced on update. Each question has a type that determines its structure.
Questions
The questions property accepts an array of question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, NUMBER_SCALE, MULTIPLE_CHOICE, STACK_RANK, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve. Omit for new questions.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT type additional fields:
• min_words (integer, optional) — Minimum word count. Default: 1.
NUMBER_SCALE type additional fields:
• range_min (integer, optional) — Scale minimum value. Default: 1.
• range_max (integer, optional) — Scale maximum value. Default: 10.
MULTIPLE_CHOICE / STACK_RANK type additional fields:
• options (array, required) — Array of option objects.
Option object:
• id (string, optional) — Existing option ID to preserve.
• text (string, required) — The option text.
MEETING_LINK
• meeting_url (string) — The meeting URL.
• start_date (string) — The meeting start date (ISO 8601 format).
• end_date (string) — The meeting end date (ISO 8601 format).
ZOOM_MEETING
• start_date (string) — The meeting start date (ISO 8601 format).
• end_date (string) — The meeting end date (ISO 8601 format).
• meeting_reports (boolean) — Whether attendance tracking is enabled.
MICROSOFT_TEAMS_MEETING
• start_date (string) — The meeting start date (ISO 8601 format).
• end_date (string) — The meeting end date (ISO 8601 format).
• meeting_reports (boolean) — Whether attendance tracking is enabled.
DISCUSSION
• restrict_posts_to (string) — Who can create top-level posts. "everyone" allows learners and lecturers to post; "lecturers" restricts top-level posts to lecturers only (learners can still comment on existing posts). Must be one of: everyone, lecturers.
• completion_rules (object) — Rules that determine when the discussion is marked complete for a learner. Operator joins multiple rules. Each rule has a type (POST or COMMENT) and a count. Each rule type can appear at most once.
SCORM
• scorm_url (string) — The URL of the uploaded SCORM package file.
• scorm_user_identifier (string) — The identifier used to track learners. Must be one of: user_id, user_email.
GROUP_FORMATION
• min_members (integer) — Minimum number of members per group. Must be a positive integer.
• max_members (integer) — Maximum number of members per group. Must be a positive integer and greater than or equal to "min_members".
• restrict_group_creation_to (string) — Who can create groups within this element. "everyone" allows learners and lecturers to create groups; "lecturers" restricts group creation to lecturers only. Must be one of: everyone, lecturers.
• group_threads_enabled (boolean) — Whether each group has its own discussion thread for internal communication. When enabled, group members can post and reply within a thread scoped to their group.
CHECKLIST
• questions (array) — The checklist items. Full replacement on update. Each item is a simple { id?, text } object.
Questions
The questions property accepts an array of checklist items. The entire items array is replaced on every update (full replacement, not merge). Each item is a simple object with a text field.
Item object:
• id (string, optional) — Existing item ID to preserve. Omit for new items.
• text (string, required) — The checklist item text.
SCORE
• passing_score (integer) — The score (as a percentage, 0–100) a learner must reach to pass this element. Compared against the learner''s computed average using "passing_score_comparator".
• passing_score_comparator (string) — How the learner''s computed average is compared against "passing_score". Example: "greater_than_or_equal" with passing_score=70 means a learner passes when their average is at least 70. Must be one of: greater_than, greater_than_or_equal, equal_to, less_than, less_than_or_equal.
• incomplete_inputs_handling (string) — How inputs the learner has not yet completed contribute to the weighted average. "ignore" drops them from the denominator (no effect); "score_as_zero" counts them as 0 with full weight (drags the average down). Must be one of: ignore, score_as_zero.
• inputs (array) — The source elements that contribute to the weighted average. Full replacement on every update — the entire array supersedes the previous set. See the SCORE inputs schema for the input object structure. Each input''s weight must be a positive integer; zero or fractional weights are rejected.
Inputs
The inputs property accepts an array of input objects that contribute to the weighted average. The entire inputs array is replaced on every update (full replacement, not merge). Each input references a source element in the same course, optionally graded by a review element''s rubric (quality-based scoring), with a weight in the average.
Input object:
• element (string, required) — Hash ID of the source element being graded. Must belong to the same course as the SCORE element.
• weight (integer, optional) — Weight in the weighted average. Must be a positive integer greater than 0. Default: 1. Zero or fractional weights are rejected.
• scored_via (string, optional) — Hash ID of a review element whose rubric grades the source (quality-based scoring). The valid pairings are restricted because only certain source types support being graded via a review element:
• If element is a SUBMISSION, scored_via must be a PEER_REVIEW, AI_REVIEW, or INSTRUCTOR_REVIEW.
• If element is a PEER_REVIEW, scored_via must be a FEEDBACK_REFLECTION.
• For any other source type, scored_via is not allowed and will be rejected.
PEER_REVIEW
• source (object) — The submission element being reviewed. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear.
• questions (array) — The review rubric questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the submission element being reviewed. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type SUBMISSION and must belong to the same course.
Questions
The questions property accepts an array of review rubric question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
SELF_REVIEW
• source (object) — The submission element being self-reviewed. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear. Must be a SUBMISSION element in the same course.
• questions (array) — The review rubric questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the submission element being reviewed. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type SUBMISSION and must belong to the same course.
Questions
The questions property accepts an array of review rubric question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
INSTRUCTOR_REVIEW
• source (object) — The submission element being reviewed. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear. Must be a SUBMISSION or GROUP_SUBMISSION element in the same course.
• questions (array) — The review rubric questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the submission element being reviewed. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type SUBMISSION or GROUP_SUBMISSION and must belong to the same course.
Questions
The questions property accepts an array of review rubric question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
INSTRUCTOR_DISCUSSION
• source (object) — The submission element being discussed. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear. Must be a SUBMISSION or GROUP_SUBMISSION element in the same course.
Source
The source property references the submission element being discussed. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type SUBMISSION or GROUP_SUBMISSION and must belong to the same course.
AI_REVIEW
• source (object) — The submission element being reviewed. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear. Must be a SUBMISSION element in the same course.
• questions (array) — The review rubric questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the submission element being reviewed. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type SUBMISSION and must belong to the same course.
Questions
The questions property accepts an array of review rubric question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
FEEDBACK_REFLECTION
• source (object) — The peer review element this reflection is linked to. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear. Must be a PEER_REVIEW element in the same course.
• questions (array) — The reflection questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the peer review element this reflection is linked to. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type PEER_REVIEW and must belong to the same course.
Questions
The questions property accepts an array of reflection question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
GROUP_PEER_REVIEW
• source (object) — The group submission element being reviewed. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear.
• questions (array) — The review rubric questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the submission element being reviewed. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type GROUP_SUBMISSION and must belong to the same course.
Questions
The questions property accepts an array of review rubric question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
GROUP_FEEDBACK_REFLECTION
• source (object) — The group peer review element this reflection is linked to. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear. Must be a GROUP_PEER_REVIEW element in the same course.
• questions (array) — The reflection questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the peer review element this reflection is linked to. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type GROUP_PEER_REVIEW and must belong to the same course.
Questions
The questions property accepts an array of reflection question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
CERTIFICATE
• certificate_title (string) — The certificate title.
• certificate_description (string) — The certificate description.
• certificate_course_name (string) — The course name displayed on the certificate.
• certificate_issued_by (string) — The issuer name displayed on the certificate.
.'
example:
video_url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ'
required:
- module
get:
summary: 'List all Elements'
description: 'Returns a list of elements within your organization. The elements are sorted by their creation date, with the most recently created elements appearing first.'
parameters:
-
in: query
name: page
description: 'A cursor for pagination across multiple pages of results.'
example: 2
required: false
schema:
type: integer
description: 'A cursor for pagination across multiple pages of results.'
example: 2
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"QB8nmEJjqdbLA2K5\",\n \"object\": \"element\",\n \"created_at\": \"2024-11-26T11:37:16.000000Z\",\n \"name\": \"Multiple Choice Quiz\",\n \"cover\": null,\n \"type\": \"QUIZ\",\n \"content\": null,\n \"position\": 3,\n \"course\": \"B4peAvmZ1L9OY3Xr\",\n \"module\": \"no0aApWNyRMD68rv\",\n \"metadata\": {},\n \"properties\": {}\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 15,\n \"count\": 5,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 2\n }\n }\n}"
tags:
- Elements
'/v0/elements/{id}':
post:
summary: 'Update element'
description: 'Updates the details of an existing element in your organization based on the provided unique element ID. Any parameters not provided will be left unchanged. Returns the updated element details upon successful update.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
data:
id: QB8nmEJjqdbLA2K5
object: element
created_at: '2024-11-26T11:37:16.000000Z'
name: 'Multiple Choice Quiz'
cover: null
type: QUIZ
content: null
position: 3
course: B4peAvmZ1L9OY3Xr
module: no0aApWNyRMD68rv
metadata: { }
properties:
passing_score: 80
completion_trigger: on_pass
properties:
error:
type: string
example: null
payload:
type: object
example:
data:
id: QB8nmEJjqdbLA2K5
object: element
created_at: '2024-11-26T11:37:16.000000Z'
name: 'Multiple Choice Quiz'
cover: null
type: QUIZ
content: null
position: 3
course: B4peAvmZ1L9OY3Xr
module: no0aApWNyRMD68rv
metadata: { }
properties:
passing_score: 80
completion_trigger: on_pass
tags:
- Elements
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The element name. Must not be greater than 255 characters.'
example: 'Introduction to Marketing'
content:
type: string
description: 'The element content in markdown format. Supports headings, bold, italic, strikethrough, highlights, inline code, code blocks, blockquotes, lists, tables, images, links, and math (LaTeX).'
example: '# Element Introduction\nWelcome to the **first element**.'
position:
type: integer
description: 'The 0-indexed position of the element within its module. Siblings are re-ordered automatically. Values beyond the last sibling index are clamped to the last position. Must be at least 0.'
example: 2
metadata:
type: string
description: 'Metadata is an attribute that lets you store more information, structured as key-value pairs, for your own use and reference.
You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Keys and values are stored as strings and can contain any characters with one exception: you can''t use square brackets ([ and ]) in keys.'
example:
category: marketing
properties:
type: string
description: 'Type-specific properties for the element. The accepted keys depend on the element type. Unknown keys will be rejected with a validation error.
Supported element types and their properties:
VIDEO
• video_url (string) — The video URL. Supports Vimeo, YouTube, and direct video URLs.
• video_type (string) — The video source type. Must be set to URL when updating the video_url. Must be one of: URL, SOURCE.
QUIZ
• passing_score (integer) — The minimum passing score (0-100).
• completion_trigger (string) — When the quiz should be marked as complete. Must be one of: on_pass, on_submit.
• questions (array) — The quiz questions. Full replacement — the entire questions array is replaced on update. Include existing question/answer IDs to preserve links to student responses. Omit IDs to auto-generate new ones.
Questions
The questions property accepts an array of question objects. The entire questions array is replaced on every update (full replacement, not merge).
Important — Question and Answer IDs:
Each question and answer has an id field. These IDs link to student responses, activity records, and grades. When updating questions:
• Include the id to preserve an existing question/answer and maintain links to student data.
• Omit the id to create a new question/answer with an auto-generated ID.
• Questions/answers not included in the array will be removed.
• If you change or omit an existing ID, the link to student responses for that question/answer will be broken.
Question object:
• id (string, optional) — Existing question ID to preserve. Omit for new questions.
• text (string, required) — The question text.
• shuffle (boolean, optional) — Whether to shuffle answer order. Default: false.
• require_all_correct (boolean, optional) — Require all correct answers selected (multi-choice). Default: false.
• answers (array, required) — Array of answer objects.
Answer object:
• id (string, optional) — Existing answer ID to preserve. Omit for new answers.
• text (string, required) — The answer text.
• is_correct (boolean, required) — Whether this is a correct answer.
EMBED
• embed (string) — The embed code.
FILE
• file_url (string) — The file URL.
SUBMISSION
• questions (array) — The submission questions. Full replacement on update. Each question defines which response types (text, file) are accepted.
Questions
The questions property accepts an array of question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question defines which response types (text, file) are accepted.
Question object:
• id (string, optional) — Existing question ID to preserve. Omit for new questions.
• text (string, required) — The question text.
• accept_text (boolean, optional) — Whether text responses are accepted. Default: true.
• text_required (boolean, optional) — Whether text response is required. Default: false.
• accept_file (boolean, optional) — Whether file uploads are accepted. Default: false.
• file_required (boolean, optional) — Whether file upload is required. Default: false.
• file_multiple (boolean, optional) — Whether multiple files can be uploaded. Default: false.
GROUP_SUBMISSION
• questions (array) — The submission questions. Full replacement on update. Each question defines which response types (text, file) are accepted.
Questions
The questions property accepts an array of question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question defines which response types (text, file) are accepted.
Question object:
• id (string, optional) — Existing question ID to preserve. Omit for new questions.
• text (string, required) — The question text.
• accept_text (boolean, optional) — Whether text responses are accepted. Default: true.
• text_required (boolean, optional) — Whether text response is required. Default: false.
• accept_file (boolean, optional) — Whether file uploads are accepted. Default: false.
• file_required (boolean, optional) — Whether file upload is required. Default: false.
• file_multiple (boolean, optional) — Whether multiple files can be uploaded. Default: false.
SURVEY
• questions (array) — The survey questions. Full replacement on update. Each question has a text and a list of options participants can choose from.
Questions
The questions property accepts an array of survey (poll-style) questions. The entire questions array is replaced on every update (full replacement, not merge). Each question has a text and a list of answer options participants can choose from. There are no correct answers and no scoring.
Question object:
• id (string, optional) — Existing question ID to preserve. Omit for new questions.
• text (string, required) — The question text.
• options (array, required) — Answer options (at least 2).
Option object:
• id (string, optional) — Existing option ID to preserve.
• text (string, required) — The option text.
FORM
• questions (array) — The form questions. Full replacement — the entire questions array is replaced on update. Each question has a type that determines its structure.
Questions
The questions property accepts an array of question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, NUMBER_SCALE, MULTIPLE_CHOICE, STACK_RANK, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve. Omit for new questions.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT type additional fields:
• min_words (integer, optional) — Minimum word count. Default: 1.
NUMBER_SCALE type additional fields:
• range_min (integer, optional) — Scale minimum value. Default: 1.
• range_max (integer, optional) — Scale maximum value. Default: 10.
MULTIPLE_CHOICE / STACK_RANK type additional fields:
• options (array, required) — Array of option objects.
Option object:
• id (string, optional) — Existing option ID to preserve.
• text (string, required) — The option text.
MEETING_LINK
• meeting_url (string) — The meeting URL.
• start_date (string) — The meeting start date (ISO 8601 format).
• end_date (string) — The meeting end date (ISO 8601 format).
ZOOM_MEETING
• start_date (string) — The meeting start date (ISO 8601 format).
• end_date (string) — The meeting end date (ISO 8601 format).
• meeting_reports (boolean) — Whether attendance tracking is enabled.
MICROSOFT_TEAMS_MEETING
• start_date (string) — The meeting start date (ISO 8601 format).
• end_date (string) — The meeting end date (ISO 8601 format).
• meeting_reports (boolean) — Whether attendance tracking is enabled.
DISCUSSION
• restrict_posts_to (string) — Who can create top-level posts. "everyone" allows learners and lecturers to post; "lecturers" restricts top-level posts to lecturers only (learners can still comment on existing posts). Must be one of: everyone, lecturers.
• completion_rules (object) — Rules that determine when the discussion is marked complete for a learner. Operator joins multiple rules. Each rule has a type (POST or COMMENT) and a count. Each rule type can appear at most once.
SCORM
• scorm_url (string) — The URL of the uploaded SCORM package file.
• scorm_user_identifier (string) — The identifier used to track learners. Must be one of: user_id, user_email.
GROUP_FORMATION
• min_members (integer) — Minimum number of members per group. Must be a positive integer.
• max_members (integer) — Maximum number of members per group. Must be a positive integer and greater than or equal to "min_members".
• restrict_group_creation_to (string) — Who can create groups within this element. "everyone" allows learners and lecturers to create groups; "lecturers" restricts group creation to lecturers only. Must be one of: everyone, lecturers.
• group_threads_enabled (boolean) — Whether each group has its own discussion thread for internal communication. When enabled, group members can post and reply within a thread scoped to their group.
CHECKLIST
• questions (array) — The checklist items. Full replacement on update. Each item is a simple { id?, text } object.
Questions
The questions property accepts an array of checklist items. The entire items array is replaced on every update (full replacement, not merge). Each item is a simple object with a text field.
Item object:
• id (string, optional) — Existing item ID to preserve. Omit for new items.
• text (string, required) — The checklist item text.
SCORE
• passing_score (integer) — The score (as a percentage, 0–100) a learner must reach to pass this element. Compared against the learner''s computed average using "passing_score_comparator".
• passing_score_comparator (string) — How the learner''s computed average is compared against "passing_score". Example: "greater_than_or_equal" with passing_score=70 means a learner passes when their average is at least 70. Must be one of: greater_than, greater_than_or_equal, equal_to, less_than, less_than_or_equal.
• incomplete_inputs_handling (string) — How inputs the learner has not yet completed contribute to the weighted average. "ignore" drops them from the denominator (no effect); "score_as_zero" counts them as 0 with full weight (drags the average down). Must be one of: ignore, score_as_zero.
• inputs (array) — The source elements that contribute to the weighted average. Full replacement on every update — the entire array supersedes the previous set. See the SCORE inputs schema for the input object structure. Each input''s weight must be a positive integer; zero or fractional weights are rejected.
Inputs
The inputs property accepts an array of input objects that contribute to the weighted average. The entire inputs array is replaced on every update (full replacement, not merge). Each input references a source element in the same course, optionally graded by a review element''s rubric (quality-based scoring), with a weight in the average.
Input object:
• element (string, required) — Hash ID of the source element being graded. Must belong to the same course as the SCORE element.
• weight (integer, optional) — Weight in the weighted average. Must be a positive integer greater than 0. Default: 1. Zero or fractional weights are rejected.
• scored_via (string, optional) — Hash ID of a review element whose rubric grades the source (quality-based scoring). The valid pairings are restricted because only certain source types support being graded via a review element:
• If element is a SUBMISSION, scored_via must be a PEER_REVIEW, AI_REVIEW, or INSTRUCTOR_REVIEW.
• If element is a PEER_REVIEW, scored_via must be a FEEDBACK_REFLECTION.
• For any other source type, scored_via is not allowed and will be rejected.
PEER_REVIEW
• source (object) — The submission element being reviewed. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear.
• questions (array) — The review rubric questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the submission element being reviewed. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type SUBMISSION and must belong to the same course.
Questions
The questions property accepts an array of review rubric question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
SELF_REVIEW
• source (object) — The submission element being self-reviewed. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear. Must be a SUBMISSION element in the same course.
• questions (array) — The review rubric questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the submission element being reviewed. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type SUBMISSION and must belong to the same course.
Questions
The questions property accepts an array of review rubric question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
INSTRUCTOR_REVIEW
• source (object) — The submission element being reviewed. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear. Must be a SUBMISSION or GROUP_SUBMISSION element in the same course.
• questions (array) — The review rubric questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the submission element being reviewed. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type SUBMISSION or GROUP_SUBMISSION and must belong to the same course.
Questions
The questions property accepts an array of review rubric question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
INSTRUCTOR_DISCUSSION
• source (object) — The submission element being discussed. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear. Must be a SUBMISSION or GROUP_SUBMISSION element in the same course.
Source
The source property references the submission element being discussed. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type SUBMISSION or GROUP_SUBMISSION and must belong to the same course.
AI_REVIEW
• source (object) — The submission element being reviewed. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear. Must be a SUBMISSION element in the same course.
• questions (array) — The review rubric questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the submission element being reviewed. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type SUBMISSION and must belong to the same course.
Questions
The questions property accepts an array of review rubric question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
FEEDBACK_REFLECTION
• source (object) — The peer review element this reflection is linked to. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear. Must be a PEER_REVIEW element in the same course.
• questions (array) — The reflection questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the peer review element this reflection is linked to. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type PEER_REVIEW and must belong to the same course.
Questions
The questions property accepts an array of reflection question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
GROUP_PEER_REVIEW
• source (object) — The group submission element being reviewed. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear.
• questions (array) — The review rubric questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the submission element being reviewed. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type GROUP_SUBMISSION and must belong to the same course.
Questions
The questions property accepts an array of review rubric question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
GROUP_FEEDBACK_REFLECTION
• source (object) — The group peer review element this reflection is linked to. On read returns { type, id, name }. On write pass { id: "element_id" } or null to clear. Must be a GROUP_PEER_REVIEW element in the same course.
• questions (array) — The reflection questions. Full replacement on update. Types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX.
Source
The source property references the peer review element this reflection is linked to. On read it returns an object with type, id, and name. On write, pass { "id": "element_id" }, or null to clear. The referenced element must be of type GROUP_PEER_REVIEW and must belong to the same course.
Questions
The questions property accepts an array of reflection question objects. The entire questions array is replaced on every update (full replacement, not merge). Each question has a type that determines its structure.
Question types: TEXT, TEXT_SCALE, NUMBER_SCALE, YES_NO, INFO_BOX
Common fields (all types):
• id (string, optional) — Existing question ID to preserve.
• type (string, required) — The question type.
• text (string, required) — The question text.
• optional (boolean, optional) — Whether the question is optional. Default: false.
TEXT: min_words (integer)
NUMBER_SCALE: range_min (integer), range_max (integer)
TEXT_SCALE: options (array of { text }) — ordered from lowest to highest score.
YES_NO: yes_text (string), no_text (string)
INFO_BOX: no additional fields
CERTIFICATE
• certificate_title (string) — The certificate title.
• certificate_description (string) — The certificate description.
• certificate_course_name (string) — The course name displayed on the certificate.
• certificate_issued_by (string) — The issuer name displayed on the certificate.
.'
example:
passing_score: 80
get:
summary: 'Retrieve an Element'
description: 'Retrieves the details of an existing element in your organization based on the provided unique element ID. Returns comprehensive information about the element, including its name, type, content, position, and type-specific properties.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
data:
id: QB8nmEJjqdbLA2K5
object: element
created_at: '2024-11-26T11:37:16.000000Z'
name: 'Multiple Choice Quiz'
cover: null
type: QUIZ
content: null
position: 3
course: B4peAvmZ1L9OY3Xr
module: no0aApWNyRMD68rv
metadata: { }
properties:
passing_score: 70
completion_trigger: on_pass
properties:
error:
type: string
example: null
payload:
type: object
example:
data:
id: QB8nmEJjqdbLA2K5
object: element
created_at: '2024-11-26T11:37:16.000000Z'
name: 'Multiple Choice Quiz'
cover: null
type: QUIZ
content: null
position: 3
course: B4peAvmZ1L9OY3Xr
module: no0aApWNyRMD68rv
metadata: { }
properties:
passing_score: 70
completion_trigger: on_pass
tags:
- Elements
delete:
summary: 'Delete an Element'
description: 'Deletes an existing element in your organization. Returns an object with a deleted parameter upon successful deletion.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: QB8nmEJjqdbLA2K5
object: element
deleted: true
properties:
error:
type: string
example: null
payload:
type: object
example:
id: QB8nmEJjqdbLA2K5
object: element
deleted: true
tags:
- Elements
parameters:
-
in: path
name: id
description: 'The ID of the requested element to update.'
example: p5v87ERWKR3dkjyD
required: true
schema:
type: string
/v0/elements/search:
get:
summary: 'Search Elements'
description: 'Search for existing elements in your organization. You can search by element name. The search is case-insensitive and supports partial matches.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"QB8nmEJjqdbLA2K5\",\n \"object\": \"element\",\n \"created_at\": \"2024-11-26T11:37:16.000000Z\",\n \"name\": \"Multiple Choice Quiz\",\n \"cover\": null,\n \"type\": \"QUIZ\",\n \"content\": null,\n \"position\": 3,\n \"course\": \"B4peAvmZ1L9OY3Xr\",\n \"module\": \"no0aApWNyRMD68rv\",\n \"metadata\": {},\n \"properties\": {}\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 3,\n \"count\": 3,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 1\n }\n }\n}"
tags:
- Elements
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
q:
type: string
description: 'The search query to filter elements by name.'
example: Quiz
type:
type: string
description: 'Must be one of CONTENT, VIDEO, ZOOM_MEETING, MEETING_LINK, QUIZ, SUBMISSION, GROUP_SUBMISSION, EMBED, SURVEY, SCORM, CERTIFICATE, TAG, DATACAMP, SELF_REVIEW, PEER_REVIEW, FEEDBACK_REFLECTION, INSTRUCTOR_REVIEW, INSTRUCTOR_DISCUSSION, AI_REVIEW, CHECKLIST, DISCUSSION, FILE, GROUP_FORMATION, FORM, SCORE, GROUP_PEER_REVIEW, GROUP_FEEDBACK_REFLECTION, or MICROSOFT_TEAMS_MEETING.'
example: DISCUSSION
required:
- q
/v0/marketplace/apps:
get:
summary: 'List public marketplace apps (featured / recently added / search / category).'
description: ''
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
data:
-
id: 6a44e7df08cc1
name: 'Lesson Feedback'
description: 'Collect learner feedback on every lesson with a quick emoji rating and an optional comment. Instructors, admins, and owners get a clear Satisfaction Rate and the comments behind it, lesson by lesson.'
icon: 'https://cdn.teachfloor.com/public/1/icon-1782490711.png'
version: 1.2.0
built_by: Teachfloor
views:
- teachfloor.dashboard.course.module.detail
- teachfloor.dashboard.course.element.detail
- settings
permissions:
- 'user:read'
- 'appdata:write'
- 'appdata:read'
features:
-
key: e214bac4-e053-a619-6181-319d653fcba5
image: null
title: 'Emoji Ratings'
description: 'Learners rate each lesson on a friendly five-point emoji scale, with an optional comment field that appears the moment they pick a reaction. The lightweight, one-tap design keeps response rates high without interrupting the learning flow.'
-
key: a942038c-c587-50e3-42fa-c181fe412d01
image: null
title: 'Satisfaction Rate'
description: 'Every rating rolls up into a single Satisfaction Rate for the lesson, color-coded so you can spot strong and weak content at a glance. Admins and owners see the percentage, the full distribution across all five reactions, and the total number of responses.'
-
key: 1a1a12dd-46f4-523d-85bc-06dac89fda8c
image: null
title: 'Comments That Add Context'
description: 'Read the written feedback behind the scores, each tied to the learner who left it. Use the comments to understand exactly what worked, what confused people, and what to improve in the next iteration of your course.'
screenshots:
-
alt: 'Teachfloor Reaction Buttons app emojis with feedback screenshot'
key: d1a0b48f-cc5a-813f-78a7-22771f1970b3
url: 'https://cdn.teachfloor.com/public/1/lesson-feedback-1-1782832097.webp'
-
alt: 'Teachfloor Reaction Buttons app emoji with feedback screenshot'
key: 207cba02-09e3-4859-6e4c-e8f4258f0d41
url: 'https://cdn.teachfloor.com/public/1/lesson-feedback-2-1782832100.webp'
-
alt: 'Teachfloor Reaction Buttons app feedback insight screenshot'
key: e9e8ea91-2e21-628e-4d53-064bba9cc9dd
url: 'https://cdn.teachfloor.com/public/1/lesson-feedback-3-1782832105.webp'
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df08cc1'
-
id: 6a44e7df2c505
name: Segment
description: 'The Segment app seamlessly integrates with Teachfloor to track user interaction events and provide actionable analytics.'
icon: 'https://wofh.fra1.digitaloceanspaces.com/public/1/segment-1748388479.png'
version: 1.3.1
built_by: Teachfloor
views:
- settings
permissions:
- 'userdata:write'
- 'userdata:read'
- 'user_events:read'
- 'modules:read'
- 'elements:read'
- 'courses:read'
- 'appdata:write'
- 'appdata:read'
features:
-
key: 28f6f795-6fb3-ac0c-6d67-4de91cea34ca
image: null
title: 'Seamless Segment Integration'
description: 'Effortlessly send real-time data to Segment with minimal setup. Leverage Segment’s powerful analytics and integrations to connect with other tools in your stack.'
-
key: cb2b2d06-25c3-227d-afbc-1716e1a289d9
image: null
title: 'Comprehensive Event Tracking'
description: 'Automatically track user actions, such as clicks, navigation, and interactions, across your Teachfloor app. Gain a complete picture of how users interact with your platform.'
-
key: f927a53f-0cad-874f-687c-0dbb6ff35b26
image: null
title: 'Enhanced Contextual Insights'
description: 'Pair interaction events with contextual details, such as user roles, course progress, or session data, to provide richer insights and improve decision-making for product development and engagement strategies.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df2c505'
-
id: 6a44e7df26f9d
name: Calculator
description: 'Add a sleek, modern calculator feature in your courses whenever it’s needed for your learners to enhance their learning experience.'
icon: 'https://cdn.teachfloor.com/public/1/icon-1780269267.png'
version: 1.2.0
built_by: Teachfloor
views:
- 'teachfloor.dashboard.*'
- settings
permissions:
- 'appdata:write'
- 'appdata:read'
features:
-
key: e6b2ca92-f3b2-92a5-054a-a1e916679ba2
image: null
title: 'A Simple Minimal Calculator'
description: 'A simple and minimal tool designed for seamless integration into the Teachfloor platform. It is a lightweight, built-in tool that enables users to perform quick calculations seamlessly within the platform, enhancing efficiency without distractions.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df26f9d'
-
id: 6a44e7df22d3b
name: Intercom
description: 'Intercom allows you to seamlessly integrate powerful chat and support directly into your Teachfloor LMS, enhancing student and instructor experience.'
icon: 'https://wofh.fra1.digitaloceanspaces.com/public/1/intercom-1750345135.png'
version: 1.0.2
built_by: Teachfloor
views:
- settings
permissions:
- 'user:read'
- 'appdata:write'
- 'appdata:read'
features:
-
key: f075a699-5c9c-dce9-f1ea-1456bf993c39
image: null
title: 'Real-time Live Chat'
description: 'Provide instant help directly within Teachfloor. Segment users (e.g., by course, role) to offer personalized support and route inquiries to the right instructors or support staff.'
-
key: 18b0974d-78ac-1277-47b6-d8e5d9bd5613
image: null
title: 'Proactive Messaging & Announcements'
description: 'Drive engagement by sending targeted in-app messages and announcements. Onboard new users, highlight course updates, or gather feedback directly within your Teachfloor platform.'
-
key: 696f130d-f139-e56a-0ca1-f4a36da9413c
image: null
title: 'Automated Self-Service'
description: 'Reduce common queries with an AI bot that instantly answers student and instructor questions pulled from your knowledge base. It seamlessly escalates to human support when needed.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df22d3b'
-
id: 6a44e7df1efa3
name: 'AI Assistant'
description: 'An intelligent learning companion that helps learners understand, practice, and engage with course content more effectively. The AI Assistant supports learners throughout their journey with instant answers, explanations, and interactive exercises.'
icon: 'https://wofh.fra1.cdn.digitaloceanspaces.com/public/1/logomark-3-1760399650.png'
version: 1.3.0
built_by: Teachfloor
views:
- teachfloor.dashboard.course.module.detail
- teachfloor.dashboard.course.element.detail
- teachfloor.dashboard.course.detail
- settings
permissions:
- 'usercollection:write'
- 'modules:read'
- 'elements:read'
- 'courses:read'
- 'appdata:write'
- 'ai:text_generate'
- 'ai:context_external_send'
features:
-
key: e13157dd-2138-8f76-447d-873c97f10ca4
image: null
title: 'Smart Explanations'
description: 'Breaks down complex course concepts into simple, relatable explanations that adapt to each learner’s background and progress. The AI Assistant helps connect theory to real-world examples, ensuring deep understanding and long-term retention.'
-
key: 306542ad-86df-e947-aef2-6ceb016cbc53
image: null
title: 'Interactive Practice'
description: 'Engages learners with dynamic exercises, quizzes, and guided examples designed to reinforce comprehension. By interacting with the material, learners can test their knowledge, identify gaps, and receive instant feedback to improve performance.'
-
key: 34eda443-4442-e77a-502b-5c85aa587e76
image: null
title: 'Personalized Support'
description: 'Provides contextual guidance based on the learner’s current course, activity, and progress. Whether clarifying a concept or offering study tips, the AI Assistant ensures every learner feels supported, motivated, and confident throughout their journey.'
screenshots:
-
alt: null
key: 1c60db88-409e-c8ba-e686-673f24d4785e
url: 'https://cdn.teachfloor.com/public/1/ai-assistant-1-1782830420.webp'
-
alt: null
key: 8754a1ef-b2c3-8e1a-c262-5d94c49d2016
url: 'https://cdn.teachfloor.com/public/1/ai-assistant-2-1782830430.webp'
-
alt: null
key: ce017741-6cbc-b253-3749-3a26e296fc9b
url: 'https://cdn.teachfloor.com/public/1/ai-assistant-setting-1-1782830445.webp'
-
alt: null
key: 8645d326-52e2-c4f6-36eb-9a6204865047
url: 'https://cdn.teachfloor.com/public/1/ai-assistant-setting-2-1782830450.webp'
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df1efa3'
-
id: 6a44e7df1b55e
name: Notes
description: 'A simple and powerful tool for learners to capture ideas, thoughts, and course insights. The Notes app makes it easy to keep track of key information in one place, whether typed or dictated.'
icon: 'https://wofh.fra1.cdn.digitaloceanspaces.com/public/1/notes-1759333008.png'
version: 1.1.0
built_by: Teachfloor
views:
- 'teachfloor.dashboard.*'
permissions:
- 'userdata:write'
- 'userdata:read'
features:
-
key: 2c42f737-8747-a9ea-6ef9-21ae81e746a7
image: null
title: 'Organized Note-Taking'
description: 'Create and manage an unlimited list of notes directly within your course. Learners can quickly jot down key takeaways, reflections, or study reminders and keep everything neatly stored in one central place.'
-
key: c8f239c8-c0bc-690a-14bb-a78da3d68b37
image: null
title: 'Voice Dictation with Automatic Transcription'
description: 'Instead of typing, learners can use the integrated mic recording feature to speak their thoughts out loud. The app instantly transcribes spoken words into text, making it faster and easier to capture ideas in the moment.'
-
key: 1925a459-7eb4-3062-6398-134f5aebdf0d
image: null
title: 'Always Accessible and Easy to Review'
description: 'Notes are available anytime throughout the course, so learners can revisit, edit, and build upon them whenever they need. This ensures nothing important is lost and helps keep learners organized and focused during their studies.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df1b55e'
-
id: 6a44e7df17993
name: 'Pomodoro Timer'
description: 'A simple pomodoro timer with work and break intervals'
icon: 'https://cdn.teachfloor.com/public/1/icon-1780341452.png'
version: 1.1.0
built_by: Teachfloor
views:
- 'teachfloor.dashboard.*'
permissions: []
features:
-
key: d8f41d0d-8810-aa34-faff-7c8e2c2678a3
image: null
title: 'Focus Timer - Study in Pomodoros'
description: 'Beat distractions while you learn. Run 25-minute focus blocks with built-in short and long breaks — your timer keeps ticking as you navigate Teachfloor, so you stay on track from one lesson to the next.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df17993'
-
id: 6a44e7df135d3
name: Bookmarks
description: 'Save your spot anywhere in Teachfloor - bookmark courses, activities, and community pages, and jump back to them in one click.'
icon: 'https://cdn.teachfloor.com/public/1/icon-1780420647.png'
version: 1.2.0
built_by: Teachfloor
views:
- 'teachfloor.dashboard.*'
permissions:
- 'usercollection:write'
- 'modules:read'
- 'elements:read'
- 'courses:read'
features:
-
key: dd5498bc-5778-fcbd-9e30-af816ff38c80
image: null
title: 'Save anywhere in one tap'
description: 'Bookmark any course, module, activity, or community page from the dashboard with a single click. Each saved page comes with a smart label and category, so your list stays organized as it grows.'
-
key: 2afb0f1f-c68c-bc3d-e05f-d2df32fd7561
image: null
title: 'Resume from any device'
description: 'Your bookmarks sync to your account, so the spots you save on your laptop are waiting for you on your phone. Jump straight back to a saved page in the same tab - or pop it open in a new one.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df135d3'
-
id: 6a44e7df0dbce
name: Links
description: 'A shared resource shelf, curated by your team. Admins set up a list of external links - tools, docs, references - that follow every learner across every page of the platform.'
icon: 'https://cdn.teachfloor.com/public/1/icon-1780442633.png'
version: 1.1.0
built_by: Teachfloor
views:
- 'teachfloor.dashboard.*'
- settings
permissions:
- 'appdata:write'
features:
-
key: ba113728-91ef-9b7e-1f2f-396fa688dcec
image: null
title: 'Curate Once, Available Everywhere'
description: 'Set up your team''s go-to tools, docs, and references from the app settings. Learners see the list on every dashboard page, one click away - no more hunting through emails or course descriptions.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df0dbce'
-
id: 6a44e7df0331e
name: 'Net Promoter Score'
description: 'Measure overall learner loyalty with a classic 0–10 Net Promoter Score survey and an optional comment. Admins and owners get the headline NPS, the promoter, passive, and detractor breakdown, and the reasons behind every score.'
icon: 'https://cdn.teachfloor.com/public/1/icon-1782403120.png'
version: 1.1.0
built_by: Teachfloor
views:
- teachfloor.dashboard.course.list
- teachfloor.dashboard.course.detail
- teachfloor.dashboard.community.overview
- settings
permissions:
- 'user:read'
- 'appdata:write'
- 'appdata:read'
features:
-
key: 57dfd576-f743-53f0-2439-f8353ea0edeb
image: null
title: 'One-Question Survey'
description: 'Learners answer the single question that matters most on a familiar 0–10 scale, with room to explain their score. The clean, focused layout takes seconds to complete and works anywhere in the academy.'
-
key: 9ff743b9-9421-5f15-669d-cd5f0c265712
image: null
title: 'Headline NPS Score'
description: 'Responses are turned into a single Net Promoter Score, shown with a plain-language rating from Poor to Excellent. A color-coded badge and live response count make the health of your academy obvious at a glance.'
-
key: c461b434-b638-fe08-3ac7-d932b304191a
image: null
title: 'Promoters, Passives & Detractors'
description: 'See exactly how your audience splits across promoters, passives, and detractors, complete with percentages and counts. Pair the distribution with written comments to learn what is driving loyalty — or hurting it.'
screenshots:
-
alt: 'Teachfloor Net Promoter Score app feedback screenshot'
key: ebe212f9-d4c8-e79f-0ad9-b36215bb53f8
url: 'https://cdn.teachfloor.com/public/1/nps-1-1782832379.webp'
-
alt: 'Teachfloor Net Promoter Score app insight screenshot'
key: 9b07f2db-a092-935f-af83-6721697bdc3e
url: 'https://cdn.teachfloor.com/public/1/nps-2-1782832382.webp'
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df0331e'
pagination:
total: 17
count: 10
per_page: 10
current_page: 1
total_pages: 2
properties:
error:
type: string
example: null
payload:
type: object
example:
data:
-
id: 6a44e7df08cc1
name: 'Lesson Feedback'
description: 'Collect learner feedback on every lesson with a quick emoji rating and an optional comment. Instructors, admins, and owners get a clear Satisfaction Rate and the comments behind it, lesson by lesson.'
icon: 'https://cdn.teachfloor.com/public/1/icon-1782490711.png'
version: 1.2.0
built_by: Teachfloor
views:
- teachfloor.dashboard.course.module.detail
- teachfloor.dashboard.course.element.detail
- settings
permissions:
- 'user:read'
- 'appdata:write'
- 'appdata:read'
features:
-
key: e214bac4-e053-a619-6181-319d653fcba5
image: null
title: 'Emoji Ratings'
description: 'Learners rate each lesson on a friendly five-point emoji scale, with an optional comment field that appears the moment they pick a reaction. The lightweight, one-tap design keeps response rates high without interrupting the learning flow.'
-
key: a942038c-c587-50e3-42fa-c181fe412d01
image: null
title: 'Satisfaction Rate'
description: 'Every rating rolls up into a single Satisfaction Rate for the lesson, color-coded so you can spot strong and weak content at a glance. Admins and owners see the percentage, the full distribution across all five reactions, and the total number of responses.'
-
key: 1a1a12dd-46f4-523d-85bc-06dac89fda8c
image: null
title: 'Comments That Add Context'
description: 'Read the written feedback behind the scores, each tied to the learner who left it. Use the comments to understand exactly what worked, what confused people, and what to improve in the next iteration of your course.'
screenshots:
-
alt: 'Teachfloor Reaction Buttons app emojis with feedback screenshot'
key: d1a0b48f-cc5a-813f-78a7-22771f1970b3
url: 'https://cdn.teachfloor.com/public/1/lesson-feedback-1-1782832097.webp'
-
alt: 'Teachfloor Reaction Buttons app emoji with feedback screenshot'
key: 207cba02-09e3-4859-6e4c-e8f4258f0d41
url: 'https://cdn.teachfloor.com/public/1/lesson-feedback-2-1782832100.webp'
-
alt: 'Teachfloor Reaction Buttons app feedback insight screenshot'
key: e9e8ea91-2e21-628e-4d53-064bba9cc9dd
url: 'https://cdn.teachfloor.com/public/1/lesson-feedback-3-1782832105.webp'
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df08cc1'
-
id: 6a44e7df2c505
name: Segment
description: 'The Segment app seamlessly integrates with Teachfloor to track user interaction events and provide actionable analytics.'
icon: 'https://wofh.fra1.digitaloceanspaces.com/public/1/segment-1748388479.png'
version: 1.3.1
built_by: Teachfloor
views:
- settings
permissions:
- 'userdata:write'
- 'userdata:read'
- 'user_events:read'
- 'modules:read'
- 'elements:read'
- 'courses:read'
- 'appdata:write'
- 'appdata:read'
features:
-
key: 28f6f795-6fb3-ac0c-6d67-4de91cea34ca
image: null
title: 'Seamless Segment Integration'
description: 'Effortlessly send real-time data to Segment with minimal setup. Leverage Segment’s powerful analytics and integrations to connect with other tools in your stack.'
-
key: cb2b2d06-25c3-227d-afbc-1716e1a289d9
image: null
title: 'Comprehensive Event Tracking'
description: 'Automatically track user actions, such as clicks, navigation, and interactions, across your Teachfloor app. Gain a complete picture of how users interact with your platform.'
-
key: f927a53f-0cad-874f-687c-0dbb6ff35b26
image: null
title: 'Enhanced Contextual Insights'
description: 'Pair interaction events with contextual details, such as user roles, course progress, or session data, to provide richer insights and improve decision-making for product development and engagement strategies.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df2c505'
-
id: 6a44e7df26f9d
name: Calculator
description: 'Add a sleek, modern calculator feature in your courses whenever it’s needed for your learners to enhance their learning experience.'
icon: 'https://cdn.teachfloor.com/public/1/icon-1780269267.png'
version: 1.2.0
built_by: Teachfloor
views:
- 'teachfloor.dashboard.*'
- settings
permissions:
- 'appdata:write'
- 'appdata:read'
features:
-
key: e6b2ca92-f3b2-92a5-054a-a1e916679ba2
image: null
title: 'A Simple Minimal Calculator'
description: 'A simple and minimal tool designed for seamless integration into the Teachfloor platform. It is a lightweight, built-in tool that enables users to perform quick calculations seamlessly within the platform, enhancing efficiency without distractions.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df26f9d'
-
id: 6a44e7df22d3b
name: Intercom
description: 'Intercom allows you to seamlessly integrate powerful chat and support directly into your Teachfloor LMS, enhancing student and instructor experience.'
icon: 'https://wofh.fra1.digitaloceanspaces.com/public/1/intercom-1750345135.png'
version: 1.0.2
built_by: Teachfloor
views:
- settings
permissions:
- 'user:read'
- 'appdata:write'
- 'appdata:read'
features:
-
key: f075a699-5c9c-dce9-f1ea-1456bf993c39
image: null
title: 'Real-time Live Chat'
description: 'Provide instant help directly within Teachfloor. Segment users (e.g., by course, role) to offer personalized support and route inquiries to the right instructors or support staff.'
-
key: 18b0974d-78ac-1277-47b6-d8e5d9bd5613
image: null
title: 'Proactive Messaging & Announcements'
description: 'Drive engagement by sending targeted in-app messages and announcements. Onboard new users, highlight course updates, or gather feedback directly within your Teachfloor platform.'
-
key: 696f130d-f139-e56a-0ca1-f4a36da9413c
image: null
title: 'Automated Self-Service'
description: 'Reduce common queries with an AI bot that instantly answers student and instructor questions pulled from your knowledge base. It seamlessly escalates to human support when needed.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df22d3b'
-
id: 6a44e7df1efa3
name: 'AI Assistant'
description: 'An intelligent learning companion that helps learners understand, practice, and engage with course content more effectively. The AI Assistant supports learners throughout their journey with instant answers, explanations, and interactive exercises.'
icon: 'https://wofh.fra1.cdn.digitaloceanspaces.com/public/1/logomark-3-1760399650.png'
version: 1.3.0
built_by: Teachfloor
views:
- teachfloor.dashboard.course.module.detail
- teachfloor.dashboard.course.element.detail
- teachfloor.dashboard.course.detail
- settings
permissions:
- 'usercollection:write'
- 'modules:read'
- 'elements:read'
- 'courses:read'
- 'appdata:write'
- 'ai:text_generate'
- 'ai:context_external_send'
features:
-
key: e13157dd-2138-8f76-447d-873c97f10ca4
image: null
title: 'Smart Explanations'
description: 'Breaks down complex course concepts into simple, relatable explanations that adapt to each learner’s background and progress. The AI Assistant helps connect theory to real-world examples, ensuring deep understanding and long-term retention.'
-
key: 306542ad-86df-e947-aef2-6ceb016cbc53
image: null
title: 'Interactive Practice'
description: 'Engages learners with dynamic exercises, quizzes, and guided examples designed to reinforce comprehension. By interacting with the material, learners can test their knowledge, identify gaps, and receive instant feedback to improve performance.'
-
key: 34eda443-4442-e77a-502b-5c85aa587e76
image: null
title: 'Personalized Support'
description: 'Provides contextual guidance based on the learner’s current course, activity, and progress. Whether clarifying a concept or offering study tips, the AI Assistant ensures every learner feels supported, motivated, and confident throughout their journey.'
screenshots:
-
alt: null
key: 1c60db88-409e-c8ba-e686-673f24d4785e
url: 'https://cdn.teachfloor.com/public/1/ai-assistant-1-1782830420.webp'
-
alt: null
key: 8754a1ef-b2c3-8e1a-c262-5d94c49d2016
url: 'https://cdn.teachfloor.com/public/1/ai-assistant-2-1782830430.webp'
-
alt: null
key: ce017741-6cbc-b253-3749-3a26e296fc9b
url: 'https://cdn.teachfloor.com/public/1/ai-assistant-setting-1-1782830445.webp'
-
alt: null
key: 8645d326-52e2-c4f6-36eb-9a6204865047
url: 'https://cdn.teachfloor.com/public/1/ai-assistant-setting-2-1782830450.webp'
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df1efa3'
-
id: 6a44e7df1b55e
name: Notes
description: 'A simple and powerful tool for learners to capture ideas, thoughts, and course insights. The Notes app makes it easy to keep track of key information in one place, whether typed or dictated.'
icon: 'https://wofh.fra1.cdn.digitaloceanspaces.com/public/1/notes-1759333008.png'
version: 1.1.0
built_by: Teachfloor
views:
- 'teachfloor.dashboard.*'
permissions:
- 'userdata:write'
- 'userdata:read'
features:
-
key: 2c42f737-8747-a9ea-6ef9-21ae81e746a7
image: null
title: 'Organized Note-Taking'
description: 'Create and manage an unlimited list of notes directly within your course. Learners can quickly jot down key takeaways, reflections, or study reminders and keep everything neatly stored in one central place.'
-
key: c8f239c8-c0bc-690a-14bb-a78da3d68b37
image: null
title: 'Voice Dictation with Automatic Transcription'
description: 'Instead of typing, learners can use the integrated mic recording feature to speak their thoughts out loud. The app instantly transcribes spoken words into text, making it faster and easier to capture ideas in the moment.'
-
key: 1925a459-7eb4-3062-6398-134f5aebdf0d
image: null
title: 'Always Accessible and Easy to Review'
description: 'Notes are available anytime throughout the course, so learners can revisit, edit, and build upon them whenever they need. This ensures nothing important is lost and helps keep learners organized and focused during their studies.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df1b55e'
-
id: 6a44e7df17993
name: 'Pomodoro Timer'
description: 'A simple pomodoro timer with work and break intervals'
icon: 'https://cdn.teachfloor.com/public/1/icon-1780341452.png'
version: 1.1.0
built_by: Teachfloor
views:
- 'teachfloor.dashboard.*'
permissions: []
features:
-
key: d8f41d0d-8810-aa34-faff-7c8e2c2678a3
image: null
title: 'Focus Timer - Study in Pomodoros'
description: 'Beat distractions while you learn. Run 25-minute focus blocks with built-in short and long breaks — your timer keeps ticking as you navigate Teachfloor, so you stay on track from one lesson to the next.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df17993'
-
id: 6a44e7df135d3
name: Bookmarks
description: 'Save your spot anywhere in Teachfloor - bookmark courses, activities, and community pages, and jump back to them in one click.'
icon: 'https://cdn.teachfloor.com/public/1/icon-1780420647.png'
version: 1.2.0
built_by: Teachfloor
views:
- 'teachfloor.dashboard.*'
permissions:
- 'usercollection:write'
- 'modules:read'
- 'elements:read'
- 'courses:read'
features:
-
key: dd5498bc-5778-fcbd-9e30-af816ff38c80
image: null
title: 'Save anywhere in one tap'
description: 'Bookmark any course, module, activity, or community page from the dashboard with a single click. Each saved page comes with a smart label and category, so your list stays organized as it grows.'
-
key: 2afb0f1f-c68c-bc3d-e05f-d2df32fd7561
image: null
title: 'Resume from any device'
description: 'Your bookmarks sync to your account, so the spots you save on your laptop are waiting for you on your phone. Jump straight back to a saved page in the same tab - or pop it open in a new one.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df135d3'
-
id: 6a44e7df0dbce
name: Links
description: 'A shared resource shelf, curated by your team. Admins set up a list of external links - tools, docs, references - that follow every learner across every page of the platform.'
icon: 'https://cdn.teachfloor.com/public/1/icon-1780442633.png'
version: 1.1.0
built_by: Teachfloor
views:
- 'teachfloor.dashboard.*'
- settings
permissions:
- 'appdata:write'
features:
-
key: ba113728-91ef-9b7e-1f2f-396fa688dcec
image: null
title: 'Curate Once, Available Everywhere'
description: 'Set up your team''s go-to tools, docs, and references from the app settings. Learners see the list on every dashboard page, one click away - no more hunting through emails or course descriptions.'
screenshots: []
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df0dbce'
-
id: 6a44e7df0331e
name: 'Net Promoter Score'
description: 'Measure overall learner loyalty with a classic 0–10 Net Promoter Score survey and an optional comment. Admins and owners get the headline NPS, the promoter, passive, and detractor breakdown, and the reasons behind every score.'
icon: 'https://cdn.teachfloor.com/public/1/icon-1782403120.png'
version: 1.1.0
built_by: Teachfloor
views:
- teachfloor.dashboard.course.list
- teachfloor.dashboard.course.detail
- teachfloor.dashboard.community.overview
- settings
permissions:
- 'user:read'
- 'appdata:write'
- 'appdata:read'
features:
-
key: 57dfd576-f743-53f0-2439-f8353ea0edeb
image: null
title: 'One-Question Survey'
description: 'Learners answer the single question that matters most on a familiar 0–10 scale, with room to explain their score. The clean, focused layout takes seconds to complete and works anywhere in the academy.'
-
key: 9ff743b9-9421-5f15-669d-cd5f0c265712
image: null
title: 'Headline NPS Score'
description: 'Responses are turned into a single Net Promoter Score, shown with a plain-language rating from Poor to Excellent. A color-coded badge and live response count make the health of your academy obvious at a glance.'
-
key: c461b434-b638-fe08-3ac7-d932b304191a
image: null
title: 'Promoters, Passives & Detractors'
description: 'See exactly how your audience splits across promoters, passives, and detractors, complete with percentages and counts. Pair the distribution with written comments to learn what is driving loyalty — or hurting it.'
screenshots:
-
alt: 'Teachfloor Net Promoter Score app feedback screenshot'
key: ebe212f9-d4c8-e79f-0ad9-b36215bb53f8
url: 'https://cdn.teachfloor.com/public/1/nps-1-1782832379.webp'
-
alt: 'Teachfloor Net Promoter Score app insight screenshot'
key: 9b07f2db-a092-935f-af83-6721697bdc3e
url: 'https://cdn.teachfloor.com/public/1/nps-2-1782832382.webp'
support_site_url: 'https://support.teachfloor.com'
install_url: 'http://localhost/install/6a44e7df0331e'
pagination:
total: 17
count: 10
per_page: 10
current_page: 1
total_pages: 2
tags:
- Endpoints
/v0/marketplace/categories:
get:
summary: 'List app categories.'
description: ''
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
-
name: 'Data and Analytics'
slug: data-and-analytics
description: 'Apps that help collect, analyze, and visualize data to drive informed decisions.'
-
name: 'Communication and Support'
slug: communication-and-support
description: 'Tools designed to enhance collaboration, messaging, and customer support.'
-
name: 'Engagement & Gamification'
slug: engagement-gamification
description: 'Apps that boost user participation through interactive and rewarding experiences.'
-
name: 'Marketing and Media'
slug: marketing-and-media
description: 'Solutions for content creation, advertising, social media, and brand promotion.'
-
name: 'Time Management'
slug: time-management
description: 'Apps that help users schedule, plan, and optimize their time effectively.'
-
name: 'Learning Tools'
slug: learning-tools
description: 'Educational resources and tools that support teaching, training, and skill development.'
-
name: Productivity
slug: productivity
description: 'Apps that streamline workflows, automate tasks, and improve efficiency.'
-
name: 'Feedback & Surveys'
slug: feedback-surveys
description: 'Tools for gathering insights, conducting surveys, and improving user experience through feedback.'
properties:
error:
type: string
example: null
payload:
type: array
example:
-
name: 'Data and Analytics'
slug: data-and-analytics
description: 'Apps that help collect, analyze, and visualize data to drive informed decisions.'
-
name: 'Communication and Support'
slug: communication-and-support
description: 'Tools designed to enhance collaboration, messaging, and customer support.'
-
name: 'Engagement & Gamification'
slug: engagement-gamification
description: 'Apps that boost user participation through interactive and rewarding experiences.'
-
name: 'Marketing and Media'
slug: marketing-and-media
description: 'Solutions for content creation, advertising, social media, and brand promotion.'
-
name: 'Time Management'
slug: time-management
description: 'Apps that help users schedule, plan, and optimize their time effectively.'
-
name: 'Learning Tools'
slug: learning-tools
description: 'Educational resources and tools that support teaching, training, and skill development.'
-
name: Productivity
slug: productivity
description: 'Apps that streamline workflows, automate tasks, and improve efficiency.'
-
name: 'Feedback & Surveys'
slug: feedback-surveys
description: 'Tools for gathering insights, conducting surveys, and improving user experience through feedback.'
items:
type: object
tags:
- Endpoints
'/v0/marketplace/apps/{app_key}@{version}':
get:
summary: 'Show a single public marketplace app.'
description: ''
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
error:
code: 404
message: 'App Not Found'
payload: null
properties:
error:
type: object
example:
code: 404
message: 'App Not Found'
payload:
type: string
example: null
tags:
- Endpoints
parameters:
-
in: path
name: app_key
description: ''
example: 69cb046e6bc2c
required: true
schema:
type: string
-
in: path
name: version
description: 'Optional parameter.'
required: true
schema:
type: string
examples:
omitted:
summary: 'When the value is omitted'
value: ''
present:
summary: 'When the value is present'
value: ..
/v0/members/search:
get:
summary: 'Search Members'
description: 'Search for existing members in your organization. You can search by first name, last name or email. The search is case-insensitive and supports partial matches.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"e7W6kP8wvjd3GRBz\",\n \"object\": \"member\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"full_name\": \"John Doe\",\n \"avatar\": null,\n \"email\": null,\n \"is_email_verified\": false,\n \"last_seen\": \"2024-01-22T12:56:04.000000Z\",\n \"custom_fields\": {\n \"field_7\": \"Head of Product\",\n \"field_9\": [\n \"Design\",\n \"Marketing\"\n ]\n }\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 5,\n \"count\": 5,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 1\n }\n }\n}"
tags:
- Members
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
q:
type: string
description: 'The search query to filter members by first name, last name or email.'
example: John
include_test_user:
type: boolean
description: 'Include test users to the search results if set to true.'
example: true
required:
- q
'/v0/members/{id}':
get:
summary: 'Retrieve a Member'
description: "Retrieves the details of an existing member in your organization based on the provided unique member ID. Returns a comprehensive information about the member, including their first name, last name, email, and profile image.\n\nThe `custom_fields` object holds the member's organization-level custom field values, keyed by the field's `key`. It is also returned by the member list and search endpoints; members embedded in other resources do not include it."
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: e7W6kP8wvjd3GRBz
object: member
first_name: John
last_name: Doe
full_name: 'John Doe'
avatar: null
email: null
is_email_verified: false
last_seen: '2024-01-22T12:56:04.000000Z'
custom_fields:
field_7: 'Head of Product'
field_9:
- Design
- Marketing
properties:
error:
type: string
example: null
payload:
type: object
example:
id: e7W6kP8wvjd3GRBz
object: member
first_name: John
last_name: Doe
full_name: 'John Doe'
avatar: null
email: null
is_email_verified: false
last_seen: '2024-01-22T12:56:04.000000Z'
custom_fields:
field_7: 'Head of Product'
field_9:
- Design
- Marketing
tags:
- Members
post:
summary: 'Update a Member'
description: 'Updates the details of an existing member in your organization based on the provided unique member ID. Any parameters not provided will be left unchanged. Returns the updated member details upon successful update.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: e7W6kP8wvjd3GRBz
object: member
first_name: John
last_name: Doe
full_name: 'John Doe'
avatar: null
email: john.doe@example.com
is_email_verified: false
last_seen: '2024-01-22T12:56:04.000000Z'
custom_fields:
field_7: 'Head of Product'
field_9:
- Design
- Marketing
properties:
error:
type: string
example: null
payload:
type: object
example:
id: e7W6kP8wvjd3GRBz
object: member
first_name: John
last_name: Doe
full_name: 'John Doe'
avatar: null
email: john.doe@example.com
is_email_verified: false
last_seen: '2024-01-22T12:56:04.000000Z'
custom_fields:
field_7: 'Head of Product'
field_9:
- Design
- Marketing
tags:
- Members
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'The member email address.'
example: john.doe@example.com
password:
type: string
description: 'The member''s password. Must be at least 8 characters. Must have at least one uppercase and one lowercase letter. Must have at least one number. Must have at least one symbol.'
example: doNotU5e_thiSPassw0rd
first_name:
type: string
description: 'The member first name.'
example: John
last_name:
type: string
description: 'The member last name.'
example: Doe
avatar:
type: string
description: 'The member profile picture URL.'
example: 'https://example.com/avatar.png'
custom_fields:
type: object
description: 'The member organization-level custom field values, keyed by field key. Merged into the stored values — omitted fields keep their current value, and `null` clears an optional one. Requires a plan that includes custom fields.'
example:
field_7: 'Head of Product'
properties: []
parameters:
-
in: path
name: id
description: 'The ID of the requested member.'
example: e7W6kP8wvjd3GRBz
required: true
schema:
type: string
/v0/members:
get:
summary: 'List all Members'
description: 'Retrieves a paginated list of members in your organization. This API endpoint allows you to retrieve detailed information about each member, including their name, email, and other relevant details.'
parameters:
-
in: query
name: page
description: 'A cursor for pagination across multiple pages of results.'
example: 2
required: false
schema:
type: integer
description: 'A cursor for pagination across multiple pages of results.'
example: 2
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"e7W6kP8wvjd3GRBz\",\n \"object\": \"member\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"full_name\": \"John Doe\",\n \"avatar\": null,\n \"email\": null,\n \"is_email_verified\": false,\n \"last_seen\": \"2024-01-22T12:56:04.000000Z\",\n \"custom_fields\": {\n \"field_7\": \"Head of Product\",\n \"field_9\": [\n \"Design\",\n \"Marketing\"\n ]\n }\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 152,\n \"count\": 10,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 16\n }\n }\n}"
tags:
- Members
post:
summary: 'Create a Member'
description: 'Create a member in your organization.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: e7W6kP8wvjd3GRBz
object: member
first_name: John
last_name: Doe
full_name: 'John Doe'
avatar: null
email: john.doe@example.com
is_email_verified: false
last_seen: '2024-01-22T12:56:04.000000Z'
custom_fields:
field_7: 'Head of Product'
properties:
error:
type: string
example: null
payload:
type: object
example:
id: e7W6kP8wvjd3GRBz
object: member
first_name: John
last_name: Doe
full_name: 'John Doe'
avatar: null
email: john.doe@example.com
is_email_verified: false
last_seen: '2024-01-22T12:56:04.000000Z'
custom_fields:
field_7: 'Head of Product'
tags:
- Members
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'The member''s email. Must be a valid email address.'
example: john.doe@example.com
password:
type: string
description: 'The member''s password. Must be at least 8 characters. Must have at least one uppercase and one lowercase letter. Must have at least one number. Must have at least one symbol.'
example: doNotU5e_thiSPassw0rd
first_name:
type: string
description: 'The member''s first name.'
example: John
last_name:
type: string
description: 'The member''s last name.'
example: Doe
role:
type: string
description: 'The member''s role. It must be "owner", "admin", "lecturer", "assistant" or "customer".'
example: lecturer
avatar:
type: string
description: 'The member''s profile picture. Must be a valid URL. Must not be greater than 255 characters.'
example: 'https://example.com/avatar.png'
custom_fields:
type: object
description: 'The member organization-level custom field values, keyed by the field''s key. Only the fields you send are set; the rest are left empty. Requires a plan that includes custom fields.'
example:
field_7: 'Head of Product'
properties: []
required:
- email
- password
- first_name
- last_name
- role
'/v0/members/{id}/courses':
get:
summary: 'List all Member Courses'
description: 'Returns a list of courses the member belongs to.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"6jO9XN7mZEVpvxqo\",\n \"object\": \"course_member\",\n \"joined_at\": \"2024-01-22T12:56:04.000000Z\",\n \"member\": {\n \"id\": \"e7W6kP8wvjd3GRBz\",\n \"object\": \"member\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"full_name\": \"John Doe\",\n \"avatar\": null,\n \"email\": null,\n \"is_email_verified\": false,\n \"last_seen\": \"2024-01-22T12:56:04.000000Z\"\n },\n \"course\": {\n \"id\": \"p5v87ERWKR3dkjyD\",\n \"object\": \"course\",\n \"name\": \"Ultimate Marketing Course\",\n \"created_at\": \"2022-02-03T16:06:42.000000Z\",\n \"cover\": null,\n \"availability\": \"CONTINUOUS\",\n \"visibility\": \"PRIVATE\",\n \"start_date\": null,\n \"end_date\": null,\n \"currency\": \"eur\",\n \"price\": null,\n \"url\": null,\n \"public_url\": null,\n \"join_url\": null,\n \"metadata\": {}\n },\n \"custom_fields\": {\n \"field_1\": [\n \"Option A\",\n \"Option B\"\n ]\n },\n \"tags\": [\n \"vip\"\n ]\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 15,\n \"count\": 5,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 2\n }\n }\n}"
tags:
- Members
parameters:
-
in: path
name: id
description: 'The ID of the member which the courses should be retrieveds.'
example: e7W6kP8wvjd3GRBz
required: true
schema:
type: string
/v0/modules:
post:
summary: 'Create a module'
description: 'Create a module in the specified course. Returns the created module details upon successful creation.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: e7W6kP8wvjd3GRBz
object: module
created_at: '2024-01-22T12:56:04.000000Z'
name: 'Example module'
type: LESSON
availability: SCHEDULED
start_date: '2025-02-20T00:00:00.000000Z'
end_date: '2025-02-21T00:00:00.000000Z'
content: null
position: 1
course: p5v87ERWKR3dkjyD
metadata: { }
properties:
error:
type: string
example: null
payload:
type: object
example:
id: e7W6kP8wvjd3GRBz
object: module
created_at: '2024-01-22T12:56:04.000000Z'
name: 'Example module'
type: LESSON
availability: SCHEDULED
start_date: '2025-02-20T00:00:00.000000Z'
end_date: '2025-02-21T00:00:00.000000Z'
content: null
position: 1
course: p5v87ERWKR3dkjyD
metadata: { }
tags:
- Modules
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The module name. Must not be greater than 255 characters.'
example: 'First knowledge'
content:
type: string
description: 'The module content in markdown format. Supports headings, bold, italic, strikethrough, highlights, inline code, code blocks, blockquotes, lists, tables, images, links, and math (LaTeX).'
example: '# Module Introduction\nWelcome to the **first module**.'
course:
type: string
description: 'The course id of the module.'
example: qw0aApAGyRKL69rw
availability:
type: string
description: 'Defines the availability of the module. Can be one of the following values: "CONTINUOUS" for an ongoing module or "SCHEDULED" for a module with specific start and end dates. Must be one of CONTINUOUS or SCHEDULED.'
example: CONTINUOUS
start_date:
type: string
description: 'The start date of the module. The date should be in ISO 8601 format (e.g., "2025-02-17T00:00:00Z"). This field is required if the availability is "SCHEDULED". This field is required when availability is SCHEDULED. Must be a valid date.'
example: '2025-02-17T00:00:00Z'
end_date:
type: string
description: 'The end date of the module. The date should be in ISO 8601 format (e.g., "2025-03-18T00:00:00Z"). This field is required if the availability is "SCHEDULED" and must be after the start date. This field is required when availability is SCHEDULED or date. Must be a date after or equal to start_date.'
example: '2025-03-17T00:00:00Z'
position:
type: integer
description: 'The 0-indexed position of the module within its course. If omitted, the module is appended at the end. Values beyond the last sibling index are clamped to the last position. Siblings are re-ordered automatically. Must be at least 0.'
example: 0
metadata:
type: string
description: 'Metadata is an attribute that lets you store more information, structured as key-value pairs, for your own use and reference.
You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Keys and values are stored as strings and can contain any characters with one exception: you can''t use square brackets ([ and ]) in keys.'
example:
category: marketing
required:
- course
get:
summary: 'List all Modules'
description: 'Returns a list of modules within your organization. The modules are sorted by their creation date, with the most recently created modules appearing first.'
parameters:
-
in: query
name: page
description: 'A cursor for pagination across multiple pages of results.'
example: 2
required: false
schema:
type: integer
description: 'A cursor for pagination across multiple pages of results.'
example: 2
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"e7W6kP8wvjd3GRBz\",\n \"object\": \"module\",\n \"created_at\": \"2024-01-22T12:56:04.000000Z\",\n \"name\": \"Example module\",\n \"type\": \"LESSON\",\n \"availability\": \"SCHEDULED\",\n \"start_date\": \"2025-02-20T00:00:00.000000Z\",\n \"end_date\": \"2025-02-21T00:00:00.000000Z\",\n \"content\": null,\n \"position\": 1,\n \"course\": \"p5v87ERWKR3dkjyD\",\n \"metadata\": {}\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 15,\n \"count\": 5,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 2\n }\n }\n}"
tags:
- Modules
'/v0/modules/{id}':
post:
summary: 'Update a module'
description: 'Updates the details of an existing module based on the provided unique module ID. Any parameters not provided will be left unchanged. Returns the updated module details upon successful update.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: e7W6kP8wvjd3GRBz
object: module
created_at: '2024-01-22T12:56:04.000000Z'
name: 'Example module'
type: LESSON
availability: SCHEDULED
start_date: '2025-02-20T00:00:00.000000Z'
end_date: '2025-02-21T00:00:00.000000Z'
content: null
position: 1
course: p5v87ERWKR3dkjyD
metadata: { }
properties:
error:
type: string
example: null
payload:
type: object
example:
id: e7W6kP8wvjd3GRBz
object: module
created_at: '2024-01-22T12:56:04.000000Z'
name: 'Example module'
type: LESSON
availability: SCHEDULED
start_date: '2025-02-20T00:00:00.000000Z'
end_date: '2025-02-21T00:00:00.000000Z'
content: null
position: 1
course: p5v87ERWKR3dkjyD
metadata: { }
tags:
- Modules
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The module name. Must not be greater than 255 characters.'
example: 'First knowledge'
content:
type: string
description: 'The module content in markdown format. Supports headings, bold, italic, strikethrough, highlights, inline code, code blocks, blockquotes, lists, tables, images, links, and math (LaTeX).'
example: '# Module Introduction\nWelcome to the **first module**.'
availability:
type: string
description: 'Defines the availability of the module. Can be one of the following values: "CONTINUOUS" for an ongoing module or "SCHEDULED" for a module with specific start and end dates. Must be one of CONTINUOUS or SCHEDULED.'
example: CONTINUOUS
start_date:
type: string
description: 'The start date of the module. The date should be in ISO 8601 format (e.g., "2025-02-17T00:00:00Z"). This field is required if the availability is "SCHEDULED". This field is required when availability is SCHEDULED. Must be a valid date.'
example: '2025-02-17T00:00:00Z'
end_date:
type: string
description: 'The end date of the module. The date should be in ISO 8601 format (e.g., "2025-03-18T00:00:00Z"). This field is required if the availability is "SCHEDULED" and must be after the start date. This field is required when availability is SCHEDULED or date. Must be a date after or equal to start_date.'
example: '2025-03-17T00:00:00Z'
position:
type: integer
description: 'The 0-indexed position of the module within its course. Siblings are re-ordered automatically. Values beyond the last sibling index are clamped to the last position. Must be at least 0.'
example: 2
metadata:
type: string
description: 'Metadata is an attribute that lets you store more information, structured as key-value pairs, for your own use and reference.
You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Keys and values are stored as strings and can contain any characters with one exception: you can''t use square brackets ([ and ]) in keys.'
example:
category: marketing
get:
summary: 'Retrieve a Module'
description: 'Retrieves the details of an existing module in your organization based on the provided unique module ID. Returns comprehensive information about the module, including its name, type, availability, position, and dates.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
data:
id: e7W6kP8wvjd3GRBz
object: module
created_at: '2024-01-22T12:56:04.000000Z'
name: 'Example module'
type: LESSON
availability: SCHEDULED
start_date: '2025-02-20T00:00:00.000000Z'
end_date: '2025-02-21T00:00:00.000000Z'
content: null
position: 1
course: p5v87ERWKR3dkjyD
metadata: { }
properties:
error:
type: string
example: null
payload:
type: object
example:
data:
id: e7W6kP8wvjd3GRBz
object: module
created_at: '2024-01-22T12:56:04.000000Z'
name: 'Example module'
type: LESSON
availability: SCHEDULED
start_date: '2025-02-20T00:00:00.000000Z'
end_date: '2025-02-21T00:00:00.000000Z'
content: null
position: 1
course: p5v87ERWKR3dkjyD
metadata: { }
tags:
- Modules
delete:
summary: 'Delete a Module'
description: 'Deletes an existing module in your organization. Returns an object with a deleted parameter upon successful deletion.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: e7W6kP8wvjd3GRBz
object: module
deleted: true
properties:
error:
type: string
example: null
payload:
type: object
example:
id: e7W6kP8wvjd3GRBz
object: module
deleted: true
tags:
- Modules
parameters:
-
in: path
name: id
description: 'The ID of the requested module to update.'
example: p5v87ERWKR3dkjyD
required: true
schema:
type: string
/v0/modules/search:
get:
summary: 'Search Modules'
description: 'Search for existing modules in your organization. You can search by module name. The search is case-insensitive and supports partial matches.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"e7W6kP8wvjd3GRBz\",\n \"object\": \"module\",\n \"created_at\": \"2024-01-22T12:56:04.000000Z\",\n \"name\": \"Introduction to Marketing\",\n \"type\": \"LESSON\",\n \"availability\": \"CONTINUOUS\",\n \"start_date\": null,\n \"end_date\": null,\n \"content\": null,\n \"position\": 0,\n \"course\": \"p5v87ERWKR3dkjyD\",\n \"metadata\": {}\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 3,\n \"count\": 3,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 1\n }\n }\n}"
tags:
- Modules
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
q:
type: string
description: 'The search query to filter modules by name.'
example: Introduction
required:
- q
'/v0/modules/{id}/elements':
get:
summary: 'List Module Elements'
description: 'Returns a list of elements within the specified module.'
parameters:
-
in: query
name: page
description: 'A cursor for pagination across multiple pages of results.'
example: 2
required: false
schema:
type: integer
description: 'A cursor for pagination across multiple pages of results.'
example: 2
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"error\": null,\n \"payload\": {\n \"data\": [\n {\n \"id\": \"QB8nmEJjqdbLA2K5\",\n \"object\": \"element\",\n \"created_at\": \"2024-11-26T11:37:16.000000Z\",\n \"name\": \"Multiple Choice Quiz\",\n \"cover\": null,\n \"type\": \"QUIZ\",\n \"content\": null,\n \"position\": 3,\n \"course\": \"B4peAvmZ1L9OY3Xr\",\n \"module\": \"e7W6kP8wvjd3GRBz\",\n \"metadata\": {},\n \"properties\": {}\n },\n {...},\n {...}\n ],\n \"pagination\": {\n \"total\": 5,\n \"count\": 5,\n \"per_page\": 10,\n \"current_page\": 1,\n \"total_pages\": 1\n }\n }\n}"
tags:
- Modules
parameters:
-
in: path
name: id
description: 'The ID of the module.'
example: e7W6kP8wvjd3GRBz
required: true
schema:
type: string
/v0/revoke:
post:
summary: 'Revoke Organization Access'
description: 'Revoke a member access from organization.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload: null
properties:
error:
type: string
example: null
payload:
type: string
example: null
tags:
- Organization
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
member:
type: string
description: 'The ID of the member to revoke access to the organization.'
example: e7W6kP8wvjd3GRBz
required:
- member
/v0/custom-fields:
get:
summary: 'List all Custom Fields'
description: "Returns the custom fields defined on your organization — the ones whose values are carried on a member. Use the `key` of each field when writing values through the member endpoints.\n\nCourse enrollment fields are a separate set; retrieve them from the course custom fields endpoint.\n\nThe full list is returned in a single response; this endpoint is not paginated."
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
-
key: field_7
object: custom-field
created_at: '2024-07-30T16:05:47.000000Z'
name: 'Job title'
description: null
type: TEXT
required: true
-
key: field_9
object: custom-field
created_at: '2024-07-30T16:05:47.000000Z'
name: Interests
description: null
type: MULTIPLE_OPTIONS
options:
- Design
- Marketing
- Engineering
required: false
-
key: field_11
object: custom-field
created_at: '2024-07-30T16:05:47.000000Z'
name: 'Years of experience'
description: null
type: NUMERICAL
required: false
min: 1
max: 10
properties:
error:
type: string
example: null
payload:
type: array
example:
-
key: field_7
object: custom-field
created_at: '2024-07-30T16:05:47.000000Z'
name: 'Job title'
description: null
type: TEXT
required: true
-
key: field_9
object: custom-field
created_at: '2024-07-30T16:05:47.000000Z'
name: Interests
description: null
type: MULTIPLE_OPTIONS
options:
- Design
- Marketing
- Engineering
required: false
-
key: field_11
object: custom-field
created_at: '2024-07-30T16:05:47.000000Z'
name: 'Years of experience'
description: null
type: NUMERICAL
required: false
min: 1
max: 10
items:
type: object
tags:
- Organization
/v0/invites:
post:
summary: 'Invite Member'
description: 'Invite a member to join the organization or course.'
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: application/json
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
id: R8dXqkpL1BaJl92y
object: invite
token: PgvInCUzTnNuTYpYWb2c
url: null
full_name: 'John Doe'
role: customer
discount_percentage: 0
course: null
skip_email: false
properties:
error:
type: string
example: null
payload:
type: object
example:
id: R8dXqkpL1BaJl92y
object: invite
token: PgvInCUzTnNuTYpYWb2c
url: null
full_name: 'John Doe'
role: customer
discount_percentage: 0
course: null
skip_email: false
tags:
- Organization
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'The member''s emails to whom will sent an invitation. Must be a valid email address.'
example: john.doe@example.com
full_name:
type: string
description: 'The member''s full name.'
example: 'John Doe'
role:
type: string
description: 'The member''s role. Default to "customer". Must be one of customer, lecturer, admin, or owner.'
example: customer
discount_percentage:
type: integer
description: 'Must be between 0 and 100.'
example: 93
course:
type: string
description: 'If set, the ID of the course the member will be invited to.'
example: e7W6kP8wvjd3GRBz
skip_email:
type: boolean
description: 'If set to true, an email notification will be skipped.'
example: false
required:
- email
/v0/uploads:
post:
summary: 'Upload a file'
description: "Uploads a file to your organization's storage. Returns the public URL of the uploaded file.\nThe returned URL can be used to set element properties such as video_url, scorm_url, file, or avatar."
parameters:
-
in: header
name: Authorization
description: ''
example: 'Bearer {YOUR_API_KEY}'
schema:
type: string
-
in: header
name: Content-Type
description: ''
example: multipart/form-data
schema:
type: string
-
in: header
name: Accept
description: ''
example: application/json
schema:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
error: null
payload:
url: 'https://cdn.teachfloor.com/public/123/my-document-1712345678.pdf'
name: my-document.pdf
mime_type: application/pdf
size: 204800
properties:
error:
type: string
example: null
payload:
type: object
example:
url: 'https://cdn.teachfloor.com/public/123/my-document-1712345678.pdf'
name: my-document.pdf
mime_type: application/pdf
size: 204800
tags:
- Uploads
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
description: 'The file to upload. Supports images (jpg, jpeg, png, webp, svg, gif), documents (pdf, doc, docx, xls, xlsx, ppt, pptx, csv, txt), audio (mp3, wav, ogg), video (mp4, webm, mov), archives (zip), and SCORM packages. Max 100MB. Must be a file. Must not be greater than 102400 kilobytes.'
required:
- file
tags:
-
name: Activities
description: ''
-
name: Courses
description: ''
-
name: Elements
description: ''
-
name: Endpoints
description: ''
-
name: Members
description: ''
-
name: Modules
description: ''
-
name: Organization
description: ''
-
name: Uploads
description: ''
components:
securitySchemes:
default:
type: http
scheme: bearer
description: ''
security:
-
default: []