Hopshift
API Reference

Data sync resources

Every data sync resource, its scope, opt-in fields, files and response fields

This page lists the 33 resources of the data sync API. Every resource has a changed-since feed (/api/v1/sync/{resource}) and id reconciliation (/api/v1/sync/{resource}/ids). Read the guide first for how passes, deletions, include, files and the payroll rule work.

How to read this page

Each resource lists:

  • Scope: which rows a key receives. "Own company" means the row's company is one of the key's companies. "Through the employee" means the row's employee belongs to one of the key's companies. "Group" means every key of the group receives every row.
  • include: the opt-in names the resource accepts and the fields each adds. A name it does not accept gets 400.
  • Content: whether /api/v1/sync/{resource}/{id}/content serves a file.
  • Run listing: whether ?payroll_run_id=<id> lists every row of one payroll run.
  • Page size: the largest limit. It is 1,000 (default 500) unless stated.

Field types:

TypeFormat
stringText. Ids are opaque strings
dateYYYY-MM-DD
instantISO 8601 UTC, such as 2026-11-11T01:58:12.000Z
timeHH:mm wall-clock time
moneyString with exactly 2 decimals, such as "15000.00"
decimal(n)String with n decimals, such as "0.9677" for decimal(4)
integer, number, booleanJSON values
object, arrayJSON values, described per field

Treat every field except id as nullable. An id that points at a row in a company outside the key's companies is null. Enum values are returned as stored; the values listed are the ones Hopshift writes today.

AreaResources
Peopleemployees, employee-events, salary-adjustments, transfers, employee-locations
Structurecompanies, locations, departments, positions, level-tiers
Attendanceclock-records, clock-record-history, shifts, overtime-requests, attendance-corrections
Leaveleave-requests, leave-request-history, leave-types, leave-allocations
Payrollpayroll-runs, payroll-items, payroll-documents, payslip-pdfs, pay-items, pay-item-definitions, employee-pay-items, employee-pay-schedules, meal-allowance-policies, meal-allowance-enrollments, intercompany-assignments, intercompany-recharges, tax-declarations
Historyaudit-events

People

employees

