Skip to main content

Object reference

Every object carries an object field naming its type, so a payload is self-describing even after it has been passed through your own code.

Money is a decimal string, never a JSON number — 1234567.89 is not exactly representable in a float64, and a client that parses pay as one eventually produces a payslip that is a cent wrong. Date-only fields are calendar dates (2026-03-01); timestamps are RFC 3339 in UTC.

Announcement

A notice to the workspace. Who it reaches is decided by target_type and an audience the API does not expose; the attachment is not exposed either.

FieldTypeNullableDescription
objectannouncementNoAlways announcement. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
category_idstringYesThe category it belongs to.
titlestringNoHeadline.
bodystringNoThe announcement text.
prioritystringNoHow prominently it is shown.
target_typestringNoWhether it goes to everyone or to a selected audience.
is_pinnedbooleanNoWhether it stays at the top.
publish_attimestampYesWhen it becomes visible.
expires_attimestampYesWhen it stops being shown.
send_emailbooleanNoWhether it was also emailed.
statusstringNoDraft, published, or archived.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

AnnouncementCategory

A grouping for announcements.

FieldTypeNullableDescription
objectannouncement_categoryNoAlways announcement_category. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoDisplay name.
colorstringNoHex colour used to render it.
created_attimestampNoWhen the record was created.

Application

One candidate against one opening, and where they are in the process.

FieldTypeNullableDescription
objectapplicationNoAlways application. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
candidate_idstringNoThe candidate.
job_opening_idstringNoThe opening applied for.
stagestringNoWhere they are in the pipeline.
sourcestringNoHow they arrived.
source_detailstringYesMore about the source.
applied_attimestampNoWhen they applied.
screened_attimestampYesWhen they were screened.
rejected_attimestampYesWhen they were rejected.
rejection_reasonstringYesWhy they were rejected.
withdrawn_attimestampYesWhen they withdrew.
hired_attimestampYesWhen they were hired.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

Asset

One piece of company property. current_assignment_id points at who holds it now, and is null when it is back in stock.

FieldTypeNullableDescription
objectassetNoAlways asset. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
category_idstringNoThe kind of asset.
asset_tagstringNoThe workspace’s own tag, unique within it.
namestringNoWhat it is.
serial_numberstringYesManufacturer's serial.
purchase_datedateYesWhen it was bought.
purchase_coststringYesWhat it cost.
warranty_expirydateYesWhen the warranty runs out.
vendorstringYesWho supplied it.
conditionstringNoPhysical condition.
statusstringNoWhether it is issued, in stock, or retired.
current_assignment_idstringYesThe assignment holding it now. Null when unassigned.
notesstringYesFree-text note.
deletedbooleanNoTrue for a retired asset. Hidden by default; pass include_deleted to see them, which a client mirroring assets needs in order to observe a removal at all.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

AssetAssignment

One issue-and-return cycle. A returned assignment is kept, so the history of who held what survives the return.

FieldTypeNullableDescription
objectasset_assignmentNoAlways asset_assignment. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
asset_idstringNoThe asset.
employee_idstringNoThe employee this record belongs to.
issued_attimestampNoWhen it was handed over.
issued_conditionstringYesCondition at issue.
issued_notesstringYesNote taken at issue.
expected_return_datedateYesWhen it is due back.
returned_attimestampYesWhen it came back. Null while still held.
returned_conditionstringYesCondition on return.
returned_notesstringYesNote taken on return.
statusstringNoWhether the assignment is open or closed.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

AssetCategory

A kind of company asset — laptops, phones, vehicles.

FieldTypeNullableDescription
objectasset_categoryNoAlways asset_category. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoDisplay name.
descriptionstringYesWhat belongs in it.
is_activebooleanNoWhether it is in use.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

AttendancePunch

A single clock-in or clock-out event. Punches are an append-only log: every punch is kept, including ones that changed no attendance record.

FieldTypeNullableDescription
objectattendance_punchNoAlways attendance_punch. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
punch_timetimestampNoWhen the punch happened.
punch_typein · outNoDirection of the punch.
sourcestringNoWhere the punch came from. API-recorded punches are api.
device_idstringYesIdentifier of the device that captured the punch.
ip_addressstringYesAddress the punch was submitted from.
created_attimestampNoWhen the record was created.

