Introduction

Training & Compliance API

Overview

Organisation-scoped skills, training plans, certifications, sign-off, and readiness. userId, siteId, brandId, and department are opaque ids from the calling site. This service does not own people directories, locations, or access roles.

Integration guide: Training & Compliance service docs

OpenAPI v0.1.0 · source openapi/training.json

OpenAPI 3.0.0 · v0.1.0 · 113 operations

Operations

System

Liveness and generated documentation.

get/health

Health check

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/health"

Unauthenticated liveness probe. Does not verify D1 connectivity or JWT configuration.

Operation ID: getHealth

Responses

  • 200

    Service is running

    application/json

Skills

Catalog of skills that people can hold.

get/v1/skills

List skills

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/skills"

Returns all skill catalog records in the caller's organisation, including inactive ones. Any authenticated actor type may read.

Operation ID: listSkills

Responses

  • 200

    Skill catalog

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/skills

Create skill

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/skills"

Creates a skill people can be assessed against. Name must be unique in the organisation (409 CONFLICT). admin only.

Operation ID: createSkill

Request body(required)

  • application/jsonSkillCreate

Responses

  • 201

    Created skill

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/skills/{id}

Get skill

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/skills/example-id"

Returns one skill by id. 404 NOT_FOUND if it does not exist in this organisation.

Operation ID: getSkill

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Skill

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

put/v1/skills/{id}

Update skill

Example request

curl -sS \
  -X PUT \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/skills/example-id"

Updates a skill. Changing `name` to a duplicate returns 409 CONFLICT. admin only.

Operation ID: updateSkill

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonSkillUpdate

Responses

  • 200

    Updated skill

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/skills/{id}

Deactivate skill

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/skills/example-id"

Sets `active` to false. The row is kept for history. admin only. 404 NOT_FOUND if missing.

Operation ID: deactivateSkill

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Skill marked inactive

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Roles

Job roles used for assignment, bindings, and readiness.

get/v1/roles

List roles

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/roles"

Returns all role catalog records in the caller's organisation, including inactive ones. Any authenticated actor type may read.

Operation ID: listRoles

Responses

  • 200

    Role catalog

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/roles

Create role

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/roles"

Creates a job role used for assignments, requirement bindings, and readiness. Name must be unique (409 CONFLICT). admin only.

Operation ID: createRole

Request body(required)

  • application/jsonNamedCreate

Responses

  • 201

    Created role

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/roles/{id}

Get role

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/roles/example-id"

Returns one role by id. 404 NOT_FOUND if it does not exist in this organisation.

Operation ID: getRole

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Role

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

put/v1/roles/{id}

Update role

Example request

curl -sS \
  -X PUT \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/roles/example-id"

Updates a role. Changing `name` to a duplicate returns 409 CONFLICT. admin only.

Operation ID: updateRole

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonNamedUpdate

Responses

  • 200

    Updated role

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/roles/{id}

Deactivate role

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/roles/example-id"

Sets `active` to false. The row is kept for history. admin only. 404 NOT_FOUND if missing.

Operation ID: deactivateRole

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Role marked inactive

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Equipment

Equipment types and user qualifications.

get/v1/equipment-types

List equipment types

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/equipment-types"

Returns all equipment type catalog records in the caller's organisation, including inactive ones. Any authenticated actor type may read.

Operation ID: listEquipmentTypes

Responses

  • 200

    Equipment type catalog

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/equipment-types

Create equipment type

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/equipment-types"

Creates an equipment type people can be qualified on. Name must be unique (409 CONFLICT). admin only.

Operation ID: createEquipmentType

Request body(required)

  • application/jsonNamedCreate

Responses

  • 201

    Created equipment type

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/equipment-types/{id}

Get equipment type

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/equipment-types/example-id"

Returns one equipment type by id. 404 NOT_FOUND if it does not exist in this organisation.

Operation ID: getEquipmentType

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Equipment type

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

put/v1/equipment-types/{id}

Update equipment type

Example request

curl -sS \
  -X PUT \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/equipment-types/example-id"

Updates a equipment type. Changing `name` to a duplicate returns 409 CONFLICT. admin only.

Operation ID: updateEquipmentType

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonNamedUpdate

Responses

  • 200

    Updated equipment type

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/equipment-types/{id}

Deactivate equipment type

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/equipment-types/example-id"

Sets `active` to false. The row is kept for history. admin only. 404 NOT_FOUND if missing.

Operation ID: deactivateEquipmentType

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Equipment type marked inactive

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/users/{userId}/equipment-qualifications

List equipment qualifications

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/equipment-qualifications"

Returns equipment qualification records for a person, including revoked ones.

Operation ID: listuserEquipmentQualifications

Parameters

NameInTypeDescription
userId*pathstringUser id

Responses

  • 200

    Equipment qualifications

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/equipment-qualifications

Record an equipment qualification

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/equipment-qualifications"

