Skip to main content
This is a one-way read. The public API has no write endpoints, so OnTime cannot be the target of an automated sync. You can detect drift; applying it happens elsewhere. See Applying changes below.

Reading the directory

GET /api/public/v1/employees returns the whole directory in one response — there is no pagination.
The public employee shape is deliberately minimal: identity, department and status. It does not include manager, location, shift, joining date, compensation or contact details.

Choosing a match key

1

First run: match on code

Both systems typically know an employee number. Match on it, then record the OnTime id against each of your records.
2

Subsequent runs: match on the stored id

Immune to a code being reassigned or corrected.

The reconciliation

Applying changes

Because the public API is read-only, you have three options for acting on the drift:

Report it

Emit a drift report and let an administrator apply it in the console. Simple, auditable, and the right choice when drift is rare.

CSV import

For bulk onboarding, produce a CSV and use the directory’s bulk import. Remember imported employees need a password set before they can sign in.

MCP

The MCP server does expose employee create and update tools, acting as a bound employee with that person’s permissions. This is the only programmatic write path. See the AI & MCP tab.
Do not attempt to drive the internal /api/employees routes. They authenticate with a session cookie, are not versioned, and may change without notice.

Status values

Exited employees remain in the directory and continue to be returned by this endpoint — their attendance, payslips and documents are part of the statutory record. Filter them out yourself if your target system should not see them.

Scheduling

There is no employee-change webhook, so this is a poll. Daily is usually right; the directory does not change fast enough to justify more, and each run is a single request.