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 \"custom_fields\": {\n \"field_1\": {\n \"key\": \"field_1\",\n \"object\": \"custom-field\",\n \"created_at\": \"2024-07-30T16:05:47.000000Z\",\n \"name\": \"Multiple Field Question\",\n \"description\": null,\n \"type\": \"MULTIPLE_OPTIONS\",\n \"options\": [\n \"Option A\",\n \"Option B\",\n \"Option C\"\n ],\n \"required\": false\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: - 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: { } custom_fields: field_1: key: field_1 object: custom-field created_at: '2024-07-30T16:05:47.000000Z' name: 'Multiple Field Question' description: null type: MULTIPLE_OPTIONS options: - 'Option A' - 'Option B' - 'Option C' required: false 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: { } custom_fields: field_1: key: field_1 object: custom-field created_at: '2024-07-30T16:05:47.000000Z' name: 'Multiple Field Question' description: null type: MULTIPLE_OPTIONS options: - 'Option A' - 'Option B' - 'Option C' required: false 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: { } custom_fields: field_1: key: field_1 object: custom-field created_at: '2024-07-30T16:05:47.000000Z' name: 'Multiple Field Question' description: null type: MULTIPLE_OPTIONS options: - 'Option A' - 'Option B' - 'Option C' required: false 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: { } custom_fields: field_1: key: field_1 object: custom-field created_at: '2024-07-30T16:05:47.000000Z' name: 'Multiple Field Question' description: null type: MULTIPLE_OPTIONS options: - 'Option A' - 'Option B' - 'Option C' required: false 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: PRIVATE 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 \"custom_fields\": {\n \"field_1\": {\n \"key\": \"field_1\",\n \"object\": \"custom-field\",\n \"created_at\": \"2024-07-30T16:05:47.000000Z\",\n \"name\": \"Multiple Field Question\",\n \"description\": null,\n \"type\": \"MULTIPLE_OPTIONS\",\n \"options\": [\n \"Option A\",\n \"Option B\",\n \"Option C\"\n ],\n \"required\": false\n }\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 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: { } custom_fields: field_1: key: field_1 object: custom-field created_at: '2024-07-30T16:05:47.000000Z' name: 'Multiple Field Question' description: null type: MULTIPLE_OPTIONS options: - 'Option A' - 'Option B' - 'Option C' required: false 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: { } custom_fields: field_1: key: field_1 object: custom-field created_at: '2024-07-30T16:05:47.000000Z' name: 'Multiple Field Question' description: null type: MULTIPLE_OPTIONS options: - 'Option A' - 'Option B' - 'Option C' required: false 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: PRIVATE 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: customer 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 \"custom_fields\": {\n \"field_1\": {\n \"key\": \"field_1\",\n \"object\": \"custom-field\",\n \"created_at\": \"2024-07-30T16:05:47.000000Z\",\n \"name\": \"Multiple Field Question\",\n \"description\": null,\n \"type\": \"MULTIPLE_OPTIONS\",\n \"options\": [\n \"Option A\",\n \"Option B\",\n \"Option C\"\n ],\n \"required\": false\n }\n }\n },\n \"custom_fields\": {\n \"field_1\": [\n \"Option A\",\n \"Option B\"\n ]\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: { } 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: { } 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 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/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: FILE required: - q /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 },\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.' 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' 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' 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' 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' 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' 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 },\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' 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' 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' 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 \"key\": \"field_1\",\n \"object\": \"custom-field\",\n \"created_at\": \"2024-07-30T16:05:47.000000Z\",\n \"name\": \"Multiple Field Question\",\n \"description\": null,\n \"type\": \"MULTIPLE_OPTIONS\",\n \"options\": [\n \"Option A\",\n \"Option B\",\n \"Option C\"\n ],\n \"required\": false\n }\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/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: 95 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: Members description: '' - name: Modules description: '' - name: Organization description: '' - name: Uploads description: '' components: securitySchemes: default: type: http scheme: bearer description: '' security: - default: []