Records that a person is qualified on an equipment type. admin or manager.

Operation ID: createUserEquipmentQualification

Parameters

NameInTypeDescription
userId*pathstringUser id

Request body(required)

  • application/jsonEquipmentQualificationCreate

Responses

  • 201

    Created qualification

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/equipment-qualifications/{qualificationId}/revoke

Revoke an equipment qualification

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/equipment-qualifications/example-id/revoke"

Marks an equipment qualification revoked. admin or manager.

Operation ID: revokeUserEquipmentQualification

Parameters

NameInTypeDescription
userId*pathstringUser id
qualificationId*pathstringEquipment qualification record id

Request body(required)

  • application/jsonReasonBody

Responses

  • 200

    Revoked qualification

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Certifications

Certificate types and user certificates.

get/v1/certification-types

List certification types

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/certification-types"

Returns all certification type catalog records in the caller's organisation, including inactive ones. Any authenticated actor type may read.

Operation ID: listCertificationTypes

Responses

  • 200

    Certification type catalog

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/certification-types

Create certification type

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/certification-types"

Creates a certificate type that can be issued to people. Name must be unique (409 CONFLICT). admin only.

Operation ID: createCertificationType

Request body(required)

  • application/jsonCertificationTypeCreate

Responses

  • 201

    Created certification type

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/certification-types/{id}

Get certification type

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/certification-types/example-id"

Returns one certification type by id. 404 NOT_FOUND if it does not exist in this organisation.

Operation ID: getCertificationType

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Certification type

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

put/v1/certification-types/{id}

Update certification type

Example request

curl -sS \
  -X PUT \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/certification-types/example-id"

Updates a certification type. Changing `name` to a duplicate returns 409 CONFLICT. admin only.

Operation ID: updateCertificationType

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonCertificationTypeUpdate

Responses

  • 200

    Updated certification type

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/certification-types/{id}

Deactivate certification type

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/certification-types/example-id"

Sets `active` to false. The row is kept for history. admin only. 404 NOT_FOUND if missing.

Operation ID: deactivateCertificationType

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Certification type marked inactive

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/certifications/{certificationId}/renew

Renew a certification

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/certifications/example-id/renew"

Issues a new certification record from an existing one. The previous record is left in place. admin or manager. 404 NOT_FOUND if the source record is missing.

Operation ID: renewUserCertification

Parameters

NameInTypeDescription
userId*pathstringUser id
certificationId*pathstringUser certification record id

Request body(required)

  • application/jsonRenewCertificationBody

Responses

  • 201

    New certification record

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/users/{userId}/certifications

List user certifications

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/certifications"

Returns certification records for a person, including revoked ones.

Operation ID: listuserCertifications

Parameters

NameInTypeDescription
userId*pathstringUser id

Responses

  • 200

    Certifications

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/certifications

Issue a certification

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/certifications"

Creates a certification record for a person. admin or manager. Emits CertificationIssued and ReadinessChanged.

Operation ID: createUserCertification

Parameters

NameInTypeDescription
userId*pathstringUser id

Request body(required)

  • application/jsonCertificationCreate

Responses

  • 201

    Issued certification

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/certifications/{certificationId}/revoke

Revoke a certification

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/certifications/example-id/revoke"

Marks a certification revoked with a reason. admin or manager.

Operation ID: revokeUserCertification

Parameters

NameInTypeDescription
userId*pathstringUser id
certificationId*pathstringUser certification record id

Request body(required)

  • application/jsonReasonBody

Responses

  • 200

    Revoked certification

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Work requirement sets

Named bundles of requirements for planning snapshots.

get/v1/work-requirement-sets

List work requirement sets

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/work-requirement-sets"

Returns all work requirement set catalog records in the caller's organisation, including inactive ones. Any authenticated actor type may read.

Operation ID: listWorkRequirementSets

Responses

  • 200

    Work requirement set catalog

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/work-requirement-sets

Create work requirement set

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/work-requirement-sets"

Creates a named bundle of requirements for planning snapshots. admin only.

Operation ID: createWorkRequirementSet

Request body(required)

  • application/jsonNamedCreate

Responses

  • 201

    Created work requirement set

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/work-requirement-sets/{id}

Get work requirement set

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/work-requirement-sets/example-id"

Returns one work requirement set by id. 404 NOT_FOUND if it does not exist in this organisation.

Operation ID: getWorkRequirementSet

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Work requirement set

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

put/v1/work-requirement-sets/{id}

Update work requirement set

Example request

curl -sS \
  -X PUT \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/work-requirement-sets/example-id"

Updates a work requirement set. Changing `name` to a duplicate returns 409 CONFLICT. admin only.

Operation ID: updateWorkRequirementSet

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonNamedUpdate

Responses

  • 200

    Updated work requirement set

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/work-requirement-sets/{id}

Deactivate work requirement set

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/work-requirement-sets/example-id"

