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: []