Skip to main content
Quick Summary: A training belongs to a person skill — the skill must already be on the person’s profile before a training can be recorded. Approval is a full request-and-decide workflow with delegation; renewal supersedes records without deleting them.

Attributes

Statuses

Approval

  • GET /training-approvals?status= covers every decidable state, not just the pending queue.
  • GET /trainings/{id}/potential-approvers unions three unrelated authorities: global-admin/full-access users, the submitter’s entire chain of command, and holders of a trainer-designating skill flag (expertsOnly=true returns just the flag holders).
  • GET /people/{id}/approval-activity lists everything a person decided; GET /people/{id}/approval-requests is the other side.
Entitlement is point-in-time and not retained. The decision records who decided, never under which authority — flags get removed, reporting lines change. Whether an approval came from a trainer flag or the chain of command cannot be reconstructed later.

Renewal supersedes, it does not delete

POST /skills/{id}/renew-training marks affected trainings needs_reapproval across everyone holding the skill — a fan-out counted against the bulk rate-limit bucket. Preview first with GET /skills/{id}/renew-training/preview. Superseded records stay readable through GET /people/{personId}/skills/{skillId}/training-log, the only read that spans live and superseded records together.