Sets `active` to false. The row is kept for history. admin only. 404 NOT_FOUND if missing.

Operation ID: deactivateWorkRequirementSet

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Work requirement set marked inactive

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Workforce profiles

Training profiles keyed by opaque Directory person ids.

get/v1/users

List users

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users"

Returns people in the caller's organisation. Member actors only see themselves. Optional `employmentStatus` filter. Any authenticated actor type may read.

Operation ID: listUsers

Parameters

NameInTypeDescription
employmentStatusquerystringIf set, only return people with this employment status.

Responses

  • 200

    People in the organisation

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users

Create user

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users"

Creates or backfills a training profile. Production sites should provision via Directory ingest; pass `id` as the opaque person id. Duplicate ids return 409 CONFLICT. admin only.

Operation ID: createUser

Request body(required)

  • application/jsonUserCreate

Responses

  • 201

    Created person

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/users/{userId}

Get user

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id"

Returns a person plus role assignments and training counts. Member actors may only fetch themselves (403 FORBIDDEN otherwise). 404 NOT_FOUND if missing.

Operation ID: getUser

Parameters

NameInTypeDescription
userId*pathstringUser id

Responses

  • 200

    Person with roles and training counts

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

put/v1/users/{userId}

Update user

Example request

curl -sS \
  -X PUT \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id"

Updates a person. All body fields are optional. admin only.

Operation ID: updateUser

Parameters

NameInTypeDescription
userId*pathstringUser id

Request body(required)

  • application/jsonUserUpdate

Responses

  • 200

    Updated person

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/users/{userId}

Deactivate user

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id"

Sets `employmentStatus` to inactive. The row is kept. admin only.

Operation ID: deactivateUser

Parameters

NameInTypeDescription
userId*pathstringUser id

Responses

  • 200

    Person marked inactive

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Workforce skills

Assessed skill records on a person.

get/v1/users/{userId}/skills

List user skills

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/skills"

Returns assessed skill records for a person. Member actors may only read themselves.

Operation ID: listUserSkills

Parameters

NameInTypeDescription
userId*pathstringUser id

Responses

  • 200

    Skill records

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/skills

Record a user skill

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/skills"

Creates an assessed skill on a person. The catalog skill must exist (404). A duplicate skill for the same person returns 409 CONFLICT. admin or manager.

Operation ID: createUserSkill

Parameters

NameInTypeDescription
userId*pathstringUser id

Request body(required)

  • application/jsonuserSkillCreate

Responses

  • 201

    Created skill record

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

put/v1/users/{userId}/skills/{skillRecordId}

Update a user skill

Example request

curl -sS \
  -X PUT \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/skills/example-id"

Updates level, dates, evidence, or notes on an existing skill record. admin or manager.

Operation ID: updateUserSkill

Parameters

NameInTypeDescription
userId*pathstringUser id
skillRecordId*pathstringUser skill record id (not the catalog skill id)

Request body(required)

  • application/jsonuserSkillUpdate

Responses

  • 200

    Updated skill record

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/users/{userId}/skills/{skillRecordId}

Delete a user skill

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/skills/example-id"

Permanently removes an assessed skill record. admin or manager.

Operation ID: deleteUserSkill

Parameters

NameInTypeDescription
userId*pathstringUser id
skillRecordId*pathstringUser skill record id (not the catalog skill id)

Responses

  • 200

    Skill record deleted

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Workforce roles

Competency role assignments on a person (not Directory access).

get/v1/users/{userId}/roles

List user roles

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/roles"

Returns role assignments for a person.

Operation ID: listUserRoles

Parameters

NameInTypeDescription
userId*pathstringUser id

Responses

  • 200

    Role assignments

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/roles

Assign a role to a user

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/roles"

Attaches a catalog role, optionally scoped to a site. The role must exist (404). admin only.

Operation ID: assignUserRole

Parameters

NameInTypeDescription
userId*pathstringUser id

Request body(required)

  • application/jsonuserRoleCreate

Responses

  • 201

    Role assignment

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/users/{userId}/roles/{assignmentId}

Unassign a user role

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/roles/example-id"

Removes a role assignment. 404 NOT_FOUND if the assignment is missing. admin only.

Operation ID: unassignUserRole

Parameters

NameInTypeDescription
userId*pathstringUser id
assignmentId*pathstringRole assignment id

Responses

  • 200

    Role assignment removed

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Training programmes

Training plans (legacy path prefix `/v1/training-programmes`).

get/v1/training-programmes

List training programmes

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-programmes"

Returns training plans in the organisation, including drafts and inactive versions. Alias of `/v1/training-plans`. Any authenticated actor type may read.

Operation ID: listTrainingProgrammes

Parameters

NameInTypeDescription
statusquerystring—
scopequerystring—
brandIdquerystring—

Responses

  • 200

    Training plans

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/training-programmes

Create training programme

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-programmes"

