Quick Summary: SkillsDB keeps three append-only activity logs. All three share one envelope — what happened, when, who did it, what it relates to — with documented per-scope extras. Activity endpoints live with the object they describe; this page defines the shape, filters and pagination they all share.
The envelope
Every activity event, on every scope, carries:The three scopes
The identity-provider scope is the only one recording changes SkillsDB did not originate — which is exactly what to check when data appears to change by itself — and the only one carrying before-and-after values. Its
performedById is always null: the performer is the identity provider. It is also company-scoped rather than per-object, since provisioning events concern the whole tenant.
Shared filters
All three scopes take the same filter set —event, from, to, performedBy, relatedPersonId — with the standard pagination (limit up to 200, offset up to 10,000). A filter a scope cannot support is rejected with a validation error, never silently ignored:
- The skill log records no related person →
relatedPersonIdis rejected there. - Identity-provider events have no SkillsDB performer →
performedByis rejected there. - The career log supports the full set, plus
bulkGroupIdto group the rows of one bulk operation.
event value is likewise a validation error rather than an empty page, so a typo never reads as “no activity”.
What is deliberately not here
- A company-wide change feed. Career and skill logs are scoped to one object; polling per object plus the identity-provider stream is the nearest v1 offers. The shared envelope is what makes a tenant-wide feed a later filter change rather than a new contract.
- Import runs. An import is a job with a status and a result, not an event — it does not fit this envelope and is deferred from v1.
- Row-level history tables. Internal audit exhaust, not an integration surface.