openapi: 3.0.3 info: title: Teachfloor description: '' version: 1.0.0 servers: - url: 'https://api.teachfloor.com' paths: /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 \"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 include_test_user: type: boolean description: '' example: false 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' created_at: '2022-02-03T16:06:42.000000Z' cover: null availability: CONTINUOUS visibility: PRIVATE start_date: null end_date: null currency: eur price: 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' created_at: '2022-02-03T16:06:42.000000Z' cover: null availability: CONTINUOUS visibility: PRIVATE start_date: null end_date: null currency: eur price: 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 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 \"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' created_at: '2022-02-03T16:06:42.000000Z' cover: null availability: CONTINUOUS visibility: PRIVATE start_date: null end_date: null currency: eur price: 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' created_at: '2022-02-03T16:06:42.000000Z' cover: null availability: CONTINUOUS visibility: PRIVATE start_date: null end_date: null currency: eur price: 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 requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'The course name.' example: 'Ultimate Marketing Course' availability: type: string description: 'The course availability. 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 '/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 ID of the member to join 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: assistant 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 \"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 },\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 },\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/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 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.' example: 'http://pfannerstill.biz/iusto-sunt-sint-ut-sed-enim-ipsam.html' 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/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: 90 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 tags: - name: Courses description: '' - name: Members description: '' - name: Organization description: '' components: securitySchemes: default: type: http scheme: bearer description: '' security: - default: []