Creates a draft plan. Add items, then publish before assigning. Alias of `/v1/training-plans`. admin only.

Operation ID: createTrainingProgramme

Request body(required)

  • application/jsonTrainingPlanCreate

Responses

  • 201

    Created draft plan

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/training-programmes/{id}

Get training programme

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-programmes/example-id"

Returns the plan and its items (`goals` and alias `items`). Alias of `/v1/training-plans`. 404 NOT_FOUND if missing.

Operation ID: getTrainingProgramme

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Plan with items

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

put/v1/training-programmes/{id}

Update training programme

Example request

curl -sS \
  -X PUT \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-programmes/example-id"

Updates a draft plan. Published plans are immutable (409 CONFLICT); create a new version instead. Alias of `/v1/training-plans`. admin only.

Operation ID: updateTrainingProgramme

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonTrainingPlanUpdate

Responses

  • 200

    Updated plan

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/training-programmes/{id}

Deactivate training programme

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-programmes/example-id"

Sets `active` to false. Existing assignments are unchanged. Alias of `/v1/training-plans`. admin only.

Operation ID: deactivateTrainingProgramme

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Plan marked inactive

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/training-programmes/{id}/publish

Publish training programme

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-programmes/example-id/publish"

Marks the plan published so it can be assigned. Published content cannot be edited. Alias of `/v1/training-plans`. admin only.

Operation ID: publishTrainingProgramme

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Published plan

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/training-programmes/{id}/new-version

Create a new training programme version

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-programmes/example-id/new-version"

Copies the plan and its items into a new draft version that can be edited. Alias of `/v1/training-plans`. admin only.

Operation ID: newVersionTrainingProgramme

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 201

    New draft version

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/training-programmes/{id}/assign

Assign training programme to people

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-programmes/example-id/assign"

Creates assignments for each required item. The plan must be published (422 VALIDATION_ERROR otherwise). Duplicate assignments are skipped. admin only.

Operation ID: assignTrainingProgramme

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonBulkAssignBody

Responses

  • 201

    Created assignments (existing ones are not duplicated)

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/training-programmes/{id}/assign-by-role

Assign training programme by role

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-programmes/example-id/assign-by-role"

Assigns the published plan to everyone currently holding the given role. Returns an empty list if nobody has that role. admin only.

Operation ID: assignTrainingProgrammeByRole

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonAssignByRoleBody

Responses

  • 201

    Created assignments

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Training goals

Items inside a training plan.

post/v1/training-programmes/{id}/goals

Add an item to a training programme

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-programmes/example-id/goals"

Adds a text item to a draft plan. Published plans return 409 CONFLICT. Default approval rule is `{ type: "self" }`. admin only.

Operation ID: addTrainingProgrammeGoal

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonTrainingGoalCreate

Responses

  • 201

    Created plan item

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/training-plans/{id}/goals

Add an item to a training plan

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-plans/example-id/goals"

Adds a text item to a draft plan. Published plans return 409 CONFLICT. Default approval rule is `{ type: "self" }`. admin only.

Operation ID: addTrainingPlanGoal

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonTrainingGoalCreate

Responses

  • 201

    Created plan item

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/training-goals/{id}

Get a training plan item

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-goals/example-id"

Returns one plan item (goal) by id, including instructional text, expiry policy, and approval rule.

Operation ID: getTrainingGoal

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Plan item

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

put/v1/training-goals/{id}

Update a training plan item

Example request

curl -sS \
  -X PUT \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-goals/example-id"

Updates a draft item. Items on published plans return 409 CONFLICT. Setting approvalRule type `none` with evidenceRequired false returns 422 VALIDATION_ERROR. admin only.

Operation ID: updateTrainingGoal

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonTrainingGoalUpdate

Responses

  • 200

    Updated plan item

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/training-goals/{id}

Deactivate a training plan item

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-goals/example-id"

Sets the item inactive on a draft plan. Published plans return 409 CONFLICT; create a new version instead. admin only.

Operation ID: deactivateTrainingGoal

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Plan item marked inactive

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Training plans

Text-based training plans (preferred path prefix `/v1/training-plans`).

get/v1/training-plans

List training plans

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-plans"

Returns training plans in the organisation, including drafts and inactive versions. Alias of `/v1/training-programmes`. Any authenticated actor type may read.

Operation ID: listTrainingPlans

Parameters

NameInTypeDescription
statusquerystring—
scopequerystring—
brandIdquerystring—

Responses

  • 200

    Training plans

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/training-plans

Create training plan

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-plans"

Creates a draft plan. Add items, then publish before assigning. Alias of `/v1/training-programmes`. admin only.

Operation ID: createTrainingPlan

Request body(required)

  • application/jsonTrainingPlanCreate

Responses

  • 201

    Created draft plan

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/training-plans/{id}

Get training plan

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-plans/example-id"

