{
  "openapi": "3.0.1",
  "info": {
    "title": "Cognassist API",
    "description": "\n# Introduction\nThe Cognassist API is a RESTful API allowing third parties to communicate with our services programmatically. Our API is designed to provide seamless and\nefficient access to our platform's resources, enabling developers to integrate applications and services that leverage our data and functionality.\n# Authentication\nThe Cognassist API is secured via OAuth2 - an open protocol to allow secure and standardised authorisation in a simple and standard method from web, mobile and desktop applications. \nOAuth2 simplifies the development process for client applications by providing a standardised and secure method for accessing our API.\n",
    "version": "1.0",
    "x-logo": {
      "url": "https://assets.cognassist.com/email/logo.svg",
      "altText": "Cognassist"
    }
  },
  "paths": {
    "/v1/auth": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Get an auth token.",
        "requestBody": {
          "description": "Specify the client id and secret",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginCommand"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoginResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CognassistValidationProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests."
          }
        }
      }
    },
    "/v1/learners/{learnerId}/assessment": {
      "get": {
        "tags": [
          "LearnerAssessments"
        ],
        "summary": "Get details of default learner assessment for a given learner.",
        "parameters": [
          {
            "name": "learnerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LearnerAssessmentGetResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/learners/{learnerId}/assessment/url": {
      "get": {
        "tags": [
          "LearnerAssessments"
        ],
        "summary": "Get the URL of an assessment for a given learner.",
        "description": "Please note that this URL may change over time (for example, due to a new assessment invitation email, or an assessment restart) and, therefore, should not be stored.",
        "parameters": [
          {
            "name": "learnerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LearnerAssessmentUrlGetResult"
                }
              }
            }
          },
          "400": {
            "description": "Returned if the learner has already completed an assessment."
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/learners/{learnerId}/assessment/invite": {
      "post": {
        "tags": [
          "LearnerAssessments"
        ],
        "summary": "Send an invitation to the learner for the default assessment.",
        "description": "<strong>\r\n  <br>Users cannot send out assessment invitations within three days of each other to a learner.\r\n            This is to stop users from spamming their learners with emails and potentially blacklisting Cognassist.\r\n            The invitation can be sent from the Cognassist platform by editing the individual learner and checking the email option.\r\n</strong>",
        "parameters": [
          {
            "name": "learnerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Accepted."
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/learners/{learnerId}/assessment/report": {
      "post": {
        "tags": [
          "LearnerAssessments"
        ],
        "summary": "Request that the assessment report for a learner is generated.",
        "description": "<strong>\r\n  <br>NOTE: You must subscribe to the \"Assessment Report Created\" webhook event in order to receive the assessment files.\r\n</strong>\r\n<strong>\r\n  <br>Subscribing to the \"Assessment Report Request Failed\" webhook event will ensure you are notified of any failed requests.\r\n</strong>",
        "parameters": [
          {
            "name": "learnerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LearnerAssessmentReportCreateResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/learnerexports": {
      "post": {
        "tags": [
          "LearnerExports"
        ],
        "summary": "Request that a learner export is generated.",
        "description": "<strong>\r\n  <br>NOTE: You must subscribe to the \"Learner Export Completed\" webhook event in order to receive the export file.\r\n</strong>\r\n<strong>\r\n  <br>Subscribing to the \"Learner Export Failed\" webhook event will ensure you are notified of any failed requests.\r\n</strong>",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerExportCreateCommand"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerExportCreateCommand"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerExportCreateCommand"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerExportCreateCommand"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LearnerExportCreateResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/learners/{learnerId}": {
      "get": {
        "tags": [
          "Learners"
        ],
        "summary": "Get an existing learner.",
        "parameters": [
          {
            "name": "learnerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LearnerGetResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Learners"
        ],
        "summary": "Update an existing learner.",
        "parameters": [
          {
            "name": "learnerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerUpdateLearnerDetails"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerUpdateLearnerDetails"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerUpdateLearnerDetails"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerUpdateLearnerDetails"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Learners"
        ],
        "summary": "Delete an existing learner.",
        "parameters": [
          {
            "name": "learnerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/learners/{email}": {
      "get": {
        "tags": [
          "Learners"
        ],
        "summary": "Get an existing learner by email address.",
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LearnerGetByEmailResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/learners": {
      "get": {
        "tags": [
          "Learners"
        ],
        "summary": "Get a list of learners.",
        "parameters": [
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeOffProgrammeLearners",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LearnerListResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Learners"
        ],
        "summary": "Create a new learner.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerCreateCommand"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerCreateCommand"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerCreateCommand"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerCreateCommand"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LearnerCreateResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/learners/assessmentcompleted": {
      "get": {
        "tags": [
          "Learners"
        ],
        "summary": "Get the learners who completed their assessment on a given date.",
        "parameters": [
          {
            "name": "date",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssessmentCompletedLearnerListResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/learners/{learnerId}/secondarytutors": {
      "put": {
        "tags": [
          "Learners"
        ],
        "summary": "Replaces the whole secondary tutor set for a learner.",
        "description": "<br>The learner is identified by id and each secondary tutor by email. This replaces the entire set: any secondary tutor not included in the request is removed.\r\n<br>Send an empty list to clear all secondary tutors.\r\n<br>The request is all-or-nothing: if any email is unknown, does not belong to a tutor, or names the learner's primary tutor, the whole request is rejected and nothing is applied. The response names the offending emails.",
        "parameters": [
          {
            "name": "learnerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerSecondaryTutorsUpdateBody"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerSecondaryTutorsUpdateBody"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerSecondaryTutorsUpdateBody"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LearnerSecondaryTutorsUpdateBody"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "The learner's secondary-tutor set was replaced."
          },
          "400": {
            "description": "An email was unknown, did not belong to a tutor, or named the learner's primary tutor. Nothing was applied.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "The learner was not found."
          },
          "401": {
            "description": "Unauthorized."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/learners/{learnerId}/modules": {
      "get": {
        "tags": [
          "Learners"
        ],
        "summary": "Get the modules assigned to a learner.",
        "parameters": [
          {
            "name": "learnerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LearnerModuleListResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/learners/{learnerId}/supportrecords": {
      "get": {
        "tags": [
          "Learners"
        ],
        "summary": "Get the support records for a learner.",
        "parameters": [
          {
            "name": "learnerId",
            "in": "path",
            "description": "The unique identifier of the learner whose support records should be returned.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The number of records to return per page.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "description": "The 1-based page index to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "lastUpdatedSince",
            "in": "query",
            "description": "When supplied, only records with a `lastUpdatedDate` on or after this value are returned.\r\nFormat: YYYY-MM-DD.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LearnerSupportRecordListResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/learners/{learnerId}/supportrecords/{supportRecordId}": {
      "get": {
        "tags": [
          "Learners"
        ],
        "summary": "Get a single support record for a learner.",
        "parameters": [
          {
            "name": "learnerId",
            "in": "path",
            "description": "The unique identifier of the learner the support record belongs to.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "supportRecordId",
            "in": "path",
            "description": "The unique identifier of the support record to return.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LearnerSupportRecordGetResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/systemevents": {
      "get": {
        "tags": [
          "SystemEvents"
        ],
        "summary": "Return a list of System Events.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SystemEventListResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/tutors/{tutorEmail}/secondarytutor/learners": {
      "put": {
        "tags": [
          "Tutors"
        ],
        "summary": "Assigns a tutor as a secondary tutor to a batch of learners.",
        "description": "<br>The tutor is identified by email and each learner by id. A maximum of 50 learners may be included in a single request.\r\n<br>Re-assigning a tutor who is already a secondary tutor of a learner is idempotent (no change).\r\n<br>The request is all-or-nothing: if any learner id is unknown, or the tutor is already a batched learner's primary tutor, the whole request is rejected and nothing is applied. The response names the offending ids.\r\n<br>Restricted to Manager and Administrator callers.",
        "parameters": [
          {
            "name": "tutorEmail",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TutorSecondaryLearnersAssignBody"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TutorSecondaryLearnersAssignBody"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TutorSecondaryLearnersAssignBody"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TutorSecondaryLearnersAssignBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "The tutor was assigned as a secondary tutor to every learner in the batch."
          },
          "400": {
            "description": "A learner id was unknown, or the tutor is already a batched learner's primary tutor. Nothing was applied."
          },
          "403": {
            "description": "The caller is not a Manager or Administrator."
          },
          "401": {
            "description": "Unauthorized."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Tutors"
        ],
        "summary": "Replaces or removes a tutor as a secondary tutor across a batch of learners.",
        "description": "<br>The tutor is identified by email and each learner by id. A maximum of 50 learners may be included in a single request.\r\n<br>Omit `replacementTutorEmail` (or set it to null) to remove the tutor. When a replacement is supplied it is added only to learners who already have the tutor as a secondary tutor; learners who do not are left unchanged.\r\n<br>The request is all-or-nothing: if any learner id is unknown, the replacement tutor is unknown, or the tutor/replacement is already a batched learner's primary tutor, the whole request is rejected and nothing is applied. The response names the offending ids/emails.\r\n<br>Restricted to Manager and Administrator callers.",
        "parameters": [
          {
            "name": "tutorEmail",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TutorSecondaryLearnersReplaceBody"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TutorSecondaryLearnersReplaceBody"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TutorSecondaryLearnersReplaceBody"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TutorSecondaryLearnersReplaceBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "The tutor was replaced or removed as a secondary tutor across the batch."
          },
          "400": {
            "description": "A learner id or the replacement tutor was unknown, or the tutor/replacement is already a batched learner's primary tutor. Nothing was applied."
          },
          "403": {
            "description": "The caller is not a Manager or Administrator."
          },
          "401": {
            "description": "Unauthorized."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/webhooks": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Retrieve a list of configured webhooks.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookListResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized."
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Create a new webhook.",
        "description": "Each webhook can subscribe to multiple events.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookCreateCommand"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookCreateCommand"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookCreateCommand"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookCreateCommand"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookCreateResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/webhooks/{webhookId}": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Retrieve a webhook.",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookGetResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Update a webhook.",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookUpdateCommandDetails"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookUpdateCommandDetails"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookUpdateCommandDetails"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookUpdateCommandDetails"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Delete a webhook.",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/webhooks/{webhookId}/invocationlogs": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Retrieve the delivery history of a given webhook.",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvocationLogListResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    },
    "/v1/webhooks/{webhookId}/invocationlogs/{invocationLogId}": {
      "get": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Retrieve a given delivery history of a given webhook.",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "invocationLogId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvocationLogGetResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden."
          },
          "429": {
            "description": "Too Many Requests."
          }
        },
        "security": [
          {
            "Bearer": [
              null
            ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]": {
        "type": "string",
        "additionalProperties": false,
        "description": "Optional field. If omitted, the existing value is not changed. If supplied, the value is replaced (including null or empty).",
        "nullable": true
      },
      "AssessmentCompletedLearnerListLearner": {
        "type": "object",
        "properties": {
          "learnerId": {
            "type": "string",
            "format": "uuid"
          },
          "learnerUserId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "additionalProperties": false
      },
      "AssessmentCompletedLearnerListResult": {
        "type": "object",
        "properties": {
          "learners": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AssessmentCompletedLearnerListLearner"
            },
            "nullable": true
          },
          "totalRecords": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "CognassistValidationProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "title": "Problem Type",
            "type": "string",
            "description": "A URI reference [RFC3986] that identifies the problem type. This specification encourages that, when\r\ndereferenced, it provides human-readable documentation for the problem type\r\n(e.g., using HTML [W3C.REC-html5-20141028]). When this member is not present, its value is assumed to be\r\n\"about:blank\".",
            "nullable": true,
            "example": "https://tools.ietf.org/html/rfc7231#section-6.5.1"
          },
          "instance": {
            "title": "Specific occurrence",
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced.",
            "nullable": true,
            "example": "/exampleroute/66cca60c-19d4-469b-80eb-d8b63d44690c"
          },
          "status": {
            "title": "HTTP status code",
            "type": "integer",
            "description": "The HTTP status code([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32",
            "nullable": true,
            "example": 400
          },
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence\r\nof the problem, except for purposes of localization(e.g., using proactive content negotiation;\r\nsee[RFC7231], Section 3.4).",
            "nullable": true
          },
          "detail": {
            "title": "Problem explanation",
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem.",
            "nullable": true,
            "example": "One or more validation errors occurred."
          },
          "errors": {
            "title": "Validation errors",
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Gets the validation errors associated with this instance.",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "CoverageStatus": {
        "enum": [
          10,
          20,
          30
        ],
        "type": "integer",
        "description": "The coverage status of a learner support record.\n\n10 = Blank (No coverage data available.)\n\n20 = NeedsImprovement (Coverage needs improvement.)\n\n30 = MeetsStandard (Coverage meets the required standard.)",
        "format": "int32",
        "x-enumNames": [
          "Blank",
          "NeedsImprovement",
          "MeetsStandard"
        ],
        "x-enumDescriptions": [
          "No coverage data available.",
          "Coverage needs improvement.",
          "Coverage meets the required standard."
        ]
      },
      "Gender": {
        "enum": [
          "NotDisclosed",
          "Male",
          "Female"
        ],
        "type": "string",
        "description": "\n\nNotDisclosed\n\nMale\n\nFemale",
        "x-enumNames": [
          "NotDisclosed",
          "Male",
          "Female"
        ],
        "x-enumDescriptions": [
          "",
          "",
          ""
        ]
      },
      "InvocationLogGetResult": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier of the invocation log.",
            "format": "uuid",
            "example": "b7d3876a-de36-488b-b174-b79980b1cd30"
          },
          "systemEvent": {
            "$ref": "#/components/schemas/SystemEvent"
          },
          "status": {
            "$ref": "#/components/schemas/WebhookInvocationLogStatus"
          },
          "createdAtUtc": {
            "type": "string",
            "description": "The date and time of the webhook invocation.",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "InvocationLogListResult": {
        "type": "object",
        "properties": {
          "totalRecords": {
            "type": "integer",
            "description": "The total number of invocations for the given webhook.",
            "format": "int32",
            "example": 10001
          },
          "invocationLogs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InvocationLogListWebhookInvocationLog"
            },
            "description": "A collection of invocation logs ordered in descending date order.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "InvocationLogListWebhookInvocationLog": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier of the invocation log.",
            "format": "uuid",
            "example": "b7d3876a-de36-488b-b174-b79980b1cd30"
          },
          "systemEvent": {
            "$ref": "#/components/schemas/SystemEvent"
          },
          "status": {
            "$ref": "#/components/schemas/WebhookInvocationLogStatus"
          },
          "createdAtUtc": {
            "type": "string",
            "description": "The date and time of the webhook invocation.",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "LearnerAssessmentGetAssessmentResult": {
        "type": "object",
        "properties": {
          "domainId": {
            "$ref": "#/components/schemas/LearnerAssessmentGetDomain"
          },
          "domainResult": {
            "$ref": "#/components/schemas/LearnerAssessmentGetDomainResult"
          }
        },
        "additionalProperties": false
      },
      "LearnerAssessmentGetDomain": {
        "enum": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9
        ],
        "type": "integer",
        "description": "\n\n1 = VerbalMemory\n\n2 = Literacy\n\n3 = Numeracy\n\n4 = VisualInformationProcessingSpeed\n\n5 = NonVerbalMemory\n\n6 = ExecutiveFunction\n\n7 = VerbalReasoning\n\n8 = VisualPerception\n\n9 = ReadingDecoding",
        "format": "int32",
        "x-enumNames": [
          "VerbalMemory",
          "Literacy",
          "Numeracy",
          "VisualInformationProcessingSpeed",
          "NonVerbalMemory",
          "ExecutiveFunction",
          "VerbalReasoning",
          "VisualPerception",
          "ReadingDecoding"
        ],
        "x-enumDescriptions": [
          "",
          "",
          "",
          "",
          "",
          "",
          "",
          "",
          ""
        ]
      },
      "LearnerAssessmentGetDomainResult": {
        "enum": [
          1,
          2,
          3
        ],
        "type": "integer",
        "description": "\n\n1 = NotIdentified\n\n2 = Identified\n\n3 = InsufficientData (We did not capture enough data to provide this insight.)",
        "format": "int32",
        "x-enumNames": [
          "NotIdentified",
          "Identified",
          "InsufficientData"
        ],
        "x-enumDescriptions": [
          "",
          "",
          "We did not capture enough data to provide this insight."
        ]
      },
      "LearnerAssessmentGetLearnerStatus": {
        "enum": [
          10,
          20,
          30
        ],
        "type": "integer",
        "description": "\n\n10 = NoNeedIdentified (The learner has not been identified as benefitting from additional support.)\n\n20 = MonitorAndReview (The learner may require support in some domains despite the indexes being within the expected range.)\n\n30 = ConsiderNeedsAssessment (A needs assessment should be considered for this learner.)",
        "format": "int32",
        "x-enumNames": [
          "NoNeedIdentified",
          "MonitorAndReview",
          "ConsiderNeedsAssessment"
        ],
        "x-enumDescriptions": [
          "The learner has not been identified as benefitting from additional support.",
          "The learner may require support in some domains despite the indexes being within the expected range.",
          "A needs assessment should be considered for this learner."
        ]
      },
      "LearnerAssessmentGetResult": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/LearnerAssessmentStatus"
          },
          "learnerStatus": {
            "$ref": "#/components/schemas/LearnerAssessmentGetLearnerStatus"
          },
          "supportLikelihoodRating": {
            "$ref": "#/components/schemas/LearnerAssessmentGetSupportLikelihoodRating"
          },
          "dateAssessmentCompleted": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "assessmentResults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LearnerAssessmentGetAssessmentResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LearnerAssessmentGetSupportLikelihoodRating": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          -1
        ],
        "type": "integer",
        "description": "\n\n0 = None (We have not identified a need in relation to the domains that Cognassist measures for this learner.)\n\n1 = OneDomain (Medium likelihood that this learner requires additional support due to identifying in one domain only.)\n\n2 = TwoDomains (Medium likelihood that this learner requires additional support due to identifying in two domains but not to the level of a full Index.)\n\n3 = ThreePlusDomains (Medium to high likelihood that this learner requires support due to identifying in three or more domains but not to the level of a full Index.)\n\n4 = OneIndex (Medium to high likelihood that this learner requires support due to identifying in multiple domains that relate to the same Index.)\n\n5 = TwoIndexes (High likelihood that this learner requires additional support due to identifying in domains that relate to two of the three Indexes.)\n\n6 = ThreeIndexes (High likelihood that this learner requires additional support due to identifying in domains that relate to all three Indexes.)\n\n-1 = NotApplicable (At the time the assessment was taken, we did not record this measure.)",
        "format": "int32",
        "x-enumNames": [
          "None",
          "OneDomain",
          "TwoDomains",
          "ThreePlusDomains",
          "OneIndex",
          "TwoIndexes",
          "ThreeIndexes",
          "NotApplicable"
        ],
        "x-enumDescriptions": [
          "We have not identified a need in relation to the domains that Cognassist measures for this learner.",
          "Medium likelihood that this learner requires additional support due to identifying in one domain only.",
          "Medium likelihood that this learner requires additional support due to identifying in two domains but not to the level of a full Index.",
          "Medium to high likelihood that this learner requires support due to identifying in three or more domains but not to the level of a full Index.",
          "Medium to high likelihood that this learner requires support due to identifying in multiple domains that relate to the same Index.",
          "High likelihood that this learner requires additional support due to identifying in domains that relate to two of the three Indexes.",
          "High likelihood that this learner requires additional support due to identifying in domains that relate to all three Indexes.",
          "At the time the assessment was taken, we did not record this measure."
        ]
      },
      "LearnerAssessmentReportCreateResult": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string",
            "description": "The unique identifier of the webhook request.",
            "format": "uuid",
            "example": "7c76550a-725a-4eda-bd6f-1e54e856f129"
          }
        },
        "additionalProperties": false
      },
      "LearnerAssessmentStatus": {
        "enum": [
          10,
          20,
          30
        ],
        "type": "integer",
        "description": "\n\n10 = AwaitingResults\n\n20 = NotCompleted\n\n30 = Completed",
        "format": "int32",
        "x-enumNames": [
          "AwaitingResults",
          "NotCompleted",
          "Completed"
        ],
        "x-enumDescriptions": [
          "",
          "",
          ""
        ]
      },
      "LearnerAssessmentUrlGetResult": {
        "required": [
          "assessmentUrl"
        ],
        "type": "object",
        "properties": {
          "assessmentUrl": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "LearnerCreateCommand": {
        "required": [
          "clientReference",
          "dateOfBirth",
          "email",
          "firstName",
          "gender",
          "lastName",
          "postcode",
          "primaryTutorEmail"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "example": "Joe"
          },
          "lastName": {
            "type": "string",
            "example": "Bloggs"
          },
          "email": {
            "type": "string",
            "example": "joe.bloggs@learningprovider.com"
          },
          "mobileNumber": {
            "type": "string",
            "nullable": true,
            "example": "07865932456"
          },
          "primaryTutorEmail": {
            "type": "string",
            "example": "tutor.name@learningprovider.com"
          },
          "secondaryTutorEmails": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional. Emails of secondary tutors to assign at creation.",
            "nullable": true,
            "example": [
              "secondary.tutor@learningprovider.com"
            ]
          },
          "clientReference": {
            "type": "string",
            "description": "ID of the learner at the learning provider.",
            "example": "12345ABCDE"
          },
          "gender": {
            "type": "string",
            "description": "Available options: \"NotDisclosed\", \"Male\", \"Female\".",
            "example": "Male"
          },
          "postcode": {
            "type": "string",
            "example": "NE1 6BF"
          },
          "dateOfBirth": {
            "type": "string",
            "description": "Format: YYYY-MM-DD",
            "example": "2000-02-24"
          },
          "endDate": {
            "type": "string",
            "description": "Format: YYYY-MM-DD",
            "nullable": true,
            "example": "2030-06-30"
          },
          "programmeLevel": {
            "type": "integer",
            "description": "Available options: 1-7",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "learnerUniqueReference": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LearnerCreateResult": {
        "type": "object",
        "properties": {
          "learnerId": {
            "type": "string",
            "format": "uuid"
          },
          "learnerUserId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "additionalProperties": false
      },
      "LearnerExportCreateCommand": {
        "required": [
          "exportFromDate",
          "exportToDate"
        ],
        "type": "object",
        "properties": {
          "exportFromDate": {
            "type": "string",
            "description": "Format: YYYY-MM-DD",
            "example": "2026-04-01"
          },
          "exportToDate": {
            "type": "string",
            "description": "Format: YYYY-MM-DD",
            "example": "2026-04-30"
          }
        },
        "additionalProperties": false
      },
      "LearnerExportCreateResult": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string",
            "description": "The unique identifier of the webhook request.",
            "format": "uuid",
            "example": "7c76550a-725a-4eda-bd6f-1e54e856f129"
          }
        },
        "additionalProperties": false
      },
      "LearnerGetByEmailResult": {
        "type": "object",
        "properties": {
          "learnerId": {
            "type": "string",
            "format": "uuid"
          },
          "learnerUserId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "additionalProperties": false
      },
      "LearnerGetResult": {
        "required": [
          "clientReference",
          "dateOfBirth",
          "email",
          "firstName",
          "gender",
          "lastName",
          "postcode",
          "proactivelyProvidingSupport"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "example": "Joe"
          },
          "lastName": {
            "type": "string",
            "example": "Bloggs"
          },
          "email": {
            "type": "string",
            "example": "joe.bloggs@learningprovider.com"
          },
          "learnerUserId": {
            "type": "string",
            "format": "uuid"
          },
          "mobileNumber": {
            "type": "string",
            "nullable": true,
            "example": "07865932456"
          },
          "primaryTutorEmail": {
            "type": "string",
            "nullable": true,
            "example": "tutor.name@learningprovider.com"
          },
          "secondaryTutorEmails": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "example": [
              "secondary.tutor@learningprovider.com"
            ]
          },
          "clientReference": {
            "type": "string",
            "example": "12345ABCDE"
          },
          "gender": {
            "$ref": "#/components/schemas/Gender"
          },
          "postcode": {
            "type": "string",
            "example": "NE1 6BF"
          },
          "dateOfBirth": {
            "type": "string",
            "description": "Format: YYYY-MM-DD",
            "example": "2000-02-24"
          },
          "endDate": {
            "type": "string",
            "description": "Format: YYYY-MM-DD",
            "nullable": true,
            "example": "2030-06-30"
          },
          "programmeLevel": {
            "type": "integer",
            "description": "Available options: 1-7",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "learnerUniqueReference": {
            "type": "string",
            "nullable": true
          },
          "proactivelyProvidingSupport": {
            "type": "boolean",
            "description": "Whether the learner is currently being proactively provided support.",
            "example": true
          }
        },
        "additionalProperties": false
      },
      "LearnerListLearner": {
        "type": "object",
        "properties": {
          "learnerId": {
            "type": "string",
            "format": "uuid"
          },
          "learnerUserId": {
            "type": "string",
            "format": "uuid"
          },
          "firstName": {
            "type": "string",
            "nullable": true
          },
          "lastName": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "proactivelyProvidingSupport": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "LearnerListResult": {
        "type": "object",
        "properties": {
          "learners": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LearnerListLearner"
            },
            "nullable": true
          },
          "totalRecords": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "LearnerModuleListModule": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "url": {
            "type": "string",
            "nullable": true
          },
          "dateAssigned": {
            "type": "string",
            "nullable": true
          },
          "dateFirstAccessed": {
            "type": "string",
            "nullable": true
          },
          "dateLastAccessed": {
            "type": "string",
            "nullable": true
          },
          "dateFirstCompleted": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LearnerModuleListResult": {
        "type": "object",
        "properties": {
          "totalRecords": {
            "type": "integer",
            "description": "The total number of modules for the given learner.",
            "format": "int32",
            "example": 10001
          },
          "modules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LearnerModuleListModule"
            },
            "description": "A collection of modules ordered in ascending date assigned.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LearnerSecondaryTutorsUpdateBody": {
        "type": "object",
        "properties": {
          "secondaryTutorEmails": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Emails of the secondary tutors to assign. An empty list clears all secondary tutors.",
            "nullable": true,
            "example": [
              "secondary.tutor@learningprovider.com"
            ]
          }
        },
        "additionalProperties": false
      },
      "LearnerSupportRecordGetCoverageDto": {
        "type": "object",
        "properties": {
          "implementationCoverage": {
            "type": "boolean",
            "description": "Whether the implementation level of coverage is met."
          },
          "implementationCoverageReasoning": {
            "type": "string",
            "description": "The reasoning recorded against the implementation coverage decision.",
            "nullable": true
          },
          "impactCoverage": {
            "type": "boolean",
            "description": "Whether the impact level of coverage is met."
          },
          "impactCoverageReasoning": {
            "type": "string",
            "description": "The reasoning recorded against the impact coverage decision.",
            "nullable": true
          },
          "intentCoverage": {
            "type": "boolean",
            "description": "Whether the intent level of coverage is met. Null if not yet recorded.",
            "nullable": true
          },
          "intentCoverageReasoning": {
            "type": "string",
            "description": "The reasoning recorded against the intent coverage decision.",
            "nullable": true
          },
          "coachingNotes": {
            "type": "string",
            "description": "Free-text coaching notes captured against the support record.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LearnerSupportRecordGetCreatedByDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier of the user.",
            "format": "uuid",
            "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
          },
          "name": {
            "type": "string",
            "description": "The user's full name (first name followed by last name).",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "The user's email address.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LearnerSupportRecordGetResult": {
        "type": "object",
        "properties": {
          "supportType": {
            "$ref": "#/components/schemas/SupportType"
          },
          "coverageStatus": {
            "$ref": "#/components/schemas/CoverageStatus"
          },
          "startDate": {
            "type": "string",
            "description": "The date the support session started. Format: YYYY-MM-DD.",
            "nullable": true,
            "example": "2026-04-07"
          },
          "endDate": {
            "type": "string",
            "description": "The date the support session ended. Format: YYYY-MM-DD.",
            "nullable": true,
            "example": "2026-04-07"
          },
          "lastUpdatedDate": {
            "type": "string",
            "description": "The date the support record was last updated. Format: YYYY-MM-DD.",
            "nullable": true,
            "example": "2026-04-07"
          },
          "createdBy": {
            "$ref": "#/components/schemas/LearnerSupportRecordGetCreatedByDto"
          },
          "supportProvided": {
            "type": "string",
            "description": "Free-text notes describing the support delivered in the session.",
            "nullable": true
          },
          "supportReflections": {
            "type": "string",
            "description": "Free-text notes capturing the learner's reflections on the support delivered.",
            "nullable": true
          },
          "supportSessionType": {
            "$ref": "#/components/schemas/SupportSessionType"
          },
          "durationOfSupport": {
            "$ref": "#/components/schemas/SupportRecordMeetingTime"
          },
          "selectedModules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LearnerSupportRecordGetSelectedModuleDto"
            },
            "description": "The modules selected as part of the support record.",
            "nullable": true
          },
          "selectedReasonableAdjustments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LearnerSupportRecordGetSelectedReasonableAdjustmentDto"
            },
            "description": "The reasonable adjustments selected as part of the support record.",
            "nullable": true
          },
          "coverage": {
            "$ref": "#/components/schemas/LearnerSupportRecordGetCoverageDto"
          }
        },
        "additionalProperties": false
      },
      "LearnerSupportRecordGetSelectedModuleDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier of the module.",
            "format": "uuid",
            "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
          },
          "title": {
            "type": "string",
            "description": "The display title of the module.",
            "nullable": true
          },
          "dateLastAccessed": {
            "type": "string",
            "description": "The date the learner most recently accessed the module. Null if never accessed. Format: YYYY-MM-DD.",
            "nullable": true
          },
          "dateCompleted": {
            "type": "string",
            "description": "The date the learner first completed the module. Null if not yet completed. Format: YYYY-MM-DD.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LearnerSupportRecordGetSelectedReasonableAdjustmentDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier of the reasonable adjustment.",
            "format": "uuid",
            "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
          },
          "title": {
            "type": "string",
            "description": "The display title of the reasonable adjustment.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LearnerSupportRecordListCreatedByDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier of the user.",
            "format": "uuid",
            "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
          },
          "name": {
            "type": "string",
            "description": "The user's full name (first name followed by last name).",
            "nullable": true,
            "example": "Pat Tutor"
          },
          "email": {
            "type": "string",
            "description": "The user's email address.",
            "nullable": true,
            "example": "pat.tutor@learningprovider.com"
          }
        },
        "additionalProperties": false
      },
      "LearnerSupportRecordListLearnerSupportRecordDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier of the support record.",
            "format": "uuid",
            "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
          },
          "supportType": {
            "$ref": "#/components/schemas/SupportType"
          },
          "coverageStatus": {
            "$ref": "#/components/schemas/CoverageStatus"
          },
          "startDate": {
            "type": "string",
            "description": "The date the support session started. Format: YYYY-MM-DD.",
            "nullable": true,
            "example": "2026-04-07"
          },
          "endDate": {
            "type": "string",
            "description": "The date the support session ended. Format: YYYY-MM-DD.",
            "nullable": true,
            "example": "2026-04-07"
          },
          "lastUpdatedDate": {
            "type": "string",
            "description": "The date the support record was last updated. Format: YYYY-MM-DD.",
            "nullable": true,
            "example": "2026-04-07"
          },
          "createdBy": {
            "$ref": "#/components/schemas/LearnerSupportRecordListCreatedByDto"
          }
        },
        "additionalProperties": false
      },
      "LearnerSupportRecordListResult": {
        "type": "object",
        "properties": {
          "totalRecords": {
            "type": "integer",
            "description": "The total number of support records for the given learner, across all pages.",
            "format": "int32",
            "example": 123
          },
          "pageNumber": {
            "type": "integer",
            "description": "The 1-based page number represented by Api.Application.V1.Commands.Learner.LearnerSupportRecordList.Result.LearnerSupportRecords.",
            "format": "int32",
            "example": 2
          },
          "totalPages": {
            "type": "integer",
            "description": "The total number of pages available for the given page size.",
            "format": "int32",
            "example": 7
          },
          "learnerSupportRecords": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LearnerSupportRecordListLearnerSupportRecordDto"
            },
            "description": "The support records in the requested page.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LearnerUpdateLearnerDetails": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "nullable": true
          },
          "lastName": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "mobileNumber": {
            "type": "string",
            "nullable": true
          },
          "primaryTutorEmail": {
            "type": "string",
            "nullable": true
          },
          "clientReference": {
            "type": "string",
            "nullable": true
          },
          "gender": {
            "type": "string",
            "nullable": true
          },
          "postcode": {
            "type": "string",
            "nullable": true
          },
          "dateOfBirth": {
            "type": "string",
            "description": "Format: YYYY-MM-DD",
            "nullable": true,
            "example": "2000-05-30"
          },
          "endDate": {
            "type": "string",
            "description": "Format: YYYY-MM-DD",
            "nullable": true,
            "example": "2030-06-30"
          },
          "programmeLevel": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "learnerUniqueReference": {
            "$ref": "#/components/schemas/0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]"
          }
        },
        "additionalProperties": false
      },
      "LoginCommand": {
        "required": [
          "clientId",
          "clientSecret"
        ],
        "type": "object",
        "properties": {
          "clientId": {
            "minLength": 1,
            "type": "string",
            "description": "Your client id",
            "example": "dkSeSeTPh7LrA8O73M2LYYM6o22aemgS"
          },
          "clientSecret": {
            "minLength": 1,
            "type": "string",
            "description": "Your client secret",
            "example": "0Im-eNNGBwdWGl631jqGaJ1IelHA0ZxtelRheLQvIYlvLyPzWWtiO7fX6RKE7yFz"
          }
        },
        "additionalProperties": false
      },
      "LoginResult": {
        "type": "object",
        "properties": {
          "accessToken": {
            "type": "string",
            "description": "Access token",
            "nullable": true,
            "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
          },
          "expiresIn": {
            "type": "integer",
            "description": "Token expiration (seconds)",
            "format": "int32",
            "example": 36000
          }
        },
        "additionalProperties": false
      },
      "SupportRecordMeetingTime": {
        "enum": [
          10,
          20,
          30,
          40,
          50,
          60,
          70,
          80,
          90,
          100,
          110,
          120,
          130,
          140,
          150,
          160
        ],
        "type": "integer",
        "description": "The duration of an Above and Beyond support session.\n\n10 = ThirtyMinutes (Half an hour (0.5 hours).)\n\n20 = OneHour (One hour.)\n\n30 = OneAndHalfHours (One and a half hours.)\n\n40 = TwoHours (Two hours.)\n\n50 = TwoAndHalfHours (Two and a half hours.)\n\n60 = ThreeHours (Three hours.)\n\n70 = ThreeAndHalfHours (Three and a half hours.)\n\n80 = FourHours (Four hours.)\n\n90 = FourAndHalfHours (Four and a half hours.)\n\n100 = FiveHours (Five hours.)\n\n110 = FiveAndHalfHours (Five and a half hours.)\n\n120 = SixHours (Six hours.)\n\n130 = SixAndHalfHours (Six and a half hours.)\n\n140 = SevenHours (Seven hours.)\n\n150 = SevenAndHalfHours (Seven and a half hours.)\n\n160 = EightHours (Eight hours.)",
        "format": "int32",
        "x-enumNames": [
          "ThirtyMinutes",
          "OneHour",
          "OneAndHalfHours",
          "TwoHours",
          "TwoAndHalfHours",
          "ThreeHours",
          "ThreeAndHalfHours",
          "FourHours",
          "FourAndHalfHours",
          "FiveHours",
          "FiveAndHalfHours",
          "SixHours",
          "SixAndHalfHours",
          "SevenHours",
          "SevenAndHalfHours",
          "EightHours"
        ],
        "x-enumDescriptions": [
          "Half an hour (0.5 hours).",
          "One hour.",
          "One and a half hours.",
          "Two hours.",
          "Two and a half hours.",
          "Three hours.",
          "Three and a half hours.",
          "Four hours.",
          "Four and a half hours.",
          "Five hours.",
          "Five and a half hours.",
          "Six hours.",
          "Six and a half hours.",
          "Seven hours.",
          "Seven and a half hours.",
          "Eight hours."
        ]
      },
      "SupportSessionType": {
        "enum": [
          10,
          20,
          30,
          40,
          50,
          60,
          70,
          80,
          90,
          100
        ],
        "type": "integer",
        "description": "The session type captured against an Above and Beyond support record.\n\n10 = ProgressReviewOneToOne (Progress review (1:1).)\n\n20 = PastoralSupportOneToOne (Pastoral support (1:1).)\n\n30 = LearningSupportOneToOne (Learning support (1:1).)\n\n40 = CareersGuidanceOneToOne (Careers guidance (1:1).)\n\n50 = FunctionalSkillsCoaching (Functional skills coaching.)\n\n60 = ReasonableAdjustmentReview (Reasonable adjustment review.)\n\n70 = ReturnToLearningMeeting (Return-to-learning meeting.)\n\n80 = OffTheJobTrainingReview (Off-the-job training review.)\n\n90 = WorkplaceSupportVisit (Workplace support visit.)\n\n100 = SkillsGapCoaching (Skills gap coaching.)",
        "format": "int32",
        "x-enumNames": [
          "ProgressReviewOneToOne",
          "PastoralSupportOneToOne",
          "LearningSupportOneToOne",
          "CareersGuidanceOneToOne",
          "FunctionalSkillsCoaching",
          "ReasonableAdjustmentReview",
          "ReturnToLearningMeeting",
          "OffTheJobTrainingReview",
          "WorkplaceSupportVisit",
          "SkillsGapCoaching"
        ],
        "x-enumDescriptions": [
          "Progress review (1:1).",
          "Pastoral support (1:1).",
          "Learning support (1:1).",
          "Careers guidance (1:1).",
          "Functional skills coaching.",
          "Reasonable adjustment review.",
          "Return-to-learning meeting.",
          "Off-the-job training review.",
          "Workplace support visit.",
          "Skills gap coaching."
        ]
      },
      "SupportType": {
        "enum": [
          10,
          20
        ],
        "type": "integer",
        "description": "The type of a learner support record.\n\n10 = Regular (Regular support session.)\n\n20 = AboveAndBeyond (Above and Beyond support session.)",
        "format": "int32",
        "x-enumNames": [
          "Regular",
          "AboveAndBeyond"
        ],
        "x-enumDescriptions": [
          "Regular support session.",
          "Above and Beyond support session."
        ]
      },
      "SystemEvent": {
        "enum": [
          100,
          200,
          300,
          400,
          500,
          600,
          700,
          800
        ],
        "type": "integer",
        "description": "\n\n100 = AssessmentCompleted (Assessment Completed)\n\n200 = AssessmentReportCreated (Assessment Report Created)\n\n300 = AssessmentReportRequestFailed (Assessment Report Request Failed)\n\n400 = ModulesAssigned (Modules Assigned)\n\n500 = ModuleFirstAccessed (Module First Accessed)\n\n600 = ModuleFirstCompleted (Module First Completed)\n\n700 = LearnerExportCompleted (Learner Export Completed)\n\n800 = LearnerExportFailed (Learner Export Failed)",
        "format": "int32",
        "x-enumNames": [
          "AssessmentCompleted",
          "AssessmentReportCreated",
          "AssessmentReportRequestFailed",
          "ModulesAssigned",
          "ModuleFirstAccessed",
          "ModuleFirstCompleted",
          "LearnerExportCompleted",
          "LearnerExportFailed"
        ],
        "x-enumDescriptions": [
          "Assessment Completed",
          "Assessment Report Created",
          "Assessment Report Request Failed",
          "Modules Assigned",
          "Module First Accessed",
          "Module First Completed",
          "Learner Export Completed",
          "Learner Export Failed"
        ]
      },
      "SystemEventListResult": {
        "type": "object",
        "properties": {
          "systemEvents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SystemEventListSystemEvent"
            },
            "description": "The list of system events that can be subscribed to.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SystemEventListSystemEvent": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The id of the system event.",
            "format": "int32",
            "nullable": true,
            "example": 100
          },
          "displayName": {
            "type": "string",
            "description": "The display name of the system event.",
            "nullable": true,
            "example": "Assessment Completed"
          }
        },
        "additionalProperties": false
      },
      "TutorSecondaryLearnersAssignBody": {
        "type": "object",
        "properties": {
          "learnerIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Ids of the learners to assign this tutor to as a secondary tutor. Maximum 50. All ids must exist; any unknown id rejects the whole request.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TutorSecondaryLearnersReplaceBody": {
        "type": "object",
        "properties": {
          "learnerIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Ids of the learners to replace/remove this tutor for. Maximum 50. All ids must exist; any unknown id rejects the whole request.",
            "nullable": true
          },
          "replacementTutorEmail": {
            "type": "string",
            "description": "Email of the replacement secondary tutor. Omit/null to remove the tutor without a replacement. When\r\nsupplied, the replacement is added only to learners who currently have the tutor as a secondary tutor;\r\nfor a learner who does not, the request is a no-op (the replacement is NOT added).",
            "nullable": true,
            "example": "replacement.tutor@learningprovider.com"
          }
        },
        "additionalProperties": false
      },
      "ValidationProblemDetails": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "detail": {
            "type": "string",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": { }
      },
      "WebhookCreateCommand": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "description": "A short description of the webhook.",
            "nullable": true,
            "example": "This webhook listens for completed assessment events"
          },
          "secret": {
            "type": "string",
            "description": "The secret will be used to create a hash signature with each payload,\r\nwhich you can use to ensure that the payload came from us.",
            "nullable": true
          },
          "systemEventIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "The IDs of events this webhook should alert you about.\r\nPlease use the \"/systemevents\" endpoint to get a list of available events.",
            "nullable": true,
            "example": [
              100,
              200,
              300
            ]
          },
          "url": {
            "type": "string",
            "description": "The URL we will send payload to when an event has been triggered.",
            "nullable": true,
            "example": "https://www.example.com"
          }
        },
        "additionalProperties": false
      },
      "WebhookCreateResult": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          }
        },
        "additionalProperties": false
      },
      "WebhookGetResult": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier of the webhook.",
            "format": "uuid",
            "example": "7c76550a-725a-4eda-bd6f-1e54e856f129"
          },
          "url": {
            "type": "string",
            "description": "The URL we will send payload to when an event has been triggered.",
            "nullable": true,
            "example": "https://www.example.com"
          },
          "description": {
            "type": "string",
            "description": "A short description of the webhook.",
            "nullable": true,
            "example": "This webhook listens for completed assessment events"
          },
          "secret": {
            "type": "string",
            "description": "The secret will be used to create a hash signature with each payload,\r\nwhich you can use to ensure that the payload came from us.",
            "nullable": true
          },
          "systemEvents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SystemEvent"
            },
            "description": "The IDs of events this webhook should alert you about.\r\nPlease use the \"/systemevents\" endpoint to get a list of available events.",
            "nullable": true,
            "example": [
              100
            ]
          }
        },
        "additionalProperties": false
      },
      "WebhookInvocationLogStatus": {
        "enum": [
          1,
          2,
          3
        ],
        "type": "integer",
        "description": "\n\n1 = Processing (The webhook is still being processed.)\n\n2 = Successful (The webhook was processed successfully.)\n\n3 = Failed (Processing of the webhook failed.)",
        "format": "int32",
        "x-enumNames": [
          "Processing",
          "Successful",
          "Failed"
        ],
        "x-enumDescriptions": [
          "The webhook is still being processed.",
          "The webhook was processed successfully.",
          "Processing of the webhook failed."
        ]
      },
      "WebhookListResult": {
        "type": "object",
        "properties": {
          "webhooks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookListWebhookDetails"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WebhookListWebhookDetails": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier of the webhook.",
            "format": "uuid",
            "example": "6dbd4f46-85d8-4d97-8d94-65164960873f"
          },
          "url": {
            "type": "string",
            "description": "The URL we will send payload to when an event has been triggered.",
            "nullable": true,
            "example": "https://www.example.com"
          },
          "description": {
            "type": "string",
            "description": "A short description of the webhook.",
            "nullable": true,
            "example": "This webhook listens for completed assessment events"
          },
          "secret": {
            "type": "string",
            "description": "The secret which is used to create a hash signature with each payload, which you can use to ensure that the payload came from us.",
            "nullable": true,
            "example": "secretvalue"
          },
          "systemEvents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SystemEvent"
            },
            "description": "A list of SystemEvents that will trigger the webhook.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WebhookUpdateCommandDetails": {
        "type": "object",
        "properties": {
          "systemEventIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "The IDs of events this webhook should alert you about.\r\nPlease use the \"/systemevents\" endpoint to get a list of available events.\r\n<remarks>\r\nPlease note that this list will replace the existing list of system events on the webhook.\r\n</remarks>",
            "nullable": true,
            "example": [
              100
            ]
          },
          "url": {
            "type": "string",
            "description": "The URL we will send payload to when an event has been triggered.",
            "nullable": true,
            "example": "https://www.example.com"
          },
          "description": {
            "type": "string",
            "description": "A short description of the webhook.",
            "nullable": true,
            "example": "This webhook listens for completed assessment events"
          },
          "secret": {
            "type": "string",
            "description": "The secret will be used to create a hash signature with each payload,\r\nwhich you can use to ensure that the payload came from us.",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "Bearer": {
        "type": "apiKey",
        "description": "Enter 'Bearer' a space and then your token.<br>\n                        Example:<br>\n                        Bearer 123456abcdefg",
        "name": "Authorization",
        "in": "header"
      }
    }
  }
}