Connect your systems to KalHR
Read employees, leave, attendance and payroll with an API key that holds only the access you give it. Get a signed webhook the moment something changes, so your other systems are never out of date.
Part of the Premium and Enterprise plans, and open to every organisation while the free usage policy lasts.
curl "https://api.kalhr.com/v1/employee/list?Status=Active&PageSize=2" \
-H "Authorization: Bearer $KALHR_API_KEY"{
"isSuccessful": true,
"code": "00",
"data": {
"data": [
{ "id": "4b9d…", "employeeId": "ACM-0042", "firstName": "Ada", "lastName": "Okafor" },
{ "id": "7e21…", "employeeId": "ACM-0043", "firstName": "Tunde", "lastName": "Bello" }
],
"pageNumber": 1,
"pageSize": 2,
"totalRecords": 134,
"totalPages": 67
}
}How it fits together
Most integrations use both halves. The webhook tells you what changed; the API gives you the detail.
- 1
Something happens in KalHR
Leave is approved, an employee joins, a payroll is paid.
- 2
KalHR sends your webhook
A signed event within seconds: its type and the record's id.
- 3
Your system calls the API
It fetches the record with its key and updates itself.
Start here
What the API reads
Each key reaches only its own organisation, and only the parts it was given access to.
- CompaniesThe companies in your organisation, with their offices1 endpoint · Employee Management: View
- EmployeesEveryone's record, filtered by status, company, department or role2 endpoints · Employee Management: View
- DepartmentsDepartments, their heads and their size2 endpoints · Employee Management: View
- LeaveLeave requests with their days and status, balances, and leave types4 endpoints · Leave: View
- AttendanceEach day's attendance, absence reports, excused days and holidays6 endpoints · Attendance: View
- PayrollPayroll runs, their totals, and each employee's pay in a run3 endpoints · Payroll: View
- Your keyWhich key is calling and what it may do1 endpoint · Any key
32 webhook events
Subscribe to all of them, or tick only those your system needs. Each carries ids and statuses, never pay or case notes.
Basic
People, onboarding and leave
employee.createdemployee.terminatedleave.approved
Standard
Payroll, loans and attendance
payroll.paidpayroll.transfer_failedloan.disbursed
Advanced
Recruitment, offers, approvals, cases and policies
candidate.stage_changedoffer.acceptedapproval.completed
What teams build
Provision accounts
Create email and system accounts when employee.created arrives, and close them on employee.terminated.
Post payroll to your ledger
On payroll.paid, fetch the run's totals and each employee's pay, and post the journal.
Keep rotas right
Block the days in your scheduling tool on leave.approved, and free them on leave.cancelled.
Feed your other tools
Send recruitment, approval and policy events to your reporting, ticketing or workflow tools.
Safe to depend on
Scoped keys
A key holds only the access you choose, never more than its creator's, and never payouts.
Signed webhooks
HMAC-SHA256 on every delivery, with a timestamp so a captured request can't be replayed.
Safe retries
Idempotency keys replay the first answer for 24 hours; failed webhooks are retried for two days.
Clear limits
300 requests a minute per key, with Retry-After telling you exactly how long to wait.
Missing an endpoint or an event?
Tell us what you're building. The API grows from what integrators ask for.