> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ctrl-hub.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a verification

> Record that the authenticated principal has verified a specific record. The
supported record types are: induction completions, training completions,
assessment records, registrations, category registrations, and scheme
registrations.




## OpenAPI

````yaml /api-reference/openapi.yaml post /v3/verifications
openapi: 3.1.0
info:
  contact:
    email: support@ctrl-hub.com
    name: Ctrl Hub
    url: https://www.ctrl-hub.com
  description: >
    Ctrl Hub is the all-in-one platform for high-risk industries like utilities,
    construction, infrastructure, and renewables. We help teams manage
    everything from risk assessments and HAVS exposure to vehicle and equipment
    checks, with a guaranteed minimum of 200% ROI.
  license:
    name: MIT License
    url: https://opensource.org/licenses/MIT
  summary: An API for managing your compliance and risk posture
  termsOfService: https://www.ctrl-hub.com/terms-conditions
  title: Ctrl Hub
  version: 1.0.0
servers:
  - description: Production
    url: https://api.ctrl-hub.com
  - description: Staging
    url: https://api.ctrl-hub.dev
  - description: Development
    url: https://api.ctrl-hub.run
security: []
tags:
  - description: |
      Audit events are the events that are logged by the system.
    name: Audit Events
  - description: |
      View the platform's health and availability.
    name: Status
  - description: >
      User-owned dashboards composed of cards on a fixed-slot bento layout.
      Cards come from a per-domain registry; the API stores their config as
      opaque JSON.
    name: Dashboards
  - description: |
      Manage appointments for work to be carried out with your customers
    name: Customer Appointments
  - description: |
      Manage interactions you have with your customers
    name: Customer Interactions
  - description: |
      Manage accounts for your customers
    name: Customer Accounts and Contacts
  - description: |
      Qualifications are the skills and knowledge that an organisation requires.
    name: Qualifications
  - description: |
      Workflows allow you to automate your processes.
    name: Workflows
  - description: |
      Manage documents
    name: Documents
  - description: |
      Manage documents
    name: Folders
  - description: |
      Manage documents
    name: Document Reviews
  - description: |
      Manage feature configurations for an organisation.
    name: Feature Configurations
  - description: |
      Equipment are the physical assets that an organisation manages.
    name: Equipment
  - description: |
      Manage your forms and their schemas
    name: Forms, Schemas and Categories
  - description: |
      Create and view form submissions
    name: Submissions
  - description: |
      View the roles available in the system.
    name: IAM Roles
  - description: >
      IAM role groups can be assigned to principals to manage authorisation
      centrally.
    name: IAM Role Groups
  - description: |
      Manage service accounts which can access the API programmatically.
    name: Service Accounts
  - description: |
      Manage bridges between organisations.
    name: Bridges
  - description: |
      Manage settings for an organisation.
    name: Settings
  - description: |
      Manage teams within an organisation.
    name: Teams
  - description: |
      Manage job roles within an organisation.
    name: Job Roles
  - description: |
      Manage users and accounts.
    name: Users
  - description: |
      Invite and manage invitations to organisations.
    name: Invitations
  - description: >
      IAM grants are the asignment of roles or permissions to principals to
      manage resource access.
    name: IAM Grants
  - description: |
      View the permissions available in the system.
    name: IAM Permissions
  - description: |
      SSO providers are the identity providers for an organisation.
    name: SSO Providers
  - description: |
      Whoami returns information about the currently authenticated principal.
    name: Whoami
  - description: |
      Manage your images
    name: Images
  - description: >
      Organisations are the center point for most resources in the platform.
      Most other endpoints are subresources of an organisation.
    name: Organisations
  - description: |
      Permits managements, integrated with street manager.
    name: Permits
  - description: |
      Projects manage your work and governance.
    name: Projects
  - description: >
      Import templates allow users to save and reuse their CSV importer
      configuration as named templates.
    name: Import Templates
  - description: |
      Properties are the physical locations.
    name: Properties
  - description: |
      Search across schemes, work orders, and operations.
    name: Search
  - description: |
      Provides the API specification in JSON and YAML formats
    name: Specifications
  - description: |
      Streets are the physical roads.
    name: Streets
  - description: |
      Integration with street manager
    name: Street Manager
  - description: |
      Vehicles are the physical vehicles that an organisation manages.
    name: Vehicles
  - description: >
      Scheme contracts (also known as regions) group schemes allocated from the
      network to a contractor.
    name: Scheme Contracts
  - description: >
      Scheme shares allow you to share your schemes with other organisations
      across bridges.
    name: Scheme Shares
  - description: |
      Schemes are large programmes of work
    name: Schemes
  - description: |
      Work orders the component parts of a scheme.
    name: Work Orders
  - description: |
      Operations are the work to be carried out within work orders.
    name: Operations
