Payroll API
26 endpoints, generated from packages/core/openapi/v1.snapshot.json (OpenAPI 3.1.0, contract version 1.0). Conventions for lists, errors, money and authentication are on the API conventions page.
GET/api/v1/payroll/allowance-settings
CPF and pro-ration treatment of each allowance type
Responses
200 Success. object
itemsarray of objectrequiredallowanceTypeIdstring (uuid)requiredcodestringrequirednamestringrequiredcpfLiablebooleanrequiredproratebooleanrequiredgrossRateIncludedboolean | nullrequired
- 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required
PUT/api/v1/payroll/allowance-settings/{allowanceTypeId}
Set whether an allowance type is CPF-liable and pro-rated
Parameters
| Name | In | Type | Required |
|---|---|---|---|
allowanceTypeId | path | string (uuid) | yes |
Request body
application/json, object, required
cpfLiablebooleanrequiredproratebooleanrequiredgrossRateIncludedboolean | null
Responses
200 Success. object
allowanceTypeIdstring (uuid)requiredcodestringrequirednamestringrequiredcpfLiablebooleanrequiredproratebooleanrequiredgrossRateIncludedboolean | nullrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found
GET/api/v1/payroll/runs
List payroll runs, newest month first
Responses
200 Success. object
itemsarray of objectrequiredidstring (uuid)requiredkindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
monthstringrequiredpayDatestring (date)requiredstatusenumrequiredone of "draft", "in_review", "approved", "paid"
supersededByRunIdstring (uuid) or nullrequiredadjustsRunIdstring (uuid) or nullrequiredreleasedAtstring | nullrequiredtotalsobject or nullrequiredheadcountintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
cpfEmployeeShareAbsorbedCentsintegermin -9007199254740991
cpfAwRecoveredCentsintegermin -9007199254740991
cpfTotalChargedCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
shgChargedByFundobjectrequiredshgDonorsobjectrequiredsdlChargedCentsintegerrequiredmin -9007199254740991
sdlMonthCentsintegerrequiredmin -9007199254740991
fwlCentsintegerrequiredmin -9007199254740991
employerCostCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
computedAtstring | nullrequired
- 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required
POST/api/v1/payroll/runs
Create a regular or off-cycle (final pay, bonus) payroll run
Request body
application/json, object, required
kindenumrequiredone of "regular", "off_cycle"
monthstringrequiredpayDatestring (date) or nulloffCycleReasonenum or nullone of "final_pay", "bonus"
employeeIdsarray of string (uuid) or null
Responses
201 Success. object
idstring (uuid)requiredkindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
monthstringrequiredperiodStartstring (date)requiredperiodEndstring (date)requiredpayDatestring (date)requiredstatusenumrequiredone of "draft", "in_review", "approved", "paid"
employeeIdsarray of string (uuid) or nullrequiredadjustsRunIdstring (uuid) or nullrequiredsupersededByRunIdstring (uuid) or nullrequiredreopenReasonstring | nullrequiredapprovalRequestIdstring | nullrequiredsubmittedBystring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedBystring (uuid) or nullrequireddecidedAtstring | nullrequireddecisionCommentstring | nullrequiredselfApprovedbooleanrequiredcomputedAtstring | nullrequiredinputHashstring | nullrequiredresultHashstring | nullrequiredtotalsobject or nullrequiredheadcountintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
cpfEmployeeShareAbsorbedCentsintegermin -9007199254740991
cpfAwRecoveredCentsintegermin -9007199254740991
cpfTotalChargedCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
shgChargedByFundobjectrequiredshgDonorsobjectrequiredsdlChargedCentsintegerrequiredmin -9007199254740991
sdlMonthCentsintegerrequiredmin -9007199254740991
fwlCentsintegerrequiredmin -9007199254740991
employerCostCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
releasedAtstring | nullrequiredpaidAtstring | nullrequiredcreatedAtstringrequiredinputsChangedSinceComputebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
GET/api/v1/payroll/runs/{runId}
Run overview: issues first, totals, changes since last month, and the employee table
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Responses
200 Success. object
runobjectrequiredidstring (uuid)requiredkindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
monthstringrequiredperiodStartstring (date)requiredperiodEndstring (date)requiredpayDatestring (date)requiredstatusenumrequiredone of "draft", "in_review", "approved", "paid"
employeeIdsarray of string (uuid) or nullrequiredadjustsRunIdstring (uuid) or nullrequiredsupersededByRunIdstring (uuid) or nullrequiredreopenReasonstring | nullrequiredapprovalRequestIdstring | nullrequiredsubmittedBystring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedBystring (uuid) or nullrequireddecidedAtstring | nullrequireddecisionCommentstring | nullrequiredselfApprovedbooleanrequiredcomputedAtstring | nullrequiredinputHashstring | nullrequiredresultHashstring | nullrequiredtotalsobject or nullrequiredheadcountintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
cpfEmployeeShareAbsorbedCentsintegermin -9007199254740991
cpfAwRecoveredCentsintegermin -9007199254740991
cpfTotalChargedCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
shgChargedByFundobjectrequiredshgDonorsobjectrequiredsdlChargedCentsintegerrequiredmin -9007199254740991
sdlMonthCentsintegerrequiredmin -9007199254740991
fwlCentsintegerrequiredmin -9007199254740991
employerCostCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
releasedAtstring | nullrequiredpaidAtstring | nullrequiredcreatedAtstringrequiredinputsChangedSinceComputebooleanrequired
rowsarray of objectrequiredpayslipIdstring (uuid)requiredemployeeIdstring (uuid)requiredemployeeNumberstringrequirednamestringrequireddepartmentstring | nullrequiredbasicCentsintegerrequiredmin -9007199254740991
allowancesCentsintegerrequiredmin -9007199254740991
overtimeCentsintegerrequiredmin -9007199254740991
additionalCentsintegerrequiredmin -9007199254740991
nplCentsintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
otherDeductionsCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
flagsarray of stringrequired
issuesarray of objectrequiredcodestringrequiredseverityenumrequiredone of "info", "warning", "blocking"
messagestringrequiredsourcestring | nullrequiredemployeeIdstring (uuid) or nullrequiredemployeeNamestring | nullrequired
changesobjectrequiredcomparedWithobject or nullrequiredrunIdstring (uuid)requiredmonthstringrequired
headlinestringrequireditemsarray of objectrequiredkindenumrequiredone of "joined", "left", "basic_changed", "new_item", "net_changed", "not_in_run", "residency"
employeeIdstring (uuid)requirednamestringrequiredtextstringrequired
adjustmentobject or nullrequiredofRunIdstring (uuid)requiredofMonthstringrequired
supersededBystring (uuid) or nullrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required - 404
not_found
PATCH/api/v1/payroll/runs/{runId}
Change a draft run's pay date
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Request body
application/json, object, required
payDatestring (date)required
Responses
200 Success. object
idstring (uuid)requiredkindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
monthstringrequiredperiodStartstring (date)requiredperiodEndstring (date)requiredpayDatestring (date)requiredstatusenumrequiredone of "draft", "in_review", "approved", "paid"
employeeIdsarray of string (uuid) or nullrequiredadjustsRunIdstring (uuid) or nullrequiredsupersededByRunIdstring (uuid) or nullrequiredreopenReasonstring | nullrequiredapprovalRequestIdstring | nullrequiredsubmittedBystring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedBystring (uuid) or nullrequireddecidedAtstring | nullrequireddecisionCommentstring | nullrequiredselfApprovedbooleanrequiredcomputedAtstring | nullrequiredinputHashstring | nullrequiredresultHashstring | nullrequiredtotalsobject or nullrequiredheadcountintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
cpfEmployeeShareAbsorbedCentsintegermin -9007199254740991
cpfAwRecoveredCentsintegermin -9007199254740991
cpfTotalChargedCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
shgChargedByFundobjectrequiredshgDonorsobjectrequiredsdlChargedCentsintegerrequiredmin -9007199254740991
sdlMonthCentsintegerrequiredmin -9007199254740991
fwlCentsintegerrequiredmin -9007199254740991
employerCostCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
releasedAtstring | nullrequiredpaidAtstring | nullrequiredcreatedAtstringrequiredinputsChangedSinceComputebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
DELETE/api/v1/payroll/runs/{runId}
Delete a draft run
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Responses
204 No content.
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
POST/api/v1/payroll/runs/{runId}/compute
Compute every employee's pay from the current records and the run's items
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Responses
200 Success. object
idstring (uuid)requiredkindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
monthstringrequiredperiodStartstring (date)requiredperiodEndstring (date)requiredpayDatestring (date)requiredstatusenumrequiredone of "draft", "in_review", "approved", "paid"
employeeIdsarray of string (uuid) or nullrequiredadjustsRunIdstring (uuid) or nullrequiredsupersededByRunIdstring (uuid) or nullrequiredreopenReasonstring | nullrequiredapprovalRequestIdstring | nullrequiredsubmittedBystring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedBystring (uuid) or nullrequireddecidedAtstring | nullrequireddecisionCommentstring | nullrequiredselfApprovedbooleanrequiredcomputedAtstring | nullrequiredinputHashstring | nullrequiredresultHashstring | nullrequiredtotalsobject or nullrequiredheadcountintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
cpfEmployeeShareAbsorbedCentsintegermin -9007199254740991
cpfAwRecoveredCentsintegermin -9007199254740991
cpfTotalChargedCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
shgChargedByFundobjectrequiredshgDonorsobjectrequiredsdlChargedCentsintegerrequiredmin -9007199254740991
sdlMonthCentsintegerrequiredmin -9007199254740991
fwlCentsintegerrequiredmin -9007199254740991
employerCostCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
releasedAtstring | nullrequiredpaidAtstring | nullrequiredcreatedAtstringrequiredinputsChangedSinceComputebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
GET/api/v1/payroll/runs/{runId}/employees/{employeeId}
One employee in a run: inputs, every line, the full CPF/SDL/SHG working and the issues
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
employeeId | path | string (uuid) | yes |
Responses
200 Success. object
runobjectrequiredidstring (uuid)requiredkindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
monthstringrequiredpayDatestring (date)requiredstatusenumrequiredone of "draft", "in_review", "approved", "paid"
supersededByRunIdstring (uuid) or nullrequiredadjustsRunIdstring (uuid) or nullrequiredreleasedAtstring | nullrequiredtotalsobject or nullrequiredheadcountintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
cpfEmployeeShareAbsorbedCentsintegermin -9007199254740991
cpfAwRecoveredCentsintegermin -9007199254740991
cpfTotalChargedCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
shgChargedByFundobjectrequiredshgDonorsobjectrequiredsdlChargedCentsintegerrequiredmin -9007199254740991
sdlMonthCentsintegerrequiredmin -9007199254740991
fwlCentsintegerrequiredmin -9007199254740991
employerCostCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
computedAtstring | nullrequired
employeeIdstring (uuid)requiredpayslipIdstring (uuid) or nullrequiredemployeeNamestring | nullrequiredinputobject or nullrequiredinputHashstring | nullrequiredresultobject or nullrequiredengineVersionintegerrequiredmin -9007199254740991
linesarray of objectrequiredcodestringrequiredkindenumrequiredone of "earning", "deduction", "reimbursement", "employer"
categorystringrequiredlabelstringrequiredamountCentsintegerrequiredmin -9007199254740991
wageClassenum or nullrequiredone of "OW", "AW"
cpfLiablebooleanrequireddetailstring | nullrequireditemIdstring | nullrequired
totalsobjectrequiredmonthobjectrequiredowCpfCentsintegerrequiredmin -9007199254740991
awCpfCentsintegerrequiredmin -9007199254740991
totalWagesCentsintegerrequiredmin -9007199254740991
cpfTotalCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
shgCentsobjectrequiredsdlUnits1e4Centintegerrequiredmin -9007199254740991
chargedobjectrequiredcpfTotalCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfAwTopUpEmployeeCentsintegermin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
shgCentsobjectrequiredsdlUnits1e4Centintegerrequiredmin -9007199254740991
cpfobject or nullrequiredresidencyCategorystringrequiredageBandstring | nullrequiredageBandLabelstring | nullrequiredrateTableIdstring | nullrequiredwageBandstring | nullrequiredowSubjectCentsintegerrequiredmin -9007199254740991
awSubjectCentsintegerrequiredmin -9007199254740991
awNotSubjectCentsintegerrequiredmin -9007199254740991
awCeilingobject or nullrequiredbasisstringrequiredannualOwSubjectCentsintegerrequiredmin -9007199254740991
annualAwCeilingCentsintegerrequiredmin -9007199254740991
headroomBeforeCentsintegerrequiredmin -9007199254740991
headroomAfterCentsintegerrequiredmin -9007199254740991
priorAwShortfallCentsintegerrequiredmin -9007199254740991
priorAwExcessCentsintegerrequiredmin -9007199254740991
exactTotalstringrequiredexactEmployeestringrequired
shgFundsarray of stringrequiredovertimeobject or nullrequiredminutesintegerrequiredmin -9007199254740991
periodsarray of objectrequiredlabelstringrequiredperiodStartstring (date) or nullrequiredperiodEndstring (date) or nullrequiredminutesintegerrequiredmin -9007199254740991
payCentsintegerrequiredmin -9007199254740991
awTopUpobject or nullemployeeShareCentsintegerrequiredmin -9007199254740991
recoveredThisRunCentsintegerrequiredmin -9007199254740991
recoveredEarlierCentsintegerrequiredmin -9007199254740991
absorbedCentsintegerrequiredmin -9007199254740991
deadlinestring (date)required
hourlyobject or nullrequiredrateCentsintegerrequiredmin -9007199254740991
minutesintegerrequiredmin -9007199254740991
rulesarray of objectrequiredfamilystringrequiredidstringrequiredeffectiveFromstring (date)requiredeffectiveTostring (date) or nullrequiredsourcestringrequired
workingarray of objectrequiredsectionstringrequiredcodestringrequiredtextstringrequired
issuesarray of objectrequiredcodestringrequiredseverityenumrequiredone of "info", "warning", "blocking"
messagestringrequiredsourcestring | nullrequired
stateAfterobjectrequiredowSubjectCentsintegerrequiredmin -9007199254740991
awPaymentsarray of objectrequiredpayableMonthstringrequiredowCentsintegerrequiredmin -9007199254740991
awPayableCentsintegerrequiredmin -9007199254740991
awSubjectCentsintegerrequiredmin -9007199254740991
residencyobject
resultHashstring | nullrequireditemsarray of objectrequiredidstring (uuid)requiredemployeeIdstring (uuid)requiredkindenumrequiredone of "bonus", "commission", "backpay", "other_earning", "overtime", "unpaid_leave", "hours", "deduction", "scheduled_days", "days_worked", "cpf_aw_recovery"
labelstringrequiredamountCentsinteger or nullrequiredmin -9007199254740991
wageClassenum or nullrequiredone of "OW", "AW"
cpfLiablebooleanrequiredawPayableDatestring (date) or nullrequiredminutesinteger or nullrequiredmin -9007199254740991
daysnumber | nullrequireddatestring (date) or nullrequiredperiodStartstring (date) or nullrequiredperiodEndstring (date) or nullrequireddeductionCategoryenum or nullrequiredone of "absence", "damage_loss", "accommodation", "amenities", "advance", "loan", "unearned_benefit", "overpayment", "cooperative", "consented", "court_order"
sourceenumrequiredone of "manual", "attendance"
copiedFromItemIdstring (uuid) or nullrequiredovertimeSourceIdstring (uuid) or nullrequiredholidayDatestring (date) or nullrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required - 404
not_found
GET/api/v1/payroll/runs/{runId}/files/bank
Generic ISO 20022 pain.001.001.03 salary credit-transfer file (not a bank-specific format)
Open-standard file for banks that accept ISO 20022 pain.001 uploads. Each bank's message guide (service level, charge bearer, BIC length) is not applied; test the file with your bank before first use. Excluded employees are listed in the x-crowhr-excluded header (URL-encoded JSON).
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Responses
200 pain.001.001.03 XML application/xml
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required,reauth_required - 404
not_found - 409
conflict
GET/api/v1/payroll/runs/{runId}/files/cpf-ezpay
CPF EZPay (FTP) submission file for the amounts this run charged
Fixed-width file per CPF Board's CPF EZPay (FTP) File Specifications (16 Jan 2025), for upload in CPF EZPay. Employees left out (e.g. SHG for foreigners without a CPF account) are listed in the x-crowhr-excluded header (URL-encoded JSON).
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Responses
200 CPF EZPay .DTL file text/plain
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required,reauth_required - 404
not_found - 409
conflict
POST/api/v1/payroll/runs/{runId}/items
Add a pay item (bonus, commission, back pay, overtime, no-pay leave, hours, deduction) to a draft run
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Request body
application/json, object, required
overtimeSourceIdstring (uuid) or nullholidayDatestring (date) or nullemployeeIdstring (uuid)requiredkindenumrequiredone of "bonus", "commission", "backpay", "other_earning", "overtime", "unpaid_leave", "hours", "deduction", "scheduled_days", "days_worked", "cpf_aw_recovery"
labelstringrequiredmin length 1 · max length 80
amountCentsinteger or nullmin 0
wageClassenum or nullone of "OW", "AW"
cpfLiablebooleanawPayableDatestring (date) or nullminutesinteger or nullmax 44640
daysnumber or nullmax 31
datestring (date) or nullperiodStartstring (date) or nullperiodEndstring (date) or nulldeductionCategoryenum or nullone of "absence", "damage_loss", "accommodation", "amenities", "advance", "loan", "unearned_benefit", "overpayment", "cooperative", "consented", "court_order"
Responses
201 Success. object
idstring (uuid)required
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
PUT/api/v1/payroll/runs/{runId}/items/{itemId}
Replace a pay item on a draft run
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
itemId | path | string (uuid) | yes |
Request body
application/json, object, required
overtimeSourceIdstring (uuid) or nullholidayDatestring (date) or nullemployeeIdstring (uuid)requiredkindenumrequiredone of "bonus", "commission", "backpay", "other_earning", "overtime", "unpaid_leave", "hours", "deduction", "scheduled_days", "days_worked", "cpf_aw_recovery"
labelstringrequiredmin length 1 · max length 80
amountCentsinteger or nullmin 0
wageClassenum or nullone of "OW", "AW"
cpfLiablebooleanawPayableDatestring (date) or nullminutesinteger or nullmax 44640
daysnumber or nullmax 31
datestring (date) or nullperiodStartstring (date) or nullperiodEndstring (date) or nulldeductionCategoryenum or nullone of "absence", "damage_loss", "accommodation", "amenities", "advance", "loan", "unearned_benefit", "overpayment", "cooperative", "consented", "court_order"
Responses
204 No content.
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
DELETE/api/v1/payroll/runs/{runId}/items/{itemId}
Remove a pay item from a draft run
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
itemId | path | string (uuid) | yes |
Responses
204 No content.
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
POST/api/v1/payroll/runs/{runId}/mark-paid
Record that an approved run has been paid (locks it)
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Responses
200 Success. object
idstring (uuid)requiredkindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
monthstringrequiredperiodStartstring (date)requiredperiodEndstring (date)requiredpayDatestring (date)requiredstatusenumrequiredone of "draft", "in_review", "approved", "paid"
employeeIdsarray of string (uuid) or nullrequiredadjustsRunIdstring (uuid) or nullrequiredsupersededByRunIdstring (uuid) or nullrequiredreopenReasonstring | nullrequiredapprovalRequestIdstring | nullrequiredsubmittedBystring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedBystring (uuid) or nullrequireddecidedAtstring | nullrequireddecisionCommentstring | nullrequiredselfApprovedbooleanrequiredcomputedAtstring | nullrequiredinputHashstring | nullrequiredresultHashstring | nullrequiredtotalsobject or nullrequiredheadcountintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
cpfEmployeeShareAbsorbedCentsintegermin -9007199254740991
cpfAwRecoveredCentsintegermin -9007199254740991
cpfTotalChargedCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
shgChargedByFundobjectrequiredshgDonorsobjectrequiredsdlChargedCentsintegerrequiredmin -9007199254740991
sdlMonthCentsintegerrequiredmin -9007199254740991
fwlCentsintegerrequiredmin -9007199254740991
employerCostCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
releasedAtstring | nullrequiredpaidAtstring | nullrequiredcreatedAtstringrequiredinputsChangedSinceComputebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
GET/api/v1/payroll/runs/{runId}/payslips/{payslipId}
A payslip of a run, as the employee will see it
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
payslipId | path | string (uuid) | yes |
Responses
200 Success. object
idstring (uuid)requiredrunIdstring (uuid)requiredrunKindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
titlestringrequiredrevisionobject or nullrequiredofRunIdstring (uuid)requiredpreviouslyPaidCentsintegerrequiredmin -9007199254740991
releasedAtstring | nullrequiredemployerobjectrequiredlegalNamestringrequired
employeeobjectrequirednamestringrequiredemployeeNumberstringrequiredidMaskedstringrequiredjobTitlestring | nullrequireddepartmentstring | nullrequired
payDatestring (date)requiredperiodStartstring (date)requiredperiodEndstring (date)requiredbasicobject or nullrequiredamountCentsintegerrequiredmin -9007199254740991
detailstring | nullrequiredhourlyobject or nullrequiredrateCentsintegerrequiredmin -9007199254740991
hoursnumberrequired
allowancesarray of objectrequiredlabelstringrequiredamountCentsintegerrequiredmin -9007199254740991
detailstring | nullrequired
additionalarray of objectrequiredlabelstringrequiredamountCentsintegerrequiredmin -9007199254740991
detailstring | nullrequired
overtimeobject or nullrequiredhoursnumberrequiredpayCentsintegerrequiredmin -9007199254740991
periodsarray of objectrequiredlabelstringrequiredhoursnumberrequiredpayCentsintegerrequiredmin -9007199254740991
periodStartstring (date) or nullrequiredperiodEndstring (date) or nullrequireddiffersFromSalaryPeriodbooleanrequired
deductionsarray of objectrequiredlabelstringrequiredamountCentsintegerrequiredmin -9007199254740991
detailstring | nullrequiredtypeenumrequiredone of "fixed", "ad_hoc"
reimbursementsarray of objectrequiredlabelstringrequiredamountCentsintegerrequiredmin -9007199254740991
detailstring | nullrequired
grossCentsintegerrequiredmin -9007199254740991
totalDeductionsCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
employerCpfCentsintegerrequiredmin -9007199254740991
cpfobject or nullrequiredrateTableIdstring | nullrequiredrateTableLabelstring | nullrequiredageBandstring | nullrequiredresidencystringrequiredowSubjectCentsintegerrequiredmin -9007199254740991
awSubjectCentsintegerrequiredmin -9007199254740991
shgFundsarray of stringrequiredytdobjectrequiredyearstringrequiredawSubjectCentsintegerrequiredmin -9007199254740991
owSubjectCentsintegerrequiredmin -9007199254740991
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required - 404
not_found
GET/api/v1/payroll/runs/{runId}/payslips/{payslipId}/pdf
Download a payslip of a run as PDF (preview before release)
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
payslipId | path | string (uuid) | yes |
Responses
200 Payslip PDF application/pdf
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required - 404
not_found
POST/api/v1/payroll/runs/{runId}/release
Release an approved run's payslips to employees
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Responses
200 Success. object
idstring (uuid)requiredkindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
monthstringrequiredperiodStartstring (date)requiredperiodEndstring (date)requiredpayDatestring (date)requiredstatusenumrequiredone of "draft", "in_review", "approved", "paid"
employeeIdsarray of string (uuid) or nullrequiredadjustsRunIdstring (uuid) or nullrequiredsupersededByRunIdstring (uuid) or nullrequiredreopenReasonstring | nullrequiredapprovalRequestIdstring | nullrequiredsubmittedBystring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedBystring (uuid) or nullrequireddecidedAtstring | nullrequireddecisionCommentstring | nullrequiredselfApprovedbooleanrequiredcomputedAtstring | nullrequiredinputHashstring | nullrequiredresultHashstring | nullrequiredtotalsobject or nullrequiredheadcountintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
cpfEmployeeShareAbsorbedCentsintegermin -9007199254740991
cpfAwRecoveredCentsintegermin -9007199254740991
cpfTotalChargedCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
shgChargedByFundobjectrequiredshgDonorsobjectrequiredsdlChargedCentsintegerrequiredmin -9007199254740991
sdlMonthCentsintegerrequiredmin -9007199254740991
fwlCentsintegerrequiredmin -9007199254740991
employerCostCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
releasedAtstring | nullrequiredpaidAtstring | nullrequiredcreatedAtstringrequiredinputsChangedSinceComputebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
POST/api/v1/payroll/runs/{runId}/reopen
Reopen an approved or paid run as a new adjustment run (the original is never changed)
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Request body
application/json, object, required
reasonstringrequiredmax length 500
Responses
201 Success. object
idstring (uuid)requiredkindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
monthstringrequiredperiodStartstring (date)requiredperiodEndstring (date)requiredpayDatestring (date)requiredstatusenumrequiredone of "draft", "in_review", "approved", "paid"
employeeIdsarray of string (uuid) or nullrequiredadjustsRunIdstring (uuid) or nullrequiredsupersededByRunIdstring (uuid) or nullrequiredreopenReasonstring | nullrequiredapprovalRequestIdstring | nullrequiredsubmittedBystring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedBystring (uuid) or nullrequireddecidedAtstring | nullrequireddecisionCommentstring | nullrequiredselfApprovedbooleanrequiredcomputedAtstring | nullrequiredinputHashstring | nullrequiredresultHashstring | nullrequiredtotalsobject or nullrequiredheadcountintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
cpfEmployeeShareAbsorbedCentsintegermin -9007199254740991
cpfAwRecoveredCentsintegermin -9007199254740991
cpfTotalChargedCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
shgChargedByFundobjectrequiredshgDonorsobjectrequiredsdlChargedCentsintegerrequiredmin -9007199254740991
sdlMonthCentsintegerrequiredmin -9007199254740991
fwlCentsintegerrequiredmin -9007199254740991
employerCostCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
releasedAtstring | nullrequiredpaidAtstring | nullrequiredcreatedAtstringrequiredinputsChangedSinceComputebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
POST/api/v1/payroll/runs/{runId}/return-to-draft
Return an approved, unpaid run to draft to recompute and approve it again
For a change after approval that must not be paid as an adjustment, such as an employee's new bank account: the bank file refuses a run whose payees changed after it was computed. Payslips are hidden again until the run is re-approved and released.
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Request body
application/json, object, required
reasonstringrequiredmax length 500
Responses
200 Success. object
idstring (uuid)requiredkindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
monthstringrequiredperiodStartstring (date)requiredperiodEndstring (date)requiredpayDatestring (date)requiredstatusenumrequiredone of "draft", "in_review", "approved", "paid"
employeeIdsarray of string (uuid) or nullrequiredadjustsRunIdstring (uuid) or nullrequiredsupersededByRunIdstring (uuid) or nullrequiredreopenReasonstring | nullrequiredapprovalRequestIdstring | nullrequiredsubmittedBystring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedBystring (uuid) or nullrequireddecidedAtstring | nullrequireddecisionCommentstring | nullrequiredselfApprovedbooleanrequiredcomputedAtstring | nullrequiredinputHashstring | nullrequiredresultHashstring | nullrequiredtotalsobject or nullrequiredheadcountintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
cpfEmployeeShareAbsorbedCentsintegermin -9007199254740991
cpfAwRecoveredCentsintegermin -9007199254740991
cpfTotalChargedCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
shgChargedByFundobjectrequiredshgDonorsobjectrequiredsdlChargedCentsintegerrequiredmin -9007199254740991
sdlMonthCentsintegerrequiredmin -9007199254740991
fwlCentsintegerrequiredmin -9007199254740991
employerCostCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
releasedAtstring | nullrequiredpaidAtstring | nullrequiredcreatedAtstringrequiredinputsChangedSinceComputebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
POST/api/v1/payroll/runs/{runId}/submit
Submit a computed run with no blocking issues for approval
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Responses
200 Success. object
idstring (uuid)requiredkindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
monthstringrequiredperiodStartstring (date)requiredperiodEndstring (date)requiredpayDatestring (date)requiredstatusenumrequiredone of "draft", "in_review", "approved", "paid"
employeeIdsarray of string (uuid) or nullrequiredadjustsRunIdstring (uuid) or nullrequiredsupersededByRunIdstring (uuid) or nullrequiredreopenReasonstring | nullrequiredapprovalRequestIdstring | nullrequiredsubmittedBystring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedBystring (uuid) or nullrequireddecidedAtstring | nullrequireddecisionCommentstring | nullrequiredselfApprovedbooleanrequiredcomputedAtstring | nullrequiredinputHashstring | nullrequiredresultHashstring | nullrequiredtotalsobject or nullrequiredheadcountintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
cpfEmployeeShareAbsorbedCentsintegermin -9007199254740991
cpfAwRecoveredCentsintegermin -9007199254740991
cpfTotalChargedCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
shgChargedByFundobjectrequiredshgDonorsobjectrequiredsdlChargedCentsintegerrequiredmin -9007199254740991
sdlMonthCentsintegerrequiredmin -9007199254740991
fwlCentsintegerrequiredmin -9007199254740991
employerCostCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
releasedAtstring | nullrequiredpaidAtstring | nullrequiredcreatedAtstringrequiredinputsChangedSinceComputebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
POST/api/v1/payroll/runs/{runId}/withdraw
Withdraw a run in review back to draft
Parameters
| Name | In | Type | Required |
|---|---|---|---|
runId | path | string (uuid) | yes |
Responses
200 Success. object
idstring (uuid)requiredkindenumrequiredone of "regular", "off_cycle", "adjustment"
offCycleReasonenum or nullrequiredone of "final_pay", "bonus"
monthstringrequiredperiodStartstring (date)requiredperiodEndstring (date)requiredpayDatestring (date)requiredstatusenumrequiredone of "draft", "in_review", "approved", "paid"
employeeIdsarray of string (uuid) or nullrequiredadjustsRunIdstring (uuid) or nullrequiredsupersededByRunIdstring (uuid) or nullrequiredreopenReasonstring | nullrequiredapprovalRequestIdstring | nullrequiredsubmittedBystring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedBystring (uuid) or nullrequireddecidedAtstring | nullrequireddecisionCommentstring | nullrequiredselfApprovedbooleanrequiredcomputedAtstring | nullrequiredinputHashstring | nullrequiredresultHashstring | nullrequiredtotalsobject or nullrequiredheadcountintegerrequiredmin -9007199254740991
grossCentsintegerrequiredmin -9007199254740991
netCentsintegerrequiredmin -9007199254740991
netPayableCentsintegerrequiredmin -9007199254740991
reimbursementsCentsintegerrequiredmin -9007199254740991
cpfEmployeeCentsintegerrequiredmin -9007199254740991
cpfEmployerCentsintegerrequiredmin -9007199254740991
cpfEmployeeShareAbsorbedCentsintegermin -9007199254740991
cpfAwRecoveredCentsintegermin -9007199254740991
cpfTotalChargedCentsintegerrequiredmin -9007199254740991
shgCentsintegerrequiredmin -9007199254740991
shgChargedByFundobjectrequiredshgDonorsobjectrequiredsdlChargedCentsintegerrequiredmin -9007199254740991
sdlMonthCentsintegerrequiredmin -9007199254740991
fwlCentsintegerrequiredmin -9007199254740991
employerCostCentsintegerrequiredmin -9007199254740991
blockingintegerrequiredmin -9007199254740991
warningsintegerrequiredmin -9007199254740991
releasedAtstring | nullrequiredpaidAtstring | nullrequiredcreatedAtstringrequiredinputsChangedSinceComputebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
GET/api/v1/payroll/settings
Payroll settings (pay day, release, CPF advice code, levy and bank file defaults)
Responses
200 Success. object
payDayinteger or nullrequiredmin -9007199254740991
cutoffDayinteger or nullrequiredmin -9007199254740991
autoReleasebooleanrequiredcpfAdviceCodestringrequiredfwlSectorstring | nullrequiredfwlTierstring | nullrequiredfwlSkillstring | nullrequireddebitBankBicstring | nullrequireddebitAccountMaskedstring | nullrequireddebitAccountNamestring | nullrequired
- 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required
PUT/api/v1/payroll/settings
Update payroll settings
Request body
application/json, object, required
cutoffDayinteger or nullmin 1 · max 31
payDayinteger or nullmin 1 · max 31
autoReleasebooleancpfAdviceCodestringfwlSectorstring or nullmax length 40
fwlTierstring or nullmax length 40
fwlSkillstring or nullmax length 40
debitBankBicstring or nulldebitAccountNumberstring or nulldebitAccountNamestring or nullmax length 70
Responses
200 Success. object
payDayinteger or nullrequiredmin -9007199254740991
cutoffDayinteger or nullrequiredmin -9007199254740991
autoReleasebooleanrequiredcpfAdviceCodestringrequiredfwlSectorstring | nullrequiredfwlTierstring | nullrequiredfwlSkillstring | nullrequireddebitBankBicstring | nullrequireddebitAccountMaskedstring | nullrequireddebitAccountNamestring | nullrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required,reauth_required
GET/api/v1/payroll/years/{year}/ir8a
IR8A figures for an income year (whole dollars, masked IDs)
Preview of the IR8A records Crow HR can fill from approved payslips, in the parts (≤ 200 records) the file download produces. Appendix 8A is not produced (no benefits-in-kind are recorded). Direct submission through IRAS's AIS-API is not available.
Parameters
| Name | In | Type | Required |
|---|---|---|---|
year | path | integer | yes |
Responses
200 Success. object
yearintegerrequiredmin -9007199254740991
yearOfAssessmentintegerrequiredmin -9007199254740991
dueOnstring (date)requiredtemplateUrlstring (uri)requiredexplanatoryNotesUrlstring (uri)requiredpartsarray of objectrequiredpartintegerrequiredmin -9007199254740991
recordsintegerrequiredmin -9007199254740991
recordsarray of objectrequiredemployeeIdstring (uuid)requiredemployeeNamestringrequiredidMaskedstringrequiredpartintegerrequiredmin -9007199254740991
recordNointegerrequiredmin -9007199254740991
grossSalaryintegerrequiredWhole dollars, cents dropped (IRAS income rounding)
min -9007199254740991
bonusintegerrequiredmin -9007199254740991
allowancesintegerrequiredmin -9007199254740991
commissionintegerrequiredmin -9007199254740991
employeeCpfintegerrequiredWhole dollars, rounded up (IRAS deduction rounding)
min -9007199254740991
donationsintegerrequiredmin -9007199254740991
mbmfintegerrequiredmin -9007199254740991
commencedOnstring (date) or nullrequiredceasedOnstring (date) or nullrequirednotesarray of objectrequiredcodestringrequiredmessagestringrequired
excludedarray of objectrequiredemployeeNamestringrequiredreasonstringrequired
notesarray of objectrequiredcodestringrequiredmessagestringrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required
GET/api/v1/payroll/years/{year}/ir8a/file
IR8A rows for IRAS's IR8A import template (CSV, one part of ≤ 200 records)
Columns A–AR of the IR8A sheet of IRAS's IR8A Import Template (https://go.gov.sg/ir8a-import-template, version 1.0) with its header row: paste the data rows at row 6 of the template and import it in myTax Portal → Employment Income Records. Income is in whole dollars with cents dropped, deductions rounded up. Contains full NRIC/FIN numbers. Excluded employees are listed in the x-crowhr-excluded header (URL-encoded JSON).
Parameters
| Name | In | Type | Required |
|---|---|---|---|
year | path | integer | yes |
part | query | integer | no |
Responses
200 IR8A rows (CSV, UTF-8) text/csv
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required,reauth_required - 404
not_found - 409
conflict