Claims API
27 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/claims
List claims (own, team or all by role; `mine=true` for your own)
Parameters
| Name | In | Type | Required |
|---|---|---|---|
page | query | integer | no |
pageSize | query | integer | no |
sort | query | enum | no |
q | query | string | no |
status | query | string | no |
mine | query | enum | no |
employeeId | query | string (uuid) | no |
claimTypeId | query | string (uuid) | no |
payout | query | enum | no |
expenseFrom | query | string (date) | no |
expenseTo | query | string (date) | no |
Responses
200 Success. object
itemsarray of objectrequiredidstring (uuid)requiredclaimNumberstring | nullrequiredstatusenumrequiredone of "draft", "submitted", "approved", "rejected", "withdrawn", "paid"
titlestring | nullrequiredemployeeobjectrequiredidstring (uuid)requirednamestringrequiredemployeeNumberstringrequireddepartmentNamestring | nullrequired
totalCentsintegerrequiredmin 0
gstCentsintegerrequiredmin 0
lineCountintegerrequiredmin -9007199254740991
typeNamesarray of stringrequiredexpenseFromstring | nullrequiredexpenseTostring | nullrequiredsubmittedAtstring | nullrequireddaysWaitinginteger or nullrequiredmin -9007199254740991
approvedOnstring | nullrequiredpayoutMethodenum or nullrequiredone of "payroll", "outside"
reservedByPayrollRunbooleanrequiredpaidViaenum or nullrequiredone of "payroll", "outside"
paidOnstring | nullrequiredpaidReferencestring | nullrequiredapproverTaskbooleanrequired
pageintegerrequiredmin -9007199254740991
pageSizeintegerrequiredmin -9007199254740991
totalintegerrequiredmin -9007199254740991
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required
POST/api/v1/claims
Create a draft claim, or create and submit it (`submit: true`)
Request body
application/json, object, required
employeeIdstring (uuid) or nulltitlestring or nullmax length 100
linesarray of objectrequiredclaimTypeIdstring (uuid)requiredexpenseDatestring (date)requiredmerchantstringrequiredmax length 100
descriptionstringrequiredmax length 200
currencystringdefault "SGD"
amountMinorintegerrequiredmin 1
ratestring or nullmax length 20
gstCentsinteger or nullmin 0
receiptIdsarray of string (uuid)default []
submitbooleanSubmit at once; when submission fails the draft is kept (details.draftId).
Responses
201 Success. object
idstring (uuid)requiredclaimNumberstring | nullrequiredstatusenumrequiredone of "draft", "submitted", "approved", "rejected", "withdrawn", "paid"
titlestring | nullrequiredemployeeobjectrequiredidstring (uuid)requirednamestringrequiredemployeeNumberstringrequireddepartmentNamestring | nullrequired
totalCentsintegerrequiredmin 0
gstCentsintegerrequiredmin 0
payoutMethodenum or nullrequiredone of "payroll", "outside"
approvalRequestIdstring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedAtstring | nullrequiredapprovedOnstring | nullrequireddecisionCommentstring | nullrequiredreservedByPayrollRunbooleanrequiredpaidViaenum or nullrequiredone of "payroll", "outside"
paidOnstring | nullrequiredpaidReferencestring | nullrequiredcopiedFromClaimIdstring (uuid) or nullrequiredcreatedAtstringrequiredupdatedAtstringrequiredlinesarray of objectrequiredidstring (uuid)requiredpositionintegerrequiredmin -9007199254740991
claimTypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
expenseDatestringrequiredmerchantstringsensitive: medicaldescriptionstringsensitive: medicalreceiptsarray of objectsensitive: medicalidstring (uuid)requirednamestringrequiredmimestringrequiredsizeBytesintegerrequiredmin -9007199254740991
scanStatusenumrequiredone of "unscanned", "pending_scan", "clean", "infected", "scan_failed"
removedbooleanrequiredpreviewablebooleanrequiredImages browsers can show (not HEIC or PDF).
urlstringrequireduploadedAtstringrequired
receiptCountintegerrequiredmin -9007199254740991
currencystringrequiredamountMinorintegerrequiredmin -9007199254740991
ratestring | nullrequiredsgdCentsintegerrequiredmin 0
gstCentsinteger or nullrequiredmin 0
receiptRequiredbooleanrequiredduplicatesarray of objectrequiredfileIdstring (uuid)requiredclaimIdstring (uuid)requiredclaimNumberstring | nullrequired
redactedFieldsarray of string
capUsagearray of objectrequiredtypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredperiodenumrequiredone of "per_claim", "monthly", "yearly"
periodLabelstringrequiredcapCentsintegerrequiredmin 0
usedCentsintegerrequiredmin 0
pendingCentsintegerrequiredmin 0
remainingCentsintegerrequiredmin 0
claimCentsintegerrequiredmin 0
actionsobjectrequirededitbooleanrequiredsubmitbooleanrequireddeletebooleanrequiredwithdrawbooleanrequiredcopybooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 422
cap_exceeded,not_eligible
GET/api/v1/claims/{id}
Get a claim (lines, receipts subject to medical sensitivity, cap usage, duplicate flags)
Parameters
| Name | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | yes |
Responses
200 Success. object
idstring (uuid)requiredclaimNumberstring | nullrequiredstatusenumrequiredone of "draft", "submitted", "approved", "rejected", "withdrawn", "paid"
titlestring | nullrequiredemployeeobjectrequiredidstring (uuid)requirednamestringrequiredemployeeNumberstringrequireddepartmentNamestring | nullrequired
totalCentsintegerrequiredmin 0
gstCentsintegerrequiredmin 0
payoutMethodenum or nullrequiredone of "payroll", "outside"
approvalRequestIdstring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedAtstring | nullrequiredapprovedOnstring | nullrequireddecisionCommentstring | nullrequiredreservedByPayrollRunbooleanrequiredpaidViaenum or nullrequiredone of "payroll", "outside"
paidOnstring | nullrequiredpaidReferencestring | nullrequiredcopiedFromClaimIdstring (uuid) or nullrequiredcreatedAtstringrequiredupdatedAtstringrequiredlinesarray of objectrequiredidstring (uuid)requiredpositionintegerrequiredmin -9007199254740991
claimTypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
expenseDatestringrequiredmerchantstringsensitive: medicaldescriptionstringsensitive: medicalreceiptsarray of objectsensitive: medicalidstring (uuid)requirednamestringrequiredmimestringrequiredsizeBytesintegerrequiredmin -9007199254740991
scanStatusenumrequiredone of "unscanned", "pending_scan", "clean", "infected", "scan_failed"
removedbooleanrequiredpreviewablebooleanrequiredImages browsers can show (not HEIC or PDF).
urlstringrequireduploadedAtstringrequired
receiptCountintegerrequiredmin -9007199254740991
currencystringrequiredamountMinorintegerrequiredmin -9007199254740991
ratestring | nullrequiredsgdCentsintegerrequiredmin 0
gstCentsinteger or nullrequiredmin 0
receiptRequiredbooleanrequiredduplicatesarray of objectrequiredfileIdstring (uuid)requiredclaimIdstring (uuid)requiredclaimNumberstring | nullrequired
redactedFieldsarray of string
capUsagearray of objectrequiredtypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredperiodenumrequiredone of "per_claim", "monthly", "yearly"
periodLabelstringrequiredcapCentsintegerrequiredmin 0
usedCentsintegerrequiredmin 0
pendingCentsintegerrequiredmin 0
remainingCentsintegerrequiredmin 0
claimCentsintegerrequiredmin 0
actionsobjectrequirededitbooleanrequiredsubmitbooleanrequireddeletebooleanrequiredwithdrawbooleanrequiredcopybooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required - 404
not_found
PUT/api/v1/claims/{id}
Replace a draft claim's title and lines
Parameters
| Name | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | yes |
Request body
application/json, object, required
employeeIdstring (uuid) or nulltitlestring or nullmax length 100
linesarray of objectrequiredclaimTypeIdstring (uuid)requiredexpenseDatestring (date)requiredmerchantstringrequiredmax length 100
descriptionstringrequiredmax length 200
currencystringdefault "SGD"
amountMinorintegerrequiredmin 1
ratestring or nullmax length 20
gstCentsinteger or nullmin 0
receiptIdsarray of string (uuid)default []
Responses
200 Success. object
idstring (uuid)requiredclaimNumberstring | nullrequiredstatusenumrequiredone of "draft", "submitted", "approved", "rejected", "withdrawn", "paid"
titlestring | nullrequiredemployeeobjectrequiredidstring (uuid)requirednamestringrequiredemployeeNumberstringrequireddepartmentNamestring | nullrequired
totalCentsintegerrequiredmin 0
gstCentsintegerrequiredmin 0
payoutMethodenum or nullrequiredone of "payroll", "outside"
approvalRequestIdstring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedAtstring | nullrequiredapprovedOnstring | nullrequireddecisionCommentstring | nullrequiredreservedByPayrollRunbooleanrequiredpaidViaenum or nullrequiredone of "payroll", "outside"
paidOnstring | nullrequiredpaidReferencestring | nullrequiredcopiedFromClaimIdstring (uuid) or nullrequiredcreatedAtstringrequiredupdatedAtstringrequiredlinesarray of objectrequiredidstring (uuid)requiredpositionintegerrequiredmin -9007199254740991
claimTypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
expenseDatestringrequiredmerchantstringsensitive: medicaldescriptionstringsensitive: medicalreceiptsarray of objectsensitive: medicalidstring (uuid)requirednamestringrequiredmimestringrequiredsizeBytesintegerrequiredmin -9007199254740991
scanStatusenumrequiredone of "unscanned", "pending_scan", "clean", "infected", "scan_failed"
removedbooleanrequiredpreviewablebooleanrequiredImages browsers can show (not HEIC or PDF).
urlstringrequireduploadedAtstringrequired
receiptCountintegerrequiredmin -9007199254740991
currencystringrequiredamountMinorintegerrequiredmin -9007199254740991
ratestring | nullrequiredsgdCentsintegerrequiredmin 0
gstCentsinteger or nullrequiredmin 0
receiptRequiredbooleanrequiredduplicatesarray of objectrequiredfileIdstring (uuid)requiredclaimIdstring (uuid)requiredclaimNumberstring | nullrequired
redactedFieldsarray of string
capUsagearray of objectrequiredtypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredperiodenumrequiredone of "per_claim", "monthly", "yearly"
periodLabelstringrequiredcapCentsintegerrequiredmin 0
usedCentsintegerrequiredmin 0
pendingCentsintegerrequiredmin 0
remainingCentsintegerrequiredmin 0
claimCentsintegerrequiredmin 0
actionsobjectrequirededitbooleanrequiredsubmitbooleanrequireddeletebooleanrequiredwithdrawbooleanrequiredcopybooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
DELETE/api/v1/claims/{id}
Delete a draft claim
Parameters
| Name | In | Type | Required |
|---|---|---|---|
id | 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/claims/{id}/copy
Copy a rejected or withdrawn claim into a new draft
Parameters
| Name | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | yes |
Responses
201 Success. object
idstring (uuid)requiredclaimNumberstring | nullrequiredstatusenumrequiredone of "draft", "submitted", "approved", "rejected", "withdrawn", "paid"
titlestring | nullrequiredemployeeobjectrequiredidstring (uuid)requirednamestringrequiredemployeeNumberstringrequireddepartmentNamestring | nullrequired
totalCentsintegerrequiredmin 0
gstCentsintegerrequiredmin 0
payoutMethodenum or nullrequiredone of "payroll", "outside"
approvalRequestIdstring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedAtstring | nullrequiredapprovedOnstring | nullrequireddecisionCommentstring | nullrequiredreservedByPayrollRunbooleanrequiredpaidViaenum or nullrequiredone of "payroll", "outside"
paidOnstring | nullrequiredpaidReferencestring | nullrequiredcopiedFromClaimIdstring (uuid) or nullrequiredcreatedAtstringrequiredupdatedAtstringrequiredlinesarray of objectrequiredidstring (uuid)requiredpositionintegerrequiredmin -9007199254740991
claimTypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
expenseDatestringrequiredmerchantstringsensitive: medicaldescriptionstringsensitive: medicalreceiptsarray of objectsensitive: medicalidstring (uuid)requirednamestringrequiredmimestringrequiredsizeBytesintegerrequiredmin -9007199254740991
scanStatusenumrequiredone of "unscanned", "pending_scan", "clean", "infected", "scan_failed"
removedbooleanrequiredpreviewablebooleanrequiredImages browsers can show (not HEIC or PDF).
urlstringrequireduploadedAtstringrequired
receiptCountintegerrequiredmin -9007199254740991
currencystringrequiredamountMinorintegerrequiredmin -9007199254740991
ratestring | nullrequiredsgdCentsintegerrequiredmin 0
gstCentsinteger or nullrequiredmin 0
receiptRequiredbooleanrequiredduplicatesarray of objectrequiredfileIdstring (uuid)requiredclaimIdstring (uuid)requiredclaimNumberstring | nullrequired
redactedFieldsarray of string
capUsagearray of objectrequiredtypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredperiodenumrequiredone of "per_claim", "monthly", "yearly"
periodLabelstringrequiredcapCentsintegerrequiredmin 0
usedCentsintegerrequiredmin 0
pendingCentsintegerrequiredmin 0
remainingCentsintegerrequiredmin 0
claimCentsintegerrequiredmin 0
actionsobjectrequirededitbooleanrequiredsubmitbooleanrequireddeletebooleanrequiredwithdrawbooleanrequiredcopybooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
POST/api/v1/claims/{id}/submit
Submit a draft claim for approval
Parameters
| Name | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | yes |
Responses
200 Success. object
idstring (uuid)requiredclaimNumberstring | nullrequiredstatusenumrequiredone of "draft", "submitted", "approved", "rejected", "withdrawn", "paid"
titlestring | nullrequiredemployeeobjectrequiredidstring (uuid)requirednamestringrequiredemployeeNumberstringrequireddepartmentNamestring | nullrequired
totalCentsintegerrequiredmin 0
gstCentsintegerrequiredmin 0
payoutMethodenum or nullrequiredone of "payroll", "outside"
approvalRequestIdstring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedAtstring | nullrequiredapprovedOnstring | nullrequireddecisionCommentstring | nullrequiredreservedByPayrollRunbooleanrequiredpaidViaenum or nullrequiredone of "payroll", "outside"
paidOnstring | nullrequiredpaidReferencestring | nullrequiredcopiedFromClaimIdstring (uuid) or nullrequiredcreatedAtstringrequiredupdatedAtstringrequiredlinesarray of objectrequiredidstring (uuid)requiredpositionintegerrequiredmin -9007199254740991
claimTypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
expenseDatestringrequiredmerchantstringsensitive: medicaldescriptionstringsensitive: medicalreceiptsarray of objectsensitive: medicalidstring (uuid)requirednamestringrequiredmimestringrequiredsizeBytesintegerrequiredmin -9007199254740991
scanStatusenumrequiredone of "unscanned", "pending_scan", "clean", "infected", "scan_failed"
removedbooleanrequiredpreviewablebooleanrequiredImages browsers can show (not HEIC or PDF).
urlstringrequireduploadedAtstringrequired
receiptCountintegerrequiredmin -9007199254740991
currencystringrequiredamountMinorintegerrequiredmin -9007199254740991
ratestring | nullrequiredsgdCentsintegerrequiredmin 0
gstCentsinteger or nullrequiredmin 0
receiptRequiredbooleanrequiredduplicatesarray of objectrequiredfileIdstring (uuid)requiredclaimIdstring (uuid)requiredclaimNumberstring | nullrequired
redactedFieldsarray of string
capUsagearray of objectrequiredtypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredperiodenumrequiredone of "per_claim", "monthly", "yearly"
periodLabelstringrequiredcapCentsintegerrequiredmin 0
usedCentsintegerrequiredmin 0
pendingCentsintegerrequiredmin 0
remainingCentsintegerrequiredmin 0
claimCentsintegerrequiredmin 0
actionsobjectrequirededitbooleanrequiredsubmitbooleanrequireddeletebooleanrequiredwithdrawbooleanrequiredcopybooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict - 422
cap_exceeded,not_eligible
POST/api/v1/claims/{id}/withdraw
Withdraw a submitted claim
Parameters
| Name | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | yes |
Responses
200 Success. object
idstring (uuid)requiredclaimNumberstring | nullrequiredstatusenumrequiredone of "draft", "submitted", "approved", "rejected", "withdrawn", "paid"
titlestring | nullrequiredemployeeobjectrequiredidstring (uuid)requirednamestringrequiredemployeeNumberstringrequireddepartmentNamestring | nullrequired
totalCentsintegerrequiredmin 0
gstCentsintegerrequiredmin 0
payoutMethodenum or nullrequiredone of "payroll", "outside"
approvalRequestIdstring (uuid) or nullrequiredsubmittedAtstring | nullrequireddecidedAtstring | nullrequiredapprovedOnstring | nullrequireddecisionCommentstring | nullrequiredreservedByPayrollRunbooleanrequiredpaidViaenum or nullrequiredone of "payroll", "outside"
paidOnstring | nullrequiredpaidReferencestring | nullrequiredcopiedFromClaimIdstring (uuid) or nullrequiredcreatedAtstringrequiredupdatedAtstringrequiredlinesarray of objectrequiredidstring (uuid)requiredpositionintegerrequiredmin -9007199254740991
claimTypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
expenseDatestringrequiredmerchantstringsensitive: medicaldescriptionstringsensitive: medicalreceiptsarray of objectsensitive: medicalidstring (uuid)requirednamestringrequiredmimestringrequiredsizeBytesintegerrequiredmin -9007199254740991
scanStatusenumrequiredone of "unscanned", "pending_scan", "clean", "infected", "scan_failed"
removedbooleanrequiredpreviewablebooleanrequiredImages browsers can show (not HEIC or PDF).
urlstringrequireduploadedAtstringrequired
receiptCountintegerrequiredmin -9007199254740991
currencystringrequiredamountMinorintegerrequiredmin -9007199254740991
ratestring | nullrequiredsgdCentsintegerrequiredmin 0
gstCentsinteger or nullrequiredmin 0
receiptRequiredbooleanrequiredduplicatesarray of objectrequiredfileIdstring (uuid)requiredclaimIdstring (uuid)requiredclaimNumberstring | nullrequired
redactedFieldsarray of string
capUsagearray of objectrequiredtypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredperiodenumrequiredone of "per_claim", "monthly", "yearly"
periodLabelstringrequiredcapCentsintegerrequiredmin 0
usedCentsintegerrequiredmin 0
pendingCentsintegerrequiredmin 0
remainingCentsintegerrequiredmin 0
claimCentsintegerrequiredmin 0
actionsobjectrequirededitbooleanrequiredsubmitbooleanrequireddeletebooleanrequiredwithdrawbooleanrequiredcopybooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
GET/api/v1/claims/eligible-types
Claim types the employee may use, with cap usage for the period containing `date`
Parameters
| Name | In | Type | Required |
|---|---|---|---|
employeeId | query | string (uuid) | no |
date | query | string (date) | no |
excludeClaimId | query | string (uuid) | no |
Responses
200 Success. object
itemsarray of objectrequiredidstring (uuid)requiredcodestringrequirednamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
receiptRuleenumrequiredone of "always", "never", "above"
receiptAboveCentsinteger or nullrequiredmin 0
receiptHintstringrequiredgstApplicablebooleanrequiredcapobject or nullrequiredtypeIdstring (uuid)requiredtypeCodestringrequiredtypeNamestringrequiredperiodenumrequiredone of "per_claim", "monthly", "yearly"
periodLabelstringrequiredcapCentsintegerrequiredmin 0
usedCentsintegerrequiredmin 0
pendingCentsintegerrequiredmin 0
remainingCentsintegerrequiredmin 0
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required - 404
not_found
POST/api/v1/claims/mark-paid
Mark approved claims paid outside payroll (bulk, with a date and reference)
Request body
application/json, object, required
claimIdsarray of string (uuid)requiredpaidOnstring (date)requiredreferencestringrequiredmin length 1 · max length 100
Responses
200 Success. object
paidintegerrequiredmin -9007199254740991
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
GET/api/v1/claims/me/totals
My claim totals: waiting, approved and not yet paid, paid this year
Responses
200 Success. object
submittedCentsintegerrequiredmin -9007199254740991
approvedCentsintegerrequiredmin -9007199254740991
paidThisYearCentsintegerrequiredmin -9007199254740991
- 401
session_expired,session_revoked,unauthenticated - 403
mfa_enrolment_required
GET/api/v1/claims/payable
Approved claims a payroll run for the period would reimburse (one entry per claim and type)
The same list payroll reads through `ReimbursementSource.listPayable`: approved, unpaid, payroll-payout claims approved (Asia/Singapore date) on or before `periodEnd`.
Parameters
| Name | In | Type | Required |
|---|---|---|---|
periodEnd | query | string (date) | yes |
Responses
200 Success. object
itemsarray of objectrequiredclaimIdstring (uuid)requiredemployeeIdstring (uuid)requiredtypeNamestringrequiredamountCentsintegerrequiredmin -9007199254740991
claimNumberstring | nullrequiredemployeeNamestringrequiredapprovedOnstring | nullrequiredreservedbooleanrequired
totalCentsintegerrequiredmin -9007199254740991
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required
POST/api/v1/claims/receipts
Upload a receipt (raw bytes in the body; PDF, JPEG, PNG, WebP or HEIC, at most 10 MB)
Send the file as the raw request body (any Content-Type; the type is detected from the file's signature, never from the name or header). `fileName` is for display only. Owners and hr_admins may upload for another employee with `employeeId`.
Parameters
| Name | In | Type | Required |
|---|---|---|---|
fileName | query | string | no |
employeeId | query | string (uuid) | no |
Responses
201 Success. object
idstring (uuid)requirednamestringrequiredmimestringrequiredsizeBytesintegerrequiredmin -9007199254740991
scanStatusenumrequiredone of "unscanned", "pending_scan", "clean", "infected", "scan_failed"
removedbooleanrequiredpreviewablebooleanrequiredImages browsers can show (not HEIC or PDF).
urlstringrequireduploadedAtstringrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 413
file_too_large - 415
unsupported_file_type
GET/api/v1/claims/receipts/{fileId}
Download or view a receipt
Images are served inline, PDFs and HEIC as attachments, always with the detected type, `X-Content-Type-Options: nosniff` and a sandbox CSP. 404 for anyone who may not see it.
Parameters
| Name | In | Type | Required |
|---|---|---|---|
fileId | path | string (uuid) | yes |
download | query | enum | no |
Responses
200 The receipt file application/octet-stream
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required - 404
not_found
DELETE/api/v1/claims/receipts/{fileId}
Delete an uploaded receipt that no claim line uses
Parameters
| Name | In | Type | Required |
|---|---|---|---|
fileId | 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
in_use
GET/api/v1/claims/reports/export
Export claims (summary, line register or payout register) as CSV or XLSX
Parameters
| Name | In | Type | Required |
|---|---|---|---|
from | query | string (date) | yes |
to | query | string (date) | yes |
report | query | enum | no |
by | query | enum | no |
format | query | enum | no |
Responses
200 CSV or XLSX file text/csv
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required
GET/api/v1/claims/reports/summary
Claim totals by type, department, employee or month, per status (expense-date range)
Parameters
| Name | In | Type | Required |
|---|---|---|---|
from | query | string (date) | yes |
to | query | string (date) | yes |
by | query | enum | no |
Responses
200 Success. object
itemsarray of objectrequiredkeystringrequiredlabelstringrequiredstatusenumrequiredone of "draft", "submitted", "approved", "rejected", "withdrawn", "paid"
claimCountintegerrequiredmin -9007199254740991
lineCountintegerrequiredmin -9007199254740991
totalCentsintegerrequiredmin 0
gstCentsintegerrequiredmin 0
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required
GET/api/v1/claims/settings
Claim settings (submission window, whether receipts are virus-scanned)
Responses
200 Success. object
submissionWindowDaysintegerrequiredmin 7 · max 730
scanningboolean
- 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required
PUT/api/v1/claims/settings
Update claim settings
Request body
application/json, object, required
submissionWindowDaysintegerrequiredmin 7 · max 730
Responses
200 Success. object
submissionWindowDaysintegerrequiredmin 7 · max 730
scanningboolean
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required
GET/api/v1/claims/types
List claim types
Parameters
| Name | In | Type | Required |
|---|---|---|---|
includeArchived | query | enum | no |
Responses
200 Success. object
itemsarray of objectrequiredidstring (uuid)requiredcodestringrequirednamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
receiptRuleenumrequiredone of "always", "never", "above"
receiptAboveCentsinteger or nullrequiredmin 0
capCentsinteger or nullrequiredmin 0
capPeriodenumrequiredone of "none", "per_claim", "monthly", "yearly"
eligibleEmploymentTypesarray of enumrequiredavailableDuringProbationbooleanrequireddefaultPayoutenumrequiredone of "payroll", "outside"
gstApplicablebooleanrequiredtaxablebooleanrequiredglCodestring | nullrequiredarchivedbooleanrequiredinUsebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required
POST/api/v1/claims/types
Create a claim type
Request body
application/json, object, required
codestringrequiredmin length 2 · max length 32
namestringrequiredmin length 1 · max length 80
categoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
receiptRuleenumrequiredone of "always", "never", "above"
receiptAboveCentsinteger or nullmin 0
capCentsinteger or nullmin 1
capPeriodenumrequiredone of "none", "per_claim", "monthly", "yearly"
eligibleEmploymentTypesarray of enumavailableDuringProbationbooleandefaultPayoutenumone of "payroll", "outside"
gstApplicablebooleantaxablebooleanglCodestring or nullmax length 40
Responses
201 Success. object
idstring (uuid)requiredcodestringrequirednamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
receiptRuleenumrequiredone of "always", "never", "above"
receiptAboveCentsinteger or nullrequiredmin 0
capCentsinteger or nullrequiredmin 0
capPeriodenumrequiredone of "none", "per_claim", "monthly", "yearly"
eligibleEmploymentTypesarray of enumrequiredavailableDuringProbationbooleanrequireddefaultPayoutenumrequiredone of "payroll", "outside"
gstApplicablebooleanrequiredtaxablebooleanrequiredglCodestring | nullrequiredarchivedbooleanrequiredinUsebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 409
conflict
PATCH/api/v1/claims/types/{id}
Update a claim type
Parameters
| Name | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | yes |
Request body
application/json, object, required
codestringmin length 2 · max length 32
namestringmin length 1 · max length 80
categoryenumone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
receiptRuleenumone of "always", "never", "above"
receiptAboveCentsinteger or nullmin 0
capCentsinteger or nullmin 1
capPeriodenumone of "none", "per_claim", "monthly", "yearly"
eligibleEmploymentTypesarray of enumavailableDuringProbationbooleandefaultPayoutenumone of "payroll", "outside"
gstApplicablebooleantaxablebooleanglCodestring or nullmax length 40
Responses
200 Success. object
idstring (uuid)requiredcodestringrequirednamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
receiptRuleenumrequiredone of "always", "never", "above"
receiptAboveCentsinteger or nullrequiredmin 0
capCentsinteger or nullrequiredmin 0
capPeriodenumrequiredone of "none", "per_claim", "monthly", "yearly"
eligibleEmploymentTypesarray of enumrequiredavailableDuringProbationbooleanrequireddefaultPayoutenumrequiredone of "payroll", "outside"
gstApplicablebooleanrequiredtaxablebooleanrequiredglCodestring | nullrequiredarchivedbooleanrequiredinUsebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found - 409
conflict
DELETE/api/v1/claims/types/{id}
Delete an unused claim type (used ones can only be archived)
Parameters
| Name | In | Type | Required |
|---|---|---|---|
id | 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
in_use
POST/api/v1/claims/types/{id}/archive
Archive a claim type (it stays on existing claims)
Parameters
| Name | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | yes |
Responses
200 Success. object
idstring (uuid)requiredcodestringrequirednamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
receiptRuleenumrequiredone of "always", "never", "above"
receiptAboveCentsinteger or nullrequiredmin 0
capCentsinteger or nullrequiredmin 0
capPeriodenumrequiredone of "none", "per_claim", "monthly", "yearly"
eligibleEmploymentTypesarray of enumrequiredavailableDuringProbationbooleanrequireddefaultPayoutenumrequiredone of "payroll", "outside"
gstApplicablebooleanrequiredtaxablebooleanrequiredglCodestring | nullrequiredarchivedbooleanrequiredinUsebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found
POST/api/v1/claims/types/{id}/restore
Restore an archived claim type
Parameters
| Name | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | yes |
Responses
200 Success. object
idstring (uuid)requiredcodestringrequirednamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
receiptRuleenumrequiredone of "always", "never", "above"
receiptAboveCentsinteger or nullrequiredmin 0
capCentsinteger or nullrequiredmin 0
capPeriodenumrequiredone of "none", "per_claim", "monthly", "yearly"
eligibleEmploymentTypesarray of enumrequiredavailableDuringProbationbooleanrequireddefaultPayoutenumrequiredone of "payroll", "outside"
gstApplicablebooleanrequiredtaxablebooleanrequiredglCodestring | nullrequiredarchivedbooleanrequiredinUsebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required - 404
not_found
GET/api/v1/claims/types/starter
The suggested starter set of claim types (not yet created)
Responses
200 Success. object
itemsarray of objectrequiredcodestringrequiredmin length 2 · max length 32
namestringrequiredmin length 1 · max length 80
categoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
receiptRuleenumrequiredone of "always", "never", "above"
receiptAboveCentsinteger or nullmin 0
capCentsinteger or nullmin 1
capPeriodenumrequiredone of "none", "per_claim", "monthly", "yearly"
eligibleEmploymentTypesarray of enumavailableDuringProbationbooleandefaultPayoutenumone of "payroll", "outside"
gstApplicablebooleantaxablebooleanglCodestring or nullmax length 40
- 401
session_expired,session_revoked,unauthenticated - 403
forbidden,mfa_enrolment_required
POST/api/v1/claims/types/starter
Create the starter claim types (or a chosen subset) that don't exist yet
Request body
application/json, object, required
codesarray of string
Responses
201 Success. object
itemsarray of objectrequiredidstring (uuid)requiredcodestringrequirednamestringrequiredcategoryenumrequiredone of "medical", "dental", "transport", "meals", "entertainment", "travel", "phone", "training", "other"
receiptRuleenumrequiredone of "always", "never", "above"
receiptAboveCentsinteger or nullrequiredmin 0
capCentsinteger or nullrequiredmin 0
capPeriodenumrequiredone of "none", "per_claim", "monthly", "yearly"
eligibleEmploymentTypesarray of enumrequiredavailableDuringProbationbooleanrequireddefaultPayoutenumrequiredone of "payroll", "outside"
gstApplicablebooleanrequiredtaxablebooleanrequiredglCodestring | nullrequiredarchivedbooleanrequiredinUsebooleanrequired
- 400
validation_failed - 401
session_expired,session_revoked,unauthenticated - 403
csrf_rejected,forbidden,mfa_enrolment_required