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 .
POST /api/integration/employment/submit
Field Type Required Description externalReferenceIdstring Yes Your unique identifier for this contract confirmboolean No If true, charges the wallet immediately useServiceCreditFallbackboolean No Fall back to service credits originalFileNamestring Yes PDF filename fileBase64string Yes Base64-encoded PDF (max 20MB) contentTypestring Yes Must be application/pdf dataobject Yes Employment Contract data (see below)
Field Type Required Description contractDatestring Yes YYYY-MM-DD. Required if confirm=true employerobject Yes Employer details (company or individual) employeeobject Yes Employee details contractDurationobject No Duration with commencementDate, period, unit jobTitlestring No Employee's job title wageDetailsobject Conditional Required for contracts dated 2026-01-01+
Field Type Required partyTypeCOMPANYYes namestring Yes addressobject Yes phoneNumberstring Yes registrationNumberstring Yes companyOriginLOCAL | FOREIGNNo
Field Type Required partyTypeINDIVIDUALYes namestring Yes addressobject Yes phoneNumberstring Yes identityTypeNRIC | PASSPORTNo icNostring No
Field Type Required namestring Yes addressobject Yes phoneNumberstring Yes identityTypeNRIC | PASSPORTNo icNostring No
wageDetails is mandatory for contracts with a contractDate of 2026-01-01 or later. This is required for the wage-based exemption calculation.
Field Type Description basicWagenumber Monthly base salary (preferred for exemption calculation) totalWagenumber or string Fallback if basicWage is missing allowancesarray List of { type, amount } objects paymentFrequencystring Payment frequency paymentDueDatestring Payment due date
Same structure as the Loan Agreement response , including contractId, status, duty breakdown, and wallet balances.
Same as Loan Agreement — re-sending the same (x-service-id, externalReferenceId) updates the contract if it's still in a mutable status.
Status Description 400Validation error (missing contractDate, employer, employee, or wageDetails for 2026+ contracts) 401Authentication failed 402Insufficient wallet balance 403Integration is inactive 409Duplicate reference in immutable status