AttendanceRecord

One employee's attendance for one calendar day. There is at most one per (employee, date), so writing the same day twice replaces it rather than adding a second record.

FieldTypeNullableDescription
objectattendance_recordNoAlways attendance_record. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
datedateNoThe calendar day, in the workspace timezone. An overnight shift is attributed to the day it started.
statusstring (enum)NoHow the day is counted for pay.
clock_intimestampYesFirst punch of the day.
clock_outtimestampYesLast punch inside the valid checkout window.
late_minutesintegerNoMinutes past the shift start, after the grace period.
early_leaving_minutesintegerNoMinutes the employee left before the shift ended.
overtime_minutesintegerNoOvertime credited for the day. Zero while an overtime request is still pending, in a workspace that requires approval.
working_hoursstringNoHours worked, net of the shift's unpaid break.
shift_idstringYesShift in effect on this date.
sourcestring (enum)NoWhat wrote the row. manual covers deliberate marks including this API's, auto the auto-present job, regularization an approved correction, and biometric / geo / api a punch of that origin.
is_manual_overridebooleanNoWhen true the status is pinned and the late-threshold recompute will not change it, however the punches land.
remarksstringYesFree-text note.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

AttendanceRegularization

A request to correct one day's attendance. Approving one overwrites the attendance record for that date and marks it as coming from a regularisation, which protects it from later automatic recomputation.

FieldTypeNullableDescription
objectattendance_regularizationNoAlways attendance_regularization. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
datedateNoThe day being corrected.
requested_statusstring (enum)NoStatus the employee is asking for.
clock_intimestampYesCorrected clock-in.
clock_outtimestampYesCorrected clock-out.
previous_statusstringYesWhat the day looked like at the moment of the decision. Null while the request is pending — the record it would replace can still change.
previous_clock_intimestampYesClock-in before the decision.
previous_clock_outtimestampYesClock-out before the decision.
reasonstringNoWhy the correction is being asked for.
statuspending · approved · rejectedNoWhere the request stands.
approved_attimestampYesWhen it was approved or rejected.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

AttendanceSettings

How the workspace grades attendance. Read-only here, and published because without it the minutes and statuses on an attendance record cannot be interpreted — a late_minutes of 20 means nothing until you know the grace period was 15.

FieldTypeNullableDescription
objectattendance_settingsNoAlways attendance_settings. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
grace_period_minutesintegerNoLateness forgiven entirely. A shift may carry its own grace period, which wins wherever it is set.
late_threshold_1_minutesintegerNoMinutes late at which the first action applies.
late_threshold_1_actionstringNoWhat happens at the first threshold.
late_threshold_2_minutesintegerNoMinutes late at which the second action applies.
late_threshold_2_actionstringNoWhat happens at the second threshold.
late_threshold_3_minutesintegerNoMinutes late at which the third action applies.
late_threshold_3_actionstringNoWhat happens at the third threshold.
lates_per_month_for_absentintegerNoHow many late days in a month count as one absence.
overtime_min_minutesintegerNoShortest stretch past the shift end that counts as overtime.
overtime_rate_multiplierstringNoMultiple of the ordinary hourly rate paid for overtime.
overtime_require_approvalbooleanNoWhen true, overtime minutes only count once a request is approved.
overtime_auto_approvebooleanNoWhen true, overtime requests are approved on creation.
checkout_grace_minutesintegerNoHow long after the shift end a clock-out is still accepted onto the day.
working_days_per_weekintegerNoWorking days in a normal week.
week_off_daysstringNoDefault weekly rest days, where a shift does not set its own.
geo_attendance_enabledbooleanNoWhether punches are geofenced to assigned sites.
geo_max_accuracy_metersintegerNoWorst GPS accuracy accepted. A coarser fix is refused rather than trusted, since it could place someone inside a fence they are nowhere near.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

AttendanceSite

A geofenced location employees may clock in from. Only meaningful when geo attendance is enabled for the workspace.

FieldTypeNullableDescription
objectattendance_siteNoAlways attendance_site. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoSite name.
latitudestringNoCentre of the geofence, in decimal degrees.
longitudestringNoCentre of the geofence, in decimal degrees.
radius_metersintegerNoHow far from the centre a punch is accepted.
branch_idstringYesBranch this site belongs to.
statusactive · inactiveNoWhether the site is in use.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

