Quick Summary: A certification is a library entry: a name, a description, the type it is grouped under, and the authority that issues it. Full management over the API. What a person holds — their record, its approval workflow, evidence and expiry — is the separate Person Certification resource.
Attributes
Operations
Listing
Filterable byname, issuingAuthorityName and type (the type’s name); sortable by name and createdAt. See Filtering and Sorting.
Creating and updating
name is required on create; description, certificationTypeId, issuingAuthorityName and issuingAuthorityUrl are optional. A certificationTypeId must be one of the company’s types — an unknown id is a field-level validation-error, never a silent dangling reference.
On PATCH, an omitted field is left untouched and an explicit null clears description, certificationTypeId, issuingAuthorityName or issuingAuthorityUrl. Labels are not part of this body: attach and detach them through the label endpoints.
Deleting
Deletion is guarded. If anyone holds the certification, or any career includes it, the call answers 409 conflict with the counts:?confirm=true to proceed: the certification is soft-deleted and disappears from the library and from every career; holders’ records stay as history. An unheld, unlinked certification deletes immediately with 204.
Permissions
Every call is the intersection of the key’s scopes and what the acting person may do in the app. Reads, creates and updates are broadly permitted; delete is restricted to global administrators, and a key acting as a person who cannot delete receives insufficient-permissions. Two roles hold no certification permissions at all in the app today, so a key bound to a person in one of them is refused on every certification endpoint with the same problem type — bind the key to a person who can manage certifications.Related errors
- not-found — the id does not exist in your company (another company’s certification answers the same 404)
- validation-error — a missing name, an over-long field, or an unknown
certificationTypeId - conflict — the guarded delete above
- insufficient-scope / insufficient-permissions — see Permissions