Returns the plan and its items (`goals` and alias `items`). Alias of `/v1/training-programmes`. 404 NOT_FOUND if missing.

Operation ID: getTrainingPlan

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Plan with items

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

put/v1/training-plans/{id}

Update training plan

Example request

curl -sS \
  -X PUT \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-plans/example-id"

Updates a draft plan. Published plans are immutable (409 CONFLICT); create a new version instead. Alias of `/v1/training-programmes`. admin only.

Operation ID: updateTrainingPlan

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonTrainingPlanUpdate

Responses

  • 200

    Updated plan

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/training-plans/{id}

Deactivate training plan

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-plans/example-id"

Sets `active` to false. Existing assignments are unchanged. Alias of `/v1/training-programmes`. admin only.

Operation ID: deactivateTrainingPlan

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Plan marked inactive

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/training-plans/{id}/publish

Publish training plan

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-plans/example-id/publish"

Marks the plan published so it can be assigned. Published content cannot be edited. Alias of `/v1/training-programmes`. admin only.

Operation ID: publishTrainingPlan

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Published plan

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/training-plans/{id}/new-version

Create a new training plan version

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-plans/example-id/new-version"

Copies the plan and its items into a new draft version that can be edited. Alias of `/v1/training-programmes`. admin only.

Operation ID: newVersionTrainingPlan

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 201

    New draft version

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/training-plans/{id}/assign

Assign training plan to people

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-plans/example-id/assign"

Creates assignments for each required item. The plan must be published (422 VALIDATION_ERROR otherwise). Duplicate assignments are skipped. admin only.

Operation ID: assignTrainingPlan

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonBulkAssignBody

Responses

  • 201

    Created assignments (existing ones are not duplicated)

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/training-plans/{id}/assign-by-role

Assign training plan by role

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-plans/example-id/assign-by-role"

Assigns the published plan to everyone currently holding the given role. Returns an empty list if nobody has that role. admin only.

Operation ID: assignTrainingPlanByRole

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonAssignByRoleBody

Responses

  • 201

    Created assignments

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Requirements

Readiness rules and where they apply.

get/v1/requirements

List requirements

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/requirements"

Returns readiness requirements in the organisation, including inactive ones. Any authenticated actor type may read.

Operation ID: listRequirements

Responses

  • 200

    Requirements

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/requirements

Create a requirement

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/requirements"

Creates a published requirement. `config` must include the fields required by `type` or the API returns 422 VALIDATION_ERROR. admin only.

Operation ID: createRequirement

Request body(required)

  • application/jsonRequirementCreate

Responses

  • 201

    Created requirement

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/requirements/{id}

Get a requirement

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/requirements/example-id"

Returns one requirement by id. 404 NOT_FOUND if missing.

Operation ID: getRequirement

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Requirement

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

put/v1/requirements/{id}

Update a requirement

Example request

curl -sS \
  -X PUT \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/requirements/example-id"

Updates a requirement and stores the previous version in `/versions`. Invalid type/config combinations return 422 VALIDATION_ERROR. admin only.

Operation ID: updateRequirement

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonRequirementUpdate

Responses

  • 200

    Updated requirement

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/requirements/{id}

Deactivate a requirement

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/requirements/example-id"

Sets `active` to false. Bindings remain. admin only.

Operation ID: deactivateRequirement

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Requirement marked inactive

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/requirements/{id}/versions

List requirement versions

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/requirements/example-id/versions"

Returns historical snapshots taken before each update, plus the current version number.

Operation ID: listRequirementVersions

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Prior versions and current version number

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/requirement-bindings

List requirement bindings

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/requirement-bindings"

Returns where requirements apply (organisation, role, site, equipment, or work-requirement set).

Operation ID: listRequirementBindings

Responses

  • 200

    Bindings

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/requirement-bindings

Bind a requirement to a scope

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/requirement-bindings"

Attaches a requirement to org, role, site, equipment, or a work-requirement set. `scopeId` is required unless `scopeType` is org (422). Duplicate bindings return 409 CONFLICT. admin only.

Operation ID: createRequirementBinding

Request body(required)

  • application/jsonRequirementBindingCreate

Responses

  • 201

    Created binding

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/requirement-bindings/{id}

Delete a requirement binding

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/requirement-bindings/example-id"

Removes a scope binding. The requirement itself is unchanged. admin only.

Operation ID: deleteRequirementBinding

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Binding deleted

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Assignments

Assign, start, complete, fail, waive, or cancel training.

get/v1/users/{userId}/training-assignments

List user training assignments

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/training-assignments"

Returns assignments for this person. Member actors may only list themselves.

Operation ID: listUserTrainingAssignments

Parameters

NameInTypeDescription
userId*pathstringUser id

Responses

  • 200

    Assignments

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/training-assignments

Assign training to a user

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/training-assignments"

Creates assignments for a published plan or a single item. Provide `planId`/`programmeId` or `goalId`. Unpublished plans return 422 VALIDATION_ERROR. Duplicates are skipped. admin, area-manager, or manager.