Branch

An office or site.

FieldTypeNullableDescription
objectbranchNoAlways branch. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoBranch name.
codestringYesShort code.
addressstringYesStreet address.
citystringYesCity.
phonestringYesContact number.
emailstringYesContact email.
is_head_officebooleanNoTrue for the workspace’s principal office.
statusactive · inactiveNoWhether the record is in use.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

Candidate

Someone who has applied. These are people outside the workspace, so the record carries personal contact details and sits behind its own recruitment:read scope. The CV file is not exposed.

FieldTypeNullableDescription
objectcandidateNoAlways candidate. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
first_namestringNoGiven name.
last_namestringNoFamily name.
emailstringNoContact email.
phonestringYesContact phone.
current_employerstringYesWhere they work now.
current_designationstringYesTheir current job title.
linkedin_urlstringYesTheir LinkedIn profile.
notesstringYesFree-text note.
converted_employee_idstringYesThe employee record created when they were hired.
converted_attimestampYesWhen they became an employee.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

Contract

An employment contract. Signing one is what activates an employee, so status here and an employee’s status move together.

FieldTypeNullableDescription
objectcontractNoAlways contract. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
contract_numberstringYesHuman-facing reference.
typestringNoThe kind of contract.
start_datedateNoFirst day of the term.
end_datedateYesLast day. Null for an open-ended contract.
probation_monthsintegerNoLength of probation.
salary_structure_idstringYesStructure the contract sets.
gross_salarystringYesGross pay the contract sets.
statusstringNoWhere the contract stands.
signed_datedateYesWhen it was signed.
accepted_electronicallybooleanNoWhether it was accepted through the portal rather than on paper.
accepted_attimestampYesWhen the employee accepted it.
languagestringYesLanguage it was issued in. Null means English.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

Department

A department. Departments may nest through parent_id.

FieldTypeNullableDescription
objectdepartmentNoAlways department. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoDepartment name.
codestringYesShort code.
parent_idstringYesParent department, for a nested structure.
head_employee_idstringYesEmployee who heads this department.
cost_centerstringYesCost centre reference.
statusactive · inactiveNoWhether the record is in use.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

Designation

A job title.

FieldTypeNullableDescription
objectdesignationNoAlways designation. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoJob title.
codestringYesShort code.
levelintegerNoSeniority level. Higher is more senior; 0 when unranked.
pay_grade_idstringYesPay grade this title maps to.
job_descriptionstringYesFree-text job description.
statusactive · inactiveNoWhether the record is in use.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

DocumentType

A kind of document the workspace collects — a passport, a degree, a contract copy. Mandatory types are the ones an employee record is considered incomplete without.

FieldTypeNullableDescription
objectdocument_typeNoAlways document_type. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoDisplay name.
codestringYesShort code.
is_mandatorybooleanNoWhether every employee is expected to have one.
allowed_formatsstringNoFile types accepted, as a comma-separated list.
max_file_size_mbintegerNoLargest upload accepted, in megabytes.
allow_multiple_entriesbooleanYesWhether an employee may hold several of this type.
sort_orderintegerYesDisplay position.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

Employee

A person employed by the workspace. Related records are referenced by id; child collections are separate sub-resources so that updated_since stays truthful.

FieldTypeNullableDescription
objectemployeeNoAlways employee. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_codestringNoThe workspace's own identifier for this employee, unique within the workspace. READ-ONLY: it is assigned from the workspace numbering settings (prefix and digit count) and cannot be set or changed through the API. Use it as a filter on the list endpoint.
first_namestringNoGiven name.
last_namestringNoFamily name.
father_namestringYesFather's name, where the workspace records it.
date_of_birthdateYesDate of birth.
genderstringYesGender as recorded.
marital_statusstringYesMarital status as recorded.
nationalitystringNoNationality. Empty string when not recorded.
personal_emailstringYesPersonal email address.
work_emailstringYesWork email address.
phone_primarystringYesPrimary contact number.
national_idstringYesGovernment identity number. Its meaning follows the workspace country: CNIC in Pakistan, Emirates ID in the UAE, National Insurance number in the UK. Requires the employees.sensitive:read scope.
department_idstringNoDepartment this employee belongs to.
designation_idstringNoJob title.
branch_idstringYesOffice or branch.
employment_type_idstringNoEmployment type, e.g. permanent or contract.
reporting_manager_idstringYesThe employee this person reports to.
joining_datedateNoFirst day of employment.
confirmation_datedateYesDate probation was confirmed.
probation_end_datedateYesScheduled end of probation.
separation_datedateYesLast day of employment.
statusstring (enum)NoEmployment status.
deletedbooleanNoTrue when the record has been deleted. Deleted employees are excluded unless include_deleted=true, and are returned with this flag so a client syncing on updated_since can learn about removals.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the employee record itself last changed. Does not move when a child record (address, bank account, document) changes.

