Skip to main content
Own Workforce is the social pillar of Dcycle: headcount and FTE, contract composition, remuneration and the gender pay gap, training hours, absenteeism and workplace accidents. It is the data behind the ESRS S1 disclosures, and it is entirely separate from Employees, which tracks commuting for Scope 3 emissions.
Writing from your systems. POST /v2/own-workforce/employees creates employees with their contracts and remunerations; trainings (POST /v2/own-workforce/trainings) and absences and accidents (POST /v2/own-workforce/absences) have their own v2 routes, and each of the three has a v2 delete. To load a file, use the Imports API with the Own Workforce Import Templates. Deletion is also available per record and in bulk. To correct a stored record, delete it and send it again (see Correcting data).

The shape of the data

One employee row carries the person’s demographics and owns everything else:
Only the employee row carries an organization_id. Contracts, remunerations, trainings and absences resolve their owning organization by walking up to the employee, which is why most of their endpoints require an id of the parent rather than offering a free-standing list.

Authentication

All requests need an API key and the organization it belongs to. See the Authentication Guide.

Headers

string
required
Your API key for authenticationExample: sk_live_1234567890abcdef
string
required
Your organization UUIDExample: a8315ef3-dd50-43f8-b7ce-d839e68d51fa
The key is bound to its organization: a key issued for one organization cannot be used with another organization’s id.

Group view

Holdings can widen most list endpoints to the whole accepted business family with consolidate_group=true, then narrow it again with organization_id[]. Without it, a list returns the header organization only. Rows returned under group view carry organization_id, organization_name and organization_logo_url so you can tell subsidiaries apart.

Aggregates

For headcount, FTE, average remuneration, the gender pay gap, training hours and absence rates — already grouped by country, gender, job category, nationality or age — use Query datasets with one of the seven own-workforce dataset keys. That is a far cheaper path than paging these endpoints and aggregating client-side. List available datasets enumerates the keys.

Personal data

These endpoints return birth dates, gender, disability grade, individual salaries, sick leave and workplace accident context. That is personal data, and parts of it are special-category data under the GDPR. Treat responses accordingly: do not log them verbatim, do not cache them in shared stores, and restrict the API keys that can reach them.

Available Endpoints

List employees

Paginated employee list with filters

Get employee

A single employee by id

Contracts & remuneration

Contracts of an employee, and salaries of a contract

Trainings

Training records with hours and type

Absences & accidents

Sick leave and workplace accidents

Create employees (v2)

Employees, contracts and remunerations from your HR system

Delete employees (v2)

Employees by id, with everything recorded about them

Create trainings (v2)

Trainings of your employees

Delete trainings (v2)

Trainings by id

Create absences (v2)

Absences and accidents at work of your employees

Delete absences (v2)

Absences and accidents by id

Upload a CSV

Presigned upload, the legacy write path