{"openapi":"3.0.3","info":{"title":"Elephant Public API","version":"1.0.0"},"components":{"securitySchemes":{"apiKey":{"type":"apiKey","name":"X-API-Key","in":"header"},"bearerApiKey":{"type":"http","scheme":"bearer","description":"Tenant API key sent as a bearer token"}},"schemas":{}},"paths":{"/v1/users/":{"get":{"summary":"List users","tags":["Users"],"description":"Retrieve a paginated list of users with optional filtering","parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string"},"in":"query","name":"team","required":false},{"schema":{"type":"string"},"in":"query","name":"email","required":false},{"schema":{"type":"string"},"in":"query","name":"search","required":false}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"},"email":{"type":"string","format":"email","nullable":true},"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"team":{"type":"string"},"tenant":{"type":"string"},"language":{"type":"string"},"phoneNumber":{"type":"string","nullable":true,"description":"Format: E.164 (e.g., +1234567890)"},"startDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD)"},"endDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD). Null when the user has no scheduled deactivation."},"isActive":{"type":"boolean"},"insertedAt":{"type":"string"},"tags":{"type":"array","items":{"type":"object","properties":{"tagId":{"type":"string","format":"uuid"},"label":{"type":"string"}},"required":["tagId","label"],"additionalProperties":false}}},"required":["userId","email","firstName","lastName","team","tenant","language","phoneNumber","startDate","endDate","isActive","insertedAt","tags"],"additionalProperties":false}},"pagination":{"type":"object","properties":{"page":{"type":"number"},"pageSize":{"type":"number"},"total":{"type":"number"},"totalPages":{"type":"number"}},"required":["page","pageSize","total","totalPages"],"additionalProperties":false}},"required":["data","pagination"],"additionalProperties":false}}}}}},"post":{"summary":"Create user","tags":["Users"],"description":"Create a new user. If a user with the same email already exists, the response includes `wasExisting: true` and no fields are updated — including `isActive`. To deactivate or reactivate an existing user, use `PATCH /v1/users/{userId}` instead.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":8},"firstName":{"type":"string","minLength":1},"lastName":{"type":"string","minLength":1},"team":{"type":"string","minLength":1},"language":{"type":"string","minLength":2,"maxLength":10,"default":"en_GB"},"phoneNumber":{"type":"string","description":"Format: E.164 (e.g., +1234567890)"},"startDate":{"type":"string","description":"Format: ISO 8601 date (YYYY-MM-DD)"},"endDate":{"type":"string","description":"Format: ISO 8601 date (YYYY-MM-DD)"},"isActive":{"type":"boolean","description":"Defaults to true. Set to false to create the user in a deactivated state."},"sendOnboardingEmail":{"type":"boolean","default":false,"description":"When true, requests an onboarding email with a learner-app sign-in link and app store links. Delivery waits until a future `startDate`; delayed emails omit the plaintext password. Email delivery is best-effort and does not fail user creation."},"tags":{"type":"array","items":{"type":"string"},"description":"Roles assigned to the user"}},"required":["email","password","firstName","lastName","team"],"additionalProperties":false}}}},"security":[{"apiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"},"wasExisting":{"type":"boolean"}},"required":["userId","wasExisting"],"additionalProperties":false}}}}}}},"/v1/users/{userId}":{"get":{"summary":"Get user by ID","tags":["Users"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"userId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"},"email":{"type":"string","format":"email","nullable":true},"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"team":{"type":"string"},"tenant":{"type":"string"},"language":{"type":"string"},"phoneNumber":{"type":"string","nullable":true,"description":"Format: E.164 (e.g., +1234567890)"},"startDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD)"},"endDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD). Null when the user has no scheduled deactivation."},"isActive":{"type":"boolean"},"insertedAt":{"type":"string"},"tags":{"type":"array","items":{"type":"object","properties":{"tagId":{"type":"string","format":"uuid"},"label":{"type":"string"}},"required":["tagId","label"],"additionalProperties":false}}},"required":["userId","email","firstName","lastName","team","tenant","language","phoneNumber","startDate","endDate","isActive","insertedAt","tags"],"additionalProperties":false}}}}}},"patch":{"summary":"Update user","tags":["Users"],"description":"Update user fields. All fields are optional — only provided fields will be changed. Supports updating the user email address; returns 409 if the new email is already taken by an active user. If the new email belongs to a deactivated user of the same tenant, that user is merged into this one: finished courses, certificates, exam results, and finished learning paths are transferred, then the deactivated user is deleted. To reactivate a deactivated user, send `{ \"isActive\": true }` or `{ \"endDate\": null }`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"firstName":{"type":"string","minLength":1},"lastName":{"type":"string","minLength":1},"team":{"type":"string","minLength":1},"language":{"type":"string","minLength":2,"maxLength":10},"phoneNumber":{"type":"string","nullable":true,"description":"Format: E.164 (e.g., +1234567890)"},"startDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD)"},"endDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD). Set to `null` to reactivate a previously deactivated user (clears the end date and re-opens the active period)."},"isActive":{"type":"boolean","description":"Set to true to reactivate a deactivated user, or false to deactivate immediately."},"tags":{"type":"array","items":{"type":"string"},"description":"Roles assigned to the user"}},"additionalProperties":false,"description":"All fields are optional. Only provided fields will be updated."}}},"description":"All fields are optional. Only provided fields will be updated."},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"userId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"},"email":{"type":"string","format":"email","nullable":true},"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"team":{"type":"string"},"tenant":{"type":"string"},"language":{"type":"string"},"phoneNumber":{"type":"string","nullable":true,"description":"Format: E.164 (e.g., +1234567890)"},"startDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD)"},"endDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD). Null when the user has no scheduled deactivation."},"isActive":{"type":"boolean"},"insertedAt":{"type":"string"},"tags":{"type":"array","items":{"type":"object","properties":{"tagId":{"type":"string","format":"uuid"},"label":{"type":"string"}},"required":["tagId","label"],"additionalProperties":false}}},"required":["userId","email","firstName","lastName","team","tenant","language","phoneNumber","startDate","endDate","isActive","insertedAt","tags"],"additionalProperties":false}}}}}},"delete":{"summary":"Deactivate or permanently delete user","tags":["Users"],"description":"Deactivates a user by default — sets the end of the active period to today, but keeps the user record intact. Deactivated users can be reactivated via `PATCH /v1/users/{userId}` with `{ \"isActive\": true }` or `{ \"endDate\": null }`. Note: re-creating a deactivated user via `POST /v1/users` returns 409 — use PATCH instead. Use `?permanent=true` to permanently delete the user and all associated data (tag assignments, course assignments, course progress, certificates, roles). Permanent deletion cannot be undone.","parameters":[{"schema":{"type":"boolean","default":false},"in":"query","name":"permanent","required":false,"description":"When `true`, hard-deletes the user and cascades to all dependent records (tag assignments, course assignments, course progress, certificates, roles). Cannot be undone. When `false` (default), only deactivates the user — reversible via `PATCH /v1/users/{userId}`."},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"userId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response"}}}},"/v1/languages/":{"get":{"summary":"List languages","tags":["Languages"],"description":"Retrieve available languages for the tenant","security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"languageCode":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["languageCode","name"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}}}}},"/v1/tags/":{"get":{"summary":"List tags","tags":["Tags"],"description":"Retrieve all tags","security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"tagId":{"type":"string","format":"uuid"},"label":{"type":"string"},"insertedAt":{"type":"string"}},"required":["tagId","label","insertedAt"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}}}},"post":{"summary":"Create tag","tags":["Tags"],"description":"Create a tag (201), or return the existing tag whose name matches case-insensitively (200)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string","minLength":1}},"required":["label"],"additionalProperties":false}}}},"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"tagId":{"type":"string","format":"uuid"}},"required":["tagId"],"additionalProperties":false}}}},"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"tagId":{"type":"string","format":"uuid"}},"required":["tagId"],"additionalProperties":false}}}}}}},"/v1/tags/{tagId}":{"patch":{"summary":"Update tag","tags":["Tags"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string","minLength":1}},"required":["label"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"tagId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"tagId":{"type":"string","format":"uuid"},"label":{"type":"string"},"insertedAt":{"type":"string"}},"required":["tagId","label","insertedAt"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{}},"required":["error","message"],"additionalProperties":false}}}}}}},"/v1/teams/":{"get":{"summary":"List teams","tags":["Teams"],"description":"Retrieve a paginated list of teams (hierarchical ltree path + label).","parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"team":{"type":"string","description":"Hierarchical team path (ltree), e.g. \"sales.eu\""},"label":{"type":"string"},"insertedAt":{"type":"string","nullable":true}},"required":["team","label","insertedAt"],"additionalProperties":false}},"pagination":{"type":"object","properties":{"page":{"type":"number"},"pageSize":{"type":"number"},"total":{"type":"number"},"totalPages":{"type":"number"}},"required":["page","pageSize","total","totalPages"],"additionalProperties":false}},"required":["data","pagination"],"additionalProperties":false}}}}}}},"/v1/courses/":{"get":{"summary":"List published courses","tags":["Courses"],"description":"Retrieve a paginated list of published courses with title and description from the master language. Only published courses are returned.","parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"courseId":{"type":"string","format":"uuid"},"insertedAt":{"type":"string"},"title":{"type":"string","nullable":true},"description":{"type":"string","nullable":true}},"required":["courseId","insertedAt","title","description"],"additionalProperties":false}},"pagination":{"type":"object","properties":{"page":{"type":"number"},"pageSize":{"type":"number"},"total":{"type":"number"},"totalPages":{"type":"number"}},"required":["page","pageSize","total","totalPages"],"additionalProperties":false}},"required":["data","pagination"],"additionalProperties":false}}}}}}},"/v1/courses/{courseId}":{"get":{"summary":"Get published course by ID","tags":["Courses"],"description":"Retrieve a single published course with its lessons and modules. Localized content in lesson and module data is stripped to only the master language. Returns 404 if the course does not exist or is not published.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"courseId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"courseId":{"type":"string","format":"uuid"},"insertedAt":{"type":"string"},"title":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"lessons":{"type":"array","items":{"type":"object","properties":{"lessonId":{"type":"string","format":"uuid"},"sortIndex":{"type":"number","nullable":true},"data":{},"modules":{"type":"array","items":{"type":"object","properties":{"moduleId":{"type":"string","format":"uuid"},"moduleType":{"type":"string"},"sortIndex":{"type":"number","nullable":true},"data":{}},"required":["moduleId","moduleType","sortIndex"],"additionalProperties":false}}},"required":["lessonId","sortIndex","modules"],"additionalProperties":false}}},"required":["courseId","insertedAt","title","description","lessons"],"additionalProperties":false}}}}}}},"/v1/courses/{courseId}/assignments":{"get":{"summary":"List course assignments","tags":["Course Assignments"],"description":"Retrieve a paginated list of user assignments for a course","parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","format":"uuid"},"in":"query","name":"userId","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"courseId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"assignmentId":{"type":"string","format":"uuid"},"userId":{"type":"string","format":"uuid"},"courseId":{"type":"string","format":"uuid"},"startDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD)"},"dueDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD)"},"isFinished":{"type":"boolean"},"finishedAt":{"type":"string","nullable":true},"individualAssignment":{"type":"boolean"},"insertedAt":{"type":"string","nullable":true}},"required":["assignmentId","userId","courseId","startDate","dueDate","isFinished","finishedAt","individualAssignment","insertedAt"],"additionalProperties":false}},"pagination":{"type":"object","properties":{"page":{"type":"number"},"pageSize":{"type":"number"},"total":{"type":"number"},"totalPages":{"type":"number"}},"required":["page","pageSize","total","totalPages"],"additionalProperties":false}},"required":["data","pagination"],"additionalProperties":false}}}}}},"post":{"summary":"Assign course to users","tags":["Course Assignments"],"description":"Enroll one or more users into a course","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"description":"User IDs to assign the course to"},"durationInDays":{"type":"integer","minimum":1,"nullable":true,"default":null,"description":"Number of days until due date (null = no due date)"},"individual":{"type":"boolean","default":false,"description":"Whether this is an individual assignment"},"reassign":{"type":"boolean","default":false,"description":"Whether to reassign if user already finished the course"}},"required":["userIds"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"courseId","required":true}],"security":[{"apiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false}}}}}}},"/v1/courses/{courseId}/assignments/{assignmentId}":{"get":{"summary":"Get assignment by ID","tags":["Course Assignments"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"courseId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"assignmentId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"assignmentId":{"type":"string","format":"uuid"},"userId":{"type":"string","format":"uuid"},"courseId":{"type":"string","format":"uuid"},"startDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD)"},"dueDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD)"},"isFinished":{"type":"boolean"},"finishedAt":{"type":"string","nullable":true},"individualAssignment":{"type":"boolean"},"insertedAt":{"type":"string","nullable":true}},"required":["assignmentId","userId","courseId","startDate","dueDate","isFinished","finishedAt","individualAssignment","insertedAt"],"additionalProperties":false}}}}}},"patch":{"summary":"Update assignment","tags":["Course Assignments"],"description":"Update the start date or due date of an active (not yet completed) assignment. Returns 409 if the assignment is already finished.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"startDate":{"type":"string","description":"Format: ISO 8601 date (YYYY-MM-DD)"},"dueDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD)"}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"courseId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"assignmentId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"assignmentId":{"type":"string","format":"uuid"},"userId":{"type":"string","format":"uuid"},"courseId":{"type":"string","format":"uuid"},"startDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD)"},"dueDate":{"type":"string","nullable":true,"description":"Format: ISO 8601 date (YYYY-MM-DD)"},"isFinished":{"type":"boolean"},"finishedAt":{"type":"string","nullable":true},"individualAssignment":{"type":"boolean"},"insertedAt":{"type":"string","nullable":true}},"required":["assignmentId","userId","courseId","startDate","dueDate","isFinished","finishedAt","individualAssignment","insertedAt"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete assignment","tags":["Course Assignments"],"description":"Remove an active (not yet completed) course assignment. Returns 409 if the assignment is already finished. Completed assignments cannot be deleted to preserve certificate and audit data.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"courseId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"assignmentId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response"}}}},"/v1/courses/{courseId}/team-assignments":{"get":{"summary":"List course team assignments","tags":["Course Assignments"],"description":"Retrieve a paginated list of the teams this course is directly assigned to, including the tag groups each assignment is scoped by and whether it reaches every team member (allTeamUsers).","parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"courseId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"team":{"type":"string"},"courseId":{"type":"string","format":"uuid"},"tagGroups":{"type":"array","items":{"type":"array","items":{"type":"object","properties":{"tagId":{"type":"string","format":"uuid"},"label":{"type":"string"}},"required":["tagId","label"],"additionalProperties":false}},"description":"The tag groups the course is assigned with"},"allTeamUsers":{"type":"boolean","description":"Whether the course is assigned to every team member regardless of tags, in which case tagGroups is empty. Remove this binding with DELETE ?allTeamUsers=true."},"durationInDays":{"type":"integer","nullable":true}},"required":["team","courseId","tagGroups","allTeamUsers","durationInDays"],"additionalProperties":false}},"pagination":{"type":"object","properties":{"page":{"type":"number"},"pageSize":{"type":"number"},"total":{"type":"number"},"totalPages":{"type":"number"}},"required":["page","pageSize","total","totalPages"],"additionalProperties":false}},"required":["data","pagination"],"additionalProperties":false}}}}}},"post":{"summary":"Assign course to teams","tags":["Course Assignments"],"description":"Enroll one or more teams into a course, optionally scoped by tag groups. Each tag group is an AND-set of tags (a learner must hold every tag in it); groups OR together. Without tag groups the course is assigned to every team member.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teams":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Team paths (ltree) to assign the course to"},"tagGroups":{"type":"array","items":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1},"default":[],"description":"Groups of tag (role) IDs scoping the team assignment. Each inner array is an AND-set — a learner must hold every tag in it — and the groups OR together. An omitted or empty list assigns every team member (listed with allTeamUsers: true)."},"durationInDays":{"type":"integer","minimum":1,"nullable":true,"default":null,"description":"Number of days until due date (null = no due date)"},"reassign":{"type":"boolean","default":false,"description":"Whether to re-enroll learners who already finished the course"},"cascadeToSubteams":{"type":"boolean","default":false,"description":"Whether to also apply the assignment to every subteam of each given team"}},"required":["teams"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"courseId","required":true}],"security":[{"apiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false}}}}}},"delete":{"summary":"Unassign course from a team","tags":["Course Assignments"],"description":"Remove a team's tag-group binding(s) from a course, or its binding to every team member with allTeamUsers=true. Set cascadeToSubteams to also remove the assignment from every subteam.","parameters":[{"schema":{"type":"string"},"in":"query","name":"team","required":true,"description":"Team path (ltree) to unassign the course from"},{"schema":{"type":"array","items":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1},"minItems":1},"in":"query","name":"tagGroups","required":false,"description":"Tag (role) groups identifying which bindings to remove. Repeat the parameter once per group and comma-separate the tag IDs within a group (e.g. ?tagGroups=<id1>,<id2>&tagGroups=<id3>). Each inner group is an AND-set — a learner must hold every tag in it — and the groups OR together. Pass either tagGroups or allTeamUsers=true."},{"schema":{"type":"boolean","default":false},"in":"query","name":"allTeamUsers","required":false,"description":"Remove the binding that assigns every team member regardless of tags (listed with allTeamUsers: true). Pass either tagGroups or allTeamUsers=true."},{"schema":{"type":"boolean","default":false},"in":"query","name":"cascadeToSubteams","required":false,"description":"Whether to also remove the assignment from every subteam"},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"courseId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response"}}}},"/v1/assessments/":{"get":{"summary":"List published assessments","tags":["Assessments"],"description":"Retrieve a paginated list of published assessments (exams) with title and description from the master language.","parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"assessmentId":{"type":"string","format":"uuid"},"insertedAt":{"type":"string"},"title":{"type":"string","nullable":true},"description":{"type":"string","nullable":true}},"required":["assessmentId","insertedAt","title","description"],"additionalProperties":false}},"pagination":{"type":"object","properties":{"page":{"type":"number"},"pageSize":{"type":"number"},"total":{"type":"number"},"totalPages":{"type":"number"}},"required":["page","pageSize","total","totalPages"],"additionalProperties":false}},"required":["data","pagination"],"additionalProperties":false}}}}}}},"/v1/assessments/{assessmentId}":{"get":{"summary":"Get published assessment by ID","tags":["Assessments"],"description":"Retrieve a single published assessment with its lessons and question modules. Localized content is stripped to only the master language. Use the module IDs to interpret per-question results. Returns 404 if the assessment does not exist or is not published.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"assessmentId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"assessmentId":{"type":"string","format":"uuid"},"insertedAt":{"type":"string"},"title":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"lessons":{"type":"array","items":{"type":"object","properties":{"lessonId":{"type":"string","format":"uuid"},"sortIndex":{"type":"number","nullable":true},"data":{},"modules":{"type":"array","items":{"type":"object","properties":{"moduleId":{"type":"string","format":"uuid"},"moduleType":{"type":"string"},"sortIndex":{"type":"number","nullable":true},"data":{}},"required":["moduleId","moduleType","sortIndex"],"additionalProperties":false}}},"required":["lessonId","sortIndex","modules"],"additionalProperties":false}}},"required":["assessmentId","insertedAt","title","description","lessons"],"additionalProperties":false}}}}}}},"/v1/assessments/{assessmentId}/scheduled-assessments":{"get":{"summary":"List schedulings of an assessment","tags":["Scheduled Assessments"],"description":"Retrieve a paginated list of the schedulings of this assessment, including the teams, tag groups, and number of assigned users of each scheduling.","parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"boolean","default":false},"in":"query","name":"activeOnly","required":false,"description":"Only return schedulings whose starting window is still open"},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"assessmentId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"scheduledAssessmentId":{"type":"string","format":"uuid"},"assessmentId":{"type":"string","format":"uuid"},"startingWindowBegin":{"type":"string"},"startingWindowEnd":{"type":"string","nullable":true,"description":"End of the starting window; null means the window stays open indefinitely"},"successThreshold":{"type":"number","description":"Fraction of points required to pass (0 < x <= 1)"},"durationInMinutes":{"type":"integer","nullable":true,"description":"Time limit once a user begins the assessment"},"isSelfPaced":{"type":"boolean"},"isClosedAfterDueDate":{"type":"boolean"},"autoRescheduleDelayDays":{"type":"integer","nullable":true},"maxAttempts":{"type":"integer","nullable":true},"originalScheduledAssessmentId":{"type":"string","format":"uuid","nullable":true,"description":"Set on auto-rescheduled retakes; points to the first scheduling in the chain"},"learningPathId":{"type":"string","format":"uuid","nullable":true,"description":"Set when this scheduling was auto-created by a learning path"},"insertedAt":{"type":"string"},"teams":{"type":"array","items":{"type":"string"},"description":"Team paths (ltree) the assessment is scheduled for"},"tagGroups":{"type":"array","items":{"type":"array","items":{"type":"object","properties":{"tagId":{"type":"string","format":"uuid"},"label":{"type":"string"}},"required":["tagId","label"],"additionalProperties":false}},"description":"Tag groups scoping the team assignment. Each inner array is an AND-set; the groups OR together. Empty when the teams reach every member (see allTeamUsers), and when they reach nobody because their last tag was deleted."},"allTeamUsers":{"type":"boolean","description":"Whether the teams reach every member regardless of tags."},"assignedUsersCount":{"type":"integer"}},"required":["scheduledAssessmentId","assessmentId","startingWindowBegin","startingWindowEnd","successThreshold","durationInMinutes","isSelfPaced","isClosedAfterDueDate","autoRescheduleDelayDays","maxAttempts","originalScheduledAssessmentId","learningPathId","insertedAt","teams","tagGroups","allTeamUsers","assignedUsersCount"],"additionalProperties":false}},"pagination":{"type":"object","properties":{"page":{"type":"number"},"pageSize":{"type":"number"},"total":{"type":"number"},"totalPages":{"type":"number"}},"required":["page","pageSize","total","totalPages"],"additionalProperties":false}},"required":["data","pagination"],"additionalProperties":false}}}}}},"post":{"summary":"Schedule an assessment","tags":["Scheduled Assessments"],"description":"Schedule an assessment for teams and/or individual users. Team assignments can be scoped by tag groups (each group is an AND-set of tags; groups OR together). Assigned users receive a push notification unless the assessment is self-paced.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teams":{"type":"array","items":{"type":"string"},"default":[],"description":"Team paths (ltree) to schedule the assessment for"},"tagGroups":{"type":"array","items":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1},"description":"Groups of tag (role) IDs scoping the team assignment. Each inner array is an AND-set — a learner must hold every tag in it — and the groups OR together. Only applies to users assigned via teams. An empty list assigns every team member.","default":[]},"userIds":{"type":"array","items":{"type":"string","format":"uuid"},"default":[],"description":"Users to assign individually"},"startingWindowBegin":{"type":"string","format":"date-time","description":"Format: ISO 8601 date-time"},"startingWindowEnd":{"type":"string","format":"date-time","nullable":true,"description":"Format: ISO 8601 date-time. Null keeps the window open indefinitely (self-paced only)."},"successThreshold":{"type":"number","exclusiveMinimum":true,"minimum":0,"maximum":1,"default":0.75,"description":"Fraction of points required to pass"},"durationInMinutes":{"type":"integer","minimum":1,"description":"Time limit once a user begins the assessment"},"isSelfPaced":{"type":"boolean","default":true},"isClosedAfterDueDate":{"type":"boolean","default":false},"autoRescheduleDelayDays":{"type":"integer","minimum":1,"nullable":true,"description":"Automatically reschedule failed users after this many days"},"maxAttempts":{"type":"integer","minimum":1,"nullable":true}},"required":["startingWindowBegin"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"assessmentId","required":true}],"security":[{"apiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"scheduledAssessmentId":{"type":"string","format":"uuid"},"assignedUsersCount":{"type":"integer"}},"required":["scheduledAssessmentId","assignedUsersCount"],"additionalProperties":false}}}}}}},"/v1/scheduled-assessments/{scheduledAssessmentId}":{"get":{"summary":"Get scheduled assessment by ID","tags":["Scheduled Assessments"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"scheduledAssessmentId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"scheduledAssessmentId":{"type":"string","format":"uuid"},"assessmentId":{"type":"string","format":"uuid"},"startingWindowBegin":{"type":"string"},"startingWindowEnd":{"type":"string","nullable":true,"description":"End of the starting window; null means the window stays open indefinitely"},"successThreshold":{"type":"number","description":"Fraction of points required to pass (0 < x <= 1)"},"durationInMinutes":{"type":"integer","nullable":true,"description":"Time limit once a user begins the assessment"},"isSelfPaced":{"type":"boolean"},"isClosedAfterDueDate":{"type":"boolean"},"autoRescheduleDelayDays":{"type":"integer","nullable":true},"maxAttempts":{"type":"integer","nullable":true},"originalScheduledAssessmentId":{"type":"string","format":"uuid","nullable":true,"description":"Set on auto-rescheduled retakes; points to the first scheduling in the chain"},"learningPathId":{"type":"string","format":"uuid","nullable":true,"description":"Set when this scheduling was auto-created by a learning path"},"insertedAt":{"type":"string"},"teams":{"type":"array","items":{"type":"string"},"description":"Team paths (ltree) the assessment is scheduled for"},"tagGroups":{"type":"array","items":{"type":"array","items":{"type":"object","properties":{"tagId":{"type":"string","format":"uuid"},"label":{"type":"string"}},"required":["tagId","label"],"additionalProperties":false}},"description":"Tag groups scoping the team assignment. Each inner array is an AND-set; the groups OR together. Empty when the teams reach every member (see allTeamUsers), and when they reach nobody because their last tag was deleted."},"allTeamUsers":{"type":"boolean","description":"Whether the teams reach every member regardless of tags."},"assignedUsersCount":{"type":"integer"}},"required":["scheduledAssessmentId","assessmentId","startingWindowBegin","startingWindowEnd","successThreshold","durationInMinutes","isSelfPaced","isClosedAfterDueDate","autoRescheduleDelayDays","maxAttempts","originalScheduledAssessmentId","learningPathId","insertedAt","teams","tagGroups","allTeamUsers","assignedUsersCount"],"additionalProperties":false}}}}}},"patch":{"summary":"Update a scheduled assessment","tags":["Scheduled Assessments"],"description":"Update the scope (teams, tag groups, individual users) or metadata of a scheduling. Omitted recipient arrays keep the current scope; an explicit empty array clears it. For startingWindowEnd, autoRescheduleDelayDays, and maxAttempts an omitted key keeps the current value while an explicit null clears it. Finished attempts are never affected.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teams":{"type":"array","items":{"type":"string"}},"tagGroups":{"type":"array","items":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1},"description":"Groups of tag (role) IDs scoping the team assignment. Each inner array is an AND-set and the groups OR together. Omitted keeps the current tag groups; an empty list assigns every team member."},"userIds":{"type":"array","items":{"type":"string","format":"uuid"}},"startingWindowBegin":{"type":"string","format":"date-time"},"startingWindowEnd":{"type":"string","format":"date-time","nullable":true},"isSelfPaced":{"type":"boolean"},"isClosedAfterDueDate":{"type":"boolean"},"autoRescheduleDelayDays":{"type":"integer","minimum":1,"nullable":true},"maxAttempts":{"type":"integer","minimum":1,"nullable":true}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"scheduledAssessmentId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"scheduledAssessmentId":{"type":"string","format":"uuid"},"assignedUsersCount":{"type":"integer"}},"required":["scheduledAssessmentId","assignedUsersCount"],"additionalProperties":false}}}}}}},"/v1/scheduled-assessments/{scheduledAssessmentId}/assignments":{"get":{"summary":"List assigned users of a scheduled assessment","tags":["Scheduled Assessments"],"description":"Retrieve a paginated list of the users assigned to this scheduling. Finished rows double as results: they carry the score, maximum points, and pass/fail outcome.","parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","format":"uuid"},"in":"query","name":"userId","required":false},{"schema":{"type":"boolean"},"in":"query","name":"finished","required":false,"description":"Filter by completion: true returns only finished attempts, false only open assignments"},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"scheduledAssessmentId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"scheduledAssessmentId":{"type":"string","format":"uuid"},"userId":{"type":"string","format":"uuid"},"individualAssignment":{"type":"boolean"},"insertedAt":{"type":"string"},"finishedAt":{"type":"string","nullable":true},"scoredPoints":{"type":"integer","nullable":true},"maxPoints":{"type":"integer","nullable":true},"isPassed":{"type":"boolean","nullable":true},"successThreshold":{"type":"number"}},"required":["scheduledAssessmentId","userId","individualAssignment","insertedAt","finishedAt","scoredPoints","maxPoints","isPassed","successThreshold"],"additionalProperties":false}},"pagination":{"type":"object","properties":{"page":{"type":"number"},"pageSize":{"type":"number"},"total":{"type":"number"},"totalPages":{"type":"number"}},"required":["page","pageSize","total","totalPages"],"additionalProperties":false}},"required":["data","pagination"],"additionalProperties":false}}}}}}},"/v1/scheduled-assessments/{scheduledAssessmentId}/assignments/{userId}":{"delete":{"summary":"Unassign a user from a scheduled assessment","tags":["Scheduled Assessments"],"description":"Remove an open (not yet finished) assignment of this user. Finished attempts are preserved as results and cannot be removed. If the scheduling was created by a learning path, the user is also removed from that learning path.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"scheduledAssessmentId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"userId","required":true}],"security":[{"apiKey":[]}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{}}}}}}},"/v1/scheduled-assessments/{scheduledAssessmentId}/results/{userId}/responses":{"get":{"summary":"Get a user result with per-question responses","tags":["Assessment Results"],"description":"Retrieve the per-question answers of a user for this scheduling: which question (module) was answered, whether it was correct, and the scored points. The question text is resolved from the master language when the module still exists.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"scheduledAssessmentId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"userId","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"scheduledAssessmentId":{"type":"string","format":"uuid"},"userId":{"type":"string","format":"uuid"},"finishedAt":{"type":"string","nullable":true},"scoredPoints":{"type":"integer","nullable":true},"maxPoints":{"type":"integer","nullable":true},"isPassed":{"type":"boolean","nullable":true},"responses":{"type":"array","items":{"type":"object","properties":{"responseId":{"type":"string","format":"uuid"},"moduleId":{"type":"string","format":"uuid","nullable":true,"description":"The question module; null if the module was deleted"},"moduleType":{"type":"string"},"question":{"type":"string","nullable":true,"description":"Question text in the master language, when available"},"isCorrect":{"type":"boolean"},"scoredPoints":{"type":"integer"},"maxPoints":{"type":"integer"},"answer":{"description":"The learner answer payload, localized content stripped to the master language"},"insertedAt":{"type":"string"}},"required":["responseId","moduleId","moduleType","question","isCorrect","scoredPoints","maxPoints","insertedAt"],"additionalProperties":false}}},"required":["scheduledAssessmentId","userId","finishedAt","scoredPoints","maxPoints","isPassed","responses"],"additionalProperties":false}}}}}}},"/v1/assessment-results/":{"get":{"summary":"List finished assessment results","tags":["Assessment Results"],"description":"Tenant-wide feed of finished assessment attempts with score and pass/fail outcome, ordered by finishedAt ascending. Poll incrementally by passing the last seen finishedAt as finishedAfter. Use the per-question responses endpoint of a scheduled assessment for answer details.","parameters":[{"schema":{"type":"integer","minimum":1,"default":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","format":"date-time"},"in":"query","name":"finishedAfter","required":false,"description":"Only results finished strictly after this ISO 8601 date-time — pass the last seen finishedAt to poll incrementally"},{"schema":{"type":"string","format":"date-time"},"in":"query","name":"finishedBefore","required":false},{"schema":{"type":"string","format":"uuid"},"in":"query","name":"assessmentId","required":false},{"schema":{"type":"string","format":"uuid"},"in":"query","name":"scheduledAssessmentId","required":false},{"schema":{"type":"string","format":"uuid"},"in":"query","name":"userId","required":false},{"schema":{"type":"boolean"},"in":"query","name":"isPassed","required":false,"description":"Filter by outcome"}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"scheduledAssessmentId":{"type":"string","format":"uuid"},"assessmentId":{"type":"string","format":"uuid"},"originalScheduledAssessmentId":{"type":"string","format":"uuid","nullable":true,"description":"Set on auto-rescheduled retakes; points to the first scheduling in the chain"},"userId":{"type":"string","format":"uuid"},"finishedAt":{"type":"string"},"scoredPoints":{"type":"integer","nullable":true},"maxPoints":{"type":"integer","nullable":true},"isPassed":{"type":"boolean"},"successThreshold":{"type":"number","description":"Fraction of points that was required to pass (0 < x <= 1)"}},"required":["scheduledAssessmentId","assessmentId","originalScheduledAssessmentId","userId","finishedAt","scoredPoints","maxPoints","isPassed","successThreshold"],"additionalProperties":false}},"pagination":{"type":"object","properties":{"page":{"type":"number"},"pageSize":{"type":"number"},"total":{"type":"number"},"totalPages":{"type":"number"}},"required":["page","pageSize","total","totalPages"],"additionalProperties":false}},"required":["data","pagination"],"additionalProperties":false}}}}}}},"/scim/v2/ServiceProviderConfig":{"get":{"summary":"SCIM service provider configuration","tags":["SCIM"],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}}}}},"/scim/v2/ResourceTypes":{"get":{"summary":"SCIM resource types","tags":["SCIM"],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}}}}},"/scim/v2/ResourceTypes/{resourceTypeId}":{"get":{"summary":"Get a SCIM resource type","tags":["SCIM"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"resourceTypeId","required":true}],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}}}}},"/scim/v2/Schemas":{"get":{"summary":"SCIM schemas","tags":["SCIM"],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}}}}},"/scim/v2/Schemas/{schemaId}":{"get":{"summary":"Get a SCIM schema","tags":["SCIM"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"schemaId","required":true}],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}}}}},"/scim/v2/Users":{"get":{"operationId":"listScimUsers","summary":"List SCIM users","tags":["SCIM"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"query","name":"attributes","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"excludedAttributes","required":false},{"schema":{"type":"string"},"in":"query","name":"filter","required":false},{"schema":{"type":"integer","default":1},"in":"query","name":"startIndex","required":false},{"schema":{"type":"integer","default":100},"in":"query","name":"count","required":false}],"security":[{"bearerApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:ListResponse"]}},"totalResults":{"type":"integer","minimum":0},"startIndex":{"type":"integer","minimum":1},"itemsPerPage":{"type":"integer","minimum":0},"Resources":{"type":"array","items":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string"}},"id":{"type":"string","format":"uuid"}},"required":["schemas","id"],"additionalProperties":true}}},"required":["schemas","totalResults","startIndex","itemsPerPage","Resources"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}},"4XX":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}}}},"post":{"operationId":"createScimUser","summary":"Create SCIM user","tags":["SCIM"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string"},"minItems":1},"externalId":{"type":"string","minLength":1,"nullable":true},"userName":{"type":"string","minLength":1},"name":{"type":"object","properties":{"formatted":{"type":"string"},"familyName":{"type":"string"},"givenName":{"type":"string"}},"additionalProperties":true},"active":{"type":"boolean"},"emails":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","format":"email"},"primary":{"type":"boolean"},"type":{"type":"string"}},"required":["value"],"additionalProperties":true}},"phoneNumbers":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","minLength":1},"primary":{"type":"boolean"},"type":{"type":"string"}},"required":["value"],"additionalProperties":true}},"password":{"type":"string"},"urn:elephant:params:scim:schemas:extension:2.0:User":{"type":"object","properties":{"team":{"type":"string","minLength":1},"language":{"type":"string","minLength":1},"tags":{"type":"array","items":{"type":"string","minLength":1}}},"additionalProperties":false}},"required":["schemas","userName"],"additionalProperties":true}}}},"parameters":[{"schema":{"type":"string","minLength":1},"in":"query","name":"attributes","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"excludedAttributes","required":false}],"security":[{"bearerApiKey":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string"}},"id":{"type":"string","format":"uuid"}},"required":["schemas","id"],"additionalProperties":true}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}},"4XX":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}}}}},"/scim/v2/Users/{userId}":{"get":{"operationId":"getScimUser","summary":"Get SCIM user","tags":["SCIM"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"query","name":"attributes","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"excludedAttributes","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"userId","required":true}],"security":[{"bearerApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string"}},"id":{"type":"string","format":"uuid"}},"required":["schemas","id"],"additionalProperties":true}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}},"4XX":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}}}},"put":{"operationId":"replaceScimUser","summary":"Replace SCIM user","tags":["SCIM"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string"},"minItems":1},"externalId":{"type":"string","minLength":1,"nullable":true},"userName":{"type":"string","minLength":1},"name":{"type":"object","properties":{"formatted":{"type":"string"},"familyName":{"type":"string"},"givenName":{"type":"string"}},"additionalProperties":true},"active":{"type":"boolean"},"emails":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","format":"email"},"primary":{"type":"boolean"},"type":{"type":"string"}},"required":["value"],"additionalProperties":true}},"phoneNumbers":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","minLength":1},"primary":{"type":"boolean"},"type":{"type":"string"}},"required":["value"],"additionalProperties":true}},"password":{"type":"string"},"urn:elephant:params:scim:schemas:extension:2.0:User":{"type":"object","properties":{"team":{"type":"string","minLength":1},"language":{"type":"string","minLength":1},"tags":{"type":"array","items":{"type":"string","minLength":1}}},"additionalProperties":false}},"required":["schemas","userName"],"additionalProperties":true}}}},"parameters":[{"schema":{"type":"string","minLength":1},"in":"query","name":"attributes","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"excludedAttributes","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"userId","required":true}],"security":[{"bearerApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string"}},"id":{"type":"string","format":"uuid"}},"required":["schemas","id"],"additionalProperties":true}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}},"4XX":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}}}},"patch":{"operationId":"patchScimUser","summary":"Patch SCIM user","tags":["SCIM"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","minItems":1,"maxItems":1,"items":[{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:PatchOp"]}]},"Operations":{"type":"array","items":{"type":"object","properties":{"op":{"allOf":[{"type":"string"},{"type":"string","enum":["add","replace","remove"]}]},"path":{"type":"string"},"value":{}},"required":["op"],"additionalProperties":true},"minItems":1}},"required":["schemas","Operations"],"additionalProperties":true}}}},"parameters":[{"schema":{"type":"string","minLength":1},"in":"query","name":"attributes","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"excludedAttributes","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"userId","required":true}],"security":[{"bearerApiKey":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string"}},"id":{"type":"string","format":"uuid"}},"required":["schemas","id"],"additionalProperties":true}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}},"4XX":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}}}},"delete":{"operationId":"deleteScimUser","summary":"Delete SCIM user","tags":["SCIM"],"description":"Permanently deletes the SCIM user resource.","parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"userId","required":true}],"security":[{"bearerApiKey":[]}],"responses":{"204":{"description":"No Content","content":{"application/json":{"schema":{"enum":["null"],"nullable":true,"description":"No Content"}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}},"4XX":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string","enum":["urn:ietf:params:scim:api:messages:2.0:Error"]}},"status":{"type":"string"},"scimType":{"type":"string"},"detail":{"type":"string"}},"required":["schemas","status","detail"],"additionalProperties":false}}}}}}},"/saml/federation-metadata":{"get":{"summary":"SAML federation metadata","tags":["SAML"],"description":"Returns the SAML service-provider metadata used to configure an identity provider.","security":[],"responses":{"200":{"description":"Default Response","content":{"application/samlmetadata+xml":{"schema":{"type":"string"}}}}}}}},"security":[{"apiKey":[]},{"bearerApiKey":[]}]}