Skip to content
Log in Request a demo

Custom Tables

Custom tables are user-defined data tables configured in the Skailer interface. Examples: “Accrued Bonuses”, “Paid Bonuses”, “Payment Details”, etc. The API lets you read the table configuration and retrieve rows with filtering.

GET /api/v1/custom-fields/tables

Returns all custom tables of the organization configured for employees.

Response fields (per table):

FieldTypeDescription
idintegerTable ID
slugstringUnique table slug
titlestringTable name
table_typestringTable type (see below)
is_historicalbooleanWhether the table is historical (date-effective rows)
table_fieldsarrayList of table fields

Table types (table_type):

ValueDescription
customUser-defined custom table
employee_positionsSystem position history table
employee_employmentsSystem employment history table
employee_compensationsSystem compensation history table
employee_additional_compensationsSystem additional compensations table

Fields per table field (table_fields):

FieldTypeDescription
idintegerField ID
slugstringField slug (used as key in cells when writing rows)
titlestringField name
field_typestringValue type: text, number, date, datetime, select, switch, employee_reference, etc.
optionsarrayOptions for select fields
is_mandatorybooleanWhether the field is mandatory
is_archivedbooleanWhether the field is archived

Response example:

[
{
"id": 15,
"slug": "accrued_bonuses",
"title": "Accrued Bonuses",
"table_type": "custom",
"is_historical": true,
"table_fields": [
{
"id": 101,
"slug": "bonus_amount",
"title": "Amount",
"field_type": "number",
"options": []
},
{
"id": 102,
"slug": "bonus_currency",
"title": "Currency",
"field_type": "select",
"options": [
{ "id": 1, "title": "USD" },
{ "id": 2, "title": "EUR" }
]
}
]
}
]

POST /api/v1/custom-fields/tables/{table_id}/rows/search

Search and export rows from a specific table. Supports filtering, pagination, and sorting.

Request parameters:

FieldTypeDescription
page_numberintegerPage number (default: 1)
employee_idsarray[integer]Filter by employees
position_idsarray[integer]Filter by positions
department_idsarray[integer]Filter by departments
division_idsarray[integer]Filter by divisions
location_idsarray[integer]Filter by locations
employee_lifecycle_statusesarray[string]Statuses: hired, employed, terminated, on_leave, on_parental_leave
date_effective_fromstring (date)Rows effective on or after this date
date_effective_tostring (date)Rows effective on or before this date
field_filtersarrayCustom filters on field values
sortingobjectSort configuration
textstringText search

Response fields (per row):

FieldTypeDescription
idintegerRow ID
employee_idintegerEmployee ID
date_effective_fromstringRow effective date
is_currentbooleanWhether this is the current row
cellsarrayFilled cells with values and field configuration

Request example - export bonuses for a quarter:

{
"page_number": 1,
"date_effective_from": "2024-01-01",
"date_effective_to": "2024-03-31",
"employee_lifecycle_statuses": ["employed"]
}

Goal: export employee bonuses for a period to a payroll system.

  1. Get table list:

    GET /api/v1/custom-fields/tables

    Find the table with the target slug, save its id and field ids.

  2. Fetch rows for the period:

    POST /api/v1/custom-fields/tables/{table_id}/rows/search

    Use date_effective_from / date_effective_to filters.

  3. Use the field slug from the table configuration to interpret cell values.

Tip: cache the table configuration (step 1) - it changes infrequently. Fetch rows (step 2) on every sync run.


To add, update, or delete rows for a specific employee, use the methods described in Employees → Custom table rows.