EmployeeDocument

One document held against an employee. The file itself is not exposed — only whether it exists, and whether someone has verified it.

FieldTypeNullableDescription
objectemployee_documentNoAlways employee_document. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
document_type_idstringNoThe kind of document.
entry_labelstringYesLabel distinguishing several documents of one type.
verification_statuspending · verified · rejectedNoWhether the document has been checked.
verified_attimestampYesWhen it was verified.
rejection_reasonstringYesWhy it was rejected.
versionintegerNoIncrements when the document is replaced.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

EmployeeShift

Which shift an employee works, from a given date. Assignments form a history: creating one closes the previous open assignment the day before the new one starts.

FieldTypeNullableDescription
objectemployee_shiftNoAlways employee_shift. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
shift_idstringNoThe shift being worked.
effective_fromdateNoFirst day this assignment applies.
effective_todateYesLast day it applies. Null while it is the current assignment.
created_attimestampNoWhen the record was created.

EmploymentType

An employment arrangement, e.g. permanent, contract, intern.

FieldTypeNullableDescription
objectemployment_typeNoAlways employment_type. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoName of the arrangement.
descriptionstringYesFree-text description.
is_residentialbooleanNoThe role includes on-site residence.
accommodation_providedbooleanNoAccommodation is provided.
meals_providedbooleanNoMeals are provided.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

ExpenseCategory

A kind of expense that can be claimed.

FieldTypeNullableDescription
objectexpense_categoryNoAlways expense_category. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoDisplay name.
descriptionstringYesWhat belongs in it.
is_activebooleanNoWhether it can be claimed against.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

ExpenseClaim

A reimbursement request. Two levels of approval, and an approved claim becomes a payroll addition rather than a separate payment.

FieldTypeNullableDescription
objectexpense_claimNoAlways expense_claim. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
titlestringNoWhat the claim is for.
descriptionstringYesDetail.
total_amountstringNoSum of the claim items.
statusstring (enum)NoWhere the claim stands.
submitted_attimestampYesWhen it was submitted.
manager_approved_attimestampYesWhen the manager approved it.
hr_approved_attimestampYesWhen HR gave final approval.
rejected_attimestampYesWhen it was rejected.
rejection_reasonstringYesWhy it was rejected.
cancelled_attimestampYesWhen it was withdrawn.
payroll_adjustment_idstringYesThe payroll addition an approved claim created.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

ExpenseClaimItem

One line on a claim. Receipts are not exposed.

FieldTypeNullableDescription
objectexpense_claim_itemNoAlways expense_claim_item. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
claim_idstringNoThe claim.
category_idstringNoThe expense category.
expense_datedateNoWhen the expense was incurred.
amountstringNoThe amount claimed.
descriptionstringYesWhat it was for.
sort_orderintegerNoPosition on the claim.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

Holiday

A non-working day.

FieldTypeNullableDescription
objectholidayNoAlways holiday. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoHoliday name.
datedateNoThe date, as a calendar date.
yearintegerNoCalendar year the date falls in.
typepublic · company · optional · religiousNoCategory of holiday.
is_recurringbooleanNoRepeats annually on the same date.
branch_idstringYesLimits the holiday to one branch. Null applies it workspace-wide.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

HrLetter

A letter issued to an employee — an employment certificate, a salary letter, an experience letter. The rendered PDF is not exposed.

FieldTypeNullableDescription
objecthr_letterNoAlways hr_letter. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
letter_typestringNoThe kind of letter.
reference_numberstringNoHuman-facing reference, printed on the letter.
languagestringYesLanguage it was issued in. Null means English.
issued_datedateNoThe date on the letter.
emailed_attimestampYesWhen it was emailed to the employee.
created_attimestampNoWhen the record was created.

