Kenal Stamps Docs

Employment Contract API

Submit employment contracts via the Partner Integration API.

Submit Employment Contracts from your HRMS to Kenal Stamps for stamping. This endpoint uses the Employment Contract schema with employer/employee details and optional wage information.

For the full request/response schema, see the API Reference.

Endpoint

POST /api/integration/employment/submit

Request Body

FieldTypeRequiredDescription
externalReferenceIdstringYesYour unique identifier for this contract
confirmbooleanNoIf true, charges the wallet immediately
useServiceCreditFallbackbooleanNoFall back to service credits
originalFileNamestringYesPDF filename
fileBase64stringYesBase64-encoded PDF (max 20MB)
contentTypestringYesMust be application/pdf
dataobjectYesEmployment Contract data (see below)

Contract Data (data)

FieldTypeRequiredDescription
contractDatestringYesYYYY-MM-DD. Required if confirm=true
employerobjectYesEmployer details (company or individual)
employeeobjectYesEmployee details
contractDurationobjectNoDuration with commencementDate, period, unit
jobTitlestringNoEmployee's job title
wageDetailsobjectConditionalRequired for contracts dated 2026-01-01+

Employer (Company)

FieldTypeRequired
partyTypeCOMPANYYes
namestringYes
addressobjectYes
phoneNumberstringYes
registrationNumberstringYes
companyOriginLOCAL | FOREIGNNo

Employer (Individual)

FieldTypeRequired
partyTypeINDIVIDUALYes
namestringYes
addressobjectYes
phoneNumberstringYes
identityTypeNRIC | PASSPORTNo
icNostringNo

Employee

FieldTypeRequired
namestringYes
addressobjectYes
phoneNumberstringYes
identityTypeNRIC | PASSPORTNo
icNostringNo

Wage Details

wageDetails is mandatory for contracts with a contractDate of 2026-01-01 or later. This is required for the wage-based exemption calculation.

FieldTypeDescription
basicWagenumberMonthly base salary (preferred for exemption calculation)
totalWagenumber or stringFallback if basicWage is missing
allowancesarrayList of { type, amount } objects
paymentFrequencystringPayment frequency
paymentDueDatestringPayment due date

Response

Same structure as the Loan Agreement response, including contractId, status, duty breakdown, and wallet balances.

Idempotency

Same as Loan Agreement — re-sending the same (x-service-id, externalReferenceId) updates the contract if it's still in a mutable status.

Error Responses

StatusDescription
400Validation error (missing contractDate, employer, employee, or wageDetails for 2026+ contracts)
401Authentication failed
402Insufficient wallet balance
403Integration is inactive
409Duplicate reference in immutable status