Operation ID: createUserTrainingAssignments

Parameters

NameInTypeDescription
userId*pathstringUser id

Request body(required)

  • application/jsonAssignmentCreate

Responses

  • 201

    Created assignments

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/training-assignments/{assignmentId}/evidence

Add evidence to a user assignment

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/training-assignments/example-id/evidence"

Appends text evidence or notes. Provide at least one of notes, evidenceText, or evidenceRefs (422 otherwise). Moves not_started to in_progress.

Operation ID: addUserAssignmentEvidence

Parameters

NameInTypeDescription
userId*pathstringUser id
assignmentId*pathstringTraining assignment id

Request body(required)

  • application/jsonEvidenceBody

Responses

  • 200

    Assignment with evidence attached

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/training-assignments/{assignmentId}/request-sign-off

Request sign-off for a user assignment

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/training-assignments/example-id/request-sign-off"

Same as complete with an empty body: self-approved items finish immediately; manager-approved items move to awaiting_sign_off. Already finished items return 409 CONFLICT.

Operation ID: requestUserAssignmentSignOff

Parameters

NameInTypeDescription
userId*pathstringUser id
assignmentId*pathstringTraining assignment id

Responses

  • 200

    Assignment after sign-off request

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/training-assignments/{assignmentId}/start

Start a user assignment

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/training-assignments/example-id/start"

Moves the assignment from not_started to in_progress.

Operation ID: startUserAssignment

Parameters

NameInTypeDescription
userId*pathstringUser id
assignmentId*pathstringTraining assignment id

Responses

  • 200

    Started assignment

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/training-assignments/{assignmentId}/complete

Complete a user assignment

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/training-assignments/example-id/complete"

Submits the item. If the caller may sign it off (including self-approval), it is signed and completed. Otherwise status becomes awaiting_sign_off. Evidence-required items without notes/evidence return 422. Already finished items return 409 CONFLICT.

Operation ID: completeUserAssignment

Parameters

NameInTypeDescription
userId*pathstringUser id
assignmentId*pathstringTraining assignment id

Request body

  • application/jsonCompleteAssignmentBody

Responses

  • 200

    Assignment plus sign-off when the caller could complete it

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/training-assignments/{assignmentId}/fail

Fail a user assignment

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/training-assignments/example-id/fail"

Marks the item failed with a reason. Finished items return 409 CONFLICT. admin or manager.

Operation ID: failUserAssignment

Parameters

NameInTypeDescription
userId*pathstringUser id
assignmentId*pathstringTraining assignment id

Request body(required)

  • application/jsonReasonBody

Responses

  • 200

    Failed assignment

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/training-assignments/{assignmentId}/waive

Waive a user assignment

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/training-assignments/example-id/waive"

Marks the item waived with a reason so it no longer blocks completion. admin, area-manager, or manager.

Operation ID: waiveUserAssignment

Parameters

NameInTypeDescription
userId*pathstringUser id
assignmentId*pathstringTraining assignment id

Request body(required)

  • application/jsonReasonBody

Responses

  • 200

    Waived assignment

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

delete/v1/users/{userId}/training-assignments/{assignmentId}

Cancel a user assignment

Example request

curl -sS \
  -X DELETE \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/training-assignments/example-id"

Deletes an assignment that is not complete. Completed training returns 409 CONFLICT. admin, area-manager, or manager.

Operation ID: cancelUserAssignment

Parameters

NameInTypeDescription
userId*pathstringUser id
assignmentId*pathstringTraining assignment id

Responses

  • 200

    Assignment cancelled

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/training-assignments

List training assignments

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-assignments"

Returns assignments in the organisation. Filter with `userId`, `planId`/`programmeId`, and `status`. Member actors only see their own assignments (the userId query is ignored).

Operation ID: listTrainingAssignments

Parameters

NameInTypeDescription
userIdquerystringFilter by user. Ignored for member actors, who only see their own assignments.
planIdquerystringFilter by training plan id. Alias of programmeId.
programmeIdquerystringFilter by training programme id. Alias of planId.
statusquerystringFilter by assignment status.

Responses

  • 200

    Assignments

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/training-assignments/{id}

Get a training assignment

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-assignments/example-id"

Returns an assignment with nested user, plan text, and item text. Member actors may only fetch their own (403 FORBIDDEN otherwise). 404 NOT_FOUND if missing.

Operation ID: getTrainingAssignment

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Assignment with plan and item text

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

patch/v1/training-assignments/{id}

Patch a training assignment

Example request

curl -sS \
  -X PATCH \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-assignments/example-id"

Updates due date, notes, priority, or status. Cannot set status to `complete` or `awaiting_sign_off` (422 VALIDATION_ERROR); use complete or sign-off. admin or manager.

Operation ID: patchTrainingAssignment

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonAssignmentPatch

Responses

  • 200

    Updated assignment

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Sign-off

Manager or trainer confirmation that a plan item is complete.

post/v1/training-signoffs

Record a training sign-off

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-signoffs"

Confirms a plan item is complete for a person. The caller must satisfy the item's approval rule (403 FORBIDDEN otherwise). admin or manager.

Operation ID: createTrainingSignOff

Request body(required)

  • application/jsonSignOffCreate

Responses

  • 201

    Created sign-off

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/users/{userId}/signoffs

List user sign-offs

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/signoffs"

Returns sign-off records for a person, including revoked ones.

Operation ID: listUserSignOffs

Parameters

NameInTypeDescription
userId*pathstringUser id

Responses

  • 200

    Sign-offs

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/training-signoffs/{id}/revoke

Revoke a training sign-off

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/training-signoffs/example-id/revoke"

Revokes a completed sign-off and emits TrainingSignOffRevoked plus ReadinessChanged. admin or manager. 404 NOT_FOUND if missing.

Operation ID: revokeTrainingSignOff

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Request body(required)

  • application/jsonReasonBody

Responses

  • 200

    Revoked sign-off

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Site inductions

Per-person induction records keyed by an opaque location id.

get/v1/users/{userId}/site-inductions

List site inductions

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/site-inductions"

Returns site induction records for a person, including revoked ones.

Operation ID: listuserSiteInductions

Parameters

NameInTypeDescription
userId*pathstringUser id

Responses

  • 200

    Site inductions

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/site-inductions

Record a site induction

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/site-inductions"

Records that a person completed induction for a site. admin or manager.

Operation ID: createUserSiteInduction

Parameters

NameInTypeDescription
userId*pathstringUser id

Request body(required)

  • application/jsonSiteInductionCreate

Responses

  • 201

    Created induction

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/site-inductions/{inductionId}/revoke

Revoke a site induction

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/site-inductions/example-id/revoke"

Marks a site induction revoked. admin or manager.

Operation ID: revokeUserSiteInduction

Parameters

NameInTypeDescription
userId*pathstringUser id
inductionId*pathstringSite induction record id

Request body(required)

  • application/jsonReasonBody

Responses

  • 200

    Revoked induction

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Approvals

Company, medical, or custom authorisations.

get/v1/users/{userId}/approvals

List user approvals

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/approvals"

Returns approval records for a person, including revoked ones.

Operation ID: listuserApprovals

Parameters

NameInTypeDescription
userId*pathstringUser id

Responses

  • 200

    Approvals

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/approvals

Grant an approval

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/approvals"

Grants a company, medical, or custom approval to a person. admin or manager.

Operation ID: createUserApproval

Parameters

NameInTypeDescription
userId*pathstringUser id

Request body(required)

  • application/jsonApprovalCreate

Responses

  • 201

    Granted approval

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/users/{userId}/approvals/{approvalId}/revoke

Revoke an approval

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/approvals/example-id/revoke"

Marks an approval revoked. admin or manager.

Operation ID: revokeUserApproval

Parameters

NameInTypeDescription
userId*pathstringUser id
approvalId*pathstringApproval record id

Request body(required)

  • application/jsonReasonBody

Responses

  • 200

    Revoked approval

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Readiness

Evaluate whether a person may perform work.

post/v1/readiness/evaluate

Evaluate one person's readiness

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/readiness/evaluate"

Computes whether a person meets the composed requirements for a role, site, equipment set, explicit requirement ids, and/or a work-requirement set. Member actors may only evaluate themselves (403 FORBIDDEN otherwise).

Operation ID: evaluateReadiness

Request body(required)

  • application/jsonReadinessEvaluateRequest

Responses

  • 200

    Ready flag, explanation, and unsatisfied reasons

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/readiness/snapshots

Create an eligibility snapshot

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/readiness/snapshots"

Evaluates many people against many work packages and stores the matrix for planning systems. admin or manager.

Operation ID: createEligibilitySnapshot

Request body(required)

  • application/jsonEligibilitySnapshotRequest

Responses

  • 201

    Stored eligibility matrix

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/readiness/snapshots/{id}

Get an eligibility snapshot

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/readiness/snapshots/example-id"

Returns a previously stored snapshot. 404 NOT_FOUND if missing. admin or manager.

Operation ID: getEligibilitySnapshot

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Stored snapshot

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Planning

Department training qualification used by the Planning solver.

post/v1/planning/qualification

Department training qualification for Planning

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  "https://api.mayawealth.co.uk/training/v1/planning/qualification"

Evaluates whether people are fully trained for venue departments, in progress (assist/training), or not yet eligible. Used by the Planning solver.

Operation ID: listPlanningQualification

Request body(required)

  • application/jsonPlanningQualificationRequest

Responses

  • 200

    Department qualification

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Progress

Training completion percentages.

get/v1/users/{userId}/training