externalDocs:
  description: More documentation and resources
  url: https://docs.ctrl-hub.com
paths:
  /v3/verifications:
    post:
      tags:
        - Workforce
      summary: Create a verification
      description: >
        Record that the authenticated principal has verified a specific record.
        The

        supported record types are: induction completions, training completions,

        assessment records, registrations, category registrations, and scheme

        registrations.
      operationId: Verify
      requestBody:
        $ref: '#/components/requestBodies/Verify'
      responses:
        '201':
          $ref: '#/components/responses/GetVerification'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorised'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - Session: []
        - OAuth2: []
        - Cookie: []
components:
  requestBodies:
    Verify:
      required: true
      description: |
        The verification to create.
      content:
        application/vnd.api+json:
          schema:
            type: object
            required:
              - data
            properties:
              data:
                type: object
                required:
                  - type
                  - attributes
                  - relationships
                properties:
                  type:
                    type: string
                    const: verifications
                  attributes:
                    type: object
                    required:
                      - ref_type
                      - ref_id
                      - status
                    properties:
                      ref_type:
                        type: string
                        description: >-
                          The JSON:API resource type of the record being
                          verified.
                        enum:
                          - induction-completions
                          - training-completions
                          - assessment-records
                          - registrations
                          - category-registrations
                          - scheme-registrations
                      ref_id:
                        type: string
                        format: uuid
                        description: The ID of the record being verified.
                      status:
                        type: string
                        description: >
                          The outcome recorded by the verifier. `valid` confirms
                          the

                          record; `invalid` flags the record as not meeting the

                          standard.
                        enum:
                          - valid
                          - invalid
                      verified_at:
                        type: string
                        format: date-time
                        description: |
                          When the verification took place. Defaults to now if
                          omitted.
                  relationships:
                    type: object
                    required:
                      - organisation
                    properties:
                      organisation:
                        type: object
                        required:
                          - data
                        properties:
                          data:
                            type: object
                            required:
                              - type
                              - id
                            properties:
                              type:
                                type: string
                                const: organisations
                              id:
                                type: string
                                format: uuid
  responses:
    GetVerification:
      description: Get a verification.
      headers:
        Content-Type:
          $ref: '#/components/headers/content-type'
        Content-Length:
          $ref: '#/components/headers/content-length'
        X-Request-ID:
          $ref: '#/components/headers/x-request-id'
      content:
        application/vnd.api+json:
          schema:
            allOf:
              - type: object
                required:
                  - data
                properties:
                  data:
                    $ref: '#/components/schemas/Verification'
                  included:
                    $ref: '#/components/schemas/VerificationIncludes'
              - $ref: '#/components/schemas/JSONAPI'
    BadRequest:
      description: >
        There was an error with the request - this could be due to an invalid
        body, query parameters,

        or headers that were sent to the API.
      headers:
        Content-Type:
          $ref: '#/components/headers/content-type'
        Content-Length:
          $ref: '#/components/headers/content-length'
        X-Request-ID:
          $ref: '#/components/headers/x-request-id'
      content:
        application/vnd.api+json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  $ref: '#/components/schemas/Error'
          example:
            id: 98ca4a78-b66f-4234-9719-aaf832ee6669
            status: '400'
            title: A validation error was encountered
            source:
              parameter: include
            meta:
              resource: wrong_value
    Unauthorised:
      description: Authentication failed
      headers:
        Content-Type:
          $ref: '#/components/headers/content-type'
        Content-Length:
          $ref: '#/components/headers/content-length'
        X-Request-ID:
          $ref: '#/components/headers/x-request-id'
      content:
        application/vnd.api+json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  $ref: '#/components/schemas/Error'
          example:
            id: 05fc9c8d-73b9-4697-9337-57f7a567a48f
            status: '401'
            title: You are not authorised to access this resource
            detail: In order to access this resource, you need the 'admin' role.
            code: AUTH.001
    InternalServerError:
      description: There was a problem handling the request on the server side
      headers:
        Content-Type:
          $ref: '#/components/headers/content-type'
        Content-Length:
          $ref: '#/components/headers/content-length'
        X-Request-ID:
          $ref: '#/components/headers/x-request-id'
      content:
        application/vnd.api+json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  $ref: '#/components/schemas/Error'
          example:
            id: fe9d9a69-f0a7-4fdc-bb2c-176027f316c5
            status: '500'
            title: Internal Server Error
            detail: An unexpected error occurred on the server.
  headers:
    content-type:
      description: The content type of the response
      schema:
        type: string
      example: application/vnd.api+json
    content-length:
      description: The length of the response body in bytes
      schema:
        type: integer
        format: int32
      example: 1234
    x-request-id:
      description: >-
        An ID that can be provided when reporting bugs to help identify the
        issue
      schema:
        type: string
      example: 8470f56af4cf25e22be08e72c70dbbdc
  schemas:
    Verification:
      type: object
      description: >
        A verification records that a specific record (identified by ref_type
        and

        ref_id) was verified by a user at a point in time. The response surfaces
        the

        target record via a typed relationship key (one of
        `induction_completion`,

        `training_completion`, `assessment_record`, `registration`,

        `category_registration`, `scheme_registration`) — exactly one is
        populated

        per verification.
      required:
        - id
        - type
        - attributes
        - relationships
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the verification.
        type:
          type: string
          const: verifications
        attributes:
          $ref: '#/components/schemas/VerificationAttributes'
        relationships:
          $ref: '#/components/schemas/VerificationRelationships'
    VerificationIncludes:
      type: array
      description: Related resources that can be included when a verification is returned
      items:
        discriminator:
          propertyName: type
          mapping:
            users:
              $ref: '#/components/schemas/User'
            organisations:
              $ref: '#/components/schemas/Organisation'
            induction-completions:
              $ref: '#/components/schemas/InductionCompletion'
            training-completions:
              $ref: '#/components/schemas/TrainingCompletion'
            assessment-records:
              $ref: '#/components/schemas/AssessmentRecord'
            registrations:
              $ref: '#/components/schemas/Registration'
            category-registrations:
              $ref: '#/components/schemas/CategoryRegistration'
            scheme-registrations:
              $ref: '#/components/schemas/SchemeRegistration'
        oneOf:
          - $ref: '#/components/schemas/User'
          - $ref: '#/components/schemas/Organisation'
          - $ref: '#/components/schemas/InductionCompletion'
          - $ref: '#/components/schemas/TrainingCompletion'
          - $ref: '#/components/schemas/AssessmentRecord'
          - $ref: '#/components/schemas/Registration'
          - $ref: '#/components/schemas/CategoryRegistration'
          - $ref: '#/components/schemas/SchemeRegistration'
    JSONAPI:
      type: object
      description: JSON API response object
      required:
        - jsonapi
      properties:
        jsonapi:
          type: object
          required:
            - version
          properties:
            version:
              type: string
              description: The version of the JSON API specification
              examples:
                - '1.0'
    Error:
      type: object
      description: An error response
      properties:
        id:
          description: >-
            A unique identifier for this particular occurrence of the problem.
            If you encounter this, please provide us with the error ID and we
            can investigate it on our side.
          type: string
          format: uuid
          examples:
            - 05fc9c8d-73b9-4697-9337-57f7a567a48f
        status:
          description: >-
            The status code for the error. This might not match the HTTP status
            code if there are more that one errors to return with different
            status codes.
          type: string
          examples:
            - '401'
            - '500'
        title:
          description: A human readable title for the error.
          type: string
          examples:
            - You are not authorised to access this resource
        detail:
          description: >-
            Where there is more detail that we can provide outside of the title,
            we will provide it here.
          type: string
          examples:
            - In order to access this resource, you need the 'admin' role.
        code:
          description: >-
            A unique code for the error that may help us to diagnose the issue.
            Not all errors have codes, so this is usually empty.
          type: string
          examples:
            - AUTH.001
        source:
          description: A JSON object containing additional information about the error.
          type: object
          properties:
            pointer:
              description: >-
                A JSON Pointer to the value in the request that caused the
                error.
              type: string
              examples:
                - /data/attributes/email
            parameter:
              description: >-
                A string indicating which query parameter in the request caused
                the error.
              type: string
              examples:
                - include
      required:
        - id
        - status
        - title
    VerificationAttributes:
      type: object
      description: Attributes for a verification.
      required:
        - ref_type
        - status
        - verified_at
      properties:
        ref_type:
          type: string
          description: The JSON:API resource type of the record that was verified.
          enum:
            - induction-completions
            - training-completions
            - assessment-records
            - registrations
            - category-registrations
            - scheme-registrations
        status:
          type: string
          description: >
            The outcome of the verification. `valid` means the verifier
            confirmed

            the record; `invalid` means the verifier flagged it as not meeting
            the

            standard. A record with no verification is unverified — that state
            is

            the absence of a verification row, not a value of this field.
          enum:
            - valid
            - invalid
        verified_at:
          type: string
          format: date-time
          description: When the verification took place.
    VerificationRelationships:
      type: object
      description: |
        Relationships for a verification. `author` and `organisation` are always
        present. Exactly one of the typed ref relationships
        (`induction_completion`, `training_completion`, `assessment_record`,
        `registration`, `category_registration`, `scheme_registration`) is
        populated, matching the `ref_type` attribute. The others are omitted.
      required:
        - author
        - organisation
      oneOf:
        - required:
            - induction_completion
        - required:
            - training_completion
        - required:
            - assessment_record
        - required:
            - registration
        - required:
            - category_registration
        - required:
            - scheme_registration
      properties:
        author:
          type: object
          description: The user who performed the verification.
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/UserRelationship'
        organisation:
          type: object
          description: The organisation under which the verification was performed.
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/OrganisationRelationship'
        induction_completion:
          type: object
          description: >-
            The induction completion that was verified (when ref_type is
            induction-completions).
          required:
            - data
          properties:
            data:
              type: object
              required:
                - type
                - id
              properties:
                type:
                  type: string
                  const: induction-completions
                id:
                  type: string
                  format: uuid
        training_completion:
          type: object
          description: >-
            The training completion that was verified (when ref_type is
            training-completions).
          required:
            - data
          properties:
            data:
              type: object
              required:
                - type
                - id
              properties:
                type:
                  type: string
                  const: training-completions
                id:
                  type: string
                  format: uuid
        assessment_record:
          type: object
          description: >-
            The assessment record that was verified (when ref_type is
            assessment-records).
          required:
            - data
          properties:
            data:
              type: object
              required:
                - type
                - id
              properties:
                type:
                  type: string
                  const: assessment-records
                id:
                  type: string
                  format: uuid
        registration:
          type: object
          description: The registration that was verified (when ref_type is registrations).
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/RegistrationRelationship'
        category_registration:
          type: object
          description: >-
            The category registration that was verified (when ref_type is
            category-registrations).
          required:
            - data
          properties:
            data:
              type: object
              required:
                - type
                - id
              properties:
                type:
                  type: string
                  const: category-registrations
                id:
                  type: string
                  format: uuid
        scheme_registration:
          type: object
          description: >-
            The scheme registration that was verified (when ref_type is
            scheme-registrations).
          required:
            - data
          properties:
            data:
              type: object
              required:
                - type
                - id
              properties:
                type:
                  type: string
                  const: scheme-registrations
                id:
                  type: string
                  format: uuid
    User:
      type: object
      description: A user
      required:
        - id
        - type
        - attributes
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the user.
          examples:
            - 123e4567-e89b-12d3-a456-426614174000
        type:
          type: string
          const: users
        attributes:
          $ref: '#/components/schemas/UserAttributes'
        meta:
          $ref: '#/components/schemas/UserMeta'
        relationships:
          $ref: '#/components/schemas/UserRelationships'
    Organisation:
      type: object
      description: An organisation
      required:
        - id
        - type
        - attributes
        - meta
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the organisation.
        type:
          type: string
          const: organisations
        attributes:
          $ref: '#/components/schemas/OrganisationAttributes'
        meta:
          $ref: '#/components/schemas/OrganisationMeta'
        relationships:
          $ref: '#/components/schemas/OrganisationRelationships'
    InductionCompletion:
      type: object
      description: An induction completion record
      required:
        - id
        - type
        - attributes
        - relationships
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the induction completion.
        type:
          type: string
          const: induction-completions
        attributes:
          $ref: '#/components/schemas/InductionCompletionAttributes'
        relationships:
          $ref: '#/components/schemas/InductionCompletionRelationships'
    TrainingCompletion:
      type: object
      description: A training completion
      required:
        - id
        - type
        - attributes
        - relationships
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the training completion.
        type:
          type: string
          const: training-completions
        attributes:
          $ref: '#/components/schemas/TrainingCompletionAttributes'
        relationships:
          $ref: '#/components/schemas/TrainingCompletionRelationships'
    AssessmentRecord:
      type: object
      description: An assessment record
      required:
        - id
        - type
        - attributes
        - relationships
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the assessment record.
        type:
          type: string
          const: assessment-records
        attributes:
          $ref: '#/components/schemas/AssessmentRecordAttributes'
        relationships:
          $ref: '#/components/schemas/AssessmentRecordRelationships'
    Registration:
      type: object
      description: A registration on a skills register
      required:
        - id
        - type
        - attributes
        - relationships
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the registration.
        type:
          type: string
          const: registrations
        attributes:
          $ref: '#/components/schemas/RegistrationAttributes'
        relationships:
          $ref: '#/components/schemas/RegistrationRelationships'
    CategoryRegistration:
      type: object
      description: A category registration
      required:
        - id
        - type
        - attributes
        - relationships
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the category registration.
        type:
          type: string
          const: category-registrations
        attributes:
          $ref: '#/components/schemas/CategoryRegistrationAttributes'
        relationships:
          $ref: '#/components/schemas/CategoryRegistrationRelationships'
    SchemeRegistration:
      type: object
      description: A scheme registration
      required:
        - id
        - type
        - attributes
        - relationships
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the scheme registration.
        type:
          type: string
          const: scheme-registrations
        attributes:
          $ref: '#/components/schemas/SchemeRegistrationAttributes'
        relationships:
          $ref: '#/components/schemas/SchemeRegistrationRelationships'
    UserRelationship:
      type: object
      description: Represents a relationship to a user
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the user
        type:
          type: string
          const: users
    OrganisationRelationship:
      type: object
      description: Represents a relationship to an organisation
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the organisation
        type:
          type: string
          const: organisations
    RegistrationRelationship:
      type: object
      description: Represents a relationship to a registration
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the registration
        type:
          type: string
          const: registrations
    UserAttributes:
      type: object
      description: Attributes for a user
      properties:
        email:
          type: string
          format: email
          description: The email address of the user.
          examples:
            - john.doe@example.com
        status:
          type: string
          enum:
            - active
            - inactive
            - pending
            - unknown
          description: >
            The membership status of this user in the organisation in the
            request URL.

            Only populated on org-scoped member endpoints; absent on global user

            endpoints.
          examples:
            - active
        identities:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: The unique identifier for the identity.
                examples:
                  - 39ce13b8-1116-416a-ad5f-3c5edfd44f53
              platform:
                type: string
                description: The platform of the identity.
                examples:
                  - multi_tenant
              meta:
                type:
                  - object
                  - 'null'
                additionalProperties: true
                description: Additional metadata for the identity.
        profile:
          type: object
          properties:
            work:
              type: object
              properties:
                occupation:
                  type: string
                  description: The occupation of the user.
                  examples:
                    - Site Manager
                cscs:
                  type: string
                  description: The CSCS card number of the user.
                  examples:
                    - CSC123456
                eusr:
                  type: string
                  description: The EUSR card number of the user.
                  examples:
                    - EUR789123
                start_date:
                  type: string
                  format: date
                  description: The start date of the user's employment.
                  examples:
                    - '2020-03-01T00:00:00.000Z'
            personal:
              type: object
              properties:
                first_name:
                  type: string
                  description: The first name of the user.
                  examples:
                    - John
                last_name:
                  type: string
                  description: The last name of the user.
                  examples:
                    - Doe
                dob:
                  type: string
                  format: date
                  description: The date of birth of the user.
                  examples:
                    - '1985-06-15T00:00:00.000Z'
                username:
                  type: string
                  description: The username of the user.
                  examples:
                    - johndoe
            contact:
              type: object
              properties:
                mobile:
                  type: string
                  description: The mobile number of the user.
                  examples:
                    - +44 7700 900123
                landline:
                  type: string
                  description: The landline of the user.
                  examples:
                    - +44 20 7946 0958
            address:
              type: object
              properties:
                number:
                  type: string
                  description: The house number of the user's address.
                  default: ''
                  examples:
                    - '42'
                street:
                  type: string
                  description: The street of the user's address.
                  examples:
                    - High Street
                area:
                  type: string
                  description: The area of the user's address.
                  examples:
                    - Westminster
                town:
                  type: string
                  description: The town of the user's address.
                  examples:
                    - London
                county:
                  type: string
                  description: The county of the user's address.
                  examples:
                    - Greater London
                postcode:
                  type: string
                  description: The postcode of the user's address.
                  examples:
                    - SW1A 1AA
                country_code:
                  type: string
                  description: The country code of the user's address.
                  examples:
                    - GB
                what3words:
                  type: string
                  description: The what3words location of the user's address.
                  examples:
                    - filled.count.soap
            settings:
              type: object
              properties:
                preferred_language:
                  type: string
                  description: The preferred language of the user.
                  default: en-GB
                  examples:
                    - en-GB
                timezone:
                  type: string
                  description: The timezone of the user.
                  examples:
                    - Europe/London
    UserMeta:
      type: object
      description: Metadata for a user
      properties:
        grants:
          type: array
          items:
            type: string
          description: >-
            This data is only returned on the whoami endpoint - it contains all
            of the user's granted permissions.
    UserRelationships:
      type: object
      description: Relationships for a user
      properties:
        organisations:
          type: object
          required:
            - data
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/OrganisationRelationship'
        teams:
          type: object
          required:
            - data
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TeamRelationship'
        managing_organisation:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/OrganisationRelationship'
    OrganisationAttributes:
      type: object
      description: Attributes for an organisation
      required:
        - name
        - slug
        - sandbox
      properties:
        name:
          type: string
          description: The name of the organisation.
          examples:
            - Acme Construction Ltd
        slug:
          type: string
          description: The URL-friendly identifier for the organisation.
          examples:
            - acme-construction
        description:
          type: string
          description: A short description of the organisation.
          examples:
            - >-
              Leading construction company specializing in infrastructure
              projects
        sandbox:
          type: boolean
          description: Whether the organisation is a sandbox (i.e. a test organisation)
          examples:
            - false
        settings:
          type: object
    OrganisationMeta:
      type: object
      description: Meta information for an organisation
      required:
        - v3
        - status
      properties:
        created_at:
          type: string
          format: date-time
          description: The creation time of the organisation.
          examples:
            - '2023-01-15T10:30:00.000Z'
        updated_at:
          type: string
          format: date-time
          description: The last update time of the organisation.
          examples:
            - '2023-02-20T14:45:00.000Z'
        v3:
          type: boolean
          description: Whether the organisation is using version 3 exclusively.
          examples:
            - true
        status:
          type: string
          enum:
            - active
            - inactive
          default: active
          description: The current status of the organisation.
          examples:
            - active
        features:
          type: array
          description: Available features and their limits for the organisation.
          items:
            type: object
            properties:
              name:
                type: string
                description: The name of the feature.
                examples:
                  - advanced_reporting
              enabled:
                type: boolean
                description: Whether the feature is enabled.
                examples:
                  - true
              limit:
                type: integer
                description: The usage limit for this feature (if applicable).
                examples:
                  - 1000
    OrganisationRelationships:
      type: object
      description: Relationships for an organisation
      properties:
        users:
          type: object
          required:
            - data
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/UserRelationship'
        service_accounts:
          type: object
          required:
            - data
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ServiceAccountRelationship'
        groups:
          type: object
          required:
            - data
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/UserGroupRelationship'
        teams:
          type: object
          required:
            - data
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TeamRelationship'
        nomenclature:
          type: object
          required:
            - data
          properties:
            data:
              oneOf:
                - $ref: '#/components/schemas/NomenclatureRelationship'
                - type: 'null'
    InductionCompletionAttributes:
      type: object
      description: Attributes for an induction completion
      properties:
        completed_at:
          type:
            - string
            - 'null'
          format: date-time
          description: The date and time when the induction was completed.
        expires_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date and time when this completion expires. Null indicates no
            expiry.
        risk_status:
          type: string
          description: The current risk level of this induction completion.
          enum:
            - none
            - low
            - medium
            - high
            - critical
        next_check:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date and time when the next risk check is scheduled. Null if no
            check is required.
        kind:
          type:
            - string
            - 'null'
          description: Indicates an exemption kind for this record.
          enum:
            - does_not_undertake_activity
            - expected_first_assessment
        expected_by:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date by which the first assessment is expected. Only relevant
            when kind is expected_first_assessment.
    InductionCompletionRelationships:
      type: object
      description: Relationships for an induction completion
      required:
        - organisation
        - user
        - induction
      properties:
        organisation:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/OrganisationRelationship'
        user:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/UserRelationship'
        induction:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/InductionRelationship'
        folder:
          type: object
          description: >-
            The folder containing evidence documents for this induction
            completion.
          properties:
            data:
              $ref: '#/components/schemas/FolderRelationship'
    TrainingCompletionAttributes:
      type: object
      description: Attributes for a training completion
      required:
        - reference_type
        - reference_id
      properties:
        reference_type:
          type: string
          description: The type of training reference.
          enum:
            - training_standard
            - training_item
        reference_id:
          type: string
          format: uuid
          description: The ID of the referenced training standard or training item.
        completed_at:
          type:
            - string
            - 'null'
          format: date-time
          description: The date and time when training was completed.
        expires_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date and time when this completion expires. Null indicates no
            expiry.
        risk_status:
          type: string
          description: The current risk level of this training completion.
          enum:
            - none
            - low
            - medium
            - high
            - critical
        next_check:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date and time when the next risk check is scheduled. Null if no
            check is required.
        kind:
          oneOf:
            - type: 'null'
            - type: string
              enum:
                - does_not_undertake_activity
                - expected_first_assessment
          description: Indicates an exemption kind for this record.
        expected_by:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date by which the first assessment is expected. Only relevant
            when kind is expected_first_assessment.
      oneOf:
        - required:
            - expected_by
          properties:
            kind:
              const: expected_first_assessment
            expected_by:
              type: string
              format: date-time
        - properties:
            kind:
              not:
                const: expected_first_assessment
            expected_by:
              type: 'null'
    TrainingCompletionRelationships:
      type: object
      description: Relationships for a training completion
      required:
        - organisation
      properties:
        organisation:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/OrganisationRelationship'
        user:
          type: object
          properties:
            data:
              $ref: '#/components/schemas/UserRelationship'
        folder:
          type: object
          description: >-
            The folder containing evidence documents for this training
            completion.
          properties:
            data:
              $ref: '#/components/schemas/FolderRelationship'
    AssessmentRecordAttributes:
      type: object
      description: Attributes for an assessment record
      required:
        - status
      properties:
        status:
          type: string
          description: The outcome of the assessment.
          enum:
            - passed
            - failed
        assessment_date:
          type:
            - string
            - 'null'
          format: date-time
          description: The date the assessment was conducted.
        expires_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date and time when this record expires. Null indicates no
            expiry.
        risk_status:
          type: string
          description: The current risk level of this assessment record.
          enum:
            - none
            - low
            - medium
            - high
            - critical
        next_check:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date and time when the next risk check is scheduled. Null if no
            check is required.
        kind:
          oneOf:
            - type: 'null'
            - type: string
              enum:
                - does_not_undertake_activity
                - expected_first_assessment
          description: Indicates an exemption kind for this record.
        expected_by:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date by which the first assessment is expected. Only relevant
            when kind is expected_first_assessment.
      oneOf:
        - required:
            - expected_by
          properties:
            kind:
              const: expected_first_assessment
            expected_by:
              type: string
              format: date-time
        - properties:
            kind:
              not:
                const: expected_first_assessment
            expected_by:
              type: 'null'
    AssessmentRecordRelationships:
      type: object
      description: Relationships for an assessment record
      required:
        - organisation
      properties:
        organisation:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/OrganisationRelationship'
        user:
          type: object
          properties:
            data:
              $ref: '#/components/schemas/UserRelationship'
        assessment_definition:
          type: object
          properties:
            data:
              $ref: '#/components/schemas/AssessmentDefinitionRelationship'
        assessor:
          type: object
          description: The user who conducted the assessment.
          properties:
            data:
              $ref: '#/components/schemas/UserRelationship'
        folder:
          type: object
          description: The folder containing evidence documents for this assessment record.
          properties:
            data:
              $ref: '#/components/schemas/FolderRelationship'
    RegistrationAttributes:
      type: object
      description: Attributes for a registration
      properties:
        registration_number:
          type:
            - string
            - 'null'
          description: The card or certificate number for this registration.
          examples:
            - EUSR-12345
        registered_at:
          type:
            - string
            - 'null'
          format: date-time
          description: The date the registration was issued.
        expires_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date the registration expires. Independent of any underlying
            qualification expiry.
        kind:
          oneOf:
            - type: 'null'
            - type: string
              enum:
                - does_not_undertake_activity
                - expected_first_assessment
          description: Indicates an exemption kind for this record.
        expected_by:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date by which the first assessment is expected. Only relevant
            when kind is expected_first_assessment.
      oneOf:
        - required:
            - expected_by
          properties:
            kind:
              const: expected_first_assessment
            expected_by:
              type: string
              format: date-time
        - properties:
            kind:
              not:
                const: expected_first_assessment
            expected_by:
              type: 'null'
    RegistrationRelationships:
      type: object
      description: Relationships for a registration
      required:
        - user
        - skills_register
      properties:
        user:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/UserRelationship'
        skills_register:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/SkillsRegisterRelationship'
        skills_register_schemes:
          type: object
          required:
            - data
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/SkillsRegisterSchemeRelationship'
        skills_register_scheme_categories:
          type: object
          required:
            - data
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/SkillsRegisterSchemeCategoryRelationship'
    CategoryRegistrationAttributes:
      type: object
      description: Attributes for a category registration
      properties:
        expires_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date and time when this registration expires. Null indicates no
            expiry.
        kind:
          type:
            - string
            - 'null'
          description: Indicates an exemption kind for this record.
          enum:
            - does_not_undertake_activity
            - expected_first_assessment
        expected_by:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date by which the first assessment is expected. Only relevant
            when kind is expected_first_assessment.
    CategoryRegistrationRelationships:
      type: object
      description: Relationships for a category registration
      required:
        - user
        - skills_register_scheme_category
      properties:
        user:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/UserRelationship'
        skills_register_scheme_category:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/SkillsRegisterSchemeCategoryRelationship'
    SchemeRegistrationAttributes:
      type: object
      description: Attributes for a scheme registration
      properties:
        expires_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date and time when this registration expires. Null indicates no
            expiry.
        risk_status:
          type: string
          description: The current risk level of this registration.
          enum:
            - none
            - low
            - medium
            - high
            - critical
        next_check:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date and time when the next risk check is scheduled. Null if no
            check is required.
        kind:
          oneOf:
            - type: 'null'
            - type: string
              enum:
                - does_not_undertake_activity
                - expected_first_assessment
          description: Indicates an exemption kind for this record.
        expected_by:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            The date by which the first assessment is expected. Only relevant
            when kind is expected_first_assessment.
      oneOf:
        - required:
            - expected_by
          properties:
            kind:
              const: expected_first_assessment
            expected_by:
              type: string
              format: date-time
        - properties:
            kind:
              not:
                const: expected_first_assessment
            expected_by:
              type: 'null'
    SchemeRegistrationRelationships:
      type: object
      description: Relationships for a scheme registration
      required:
        - user
        - skills_register_scheme
      properties:
        user:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/UserRelationship'
        skills_register_scheme:
          type: object
          required:
            - data
          properties:
            data:
              $ref: '#/components/schemas/SkillsRegisterSchemeRelationship'
        skills_register_scheme_categories:
          type: object
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/SkillsRegisterSchemeCategoryRelationship'
    TeamRelationship:
      type: object
      description: Represents a relationship to a team
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the team
        type:
          type: string
          const: teams
    ServiceAccountRelationship:
      type: object
      description: Represents a relationship to a service account
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the service account
        type:
          type: string
          const: service-accounts
    UserGroupRelationship:
      type: object
      description: Represents a relationship to a group
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the group
        type:
          type: string
          const: groups
    NomenclatureRelationship:
      type: object
      description: Represents a relationship to a nomenclature resource
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the nomenclature resource
        type:
          type: string
          const: nomenclature
    InductionRelationship:
      type: object
      description: Represents a relationship to an induction
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the induction
        type:
          type: string
          const: inductions
    FolderRelationship:
      type: object
      description: Represents a relationship to a folder
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the folder
        type:
          type: string
          const: folders
    AssessmentDefinitionRelationship:
      type: object
      description: Represents a relationship to an assessment definition
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the assessment definition
        type:
          type: string
          const: assessment-definitions
    SkillsRegisterRelationship:
      type: object
      description: Represents a relationship to a skills register
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the skills register
        type:
          type: string
          const: skills-registers
    SkillsRegisterSchemeRelationship:
      type: object
      description: Represents a relationship to a skills register scheme
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the skills register scheme
        type:
          type: string
          const: skills-register-schemes
    SkillsRegisterSchemeCategoryRelationship:
      type: object
      description: Represents a relationship to a skills register scheme category
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the skills register scheme category
        type:
          type: string
          const: skills-register-scheme-categories
  securitySchemes:
    Session:
      description: |
        Session token for authentication.
      in: header
      name: X-Session-Token
      type: apiKey
    OAuth2:
      description: |
        OAuth2 token for authentication.
      flows:
        clientCredentials:
          scopes: {}
          tokenUrl: https://auth.ctrl-hub.com/oauth2/token
      type: oauth2
    Cookie:
      description: |
        Cookie token for authentication.
      in: cookie
      name: ctrl_hub_session
      type: apiKey

````