One row per employee record, every status. Moving a person to another company creates a second record with a new id (see people with several employee records).

  • Scope: own company.
  • include: notes adds termination_reason (string), would_rehire (boolean, HR's judgement), scheduling_notes (string) and exclude_from_payroll_reason (string).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstringEmployee record id
employee_codestringStaff code assigned by HR
user_idstringThe Hopshift login linked to this record. Join *_by_user_id fields to it
company_idstringEmploying company
first_namestringLatin script
last_namestringLatin script
first_name_thstringThai script
last_name_thstringThai script
title_thstringThai name title
nicknamestring
emailstring
genderstringAs stored
birthdatedate
nationalitystring
national_id_numberstring
tax_idstring
sso_numberstringSocial security number
bank_namestring
bank_account_nostring
addressstringHome address
citystring
statestring
zip_codestring
phonestring
home_phonestring
emergency_contact_namestring
emergency_contact_numberstring
emergency_contact_relationstring
employee_typestringfull_time, part_time, contract, intern
statusstringACTIVE, INACTIVE, TERMINATED, ON_LEAVE
hire_datedateDay in the company's timezone, like the other dates of this resource
probation_end_datedate
contract_end_datedate
termination_datedate
department_idstringSent only when the department belongs to the employee's company
position_idstringSent only when the position belongs to the employee's company
manager_idstringReporting line: the manager's employee record
pay_typestringHOURLY, DAILY, SALARY, COMMISSION, MIXED
hours_sourcestringWhere paid hours come from: TIMESHEET, MANUAL, EXEMPT, HYBRID
base_salarymoney
hourly_ratemoney
daily_ratemoney
wage_effective_datedateWhen the current rate took effect
exclude_from_payrollbooleanLeft out of payroll runs
transferred_from_employee_idstringThe record this one was transferred from
created_atinstant
updated_atinstant

employee-events

Employment history: one row per event, such as a salary change, promotion, transfer or termination.

  • Scope: own company (the event's company).
  • include: notes adds reason (string) and, inside the values of status events, termination_reason and would_rehire.
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
company_idstring
event_typestringHIRED, SALARY_CHANGE, POSITION_CHANGE, DEPARTMENT_CHANGE, LOCATION_CHANGE, PROMOTION, DEMOTION, TRANSFER_OUT, TRANSFER_IN, TRANSFER_REVERSED, PROBATION_PASSED, CONTRACT_RENEWED, STATUS_CHANGE, TERMINATED, RESIGNED, REHIRED
event_datedateDay in the company's timezone
previous_valueobjectThe values before the event, filtered as below
new_valueobjectThe values after the event, filtered as below
descriptionstringThe system's summary line
initiated_by_user_idstring
approved_by_user_idstring
transfer_idstringThe transfer behind a transfer event
created_atinstant

previous_value and new_value keep only these keys, renamed to snake_case. They are null when none of the keys is present, and always null for other event types. Values are passed through as recorded, so their JSON types can differ between rows. Employee and company ids inside them are null when outside the key's companies.

Event typeKeys
SALARY_CHANGEpay_type, base_salary, hourly_rate, daily_rate
POSITION_CHANGE, PROMOTION, DEMOTIONposition_id, position_name, title, department, level
DEPARTMENT_CHANGEdepartment_id, department_name
STATUS_CHANGE, TERMINATED, RESIGNEDstatus, termination_date, scheduled, cancelled; with notes also termination_reason, would_rehire
TRANSFER_OUTcompany_id, target_company_id, target_employee_id
REHIREDstatus, rehired_employee_id, terminated_employee_id

salary-adjustments

Salary changes with their amounts.

  • Scope: through the employee.
  • include: notes adds reason (string).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
previous_amountmoney
new_amountmoney
adjustment_typestringANNUAL_REVIEW, PROMOTION, MARKET_ADJUSTMENT, CORRECTION, OTHER
effective_datedateDay in the employee's company's timezone
created_atinstant
updated_atinstant

transfers

Moves of an employee from one company to another. A completed transfer links the source employee record to the new record in the target company.

  • Scope: either company: the key receives the transfer when the source or the target company is one of its companies.
  • include: notes adds reason (string).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstringThe source employee record. Null when outside the key's companies
target_employee_idstringThe new employee record in the target company. Null when outside the key's companies
source_company_idstringAlways sent
target_company_idstringAlways sent
transfer_datedateDay in the source company's timezone
transfer_typestringPERMANENT, SECONDMENT, RETURN
statusstringDRAFT, PENDING_APPROVAL, APPROVED, COMPLETED, CANCELLED
retain_historyboolean
carry_leave_balanceboolean
carry_seniority_dateboolean
initiated_by_user_idstring
approved_by_user_idstring
cancelled_atinstant
cancelled_by_user_idstring
created_atinstant
updated_atinstant

employee-locations

Outlet assignments: the outlets an employee is assigned to, with dates.

  • Scope: through the employee.
  • include: none. Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
location_idstringNull when the punch has no outlet recorded, or when the outlet belongs to a company outside the key's companies
start_datedateDay in the employee's company's timezone
end_datedateNull while the assignment is open

Structure

companies

The companies of the group the key covers. Reporting lines are employees.manager_id; there is no separate resource for them.

  • Scope: the key's companies.
  • include: none. Content: none. Run listing: no.
FieldTypeMeaning
idstring
namestring
name_thstring
slugstringURL name in Hopshift
countrystringCountry code, such as TH
addressstring
address_thstring
pnd1_tax_idstringThe employer's tax id on PND1 filings
sso_registration_numberstringThe employer's SSO registration number
pay_frequencystringWEEKLY, BIWEEKLY, SEMI_MONTHLY, MONTHLY
pay_period_start_dayintegerDay of the month the pay period starts
pay_period_end_dayintegerDay of the month the pay period ends
created_atinstant
updated_atinstant

locations

Outlets.

  • Scope: own company.
  • include: none. Content: none. Run listing: no.
FieldTypeMeaning
idstring
company_idstring
namestring
slugstring
addressstring
timezonestringIANA timezone, such as Asia/Bangkok
latitudenumberOutlet position
longitudenumberOutlet position
created_atinstant
updated_atinstant

departments

  • Scope: own company.
  • include: none. Content: none. Run listing: no.
FieldTypeMeaning
idstring
company_idstring
namestring
orderintegerDisplay order
created_atinstant
updated_atinstant

positions

Job positions, such as Barista or Sous Chef.

  • Scope: own company.
  • include: none. Content: none. Run listing: no.
FieldTypeMeaning
idstring
company_idstring
namestring
name_thstring
name_zhstring
level_tier_idstringThe position's step on the group's level ladder (level-tiers)
is_activeboolean
created_atinstant
updated_atinstant

level-tiers

The group's level ladder that positions belong to.

  • Scope: group.
  • include: none. Content: none. Run listing: no.
FieldTypeMeaning
idstring
levelintegerStep number
labelstring
label_thstring
sort_orderinteger
created_atinstant
updated_atinstant

Attendance

clock-records

Punches: clock-ins, clock-outs and breaks.

  • Scope: own company (the company recorded on the punch). A punch at a host outlet can name an employee, outlet or roster of another company; those ids are null when that company is outside the key's companies.
  • include:
    • notes adds notes (string), manager_notes (string) and approval_reason (string, the wording behind the approval outcome, such as a reviewer's rejection reason).
    • gps adds gps_location (string, the raw position as "lat,lng"), gps_accuracy (number, as reported by the device) and ip_address (string).
    • photos adds has_photo (boolean).
    • All opt-in fields are null when the punch's employee belongs to a company outside the key's companies.
  • Content: the punch's face photo when has_photo is true. 404 when the punch or its employee is outside the key's companies, or there is no photo.
  • Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
company_idstring
location_idstringOutlet
shift_idstringThe roster the punch belongs to
typestringFor example clock_in, clock_out, break_start, break_end
record_timeinstantThe punch time
sourcestringHow the punch was recorded, as stored
approval_statusstringFor example pending, approved, rejected, correction_pending
approval_reason_codestringMachine code of the rule that set the approval reason, such as LONG_SESSION. Null for ordinary reasons
reviewed_by_user_idstring
reviewed_atinstant
edited_by_user_idstring
edited_atinstant
original_timeinstantThe punch time before an edit
is_out_of_schedulebooleanPunched outside a roster
is_location_unverifiedbooleanThe position could not be verified at the outlet
created_atinstant
updated_atinstant

clock-record-history

Status history of punches: one row per review step.

  • Scope: through the punch's company.
  • include: notes adds notes (string, the reviewer's text), null when the punch's employee belongs to a company outside the key's companies.
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
clock_record_idstring
previous_statusstringApproval status before the step
new_statusstringApproval status after the step
changed_by_user_idstring
created_atinstant

shifts

Rosters, including deleted ones: a deleted shift stays in the feed and in /ids with deleted_at set.

  • Scope: own company.
  • include: notes adds notes (string) and deletion_reason (string).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
company_idstring
location_idstringOutlet
datedate
start_localtimeStart, wall-clock time in timezone
end_localtimeEnd, wall-clock time in timezone
timezonestringThe outlet's timezone, else the company's
break_minutesinteger
statusstringDRAFT, SCHEDULED, IN_PROGRESS, COMPLETED, CANCELLED
position_labelstringFree-text position shown on the roster
worked_halfbooleanOn a half-day leave date: true when the times are only the hours worked, false when it is a full shift the leave splits, null when not answered
recurrence_idstringThe repeating-shift rule this roster came from
deleted_atinstantSet when the shift was deleted
deleted_by_user_idstring

Shifts have no created_at or updated_at.

overtime-requests

  • Scope: own company.
  • include: notes adds reason (string, the employee's) and manager_notes (string).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
company_idstring
request_datedate
start_timestringWindow start as stored, HH:mm
end_timestringWindow end as stored, HH:mm
start_day_offsetintegerDays after request_date that the window starts (0 or 1, for overnight overtime); null on older requests
requested_hoursdecimal(2)
actual_hoursdecimal(2)
ot_typestringregular, restDay, publicHoliday
overrides_rosterbooleanThe reviewer allowed attended time overlapping the roster to be paid as overtime
is_from_clockbooleanRaised from a punch
clock_record_idstringThe punch it was raised from
statusstringpending, approved, rejected, cancelled
reviewed_by_user_idstring
reviewed_atinstant
created_atinstant
updated_atinstant

attendance-corrections

Requests to correct punches, such as a missed clock-out.

  • Scope: own company (the employee's payroll company). The punch, roster and outlet it names can belong to a host company; those ids are null when that company is outside the key's companies.
  • include: notes adds reason (string, the employee's) and review_note (string, the reviewer's).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
company_idstring
clock_record_idstringThe punch being corrected
shift_idstring
location_idstring
correction_typestringLATE_CHECKIN, MISSED_CHECKIN, MISSED_CHECKOUT, WRONG_TIME, ACCIDENTAL, MISSED_SHIFT, UNROSTERED_WORK
requested_timeinstant
requested_end_timeinstant
original_timeinstant
effective_timeinstantThe time applied on approval
effective_end_timeinstant
statusstringPENDING, APPROVED, DENIED, CANCELLED
reviewed_by_user_idstring
reviewed_atinstant
system_raisedbooleanRaised by Hopshift (a forgotten clock-out) rather than by a person
system_reasonstringWhy Hopshift raised it
created_atinstant
updated_atinstant

Leave

leave-requests

Medical certificates and other attachments are never served.

  • Scope: own company.
  • include: notes adds reason (string, the employee's) and manager_notes (string).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
company_idstring
leave_type_idstring
start_datedate
end_datedate
day_countdecimal(1)
is_half_dayboolean
half_day_portionstringFIRST or SECOND half of the rostered shift
half_day_periodstringLegacy AM or PM; older rows carry only this
statusstringpending, approved, rejected (denied on older rows), cancelled, cancellation_pending (still approved leave until the cancellation is accepted)
reviewed_by_user_idstring
reviewed_atinstant
first_approved_by_user_idstringThe approver
first_approved_atinstant
approved_via_admin_overrideboolean
is_backfilledbooleanEntered by an admin after the fact
is_retroactiveboolean
cancellation_requested_atinstant
cancellation_approved_atinstant
supersedes_idstringAn edited request replaces the request named here
created_atinstant
updated_atinstant

leave-request-history

Status history of leave requests.

  • Scope: through the request's company.
  • include: notes adds notes (string, the reviewer's text).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
leave_request_idstring
previous_statusstring
new_statusstring
changed_by_user_idstring
created_atinstant

leave-types

The group's leave types and their rules. Company limits on a leave type are not included.

  • Scope: group.
  • include: none. Content: none. Run listing: no.
FieldTypeMeaning
idstring
codestringSuch as ANNUAL or SICK
namestring
name_thstring
name_zhstring
reset_typestringANNUAL_CALENDAR, ANNUAL_ANNIVERSARY, ONE_TIME, ACCUMULATIVE
reset_monthintegerMonth of the yearly reset, for ANNUAL_CALENDAR
reset_dayintegerDay of the yearly reset, for ANNUAL_CALENDAR
counting_methodstringWORKING_DAYS, CALENDAR_DAYS
pay_typestringPAID, HALF_PAID, UNPAID
requires_doc_after_daysintegerA document is required after this many consecutive days; null means never
max_consecutive_daysintegerLongest single request; null means no limit
gender_restrictionstringM, F, or null for none
advance_notice_daysinteger
retroactive_days_allowedinteger
can_go_negativeboolean
carry_over_merged_into_codestringUnused days at year end go to this leave type's carry-over instead
ph_schedule_typestringPublic holiday schedule: FIXED, POOLED
is_legally_mandatedboolean
is_activeboolean
sort_orderinteger
requires_second_approvalboolean
created_atinstant
updated_atinstant

leave-allocations

Leave balances per employee, leave type and period. Manual balance adjustments are not part of this resource, so allocated plus carry_over minus taken can differ from the balance Hopshift shows.

  • Scope: own company.
  • include: none. Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
company_idstring
leave_type_idstring
period_startdate
period_enddate9999-12-31 for an ACCUMULATIVE leave type
allocateddecimal(1)Days granted for the period
carry_overdecimal(1)Days carried from the previous period
takendecimal(1)
pendingdecimal(1)Days in requests awaiting approval
carry_over_expires_atdate
sourcestringPOLICY, MANUAL, OPENING_BALANCE
created_atinstant
updated_atinstant

Payroll

payroll-items, payroll-documents, payslip-pdfs and intercompany-recharges serve rows of FINALIZED runs only. Follow the payroll rule to keep them right when runs are finalised, reopened or republished.

payroll-runs

Payroll runs of every status. A run's status says whether its payslips, documents, PDFs and recharges are served.

  • Scope: own company (the run's company).
  • include: notes adds notes (string).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
company_idstring
period_startdate
period_enddate
pay_datedate
statusstringDRAFT, REVIEW, APPROVED, PROCESSING, COMPLETED, FINALIZED
publication_revisioninteger0 until the run is first published, then increases each time it is published
finalized_atinstant
total_grossmoney
total_deductionsmoney
total_netmoney
total_employer_costmoney
created_atinstant
updated_atinstant

payroll-items

Payslips of finalised runs, with their lines nested.

  • Scope: the run is FINALIZED and its company is one of the key's.
  • include: notes adds manual_notes (string) and no_sso_reason (string) to the payslip, and override_reason (string) and payslip_note (string) to each line.
  • Content: none; the PDF is a payslip-pdfs row. Run listing: yes.
  • Page size: at most 200 (default 200).
FieldTypeMeaning
idstring
payroll_run_idstring
employee_idstring
company_idstringThe run's company
cost_bearing_company_idstringThe company that bears the cost
intercompany_assignment_idstring
pay_typestringSnapshot at calculation: HOURLY, DAILY, SALARY, COMMISSION, MIXED
hourly_ratemoney
regular_hoursdecimal(2)
overtime_hoursdecimal(2)
holiday_hoursdecimal(2)
rest_day_hoursdecimal(2)
unpaid_leave_hoursdecimal(2)
basic_paymoney
overtime_paymoney
holiday_paymoney
rest_day_paymoney
allowancesmoney
commissionsmoney
bonusesmoney
back_paymoney
gross_paymoneySum of all positive earnings
gross_income_adjustmentsmoneyUnpaid leave and overpayment recovery; gross pay after them is gross_pay minus this
sso_eligible_incomemoneyIncome SSO was assessed on
sso_contribution_basemoneyBase the SSO contribution was calculated from
taxable_earningsmoney
net_taxable_incomemoney
employee_ssomoney
employer_ssomoney
income_taxmoneyWithholding tax
loan_deductionmoney
other_deductionsmoney
total_deductionsmoney
net_paymoney
total_cost_to_companymoney
proration_factordecimal(4)
is_manual_overridebooleanHR overrode the calculated figures
no_ssobooleanHR waived SSO on this payslip
calculated_atinstant
created_atinstant
updated_atinstant
linesarrayPayslip lines, ordered by sort_order then id, fields below

Each line:

FieldTypeMeaning
idstring
pay_item_idstringThe company pay item (pay-items); null for system lines
namestringThe pay item name when calculated
typestringEARNING, DEDUCTION, EMPLOYER_CONTRIBUTION
amountmoneyThe amount paid
computed_amountmoneyWhat the calculation produced; differs from amount when HR overrode the line
calc_methodstringFIXED, PERCENTAGE or MANUAL, as stored on the line
sort_orderinteger

payroll-documents

Government filings and the payroll export of finalised runs. Metadata only: the file is the content.

  • Scope: the run exists, is FINALIZED and its company is one of the key's. Types PND1, PND1_PDF, SSO_1_10, SSO_1_10_PDF, SSO_SUBMISSION and PAYROLL_CSV. PAYSLIPS_ZIP is never listed.
  • include: none.
  • Content: the file; see Files for formats. Run listing: yes.
FieldTypeMeaning
idstring
payroll_run_idstring
company_idstringThe run's company
typestringOne of the six types above
filenamestring
content_typestringThe Content-Type the file is served with
generated_atinstantMoves when the filing is regenerated

payslip-pdfs

Password-protected payslip PDFs of finalised runs. Metadata only: the file is the content.

A run has payslip PDFs only once it has been published from Hopshift. Runs finalised without being published, such as payroll imported from an earlier system, still have their payroll items and filings but no payslip PDFs.

  • Scope: the run is FINALIZED in one of the key's companies, the PDF belongs to the run's active publication, and no later protection of the same payslip exists. A newer protection (for example after a birthday correction) arrives as a new row that replaces the earlier row with the same payroll_item_id.
  • include: none.
  • Content: the PDF as stored, AES-256 protected with the employee's birthday as DDMMYYYY (Gregorian year). 404 when there is no PDF. Run listing: yes.
FieldTypeMeaning
idstring
payroll_item_idstringThe payslip
payroll_run_idstring
employee_idstring
company_idstringThe run's company
publication_revisionintegerThe run publication this PDF belongs to
protection_revisionintegerStarts at 0 and increases each time the payslip is protected again
filenamestring
pdf_availablebooleanFalse when the employee had no birthday on file, so there is no PDF
pdf_sha256stringSHA-256 (hex) of the PDF file; null without a PDF
protected_atinstant
generated_atinstant

pay-items

Each company's pay components: what payslip lines, employee pay items and schedules point at.

  • Scope: own company.
  • include: none. Content: none. Run listing: no.
FieldTypeMeaning
idstring
company_idstring
group_pay_item_definition_idstringThe group component this item replicates (pay-item-definitions)
codestringShort code, such as HOUSING_ALLOW
namestring
name_localstringLocal-language name
typestringEARNING, DEDUCTION, EMPLOYER_CONTRIBUTION
categorystringFree grouping, such as Allowances
calc_methodstringFIXED, PERCENTAGE, HOURS_BASED, FORMULA
default_amountmoneyFor FIXED
percentagedecimal(4)For PERCENTAGE: "0.0500" is 5%
percentage_ofstringWhat the percentage applies to, such as basicPay, grossPay or another pay item code
is_taxablebooleanSubject to income tax
is_ssoablebooleanSubject to SSO
is_pvfablebooleanSubject to provident fund
reduces_gross_incomebooleanA deduction that reduces reportable income, such as unpaid leave
should_proratebooleanProrated for joiners and leavers
projects_for_annualizationbooleanProjected over future months when annualising tax
is_activeboolean
is_systemboolean
created_atinstant
updated_atinstant

pay-item-definitions

The group's canonical pay components. Company pay items sharing a definition are the same component across companies.

  • Scope: group.
  • include: none. Content: none. Run listing: no.

Fields: id plus the same fields as pay-items from code to updated_at (no company_id and no group_pay_item_definition_id).

employee-pay-items

Recurring pay components set on an employee.

  • Scope: through the employee.
  • include: notes adds notes (string).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
pay_item_idstring
amountmoneyOverrides the pay item's amount; null uses the pay item's
percentagedecimal(4)Overrides the pay item's percentage; null uses the pay item's
is_activeboolean
effective_fromdate
effective_todateNull while ongoing
created_atinstant
updated_atinstant

employee-pay-schedules

Planned monthly amounts of a pay component for an employee. Imported incentives live here.

  • Scope: through the employee.
  • include: notes adds note (string).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
pay_item_idstring
tax_yearintegerSuch as 2026
monthintegerCalendar month, 1 to 12
amountmoney
created_atinstant
updated_atinstant

meal-allowance-policies

Meal allowance rules: a group default (company_id null) and company overrides. An enrolled employee's policy is their company's override, else the group default.

  • Scope: the group default reaches every key of the group; a company override reaches keys covering that company.
  • include: notes adds description (string).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
group_idstring
company_idstringNull for the group default
namestring
amountmoney
currencystringSuch as THB
min_hoursdecimal(1)
max_hoursdecimal(1)
is_taxableboolean
is_activeboolean
effective_fromdate
deduct_on_no_showboolean
prorate_on_mid_shiftboolean
late_deduction_modestringNONE, PROPORTIONAL, PER_MINUTE
late_deduction_ratedecimal(4)
grace_minutesinteger
deduct_on_early_outboolean
deduct_on_missing_clock_outboolean
created_atinstant
updated_atinstant

meal-allowance-enrollments

Which employees receive meal allowance. The policy is resolved by company, not stored here.

  • Scope: own company.
  • include: none. Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
company_idstring
sourcestringPOLICY, MANUAL, OPENING_BALANCE
calculation_modestringATTENDANCE, CLOCKED_DAYS, FIXED_MONTHLY (legacy, calculated like CLOCKED_DAYS)
monthly_amountmoney
override_amountmoneyPer-employee amount; null uses the policy's
pay_unrostered_daysbooleanAlso pays days clocked without a roster
is_activeboolean
created_atinstant
updated_atinstant

intercompany-assignments

An employee of one company (source) working for another (host), with how the cost is recharged.

  • Scope: either company: the key receives the row when the source or the host company is one of its companies.
  • include: notes adds notes (string).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
transfer_idstring
source_company_idstringSent when the company is in the key's group
host_company_idstringSent when the company is in the key's group
host_department_idstring
cost_basis_typestringACTUAL_COST, FIXED_RATE, COST_PLUS_MARKUP
fixed_monthly_ratemoney
markup_percentagedecimal(2)
include_basic_paybooleanBasic pay is recharged
include_overtime_payboolean
include_allowancesboolean
include_bonusesboolean
include_employer_contributionsboolean
effective_fromdate
effective_todate
is_activeboolean
created_atinstant
updated_atinstant

intercompany-recharges

What a host company owes the source company for one finalised payroll run, with lines per employee.

  • Scope: the recharge is in the key's group, the source or the host company is one of the key's companies, the run is FINALIZED, and the recharge belongs to the run's current publication. A key without the source company gets payroll_run_id null; see the host-company limitation.
  • include: notes adds notes (string), settlement_reference (string) and dispute_reason (string) to the recharge, and notes (string) to each line.
  • Content: none. Run listing: yes.
FieldTypeMeaning
idstring
payroll_run_idstringThe source company's run
publication_revisionintegerThe run publication the recharge belongs to
source_company_idstring
host_company_idstring
period_startdate
period_enddate
currencystring
total_actual_costmoney
total_markup_amountmoney
total_recharge_amountmoney
statusstringDRAFT, CONFIRMED, INVOICED, SETTLED, DISPUTED, CANCELLED
invoice_numberstring
invoice_due_datedate
confirmed_atinstant
invoiced_atinstant
settled_atinstant
disputed_atinstant
created_atinstant
updated_atinstant
linesarrayOne line per employee, ordered by id, fields below

Each line:

FieldTypeMeaning
idstring
assignment_idstringThe intercompany assignment
employee_idstring
basic_paymoney
overtime_paymoney
allowancesmoney
bonusesmoney
other_earningsmoney
employer_contributionsmoney
actual_costmoney
cost_basis_typestringACTUAL_COST, FIXED_RATE, COST_PLUS_MARKUP
fixed_monthly_ratemoney
markup_percentagedecimal(2)
markup_amountmoney
proration_factordecimal(4)
recharge_amountmoney
created_atinstant
updated_atinstant

tax-declarations

Employees' yearly tax allowance and deduction declarations. Amounts only: no dependant names or ids.

  • Scope: own company.
  • include: notes adds notes (string).
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
employee_idstring
company_idstring
tax_yearinteger
personal_allowancemoney
spouse_allowancemoney
child_allowancemoney
child_education_allowancemoney
parent_support_allowancemoney
disabled_dependent_allowancemoney
life_insurance_premiummoney
health_insurance_premiummoney
parent_health_insurancemoney
pension_insurancemoney
provident_fund_contributionmoney
home_loan_interestmoney
social_enterprise_donationmoney
education_donationmoney
general_donationmoney
other_deductionsmoney
statusstringDRAFT, SUBMITTED, APPROVED
submitted_atinstant
approved_atinstant
approved_by_user_idstring
created_atinstant
updated_atinstant

History

audit-events

Hopshift's audit log, redacted. It covers only some changes, much of it imports and repairs; the per-record histories are clock-record-history, leave-request-history, employee-events and salary-adjustments.

  • Scope: the audited record's company, resolved when the row is read, for these entity types: employee/Employee, shift/Shift (deleted shifts too), ClockRecord, ClockSession, AttendanceCorrectionRequest/attendance_correction, EmployeeLeaveAllocation, EmployeeLeaveGrant, UserEmailChangeRequest, PayrollRun, PayrollItem/payroll_item. Rows about the group's API keys, MCP keys, MCP connections and MCP operations (ApiKey, McpKey, McpOAuthGrant, McpOperation) have no company and reach only whole-group keys. Rows of any other type, and rows whose record no longer exists, reach no key.
  • include:
    • notes adds reason (string, the actor's) and keeps free text inside values.
    • values adds values (object { "before": ..., "after": ... }, the recorded values). Without notes, every key that holds free text (notes, reasons, descriptions, comments, remarks, wouldRehire) is removed from them at any depth. values is null when the row recorded no values (its changed_fields is then empty) or when personal evidence hides it.
    • Both are null when the employee the row is about belongs to a company outside the key's companies or can no longer be found, and on payroll run and payslip rows whose run is not currently FINALIZED.
  • Content: none. Run listing: no.
FieldTypeMeaning
idstring
actionstringWhat happened, as recorded
entity_typestringOne of the types above
entity_idstringThe audited record's id
performed_by_user_idstring
company_idstringThe resolved company; null on a group row
created_atinstant
changed_fieldsarrayNames of the fields the row records as changed, sorted. Names only, never values

On this page