HrLetterRequest

An employee asking for a letter. An approved request produces an issued letter, which issued_letter_id points at.

FieldTypeNullableDescription
objecthr_letter_requestNoAlways hr_letter_request. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
letter_typestringNoThe kind requested.
purposestringNoWhy it is needed.
addressed_tostringYesWho the letter should be addressed to.
statusstringNoWhere the request stands.
rejection_reasonstringYesWhy it was refused.
decided_attimestampYesWhen it was decided.
issued_letter_idstringYesThe letter this request produced.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

JobOpening

A role the workspace is hiring for.

FieldTypeNullableDescription
objectjob_openingNoAlways job_opening. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
titlestringNoJob title.
department_idstringYesDepartment the role sits in.
designation_idstringYesDesignation the role maps to.
branch_idstringYesBranch the role is based at.
employment_type_idstringYesEmployment type offered.
levelintegerYesSeniority level.
headcountintegerNoHow many people are being hired.
statusstringNoWhere the opening stands.
budget_approved_attimestampYesWhen the headcount was signed off.
closed_attimestampYesWhen the opening was closed.
notesstringYesFree-text note.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

LeaveApplication

A request for leave. Approving one consumes the balance and marks the days on the employee's attendance.

FieldTypeNullableDescription
objectleave_applicationNoAlways leave_application. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee requesting leave.
leave_type_idstringNoThe kind of leave requested.
fiscal_year_idstringNoThe fiscal year the days are drawn from.
from_datedateNoFirst day of leave.
to_datedateNoLast day of leave.
total_daysstringNoDays this request consumes. Computed by the workspace from its own rest days, holidays and sandwich rule — not simply the span.
is_half_daybooleanNoWhether the request is for half a day.
half_day_typestringYesWhich half, when the request is a half day.
reasonstringNoWhy the leave is being requested.
statuspending · approved · rejected · cancelledNoWhere the request stands.
approved_attimestampYesWhen it was approved or rejected.
rejection_reasonstringYesWhy it was rejected.
cancelled_attimestampYesWhen it was cancelled.
cancellation_reasonstringYesWhy it was cancelled.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

LeaveBalance

One employee's standing under one leave type for a fiscal year. available_days is the number that matters and the only one that accounts for accrual — do not derive it from the others.

FieldTypeNullableDescription
objectleave_balanceNoAlways leave_balance. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoIdentifier of the underlying allocation.
employee_idstringNoThe employee this balance belongs to.
leave_type_idstringNoThe leave type.
fiscal_year_idstringNoThe fiscal year this balance covers.
entitled_daysstringNoThe year's full entitlement, before accrual is applied.
accrued_daysstringNoHow much of the entitlement has been released so far. Equal to entitled_days under an annual policy; a fraction of it under a monthly one.
carried_forward_daysstringNoDays brought in from the previous year.
used_daysstringNoDays consumed by approved leave.
encashed_daysstringNoDays paid out instead of taken.
available_daysstringNoWhat the employee can actually take: accrued + carried forward − used − encashed. Computed here because a client subtracting the raw columns would over-report every monthly-accrual policy.

LeaveGroup

A named set of policies applied together. An employee belongs to one group, which is what decides the leave types available to them.

FieldTypeNullableDescription
objectleave_groupNoAlways leave_group. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoGroup name.
descriptionstringYesWhat the group is for.
is_activebooleanNoWhether the group is in use.
is_defaultbooleanNoApplied to employees with no group of their own.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

LeavePolicy

The entitlement rules for one leave type. Read-only: changing a policy retroactively changes what people are entitled to and what has already accrued, which is a decision for the app rather than an API call.

