{"files":{"SKILL.md":"---\nname: iqualify-management-api\ndescription: \"iQualify Management API skill. Use when working with iQualify Management for root, offerings, course-mappings. Covers 84 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# iQualify Management API\nAPI version: v1\n\n## Auth\nApiKey Authorization in header\n\n## Base URL\nhttps://api.iqualify.com/v1\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET / -- list supported endpoints urls\n3. POST /offerings/{offeringId}/groups -- create first group\n\n## Endpoints\n84 endpoints across 6 groups. See references/api-spec.lap for full details.\n\n### Root\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | / | List supported endpoints URLs |\n\n### Offerings\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /offerings/{offeringId}/analytics/pulses | Find all pulse IDs in the specified offering |\n| GET | /offerings/{offeringId}/analytics/pulses/responses | Find pulses by offeringId |\n| GET | /offerings/{offeringId}/analytics/pulses/{pulseId}/responses | Find pulses by offeringId and pulseId |\n| GET | /offerings/{offeringId}/analytics/marks/assignments | Find assessment marks |\n| GET | /offerings/{offeringId}/analytics/marks/quizzes | Find quiz marks |\n| GET | /offerings/{offeringId}/analytics/learners-progress | Find learner progress in a specified offering |\n| GET | /offerings/{offeringId}/analytics/unit-reactions | Find unit reactions |\n| GET | /offerings/{offeringId}/analytics/submissions/assignments | Find submissions to assessments, including marks if any |\n| GET | /offerings/{offeringId}/analytics/social-notes | Find shared social notes in an offering |\n| GET | /offerings/{offeringId}/analytics/activities/responses | Find open response activity attempts |\n| GET | /offerings/{offeringId}/analytics/submissions/open-response/{assessmentId} | Find submissions to a specified open response assessment, including marks if any |\n| GET | /offerings/{offeringId}/analytics/submissions/{userEmail}/assignments/{assessmentId} | Find a learner's submission to a specified assessment, including marks if any |\n| GET | /offerings/{offeringId}/groups | Find assessment groups |\n| POST | /offerings/{offeringId}/groups | Add an assessment group |\n| GET | /offerings/{offeringId}/groups/{groupId}/learners | Find learners in an assessment group |\n| POST | /offerings/{offeringId}/groups/{groupId}/learners | Add a learner to an assessment group |\n| DELETE | /offerings/{offeringId}/groups/{groupId}/learners/{userEmail} | Remove a learner from an assessment group |\n| GET | /offerings/{offeringId}/analytics/channels/{channelId}/posts | Find posts |\n| GET | /offerings/{offeringId}/analytics/channels/{channelId}/comments | Find comments |\n| GET | /offerings/{offeringId}/analytics/channels/{channelId}/replies | Find replies |\n| GET | /offerings/{offeringId}/channels | Find channels |\n| POST | /offerings/{offeringId}/channels | Add channel |\n| PATCH | /offerings/{offeringId}/channels/{channelId} | Update channel |\n| POST | /offerings/{offeringId}/channels/{channelId}/learners | Add learners to a group channel |\n| DELETE | /offerings/{offeringId}/channels/{channelId}/learners | Remove learners from a group channel |\n| GET | /offerings/{offeringId}/channels/{channelId}/learners | Find learners in a group channel |\n| GET | /offerings | Find current, past and future offerings |\n| POST | /offerings | Create offering |\n| GET | /offerings/summary | Offerings summary |\n| GET | /offerings/current | Find active offerings |\n| GET | /offerings/past | Find past offerings |\n| GET | /offerings/future | Find scheduled offerings |\n| GET | /offerings/info/{textPattern} | Find offerings where info field matches the specified textPattern |\n| GET | /offerings/{offeringId} | Find offering by ID |\n| PATCH | /offerings/{offeringId} | Update offering |\n| GET | /offerings/{offeringId}/badges | Find offering badges |\n| PUT | /offerings/{offeringId}/metadata/tags | Update offering tags metadata |\n| PUT | /offerings/{offeringId}/metadata/category | Update offering category metadata |\n| PUT | /offerings/{offeringId}/metadata/topic | Update offering topic metadata |\n| PUT | /offerings/{offeringId}/metadata/level | Update offering level metadata |\n| GET | /offerings/{offeringId}/assessments | Find offering's assessments |\n| PATCH | /offerings/{offeringId}/assessments/{assessmentId} | Update assessment details |\n| PATCH | /offerings/{offeringId}/assessments/{assessmentId}/{userEmail} | Update the due dates for a learner's quiz attempt |\n| DELETE | /offerings/{offeringId}/assessments/{assessmentId}/documents/{documentId} | Remove assessment document |\n| GET | /offerings/{offeringId}/learners/pending-submission | Find learners with assessments pending x days before due date within the specified offeringId |\n| GET | /offerings/{offeringId}/activities/openresponse | Find offering's activities |\n| GET | /offerings/{offeringId}/users | Find offering's users |\n| POST | /offerings/{offeringId}/users | Adds user to the offering |\n| DELETE | /offerings/{offeringId}/users/{userEmail} | Removes user from the offering |\n| GET | /offerings/{offeringId}/users/{markerEmail}/marks | Find Learners marked by a coach |\n| POST | /offerings/{offeringId}/users/{markerEmail}/marks | Add learners to be marked by a coach |\n| DELETE | /offerings/{offeringId}/users/{markerEmail}/marks | Remove learners from coach's marking list |\n| POST | /offerings/{offeringId}/users/{userEmail}/badges/award | Award badge |\n| GET | /offerings/{offeringId}/users/{userEmail}/submissions/open-response | Find learner's open response assessment submissions |\n| DELETE | /offerings/{offeringId}/users/{userEmail}/assessments/{assessmentId} | Reset user's assessment to draft state |\n\n### Course-mappings\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /course-mappings | Find course mappings |\n| GET | /course-mappings/externalcourse/{externalCourseId} | Find course mappings by externalCourseId |\n| GET | /course-mappings/{offeringId} | Find course mappings by offeringId |\n| PUT | /course-mappings/{offeringId}/{externalCourseId} | Add course mapping |\n| DELETE | /course-mappings/{offeringId}/{externalCourseId} | Remove course mapping |\n\n### Courses\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /courses | Find courses |\n| GET | /courses/{contentId} | Find course by contentId |\n| GET | /courses/{contentId}/activations | Find activations for a contentId |\n| PUT | /courses/{contentId}/metadata/tags | Update course tags |\n| PUT | /courses/{contentId}/metadata/category | Update course category |\n| PUT | /courses/{contentId}/metadata/level | Update course level |\n| PUT | /courses/{contentId}/metadata/topic | Update course topic |\n| POST | /courses/{rootContentId}/permissions/{userEmail} | Update course access |\n| GET | /courses/{contentId}/permissions | Find users who have access to the contentId provided |\n\n### Org\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /org | Gets the current organisation |\n\n### Users\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /users/{userEmail} | Find user by email |\n| PATCH | /users/{userEmail} | Update user |\n| PUT | /users/{userEmail}/suspend | Suspend user |\n| GET | /users/{userEmail}/offerings | Find user's offerings |\n| POST | /users/{userEmail}/offerings | Adds the user to the specified offerings as a learner |\n| GET | /users/{userEmail}/offerings/{offeringId}/progress | Find learner's progress in a specified offering |\n| POST | /users/{userEmail}/permissions/{permissionName} | Add permission to user |\n| GET | /users/all/progress | Find learner progress in all offerings |\n| GET | /users/{userEmail}/progress | Find learner's progress in offerings |\n| GET | /users/{userEmail}/badges | Find user's badges |\n| PATCH | /users/{userEmail}/transfer | Transfer a user between offerings |\n| POST | /users/{userEmail}/invite-email | Resend invitation email |\n| POST | /users | Add new user |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all resource?\" -> GET /\n- \"List all pulses?\" -> GET /offerings/{offeringId}/analytics/pulses\n- \"List all responses?\" -> GET /offerings/{offeringId}/analytics/pulses/responses\n- \"List all assignments?\" -> GET /offerings/{offeringId}/analytics/marks/assignments\n- \"List all quizzes?\" -> GET /offerings/{offeringId}/analytics/marks/quizzes\n- \"List all learners-progress?\" -> GET /offerings/{offeringId}/analytics/learners-progress\n- \"List all unit-reactions?\" -> GET /offerings/{offeringId}/analytics/unit-reactions\n- \"List all social-notes?\" -> GET /offerings/{offeringId}/analytics/social-notes\n- \"Get open-response details?\" -> GET /offerings/{offeringId}/analytics/submissions/open-response/{assessmentId}\n- \"Get assignment details?\" -> GET /offerings/{offeringId}/analytics/submissions/{userEmail}/assignments/{assessmentId}\n- \"List all groups?\" -> GET /offerings/{offeringId}/groups\n- \"Create a group?\" -> POST /offerings/{offeringId}/groups\n- \"List all learners?\" -> GET /offerings/{offeringId}/groups/{groupId}/learners\n- \"Create a learner?\" -> POST /offerings/{offeringId}/groups/{groupId}/learners\n- \"Delete a learner?\" -> DELETE /offerings/{offeringId}/groups/{groupId}/learners/{userEmail}\n- \"List all posts?\" -> GET /offerings/{offeringId}/analytics/channels/{channelId}/posts\n- \"List all comments?\" -> GET /offerings/{offeringId}/analytics/channels/{channelId}/comments\n- \"List all replies?\" -> GET /offerings/{offeringId}/analytics/channels/{channelId}/replies\n- \"List all channels?\" -> GET /offerings/{offeringId}/channels\n- \"Create a channel?\" -> POST /offerings/{offeringId}/channels\n- \"Partially update a channel?\" -> PATCH /offerings/{offeringId}/channels/{channelId}\n- \"List all course-mappings?\" -> GET /course-mappings\n- \"Get externalcourse details?\" -> GET /course-mappings/externalcourse/{externalCourseId}\n- \"Get course-mapping details?\" -> GET /course-mappings/{offeringId}\n- \"Update a course-mapping?\" -> PUT /course-mappings/{offeringId}/{externalCourseId}\n- \"Delete a course-mapping?\" -> DELETE /course-mappings/{offeringId}/{externalCourseId}\n- \"List all courses?\" -> GET /courses\n- \"Get course details?\" -> GET /courses/{contentId}\n- \"List all activations?\" -> GET /courses/{contentId}/activations\n- \"List all permissions?\" -> GET /courses/{contentId}/permissions\n- \"List all offerings?\" -> GET /offerings\n- \"Create a offering?\" -> POST /offerings\n- \"List all summary?\" -> GET /offerings/summary\n- \"List all current?\" -> GET /offerings/current\n- \"List all past?\" -> GET /offerings/past\n- \"List all future?\" -> GET /offerings/future\n- \"Get info details?\" -> GET /offerings/info/{textPattern}\n- \"Get offering details?\" -> GET /offerings/{offeringId}\n- \"Partially update a offering?\" -> PATCH /offerings/{offeringId}\n- \"List all badges?\" -> GET /offerings/{offeringId}/badges\n- \"List all assessments?\" -> GET /offerings/{offeringId}/assessments\n- \"Partially update a assessment?\" -> PATCH /offerings/{offeringId}/assessments/{assessmentId}\n- \"Delete a document?\" -> DELETE /offerings/{offeringId}/assessments/{assessmentId}/documents/{documentId}\n- \"List all pending-submission?\" -> GET /offerings/{offeringId}/learners/pending-submission\n- \"List all openresponse?\" -> GET /offerings/{offeringId}/activities/openresponse\n- \"List all users?\" -> GET /offerings/{offeringId}/users\n- \"Create a user?\" -> POST /offerings/{offeringId}/users\n- \"Delete a user?\" -> DELETE /offerings/{offeringId}/users/{userEmail}\n- \"List all marks?\" -> GET /offerings/{offeringId}/users/{markerEmail}/marks\n- \"Create a mark?\" -> POST /offerings/{offeringId}/users/{markerEmail}/marks\n- \"Create a award?\" -> POST /offerings/{offeringId}/users/{userEmail}/badges/award\n- \"List all open-response?\" -> GET /offerings/{offeringId}/users/{userEmail}/submissions/open-response\n- \"Delete a assessment?\" -> DELETE /offerings/{offeringId}/users/{userEmail}/assessments/{assessmentId}\n- \"List all org?\" -> GET /org\n- \"Get user details?\" -> GET /users/{userEmail}\n- \"Partially update a user?\" -> PATCH /users/{userEmail}\n- \"List all progress?\" -> GET /users/{userEmail}/offerings/{offeringId}/progress\n- \"Create a invite-email?\" -> POST /users/{userEmail}/invite-email\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api iQualify Management API\n@base https://api.iqualify.com/v1\n@version v1\n@auth ApiKey Authorization in header\n@endpoints 84\n@hint download_for_search\n@toc root(1), offerings(55), course-mappings(5), courses(9), org(1), users(13)\n\n@group root\n@endpoint GET /\n@desc List supported endpoints URLs\n@returns(200) Supported endpoints\n\n@endgroup\n\n@group offerings\n@endpoint GET /offerings/{offeringId}/analytics/pulses\n@desc Find all pulse IDs in the specified offering\n@required {offeringId: str # offering's id}\n@returns(200) Pulses' ids\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/pulses/responses\n@desc Find pulses by offeringId\n@required {offeringId: str # offering's id}\n@optional {pulseType: str(submit_text/MCQ/spatial_triangular/spatial_planar/spatial_linear) # Filter pulse responses by type., responseTime: any # Filter pulse responses by responseTime. Lower then (`lt`), lower then or equal (`lte`), greater then (`gt`) and greater then or equal (`gte`) operators are available. Example of filtering by time range __gte__2017-03-14T07:30:00Z__}\n@returns(200) All pulses' responses\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/pulses/{pulseId}/responses\n@desc Find pulses by offeringId and pulseId\n@required {offeringId: str # offering's id, pulseId: str # pulse's base id}\n@returns(200) Pulse data matching pulseId\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/marks/assignments\n@desc Find assessment marks\n@required {offeringId: str # offering's id}\n@returns(200) Assignments marks\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/marks/quizzes\n@desc Find quiz marks\n@required {offeringId: str # offering's id}\n@returns(200) Quizzes marks\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/learners-progress\n@desc Find learner progress in a specified offering\n@required {offeringId: str # offering's id}\n@returns(200) Learners progress\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/unit-reactions\n@desc Find unit reactions\n@required {offeringId: str # offering's id}\n@returns(200) Unit Reactions\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/submissions/assignments\n@desc Find submissions to assessments, including marks if any\n@required {offeringId: str # offering's id}\n@returns(200) Assignments submissions\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/social-notes\n@desc Find shared social notes in an offering\n@required {offeringId: str # offering's id}\n@returns(200) Offering social notes\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/activities/responses\n@desc Find open response activity attempts\n@required {offeringId: str # offering's id}\n@returns(200) Offering activity attempt open responses\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/submissions/open-response/{assessmentId}\n@desc Find submissions to a specified open response assessment, including marks if any\n@required {offeringId: str # offering's id, assessmentId: str # assessment's id}\n@returns(200) Responds with assignment submissions for the specified assignment.\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/submissions/{userEmail}/assignments/{assessmentId}\n@desc Find a learner's submission to a specified assessment, including marks if any\n@required {offeringId: str # offering's id, userEmail: str(email) # user's email, assessmentId: str # assessment's id}\n@returns(200) Responds with the learner's assessment submission and any marks for the submission.\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/groups\n@desc Find assessment groups\n@required {offeringId: str # offering's id}\n@returns(200) Succesful response\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint POST /offerings/{offeringId}/groups\n@desc Add an assessment group\n@required {offeringId: str # offering's id, title: str}\n@returns(201) {id: str, title: str, createdAt: str} # assessment group successfully added\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/groups/{groupId}/learners\n@desc Find learners in an assessment group\n@required {offeringId: str # offering's id, groupId: str # Assessment group id}\n@returns(200) Succesful response\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint POST /offerings/{offeringId}/groups/{groupId}/learners\n@desc Add a learner to an assessment group\n@required {offeringId: str # offering's id, groupId: str # Assessment group id}\n@optional {email: str}\n@returns(201) {id: str, avatarUrl: str, profile: map{displayName: str, mobile: str}, email: str(email), firstName: str, lastName: str, personId: str, lastAccessAt: str(date-time), firstAccessAt: str(date-time), metadata: map{tags: [str]}, invite: map{url: str}} # Succesful response\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint DELETE /offerings/{offeringId}/groups/{groupId}/learners/{userEmail}\n@desc Remove a learner from an assessment group\n@required {offeringId: str # offering's id, groupId: str # Assessment group id, userEmail: str(email) # user's email}\n@returns(204) user successfully removed from the assessment group\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/channels/{channelId}/posts\n@desc Find posts\n@required {offeringId: str # offering's id, channelId: str # channel's id}\n@returns(200) Successful response\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/channels/{channelId}/comments\n@desc Find comments\n@required {offeringId: str # offering's id, channelId: str # channel's id}\n@returns(200) Successful response\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/analytics/channels/{channelId}/replies\n@desc Find replies\n@required {offeringId: str # offering's id, channelId: str # channel's id}\n@returns(200) Successful response\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/channels\n@desc Find channels\n@required {offeringId: str # offering's id}\n@returns(200) Succesful response\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint POST /offerings/{offeringId}/channels\n@desc Add channel\n@required {offeringId: str # offering's id, title: str}\n@optional {isBroadcastOnly: bool=false}\n@returns(201) {id: str, title: str, isBroadcastOnly: bool} # channel successfully added\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PATCH /offerings/{offeringId}/channels/{channelId}\n@desc Update channel\n@required {offeringId: str # offering's id, channelId: str # channel's id}\n@optional {title: str, isBroadcastOnly: bool, privateSupport: bool, groupDiscussion: bool, group: map{autoAssign: bool}}\n@returns(200) {id: str, title: str, isBroadcastOnly: bool} # channel successfully updated\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint POST /offerings/{offeringId}/channels/{channelId}/learners\n@desc Add learners to a group channel\n@required {offeringId: str # offering's id, channelId: str # channel's id}\n@optional {email: str}\n@returns(204) Learner successfully added to the channel.\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint DELETE /offerings/{offeringId}/channels/{channelId}/learners\n@desc Remove learners from a group channel\n@required {offeringId: str # offering's id, channelId: str # channel's id}\n@optional {email: str}\n@returns(204) Learner successfully removed from the channel.\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/channels/{channelId}/learners\n@desc Find learners in a group channel\n@required {offeringId: str # offering's id, channelId: str # channel's id}\n@returns(200) {id: str, title: str, isBroadcastOnly: bool} # channel data\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endgroup\n\n@group course-mappings\n@endpoint GET /course-mappings\n@desc Find course mappings\n@returns(200) Course Mappings\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource.}\n\n@endpoint GET /course-mappings/externalcourse/{externalCourseId}\n@desc Find course mappings by externalCourseId\n@required {externalCourseId: str # external course's id}\n@returns(200) Course Mapping\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /course-mappings/{offeringId}\n@desc Find course mappings by offeringId\n@required {offeringId: str # offering's id}\n@returns(200) Course Mapping\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PUT /course-mappings/{offeringId}/{externalCourseId}\n@desc Add course mapping\n@required {offeringId: str # offering's id, externalCourseId: str # external course's id}\n@returns(200) Course Mapping\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint DELETE /course-mappings/{offeringId}/{externalCourseId}\n@desc Remove course mapping\n@required {offeringId: str # offering's id, externalCourseId: str # external course's id}\n@returns(200) Course Mapping\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endgroup\n\n@group courses\n@endpoint GET /courses\n@desc Find courses\n@returns(200) All courses (draft and published) in the organisation.\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource.}\n\n@endpoint GET /courses/{contentId}\n@desc Find course by contentId\n@required {contentId: str # The content Id}\n@returns(200) {id: str, name: str, createdAt: str(date-time), coverImageUrl: str, tasksEnabled: bool, metadata: any} # Course detail\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /courses/{contentId}/activations\n@desc Find activations for a contentId\n@required {contentId: str # The content Id}\n@returns(200) {id: str, name: str, end: str, start: str, learnersCount: str, info: str, metadata: map{rootContentId: str}} # Activation list.\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PUT /courses/{contentId}/metadata/tags\n@desc Update course tags\n@required {contentId: str # The content Id}\n@optional {tags: [str]}\n@returns(200) {id: str, name: str, createdAt: str(date-time), coverImageUrl: str, tasksEnabled: bool, metadata: any} # Course detail\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PUT /courses/{contentId}/metadata/category\n@desc Update course category\n@required {contentId: str # The content Id}\n@optional {category: str}\n@returns(200) {id: str, name: str, createdAt: str(date-time), coverImageUrl: str, tasksEnabled: bool, metadata: any} # Course detail\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PUT /courses/{contentId}/metadata/level\n@desc Update course level\n@required {contentId: str # The content Id}\n@optional {level: str}\n@returns(200) {id: str, name: str, createdAt: str(date-time), coverImageUrl: str, tasksEnabled: bool, metadata: any} # Course detail\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PUT /courses/{contentId}/metadata/topic\n@desc Update course topic\n@required {contentId: str # The content Id}\n@optional {topic: str}\n@returns(200) {id: str, name: str, createdAt: str(date-time), coverImageUrl: str, tasksEnabled: bool, metadata: any} # Course detail\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint POST /courses/{rootContentId}/permissions/{userEmail}\n@desc Update course access\n@required {rootContentId: str # The content Id, userEmail: str # The user email}\n@optional {isBuilder: bool=true, isReviewer: bool=false}\n@returns(201) {contentId: str} # user successfully added to the course with the specified permission.\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /courses/{contentId}/permissions\n@desc Find users who have access to the contentId provided\n@required {contentId: str # The content Id}\n@returns(200) {email: str, name: str, isBuilder: bool, isReviewer: bool} # List of users who have access to the content ID provided.\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endgroup\n\n@group offerings\n@endpoint GET /offerings\n@desc Find current, past and future offerings\n@returns(200) all offerings (current, past and future ones)\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource.}\n\n@endpoint POST /offerings\n@desc Create offering\n@required {start: str(date-time)}\n@optional {identifier: str, name: str, description: str, contentId: str # The identifier for a specific version of a course, rootContentId: str # Every time a course is republished it's assigned a new contentId. rootContentId is the first original contentId associated with a course., end: str(date-time), useRelativeDates: bool=false, trailerVideoUrl: str, isReadonly: bool, hasEarlyCloseOff: bool, earlyCloseOffDate: str(date-time), createDefaultChannels: bool=false, badge: map{title: str, description: str, requiresApproval: bool, badgeExpiry: map}, hiddenPageIds: [str] # An array of strings representing hidden page ids., metadata: map{category: str, topic: str, level: str, tags: [str]}, settings: map{allowSocialFeatures: bool, enablePrivateSupportChannel: bool}}\n@returns(201) {id: str, identifier: str, name: str, description: str, overview: str, contentId: str, useRelativeDates: bool, start: str(date-time), end: str(date-time), coverImageUrl: str, trailerVideoUrl: str, isReadonly: bool, studyPlan: map{filename: str, mimetype: str, size: num, url: str, createdAt: str(date-time)}, hasEarlyCloseOff: bool, earlyCloseOffDate: str(date-time), enrollmentLimit: num, price: num, currency: str, allowEnrollment: bool, settings: map{aggregateProgressScore: bool, allowSocialFeatures: bool, allowTasks: bool, enablePrivateSupportChannel: bool, strictStartDate: bool}, tasksEnabled: bool, metadata: map{rootContentId: str, category: str, topic: str, level: str, tags: [str]}} # offering created\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/summary\n@desc Offerings summary\n@optional {$top: str=50 # Returns only the first n results., $orderby: str # Sorts the results., $filter: str # Filters the results, based on a Boolean condition.}\n@returns(200) all offerings.\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource.}\n\n@endpoint GET /offerings/current\n@desc Find active offerings\n@returns(200) current offerings\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource.}\n\n@endpoint GET /offerings/past\n@desc Find past offerings\n@returns(200) past offerings\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource.}\n\n@endpoint GET /offerings/future\n@desc Find scheduled offerings\n@returns(200) future offerings\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource.}\n\n@endpoint GET /offerings/info/{textPattern}\n@desc Find offerings where info field matches the specified textPattern\n@required {textPattern: str # Text pattern to search for (minimum of 3 characters length).}\n@returns(200) Offerings\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}\n@desc Find offering by ID\n@required {offeringId: str # offering's id}\n@returns(200) {id: str, identifier: str, name: str, description: str, overview: str, contentId: str, useRelativeDates: bool, start: str(date-time), end: str(date-time), coverImageUrl: str, trailerVideoUrl: str, isReadonly: bool, studyPlan: map{filename: str, mimetype: str, size: num, url: str, createdAt: str(date-time)}, hasEarlyCloseOff: bool, earlyCloseOffDate: str(date-time), enrollmentLimit: num, price: num, currency: str, allowEnrollment: bool, settings: map{aggregateProgressScore: bool, allowSocialFeatures: bool, allowTasks: bool, enablePrivateSupportChannel: bool, strictStartDate: bool}, tasksEnabled: bool, metadata: map{rootContentId: str, category: str, topic: str, level: str, tags: [str]}} # offering\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PATCH /offerings/{offeringId}\n@desc Update offering\n@required {offeringId: str # offering's id}\n@optional {identifier: str, name: str, overview: str, description: str, contentId: str # The identifier for a specific version of a course, rootContentId: str # Every time a course is republished it is assigned a new contentId. rootContentId is the first original contentId associated with a course., start: str(date-time), end: str(date-time), useRelativeDates: bool, trailerVideoUrl: str, isReadonly: bool, hasEarlyCloseOff: bool, earlyCloseOffDate: str(date-time), badge: map{title: str, description: str, requiresApproval: bool, badgeExpiry: map}, metadata: map{category: str, topic: str, level: str, tags: [str]}}\n@returns(200) {id: str, identifier: str, name: str, description: str, overview: str, contentId: str, useRelativeDates: bool, start: str(date-time), end: str(date-time), coverImageUrl: str, trailerVideoUrl: str, isReadonly: bool, studyPlan: map{filename: str, mimetype: str, size: num, url: str, createdAt: str(date-time)}, hasEarlyCloseOff: bool, earlyCloseOffDate: str(date-time), enrollmentLimit: num, price: num, currency: str, allowEnrollment: bool, settings: map{aggregateProgressScore: bool, allowSocialFeatures: bool, allowTasks: bool, enablePrivateSupportChannel: bool, strictStartDate: bool}, tasksEnabled: bool, metadata: map{rootContentId: str, category: str, topic: str, level: str, tags: [str]}} # offering updated\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/badges\n@desc Find offering badges\n@required {offeringId: str # offering's id}\n@returns(200) {title: str, description: str, criterias: any, badgeExpiry: map{expires: bool, expiryType: str, expirationDate: str(date-time), timeframeUnit: str, timeframeAmount: num}, badgeUrl: str, openBadge: any} # badges\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PUT /offerings/{offeringId}/metadata/tags\n@desc Update offering tags metadata\n@required {offeringId: str # offering's id}\n@optional {tags: [str]}\n@returns(200) {id: str, identifier: str, name: str, description: str, overview: str, contentId: str, useRelativeDates: bool, start: str(date-time), end: str(date-time), coverImageUrl: str, trailerVideoUrl: str, isReadonly: bool, studyPlan: map{filename: str, mimetype: str, size: num, url: str, createdAt: str(date-time)}, hasEarlyCloseOff: bool, earlyCloseOffDate: str(date-time), enrollmentLimit: num, price: num, currency: str, allowEnrollment: bool, settings: map{aggregateProgressScore: bool, allowSocialFeatures: bool, allowTasks: bool, enablePrivateSupportChannel: bool, strictStartDate: bool}, tasksEnabled: bool, metadata: map{rootContentId: str, category: str, topic: str, level: str, tags: [str]}} # offering updated\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PUT /offerings/{offeringId}/metadata/category\n@desc Update offering category metadata\n@required {offeringId: str # offering's id}\n@optional {category: str}\n@returns(200) {id: str, identifier: str, name: str, description: str, overview: str, contentId: str, useRelativeDates: bool, start: str(date-time), end: str(date-time), coverImageUrl: str, trailerVideoUrl: str, isReadonly: bool, studyPlan: map{filename: str, mimetype: str, size: num, url: str, createdAt: str(date-time)}, hasEarlyCloseOff: bool, earlyCloseOffDate: str(date-time), enrollmentLimit: num, price: num, currency: str, allowEnrollment: bool, settings: map{aggregateProgressScore: bool, allowSocialFeatures: bool, allowTasks: bool, enablePrivateSupportChannel: bool, strictStartDate: bool}, tasksEnabled: bool, metadata: map{rootContentId: str, category: str, topic: str, level: str, tags: [str]}} # offering updated\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PUT /offerings/{offeringId}/metadata/topic\n@desc Update offering topic metadata\n@required {offeringId: str # offering's id}\n@optional {topic: str}\n@returns(200) {id: str, identifier: str, name: str, description: str, overview: str, contentId: str, useRelativeDates: bool, start: str(date-time), end: str(date-time), coverImageUrl: str, trailerVideoUrl: str, isReadonly: bool, studyPlan: map{filename: str, mimetype: str, size: num, url: str, createdAt: str(date-time)}, hasEarlyCloseOff: bool, earlyCloseOffDate: str(date-time), enrollmentLimit: num, price: num, currency: str, allowEnrollment: bool, settings: map{aggregateProgressScore: bool, allowSocialFeatures: bool, allowTasks: bool, enablePrivateSupportChannel: bool, strictStartDate: bool}, tasksEnabled: bool, metadata: map{rootContentId: str, category: str, topic: str, level: str, tags: [str]}} # offering updated\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PUT /offerings/{offeringId}/metadata/level\n@desc Update offering level metadata\n@required {offeringId: str # offering's id}\n@optional {level: str}\n@returns(200) {id: str, identifier: str, name: str, description: str, overview: str, contentId: str, useRelativeDates: bool, start: str(date-time), end: str(date-time), coverImageUrl: str, trailerVideoUrl: str, isReadonly: bool, studyPlan: map{filename: str, mimetype: str, size: num, url: str, createdAt: str(date-time)}, hasEarlyCloseOff: bool, earlyCloseOffDate: str(date-time), enrollmentLimit: num, price: num, currency: str, allowEnrollment: bool, settings: map{aggregateProgressScore: bool, allowSocialFeatures: bool, allowTasks: bool, enablePrivateSupportChannel: bool, strictStartDate: bool}, tasksEnabled: bool, metadata: map{rootContentId: str, category: str, topic: str, level: str, tags: [str]}} # offering updated\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/assessments\n@desc Find offering's assessments\n@required {offeringId: str # offering's id}\n@returns(200) offering's assessments\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PATCH /offerings/{offeringId}/assessments/{assessmentId}\n@desc Update assessment details\n@required {offeringId: str # offering's id, assessmentId: str # assessment's id}\n@optional {markType: str, markNumber: str, openDate: str(date-time), dueDate: str(date-time), content: str}\n@returns(200) {id: str, pid: str, title: str, type: str, content: str, points: str, hidden: bool, filename: str, maxAttempts: int(int32), durationMinutes: int(int32), totalQuestions: int(int32), totalThemes: int(int32), documents: [map], themes: [map], markType: str, markNumber: str, openDate: str(date-time), dueDate: str(date-time)} # assessment successfully updated\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PATCH /offerings/{offeringId}/assessments/{assessmentId}/{userEmail}\n@desc Update the due dates for a learner's quiz attempt\n@required {offeringId: str # offering's id, assessmentId: str # assessment's id, userEmail: str(email) # user's email}\n@optional {dueDate: str(date-time)}\n@returns(204) Successfully updated assessment due date.\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint DELETE /offerings/{offeringId}/assessments/{assessmentId}/documents/{documentId}\n@desc Remove assessment document\n@required {offeringId: str # offering's id, assessmentId: str # assessment's id, documentId: str # documents's id}\n@returns(204) assessment document successfully removed\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/learners/pending-submission\n@desc Find learners with assessments pending x days before due date within the specified offeringId\n@required {offeringId: str # offering's id}\n@optional {days: str # days to assessment due date. Default is 3 days}\n@returns(200) offering's learners\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/activities/openresponse\n@desc Find offering's activities\n@required {offeringId: str # offering's id}\n@returns(200) offering's learners\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/users\n@desc Find offering's users\n@required {offeringId: str # offering's id}\n@optional {facilitators: str(true/false)=true # If true, facilitators are included in the results., learners: str(true/false)=true # If true, learners are included in the results., markers: str(true/false)=true # If true, markers are included in the results.}\n@returns(200) offering's users\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint POST /offerings/{offeringId}/users\n@desc Adds user to the offering\n@required {offeringId: str # offering's id}\n@returns(201) user successfully added to the offering\n@returns(207) Partially successful response\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint DELETE /offerings/{offeringId}/users/{userEmail}\n@desc Removes user from the offering\n@required {offeringId: str # offering's id, userEmail: str(email) # user's email}\n@returns(204) user successfully removed from the offering\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/users/{markerEmail}/marks\n@desc Find Learners marked by a coach\n@required {offeringId: str # offering's id, markerEmail: str # marker's email}\n@returns(200) learners marked by the marker\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint POST /offerings/{offeringId}/users/{markerEmail}/marks\n@desc Add learners to be marked by a coach\n@required {offeringId: str # offering's id, markerEmail: str # marker's email}\n@returns(200) learners marked by the marker\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint DELETE /offerings/{offeringId}/users/{markerEmail}/marks\n@desc Remove learners from coach's marking list\n@required {offeringId: str # offering's id, markerEmail: str # marker's email}\n@returns(200) learners marked by the marker\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint POST /offerings/{offeringId}/users/{userEmail}/badges/award\n@desc Award badge\n@required {offeringId: str # offering's id, userEmail: str(email) # user's email}\n@returns(201) {awarded: bool, badgeId: str, badgeUrl: str} # Awarded badge response\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /offerings/{offeringId}/users/{userEmail}/submissions/open-response\n@desc Find learner's open response assessment submissions\n@required {offeringId: str # offering's id, userEmail: str(email) # user's email}\n@returns(200) user open response submission and mark details\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint DELETE /offerings/{offeringId}/users/{userEmail}/assessments/{assessmentId}\n@desc Reset user's assessment to draft state\n@required {offeringId: str # offering's id, userEmail: str(email) # user's email, assessmentId: str # assessment's id}\n@returns(204) User's assessment successfully moved to draft state.\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endgroup\n\n@group org\n@endpoint GET /org\n@desc Gets the current organisation\n@returns(200) {id: str, name: str} # organisation summary data\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endgroup\n\n@group users\n@endpoint GET /users/{userEmail}\n@desc Find user by email\n@required {userEmail: str(email) # user's email}\n@returns(200) {id: str, avatarUrl: str, profile: map{displayName: str, mobile: str}, email: str(email), firstName: str, lastName: str, personId: str, lastAccessAt: str(date-time), firstAccessAt: str(date-time), metadata: map{tags: [str]}, invite: map{url: str}} # user data\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PATCH /users/{userEmail}\n@desc Update user\n@required {userEmail: str(email) # user's email}\n@optional {firstName: str, lastName: str, email: str(email), personId: str, profile: map{displayName: str}, metadata: map{tags: [str]}, sendInvite: bool=true}\n@returns(200) {id: str, avatarUrl: str, profile: map{displayName: str, mobile: str}, email: str(email), firstName: str, lastName: str, personId: str, lastAccessAt: str(date-time), firstAccessAt: str(date-time), metadata: map{tags: [str]}, invite: map{url: str}} # user updated\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PUT /users/{userEmail}/suspend\n@desc Suspend user\n@required {userEmail: str(email) # user's email}\n@optional {suspended: bool}\n@returns(204) User suspended.\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /users/{userEmail}/offerings\n@desc Find user's offerings\n@required {userEmail: str(email) # user's email}\n@returns(200) user's offerings\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint POST /users/{userEmail}/offerings\n@desc Adds the user to the specified offerings as a learner\n@required {userEmail: str(email) # user's email}\n@returns(200) user's offerings\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /users/{userEmail}/offerings/{offeringId}/progress\n@desc Find learner's progress in a specified offering\n@required {userEmail: str(email) # user's email, offeringId: str # offering's id}\n@returns(200) {id: str, firstName: str, lastName: str, email: str, completion: str} # user's offerings\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint POST /users/{userEmail}/permissions/{permissionName}\n@desc Add permission to user\n@required {userEmail: str(email) # user's email, permissionName: str(builder/manager/insights/userAdmin) # permission name}\n@returns(200) {id: str, avatarUrl: str, profile: map{displayName: str, mobile: str}, email: str(email), firstName: str, lastName: str, personId: str, lastAccessAt: str(date-time), firstAccessAt: str(date-time), metadata: map{tags: [str]}, invite: map{url: str}} # permission successfully added to user\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /users/all/progress\n@desc Find learner progress in all offerings\n@optional {$top: str=50 # Returns only the first n results., $orderby: str # Sorts the results., $filter: str # Filters the results, based on a Boolean condition.}\n@returns(200) {top: int, data: any} # Learners progress\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource.}\n\n@endpoint GET /users/{userEmail}/progress\n@desc Find learner's progress in offerings\n@required {userEmail: str(email) # user's email}\n@returns(200) {id: str, firstName: str, lastName: str, email: str, personId: str, offerings: [map]} # Learner Progress\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint GET /users/{userEmail}/badges\n@desc Find user's badges\n@required {userEmail: str(email) # user's email}\n@returns(200) user's badges\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint PATCH /users/{userEmail}/transfer\n@desc Transfer a user between offerings\n@required {userEmail: str(email) # user's email}\n@optional {fromOfferingId: str, toOfferingId: str, sendInvite: bool}\n@returns(200) Updated user information\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint POST /users/{userEmail}/invite-email\n@desc Resend invitation email\n@required {userEmail: str(email) # user's email}\n@returns(204) successfully requested invitation e-mail sending\n@errors {401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endpoint POST /users\n@desc Add new user\n@optional {firstName: str, lastName: str, email: str(email), personId: str, profile: map{displayName: str}, metadata: map{tags: [str]}, sendInvite: bool=true}\n@returns(201) {id: str, avatarUrl: str, profile: map{displayName: str, mobile: str}, email: str(email), firstName: str, lastName: str, personId: str, lastAccessAt: str(date-time), firstAccessAt: str(date-time), metadata: map{tags: [str]}, invite: map{url: str}} # user added\n@errors {400: Bad Request, 401: No authorization token was found., 403: You are not allowed to access this resource., 404: Not Found}\n\n@endgroup\n\n@end\n"}}