API reference
Every operation, parameter, response and field, generated from the OpenAPI contract the API serves.
The reference pages are generated from the same contract the API serves at https://api.kapiworks.com/v1/openapi.json, during each release of these docs. Download it to generate a client or to diff one revision against another. This is contract revision 1.2.0.
Base URL
https://api.kapiworks.com/v1
Every endpoint answers GET and HEAD over HTTPS, with JSON. Send the company API key in the Authorization header; see Authentication.
Operations
| Endpoint | Returns | Scope |
|---|---|---|
GET /v1/training-records | Training records at a moment | training:read |
GET /v1/training-records/period | Every training record owed during a period | training:read |
GET /v1/certificates | Certificates at a moment | certificates:read |
GET /v1/people | Employees and invitations during a period | people:read |
GET /v1/courses | Course versions referenced by employee records | training:read |
GET /v1/snapshot | Check whether anything changed | Any |
Every response
X-Request-Id: a UUID for this call. Quote it to support.Cache-Control: no-store: responses hold company data, so nothing on the way may store them.RateLimit-PolicyandRateLimit: your remaining calls this minute, for the key and for the company. See Rate limits.
Errors are application/problem+json with a stable code; see Errors.
Paged registers
Registers answer one page at a time, with the same envelope: data, total, snapshot and next_cursor. Follow next_cursor until it is null; Keeping data in sync explains how.
The field dictionary explains every field of every register.
Example app
A runnable Node 24 receiving server that pulls all five registers safely, with its full source.
Training records at a moment
Every record an employee owes at `as_at`, with its outcome then. Requires `training:read`. Names, work emails and certificate check codes also need `people:read`; without it they are left out.