FieldTypeNullableDescription
objectleave_policyNoAlways leave_policy. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
leave_type_idstringNoThe leave type this policy governs.
annual_quotastringNoDays granted for a full year of service.
accrual_methodstringNoHow the quota is released. annual grants it all at the start of the year; monthly releases it as the year passes, which is why a balance cannot be derived from the quota alone.
allocation_typestringNoWhether the entitlement runs per fiscal year or per cycle.
max_consecutive_daysintegerYesLongest single stretch allowed. Null when unlimited.
carry_forward_allowedbooleanNoWhether unused days survive into the next year.
max_carry_forward_daysstringNoCeiling on days carried forward.
encashment_allowedbooleanNoWhether unused days can be paid out instead of taken.
negative_balance_allowedbooleanNoWhether an employee may go into deficit.
max_negative_daysstringNoHow far into deficit, when that is allowed.
pro_rata_for_joinersbooleanNoWhether someone joining mid-year gets a proportion of the quota.
min_service_monthsintegerNoMonths of service before this type may be used.
applicable_genderstringNoRestricts the type where the law or the policy does.
requires_document_after_daysintegerYesLength past which supporting evidence is expected. Null when never.
sandwich_rulebooleanNoWhether rest days falling inside a leave span are counted against it.
effective_fromdateNoFirst day this policy applies.
effective_todateYesLast day it applies. Null while it is the current policy.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

LeaveType

A kind of leave — annual, sick, unpaid. The entitlement attached to it lives on its policy.

FieldTypeNullableDescription
objectleave_typeNoAlways leave_type. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoDisplay name.
codestringNoShort code, unique within the workspace.
colorstringNoHex colour used to render this type in calendars.
is_paidbooleanNoWhether days taken under this type are paid.
is_activebooleanNoInactive types cannot be applied for, but keep their history.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

Loan

A loan to an employee. Installments are claimed against payroll as the months come round, so outstanding_balance moves with each run.

FieldTypeNullableDescription
objectloanNoAlways loan. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
loan_type_idstringNoThe kind of loan.
loan_numberstringYesHuman-facing reference.
amountstringNoPrincipal advanced.
interest_ratestringNoAnnual rate, as a percentage.
total_payablestringNoPrincipal plus interest.
installment_amountstringNoAmount due each month.
total_installmentsintegerNoMonths of repayment.
paid_installmentsintegerNoInstallments settled so far.
paid_amountstringNoRepaid so far.
outstanding_balancestringNoStill owed.
start_monthintegerNoFirst repayment month, 1–12.
start_yearintegerNoFirst repayment year.
purposestringYesWhy the loan was taken.
statusstringNoWhere the loan stands.
approved_attimestampYesWhen it was approved.
completed_attimestampYesWhen it was fully repaid.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

LoanInstallment

One scheduled repayment. Claimed when the payroll run for its due month is processed, and settled when that run is locked.

FieldTypeNullableDescription
objectloan_installmentNoAlways loan_installment. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
loan_idstringNoThe loan.
installment_nointegerNoPosition in the schedule, from 1.
due_monthintegerNoMonth due, 1–12.
due_yearintegerNoYear due.
principalstringNoPrincipal portion.
intereststringNoInterest portion.
total_duestringNoTotal for this installment.
paid_amountstringNoAmount actually settled.
statusstringNoWhere the installment stands.
paid_attimestampYesWhen it was settled.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

LoanType

A kind of loan the workspace offers, with its limits.

FieldTypeNullableDescription
objectloan_typeNoAlways loan_type. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoDisplay name.
codestringNoShort code, unique within the workspace.
max_amountstringYesLargest loan of this kind. Null when unlimited.
max_installmentsintegerYesLongest repayment. Null when unlimited.
interest_ratestringNoAnnual rate, as a percentage.
max_active_loansintegerNoHow many of this kind an employee may hold at once.
is_activebooleanNoWhether it is offered.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

OvertimeRequest

A claim for overtime on one day. Whether overtime counts toward pay without one depends on the workspace's attendance settings.

FieldTypeNullableDescription
objectovertime_requestNoAlways overtime_request. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
datedateNoThe day the overtime was worked.
hoursstringNoHours claimed.
reasonstringYesJustification.
statuspending · approved · rejectedNoWhere the request stands. A workspace with auto-approval on returns approved straight from the create call.
approved_attimestampYesWhen it was approved or rejected.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

PayGrade

A salary band.

FieldTypeNullableDescription
objectpay_gradeNoAlways pay_grade. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoGrade name.
min_salarystringNoBottom of the band, as a decimal string in the workspace currency.
max_salarystringNoTop of the band, as a decimal string in the workspace currency.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

PayrollEntry

One employee's pay for one run. The attendance figures are what the calculation actually used, so they explain the deductions rather than merely accompanying them.

