Field validation
Payment fields
Every field accepted by POST /payment, with its validation rule.
View as MarkdownA payment is a pay element such as a bonus, expense or deduction. Send one JSON object per pay element to POST /payment. To withdraw a payment, archive it.
Machine-readable: JSON Schema · OpenAPI
Identity#
paymentIdstringRequiredYour identifier for the payment record.
- Rule
- Unique in your system. Resubmitting the same paymentId updates the record.
- Example
"PM-000912"
companystringRequiredCompany code issued by the PayCaptain team.
- Rule
- Must match your PayCaptain company code exactly.
- Example
"ABC"
hrEmployeeIdstringRequiredThe person being paid.
- Rule
- Must match an employee already sent to PayCaptain.
- Example
"9876543210"
payrollCodestringRequiredThe employment the payment belongs to.
- Rule
- Must match that person's active employment.
- Example
"123"
Payment#
payCodestringRequiredPay Code for this pay element.
- Rule
- Must match a Pay Code Name configured in PayCaptain.
- Example
"Bonus"
datestringRequiredDate of the payment.
- Format
- YYYY-MM-DD
- Example
"2026-11-28"
unitsnumberRequiredQuantity, for example hours.
- Example
1
ratenumberRequiredRate per unit.
- Example
250
descriptionstringOptionalText shown on the payslip.
- Example
"Quarterly bonus"
informationstringOptionalExtra detail shown behind the help icon on the payslip.
- Example
"Q3 performance bonus"
archivedbooleanOptionalArchive the payment so it is not paid.
- Rule
- Send true with the same paymentId to remove the payment from payroll. Records are archived, never deleted.
- Default
false- Example
false
Cost allocation#
locationstringOptionalLocation worked.
- Example
"Baker Street"
departmentstringOptionalDepartment worked.
- Example
"Marketing"
teamstringOptionalTeam worked.
- Example
"Content"
jobstringOptionalJob worked.
- Example
"Content Marketing"
Minimal valid record#
{
"paymentId": "PM-000912",
"company": "ABC",
"hrEmployeeId": "9876543210",
"payrollCode": "123",
"payCode": "Bonus",
"date": "2026-11-28",
"units": 1,
"rate": 250
}