Skip to content
Log in Request a demo

Employees

The /api/v1/employees endpoint group covers the full employee synchronization cycle with external HR and payroll systems: creating employee records, updating personal data, maintaining historical tables for employments, positions, and compensations, and archiving terminated employees.

POST /api/v1/employees

Creates a new employee record. Email is not required at creation time.

Required fields:

FieldTypeDescription
first_namestringFirst name
last_namestringLast name
date_effective_fromstring (date)Hire date

Optional fields:

FieldDescription
middle_nameMiddle name
division_idDivision ID
department_idDepartment ID
position_idPosition ID
position_level_idGrade / level ID
location_idLocation ID
legal_entity_idLegal entity ID
reporting_to_idManager ID
employment_contract_idEmployment contract type ID
employment_type_idEmployment type ID
employment_work_pattern_idWork pattern ID
base_salary_grossGross salary
base_salary_netNet salary
currencyCurrency code (ISO 4217)
per_typePeriod: hourly, weekly, monthly, yearly

Request example:

{
"first_name": "John",
"last_name": "Smith",
"date_effective_from": "2024-01-15",
"department_id": 42,
"position_id": 7,
"base_salary_gross": "150000",
"currency": "USD",
"per_type": "monthly"
}

GET /api/v1/employees/{employee_id}

Returns the full employee profile including current position, employment, compensation, and custom fields (custom_fields).


PUT /api/v1/employees/{employee_id}

Updates personal data and custom fields in a single request.

Required fields: first_name, last_name

Optional fields:

FieldDescription
emailWork email
email_personalPersonal email
phoneWork phone
phone_personalPersonal phone
date_birthDate of birth
genderGender
personnel_numberPersonnel number
address_1, address_2, city, state, zipAddress fields
country_idCountry ID
custom_fieldsdict {slug: value} - employee custom field values

Request example:

{
"first_name": "John",
"last_name": "Smith",
"email": "[email protected]",
"personnel_number": "EMP-001",
"custom_fields": {
"tax_id": "123456789"
}
}

DELETE /api/v1/employees/{employee_id}

Soft-deletes the employee (termination). All data is preserved.


A position record captures department, job title, manager, and location at a specific effective date.

POST /api/v1/employees/{employee_id}/positions
FieldTypeDescription
date_effective_fromstring (date)Effective start date
division_idintegerDivision ID
department_idintegerDepartment ID
position_idintegerPosition ID
position_level_idintegerGrade/level ID
reporting_to_idintegerManager ID
legal_entity_idintegerLegal entity ID
location_idintegerLocation ID
commentstringComment
PUT /api/v1/employees/{employee_id}/positions/{id}
DELETE /api/v1/employees/{employee_id}/positions/{id}
POST /api/v1/employees/{employee_id}/positions/search

Returns a paginated list of position records with full nested objects: department, division, position, manager, legal_entity, location.


An employment record captures contract type, employment type, work pattern, and the employment period.

GET /api/v1/employees/{employee_id}/employments

Returns the full list of employment records (current and past).

POST /api/v1/employees/{employee_id}/employments
FieldTypeDescription
date_effective_fromstring (date)Start date (hire date)
date_effective_tostring (date)End date / termination date
employment_type_idintegerEmployment type ID
employment_contract_idintegerContract type ID
work_pattern_idintegerWork pattern ID
date_probation_endsstring (date)Probation end date
commentstringComment
PUT /api/v1/employees/{employee_id}/employments/{id}
DELETE /api/v1/employees/{employee_id}/employments/{id}

A compensation record captures base salary (gross/net) effective from a specific date.

POST /api/v1/employees/{employee_id}/compensations
FieldTypeDescription
date_effective_fromstring (date)Effective start date
base_salary_grossnumberGross salary
base_salary_netnumberNet salary
currencystringCurrency (ISO 4217)
per_typestringhourly, weekly, monthly, yearly
change_reason_idintegerChange reason ID
commentstringComment
POST /api/v1/employees/{employee_id}/compensations/search

Returns a paginated list of compensation records.

PUT /api/v1/employees/{employee_id}/compensations/{id}
DELETE /api/v1/employees/{employee_id}/compensations/{id}

Additional compensations are bonuses and allowances stored as a separate entity (not to be confused with custom table rows).

GET /api/v1/employees/{employee_id}/additional-compensations
POST /api/v1/employees/{employee_id}/additional-compensations
FieldTypeDescription
compensation_type_idintegerCompensation type ID (required)
typestringone_time or recurring (required)
amountnumberAmount (required)
date_effective_fromstring (date)Effective start date (required)
date_effective_tostring (date)Effective end date
frequency_typestringmonthly, quarterly, yearly (for recurring)
currencystringCurrency code
descriptionstringDescription
commentstringComment

Update / delete an additional compensation

Section titled “Update / delete an additional compensation”
PUT /api/v1/employees/{employee_id}/additional-compensations/{id}
DELETE /api/v1/employees/{employee_id}/additional-compensations/{id}

Write rows to custom tables linked to an employee (e.g. “Accrued Bonuses”, “Payment Details”). Get the list of available tables and their field slugs via GET /api/v1/custom-fields/tables.

POST /api/v1/employees/{employee_id}/field-tables/{table_id}/rows
FieldTypeDescription
date_effective_fromstring (date)Effective date of this row
cellsobject{slug: value} - cell values

Supported value types in cells:

  • text / textarea / email / phone - string
  • number / currency / percentage - number
  • date - string YYYY-MM-DD
  • datetime - ISO 8601 string
  • select - option ID
  • switch - boolean
  • employee_reference - integer (employee ID)

Request example:

{
"date_effective_from": "2024-01-01",
"cells": {
"bonus_amount": 5000,
"bonus_currency": 1,
"bonus_comment": "Q1 performance bonus"
}
}
PUT /api/v1/employees/{employee_id}/field-tables/{table_id}/rows/{id}
DELETE /api/v1/employees/{employee_id}/field-tables/{table_id}/rows/{id}

Full new-hire sync from an HR/payroll system:

  1. Create the employee - POST /api/v1/employees with basic data and hire date.
  2. Update personal data - PUT /api/v1/employees/{id} with email, phone, and custom fields.
  3. Record employment - POST /api/v1/employees/{id}/employments with contract type.
  4. Record compensation - POST /api/v1/employees/{id}/compensations with salary.
  5. Write custom table rows - POST /api/v1/employees/{id}/field-tables/{table_id}/rows for bonuses, payment details, etc.

On termination:

  1. Close the employment record - PUT /api/v1/employees/{id}/employments/{id} (add date_effective_to).
  2. Archive the employee - DELETE /api/v1/employees/{id}.