FieldTypeNullableDescription
objectpayroll_entryNoAlways payroll_entry. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
payroll_run_idstringNoThe run this entry belongs to.
employee_idstringNoThe employee this record belongs to.
salary_assignment_idstringNoThe pay package the calculation used.
working_daysstringNoDays in the month the employee was expected to work.
present_daysstringNoDays counted as present.
absent_daysstringNoDays counted as absent.
leave_daysstringNoDays on approved leave.
unpaid_leave_daysstringNoLeave days that are not paid.
half_daysstringNoDays counted as half.
late_countintegerNoLate arrivals.
early_leave_countintegerNoEarly departures.
holidaysintegerNoPublic holidays in the month.
overtime_hoursstringNoApproved overtime hours paid.
gross_salarystringNoGross pay before deductions.
total_earningsstringNoEarnings including bonus and additions.
total_deductionsstringNoEverything subtracted.
net_salarystringNoWhat the employee is paid.
employer_contributionsstringNoEmployer-paid contributions. On top of net pay, not deducted from it.
taxable_incomestringNoThe base income tax was computed on.
tax_amountstringNoIncome tax withheld.
loan_deductionstringNoLoan installments claimed this month.
absence_deductionstringNoDeducted for absent days.
unpaid_leave_deductionstringNoDeducted for unpaid leave. Separate from absence so the two reconcile distinctly on a slip.
late_deductionstringNoDeducted for lateness.
bonus_amountstringNoApproved bonuses added this month.
adjustment_additionstringNoApproved one-off additions.
adjustment_deductionstringNoApproved one-off deductions.
payment_methodstringNoHow the salary is paid.
payment_datedateYesThe date the transfer was actually made.
payment_referencestringYesTransfer or cheque reference.
paid_attimestampYesWhen the entry was marked paid in the system.
acknowledged_attimestampYesWhen the employee confirmed receipt.
statusstringNoWhere the entry stands.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

PayrollEntryComponent

One line on one payslip, with the amount actually applied. This is what turns an entry total into an explanation.

FieldTypeNullableDescription
objectpayroll_entry_componentNoAlways payroll_entry_component. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
payroll_entry_idstringNoThe entry this line belongs to.
salary_component_idstringNoThe component.
typeearning · deduction · employer_contributionNoEarning, deduction, or employer contribution.
amountstringNoThe amount applied.
is_taxablebooleanNoWhether it counted toward taxable income.
display_orderintegerNoPosition on the payslip.

PayrollRun

One month's payroll for the workspace. A run moves draft → approved → locked → disbursed; once locked its entries cannot change.

FieldTypeNullableDescription
objectpayroll_runNoAlways payroll_run. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
fiscal_year_idstringNoThe fiscal year this run belongs to.
monthintegerNoCalendar month, 1–12.
yearintegerNoCalendar year.
run_datedateNoThe date the run covers.
total_employeesintegerNoEmployees included.
total_grossstringNoSum of gross pay across the run.
total_deductionsstringNoSum of deductions.
total_netstringNoSum of net pay — what is actually disbursed.
total_employer_coststringNoEmployer-paid contributions on top of net pay. Not part of what employees receive.
statusstring (enum)NoWhere the run stands.
sourceprocessed · importedNoprocessed came from the monthly pipeline. imported was backfilled from a historical file — it has no attendance behind it, so its per-day figures are zero rather than measured.
approved_attimestampYesWhen the run was approved.
locked_attimestampYesWhen it was locked and became immutable.
disbursed_attimestampYesWhen payment was recorded.
notesstringYesFree-text note.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

RestDaySwap

An employee works one of their rest days and takes a different day off instead. worked_date becomes an ordinary working day and off_date becomes the rest day, for both the calendar and payroll.

FieldTypeNullableDescription
objectrest_day_swapNoAlways rest_day_swap. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
worked_datedateNoThe rest day that was worked.
off_datedateNoThe working day taken off in exchange.
reasonstringYesFree-text note.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

SalaryAssignment

An employee's pay, from a date. Assignments form a history: a raise closes the previous one and opens a new one, so the row with a null effective_to is the current package.