Get user training progress

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/users/example-id/training"

Returns percent-complete for each assigned plan, counting required items with a valid unrevoked sign-off. Member actors may only fetch themselves.

Operation ID: getUserTrainingProgress

Parameters

NameInTypeDescription
userId*pathstringUser id

Responses

  • 200

    Per-plan completion counts

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/training-programmes/{id}/progress

Get plan enrolment progress

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/training-programmes/example-id/progress"

Returns how many enrolled people have completed, are in progress, or are overdue on this plan. 404 NOT_FOUND if the plan is missing.

Operation ID: getTrainingProgrammeProgress

Parameters

NameInTypeDescription
id*pathstringResource id within the caller's organisation

Responses

  • 200

    Enrolment counts

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Compliance

Organisation-wide expiry and requirement summaries.

get/v1/compliance/summary

Organisation compliance summary

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/compliance/summary"

Counts valid, expiring, expired, revoked, and missing certifications and requirements across active people. Member actors receive the organisation-wide view (same payload as staff).

Operation ID: getComplianceSummary

Responses

  • 200

    Certification and requirement counts

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Integration events

Domain events for integrations and webhooks.

get/v1/events

List domain events

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/events"

Returns the most recent 200 domain events for integrations. admin or manager.

Operation ID: listDomainEvents

Responses

  • 200

    Domain events, newest first

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Audit

Admin audit log of mutations.

get/v1/audit

Training audit trail

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/audit"

Returns the newest audit events in the caller's organisation. admin only.

Operation ID: listTrainingAudit

Responses

  • 200

    Audit log, newest first

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Expiry alerts

Certification expiry views and the scan that emits domain events.

get/v1/alerts/expiry

List expiry alerts

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/alerts/expiry"

Returns certifications that are expired or expiring soon. Member actors only see their own alerts.

Operation ID: listExpiryAlerts

Responses

  • 200

    Expiry alerts

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

post/v1/expiry/scan

Run expiry scan

Example request

curl -sS \
  -X POST \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/expiry/scan"

Emits CertificationExpired, CertificationExpiring, and refresher assignment events that have not already been written. admin only.

Operation ID: scanExpiry

Responses

  • 200

    Scan timestamp and emitted event keys

    application/json

  • 400

    Malformed JSON or otherwise unusable request. `error.code` is typically VALIDATION_ERROR.

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 404

    The requested resource was not found in this organisation. `error.code`: NOT_FOUND.

    application/json

  • 409

    The change conflicts with current state. `error.code`: CONFLICT. Typical causes: duplicate catalog name, published plan is immutable, training already complete.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Self

The calling actor's own records (`/v1/me`).

get/v1/me

Get the current actor

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/me"

Returns JWT actor claims, the matching user row if it exists, and that person's assignments. `user` is null when no `/v1/users` row matches `actorId`.

Operation ID: getCurrentUser

Responses

  • 200

    Caller identity and assignments

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/me/training

Get a link to own training progress

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/me/training"

Returns the caller's user id and the `/v1/users/{id}/training` href.

Operation ID: getCurrentUserTrainingLink

Responses

  • 200

    Link to own training progress

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

Analytics

Competency matrix and skills-gap views.

get/v1/competency-matrix

Get competency matrix

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/competency-matrix"

Returns composed requirements vs people. Optional `roleId` limits people to that role and composes role-scoped requirements. admin or manager.

Operation ID: getCompetencyMatrix

Parameters

NameInTypeDescription
roleIdquerystringIf set, only people assigned to this role are included, and role-scoped requirements are composed.

Responses

  • 200

    People as rows and requirements as cells

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json

get/v1/skills-gap

Get skills gap

Example request

curl -sS \
  -X GET \
  -H "Accept: application/json" \
  -H "Authorization: Bearer <jwt>" \
  "https://api.mayawealth.co.uk/training/v1/skills-gap"

Returns unsatisfied skill / skill_level requirements. Filter with `userId` and/or `roleId`. admin or manager.

Operation ID: getSkillsGap

Parameters

NameInTypeDescription
userIdquerystringIf set, only this person's skill gaps are returned.
roleIdquerystringIf set, gaps are computed against this role's skill requirements.

Responses

  • 200

    Unsatisfied skill requirements

    application/json

  • 401

    Missing or invalid JWT. `error.code`: UNAUTHORIZED. Send `Authorization: Bearer <jwt>`.

    application/json

  • 403

    Authenticated but not permitted. `error.code`: FORBIDDEN. Actor types: admin, area-manager, manager, member.

    application/json

  • 422

    Validation or business-rule failure. `error.code`: VALIDATION_ERROR. Typical causes: organisation not created yet, missing required config, unpublished plan, missing evidence.

    application/json

  • 429

    Rate limit exceeded. `error.code`: RATE_LIMITED.

    application/json

  • 500

    Unexpected server error. `error.code`: INTERNAL.

    application/json