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/healthHealth check
/healthExample 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/skillsList skills
/v1/skillsExample 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/skillsCreate skill
/v1/skillsExample 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
/v1/skills/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/skills/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/skills/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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/rolesList roles
/v1/rolesExample 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/rolesCreate role
/v1/rolesExample 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
/v1/roles/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/roles/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/roles/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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-typesList equipment types
/v1/equipment-typesExample 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-typesCreate equipment type
/v1/equipment-typesExample 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
/v1/equipment-types/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/equipment-types/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/equipment-types/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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-qualificationsList equipment qualifications
/v1/users/{userId}/equipment-qualificationsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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-qualificationsRecord an equipment qualification
/v1/users/{userId}/equipment-qualificationsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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}/revokeRevoke an equipment qualification
/v1/users/{userId}/equipment-qualifications/{qualificationId}/revokeExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| qualificationId* | path | string | Equipment 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-typesList certification types
/v1/certification-typesExample 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-typesCreate certification type
/v1/certification-typesExample 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
/v1/certification-types/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/certification-types/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/certification-types/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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}/renewRenew a certification
/v1/users/{userId}/certifications/{certificationId}/renewExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| certificationId* | path | string | User 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}/certificationsList user certifications
/v1/users/{userId}/certificationsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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}/certificationsIssue a certification
/v1/users/{userId}/certificationsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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}/revokeRevoke a certification
/v1/users/{userId}/certifications/{certificationId}/revokeExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| certificationId* | path | string | User 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-setsList work requirement sets
/v1/work-requirement-setsExample 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-setsCreate work requirement set
/v1/work-requirement-setsExample 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
/v1/work-requirement-sets/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/work-requirement-sets/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/work-requirement-sets/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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/usersList users
/v1/usersExample 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
| Name | In | Type | Description |
|---|---|---|---|
| employmentStatus | query | string | If 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/usersCreate user
/v1/usersExample 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
/v1/users/{userId}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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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
/v1/users/{userId}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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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
/v1/users/{userId}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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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}/skillsList user skills
/v1/users/{userId}/skillsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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}/skillsRecord a user skill
/v1/users/{userId}/skillsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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
/v1/users/{userId}/skills/{skillRecordId}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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| skillRecordId* | path | string | User 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
/v1/users/{userId}/skills/{skillRecordId}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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| skillRecordId* | path | string | User 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}/rolesList user roles
/v1/users/{userId}/rolesExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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}/rolesAssign a role to a user
/v1/users/{userId}/rolesExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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
/v1/users/{userId}/roles/{assignmentId}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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| assignmentId* | path | string | Role 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-programmesList training programmes
/v1/training-programmesExample 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
| Name | In | Type | Description |
|---|---|---|---|
| status | query | string | — |
| scope | query | string | — |
| brandId | query | string | — |
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-programmesCreate training programme
/v1/training-programmesExample 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
/v1/training-programmes/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/training-programmes/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/training-programmes/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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}/publishPublish training programme
/v1/training-programmes/{id}/publishExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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-versionCreate a new training programme version
/v1/training-programmes/{id}/new-versionExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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}/assignAssign training programme to people
/v1/training-programmes/{id}/assignExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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-roleAssign training programme by role
/v1/training-programmes/{id}/assign-by-roleExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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}/goalsAdd an item to a training programme
/v1/training-programmes/{id}/goalsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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}/goalsAdd an item to a training plan
/v1/training-plans/{id}/goalsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/training-goals/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/training-goals/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/training-goals/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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-plansList training plans
/v1/training-plansExample 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
| Name | In | Type | Description |
|---|---|---|---|
| status | query | string | — |
| scope | query | string | — |
| brandId | query | string | — |
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-plansCreate training plan
/v1/training-plansExample 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
/v1/training-plans/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/training-plans/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/training-plans/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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}/publishPublish training plan
/v1/training-plans/{id}/publishExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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-versionCreate a new training plan version
/v1/training-plans/{id}/new-versionExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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}/assignAssign training plan to people
/v1/training-plans/{id}/assignExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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-roleAssign training plan by role
/v1/training-plans/{id}/assign-by-roleExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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/requirementsList requirements
/v1/requirementsExample 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/requirementsCreate a requirement
/v1/requirementsExample 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
/v1/requirements/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/requirements/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/requirements/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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}/versionsList requirement versions
/v1/requirements/{id}/versionsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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-bindingsList requirement bindings
/v1/requirement-bindingsExample 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-bindingsBind a requirement to a scope
/v1/requirement-bindingsExample 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
/v1/requirement-bindings/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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-assignmentsList user training assignments
/v1/users/{userId}/training-assignmentsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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-assignmentsAssign training to a user
/v1/users/{userId}/training-assignmentsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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}/evidenceAdd evidence to a user assignment
/v1/users/{userId}/training-assignments/{assignmentId}/evidenceExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| assignmentId* | path | string | Training 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-offRequest sign-off for a user assignment
/v1/users/{userId}/training-assignments/{assignmentId}/request-sign-offExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| assignmentId* | path | string | Training 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}/startStart a user assignment
/v1/users/{userId}/training-assignments/{assignmentId}/startExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| assignmentId* | path | string | Training 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}/completeComplete a user assignment
/v1/users/{userId}/training-assignments/{assignmentId}/completeExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| assignmentId* | path | string | Training 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}/failFail a user assignment
/v1/users/{userId}/training-assignments/{assignmentId}/failExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| assignmentId* | path | string | Training 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}/waiveWaive a user assignment
/v1/users/{userId}/training-assignments/{assignmentId}/waiveExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| assignmentId* | path | string | Training 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
/v1/users/{userId}/training-assignments/{assignmentId}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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| assignmentId* | path | string | Training 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-assignmentsList training assignments
/v1/training-assignmentsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId | query | string | Filter by user. Ignored for member actors, who only see their own assignments. |
| planId | query | string | Filter by training plan id. Alias of programmeId. |
| programmeId | query | string | Filter by training programme id. Alias of planId. |
| status | query | string | Filter 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
/v1/training-assignments/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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
/v1/training-assignments/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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-signoffsRecord a training sign-off
/v1/training-signoffsExample 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}/signoffsList user sign-offs
/v1/users/{userId}/signoffsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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}/revokeRevoke a training sign-off
/v1/training-signoffs/{id}/revokeExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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-inductionsList site inductions
/v1/users/{userId}/site-inductionsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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-inductionsRecord a site induction
/v1/users/{userId}/site-inductionsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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}/revokeRevoke a site induction
/v1/users/{userId}/site-inductions/{inductionId}/revokeExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| inductionId* | path | string | Site 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}/approvalsList user approvals
/v1/users/{userId}/approvalsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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}/approvalsGrant an approval
/v1/users/{userId}/approvalsExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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}/revokeRevoke an approval
/v1/users/{userId}/approvals/{approvalId}/revokeExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User id |
| approvalId* | path | string | Approval 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/evaluateEvaluate one person's readiness
/v1/readiness/evaluateExample 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/snapshotsCreate an eligibility snapshot
/v1/readiness/snapshotsExample 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
/v1/readiness/snapshots/{id}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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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/qualificationDepartment training qualification for Planning
/v1/planning/qualificationExample 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}/trainingGet user training progress
/v1/users/{userId}/trainingExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId* | path | string | User 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}/progressGet plan enrolment progress
/v1/training-programmes/{id}/progressExample 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
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | string | Resource 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/summaryOrganisation compliance summary
/v1/compliance/summaryExample 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/eventsList domain events
/v1/eventsExample 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/auditTraining audit trail
/v1/auditExample 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/expiryList expiry alerts
/v1/alerts/expiryExample 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/scanRun expiry scan
/v1/expiry/scanExample 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/meGet the current actor
/v1/meExample 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/trainingGet a link to own training progress
/v1/me/trainingExample 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-matrixGet competency matrix
/v1/competency-matrixExample 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
| Name | In | Type | Description |
|---|---|---|---|
| roleId | query | string | If 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-gapGet skills gap
/v1/skills-gapExample 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
| Name | In | Type | Description |
|---|---|---|---|
| userId | query | string | If set, only this person's skill gaps are returned. |
| roleId | query | string | If 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