FieldTypeNullableDescription
objectsalary_assignmentNoAlways salary_assignment. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
employee_idstringNoThe employee this record belongs to.
salary_structure_idstringNoThe structure this package follows.
gross_salarystringNoMonthly gross pay.
effective_fromdateNoFirst day this package applies.
effective_todateYesLast day it applies. Null while it is the current package.
reasonstringYesWhy the package changed.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

SalaryComponent

A line that can appear on a payslip — an earning, a deduction, or an employer contribution. The contributes_to_* flags decide which statutory bases it counts toward, which is usually only true of basic pay.

FieldTypeNullableDescription
objectsalary_componentNoAlways salary_component. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoDisplay name.
codestringNoShort code, unique within the workspace.
typeearning · deduction · employer_contributionNoWhat the line does. employer_contribution is an employer-paid cost that is NOT part of employee cash — it does not reduce net pay and does not appear in the employee total.
categorystringYesGrouping label.
calculation_typestringNoHow the amount is derived: fixed, a percentage, or a formula.
default_valuestringNoAmount or percentage used when no override is set.
is_taxablebooleanNoWhether the line counts toward taxable income.
exemption_modestringNoPartial-exemption treatment. none means is_taxable alone decides; pct_of_basic exempts up to a percentage of basic pay; flat_cap exempts up to a fixed amount.
exemption_valuestringNoThe percentage or cap the exemption mode applies.
affects_grossbooleanNoWhether the line is part of gross pay.
contributes_to_eobibooleanNoCounts toward the statutory social-security base.
contributes_to_pfbooleanNoCounts toward the provident-fund base.
contributes_to_overtimebooleanNoCounts toward the hourly rate overtime is paid at.
contributes_to_gratuitybooleanNoCounts toward the gratuity accrual base.
is_mandatorybooleanNoPresent on every structure.
is_activebooleanNoWhether the line is in use.
display_orderintegerNoPosition on a payslip.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

SalarySlip

A rendered payslip document. The PDF itself is not exposed — the file lives in workspace storage and is delivered by email or the portal.

FieldTypeNullableDescription
objectsalary_slipNoAlways salary_slip. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
payroll_entry_idstringNoThe entry this slip renders.
slip_numberstringYesHuman-facing reference.
languagestringYesLanguage the slip was generated in. Null means English.
emailed_attimestampYesWhen it was emailed to the employee.
generated_attimestampNoWhen it was rendered.
created_attimestampNoWhen the record was created.

SalaryStructure

A named set of components. An employee is assigned one, and the amounts for their own assignment live on the assignment rather than here.

FieldTypeNullableDescription
objectsalary_structureNoAlways salary_structure. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoStructure name.
descriptionstringYesWhat it is for.
is_activebooleanNoWhether it is in use.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.

SalaryStructureComponent

One component on one structure, with the default it contributes.

FieldTypeNullableDescription
objectsalary_structure_componentNoAlways salary_structure_component. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
salary_structure_idstringNoThe structure.
salary_component_idstringNoThe component.
calculation_typestringYesOverrides the component's own calculation type.
default_valuestringYesAmount or percentage for this structure.
is_mandatorybooleanNoWhether the component cannot be removed from an assignment.
display_orderintegerNoPosition on a payslip.

Shift

A working pattern: hours, grace periods and rest days.

FieldTypeNullableDescription
objectshiftNoAlways shift. Every object names its own type, so a payload stays self-describing after it has been passed through your code.
idstringNoUnique identifier.
namestringNoShift name.
start_timestringNoStart time as HH:MM:SS in the workspace timezone.
end_timestringNoEnd time as HH:MM:SS in the workspace timezone. Earlier than start_time for a shift that crosses midnight.
break_duration_minutesintegerNoUnpaid break within the shift, in minutes.
grace_period_minutesintegerNoMinutes after the start time before an arrival counts as late.
late_threshold_minutesintegerNoMinutes late before the day is marked as a late arrival.
weekly_off_daysinteger[]NoRest days as ISO weekday numbers, where 1 is Monday and 7 is Sunday.
attendance_modepunch_required · auto_present · punch_not_requiredNoHow attendance is captured. punch_required expects clock-in and clock-out, auto_present marks attendance automatically, and punch_not_required tracks neither.
is_defaultbooleanNoAssigned to new employees when no other shift is chosen.
statusactive · inactiveNoWhether the record is in use.
created_attimestampNoWhen the record was created.
updated_attimestampNoWhen the record last changed.