Unified HRIS API
Knit's Unified HRIS API gives you a single integration to read and write employee data across Workday, BambooHR, ADP, Rippling, and 50+ more HR platforms. Build once — support every HRIS your customers use
What Is a Unified HRIS API?
A unified HRIS API is a single, standardized programming interface that lets your product read and write employee data across multiple HR platforms without building a separate integration for each one.
HRIS platforms each have unique APIs with different authentication methods, data models, and endpoint conventions. Knit normalizes these differences so your engineering team integrates once, and Knit handles the translation layer for every HR system your customers use.
Knit normalizes four things across all providers:
| Layer | What Knit handles |
|---|---|
| Data models | Consistent field names and structures — employees from BambooHR, Workday, and Personio return the same schema |
| Authentication | OAuth, API keys, and tokens managed per-provider; you pass a single X-Integration-Id header |
| Pagination | Cursor-based pagination works identically regardless of how the provider implements it |
| Error formats | Standardized error responses with provider context where available |
Building AI agents?Knit is MCP-compatible (Model Context Protocol). Your agents can perform authenticated read and write actions across 50+ HRIS platforms with zero per-provider logic. Try MCP Hub→
How It Works
1. Your customer connects their HRIS Knit's pre-built embedded auth UI handles OAuth, API keys, and token management per provider. Your team writes zero auth code.
2. Knit normalizes the data Employee records, departments, compensation, and time-off data are all mapped to Knit's unified schema — regardless of how each HRIS stores it internally.
3. Your product calls one API Use a single set of endpoints and data models across your entire product. Add a new HRIS later? No code changes on your side.
4. Stay in sync with real-time webhooks Native and virtual webhooks fire on employee changes — new hires, terminations, role updates — with a consistent event schema across all providers.
HRIS Data Objects
The following objects are available through the unified schema. All fields are normalized across providers.
Full identity, employment, and contact records. Includes job title, employment type, start/termination dates, manager relationships, and employment status.
id, first_name, last_name, email, job_title, employment_type,
start_date, termination_date, manager_id, status, phone, location_id→ Employee data model · Create employee · Update employee · Terminate employee
Groups (Departments / Teams)
Departments, teams, divisions, and cost centers — org hierarchy across all HRIS platforms.
group_id, name, type, parent_id, manager_id
→ List departments · List companies · Positions
Job positions, salary, pay frequency, and compensation history with audit trails.
employment_id, employee_id, amount, currency, pay_frequency, pay_type, effective_date
→ Compensation plans · Update compensation
PTO policies, balances, leave requests, and approval status.
time_off_id, employee_id, policy_type, balance, start_date, end_date, status, approver_id
→ Leave data models · Leave types · Leave requests · Leave balances · Create leave request
Attendance & Timesheets
Work schedules, shift assignments, check-ins, and timesheet records.
shift_id, employee_id, start_time, end_time, break_duration, location
→ Attendance API · Add attendance · Timesheet entries
Pay stubs, gross/net pay, deductions, payroll records, and pay periods.
payslip_id, employee_id, pay_period_start, pay_period_end, gross_pay, net_pay, currency
→ Payroll data models · Employee payroll · Pay periods
Contracts, offer letters, compliance documents, and employee files.
document_id, employee_id, type, category_id, url, status, created_at
→ Document data model · Employee documents · Upload document · Document categories
Benefits & Deductions
Payroll deductions, benefit plans, and employee enrollment records.
deduction_id, deduction_type, amount, employee_id, enrollment_date
→ Company deductions · Create deduction · Update deduction · Enroll employee · Unenroll employee · Update employee deduction
Custom fieldsFields outside the unified schema are accessible via custom fields that you could map to the unified model or the Passthrough API that lets you make direct calls to the underlying HRIS using Knit's auth layer without giving up the unified platform.
All HRIS endpoints are organized by category. Each endpoint works identically regardless of the underlying HRIS — pass your API key and the customer's X-Integration-Id and the response schema is consistent across all providers.
Employee APIs
| Endpoint | Description |
|---|---|
| Employee data model | Full field reference for the normalized employee object |
| Create employee | Add a new employee record to the connected HRIS |
| Update employee | Update profile, employment status, job title, or manager |
| Terminate employee | Mark an employee as terminated with reason and date |
| Get termination reasons | Fetch the list of valid termination reason codes for the HRIS |
| List positions | Retrieve open and filled positions across the org |
| List companies | List companies/legal entities in the connected HRIS |
| List departments | Retrieve all departments and their hierarchy |
Payroll APIs
| Endpoint | Description |
|---|---|
| Payroll data models | Field reference for payslip and payroll objects |
| Get employee payroll | Retrieve payslips and payroll records for an employee |
| Get pay periods | List all pay periods for the connected HRIS |
Leave APIs
| Endpoint | Description |
|---|---|
| Leave data models | Field reference for leave policy, balance, and request objects |
| List leave types | Fetch all leave policy types configured in the HRIS |
| Leave requests | List and filter employee leave requests |
| Leave balances | Get remaining leave balances per employee per policy |
| Create leave request | Submit a new leave request on behalf of an employee |
Attendance APIs
| Endpoint | Description |
|---|---|
| Attendance API | Read attendance records and work hours |
| Add attendance | Write a new attendance or check-in record |
| Timesheet entries | Retrieve detailed timesheet logs per employee |
Compensation APIs
| Endpoint | Description |
|---|---|
| Compensation plans | List salary structures and compensation plans |
| Update compensation | Update an employee's compensation record |
Document APIs
| Endpoint | Description |
|---|---|
| Document data model | Field reference for the normalized document object |
| Employee documents | List all documents associated with an employee |
| Upload document | Attach a new document to an employee record |
| Document categories | Fetch valid document category codes for the HRIS |
Benefits & Deductions APIs
| Endpoint | Description |
|---|---|
| List deductions | Retrieve all deduction types configured for the company |
| Create deduction | Add a new deduction type to the company |
| Update deduction | Modify an existing deduction's configuration |
| Enroll employee | Enroll an employee into a deduction or benefit plan |
| Unenroll employee | Remove an employee from a deduction or benefit plan |
| Update employee deduction | Change an employee's deduction amount or schedule |
Supported Platforms
Knit connects to 50+ HRIS and payroll platforms. A single integration gives you access to all of them.
| Category | Platforms |
|---|---|
| Enterprise HCM | Workday, SAP SuccessFactors, Oracle HCM |
| Mid-market HRIS | BambooHR, Hibob, Personio, Namely, Lattice |
| Payroll & PEO | ADP Workforce Now, ADP Run, Gusto, Paycor, Paylocity, Paychex Flex, UKG Pro, Ceridian Dayforce, TriNet |
| Global HR | Deel, Remote, Rippling |
| SMB HRIS | Zenefits, Greenhouse |
→ View the full list of supported HRIS integrations →
Don't see a platform? Use the Connector Builder / Integration Agent to add it yourself in hours, not weeks.
Key Capabilities
Real-Time Sync & Webhooks
Knit supports both native webhooks (forwarded directly from platforms that emit them) and virtual webhooks (Knit polls the source, detects changes, and emits events). Both use the same subscription interface and event schema — your integration code is identical either way.
Supported event types include: record.new, record.modified, `record.deleted' and more.
Zero Data Storage
Knit never stores your customers' employee data at rest. Every API request passes through to the source HRIS in real time. This reduces your GDPR, CCPA, and SOC 2 compliance scope — there are no replicated employee records sitting in a third-party system.
AI Connector Builder / Integration Agent
When a customer's HRIS isn't in Knit's library, the AI Connector Builder lets your team define a new connector in hours. Specify the platform's API structure and data mapping; Knit's AI generates the connector. Niche or regional HRIS requests never block your roadmap.
Passthrough API
Need an object outside the unified APIs? Passthrough lets you make direct calls to the underlying HRIS using Knit's authentication layer — provider-specific access without rebuilding auth.
MCP Compatibility
Knit is compatible with the Model Context Protocol (MCP), enabling AI agents to perform authenticated read and write operations across HRIS platforms without any per-provider logic in your agent code.
Quick Start
Authentication
All requests require two headers:
Authorization: Bearer YOUR_API_KEY
X-Integration-Id: YOUR_CUSTOMER_INTEGRATION_IDThe X-Integration-Id is the unique identifier for a specific customer's connected HRIS, issued after they complete the Knit auth flow.
Fetch employees
curl --request POST \
--url https://api.getknit.dev/v1.0/sync.start \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"dataType": "employee"
}Response — same schema whether the customer uses Workday, BambooHR, or ADP:
{
"profile": {
"firstName": "0XcrE7zm5UMipuT",
"lastName": "twkFD16f8q4D2R7",
"id": "omLAR353IjXZ4Mt",
"employeeNumber": "004",
"workEmail": "[email protected]",
"startDate": "1970-01-01T00:00:00Z",
"birthDate": "1970-01-01T00:00:00Z",
"terminationDate": "1970-01-01T00:00:00Z",
"employmentStatus": "ACTIVE",
"maritalStatus": "SINGLE",
"gender": "MALE",
"employmentType": "FULL_TIME"
},
"contactInfo": {
"personalEmails": [
"[email protected]",
"[email protected]"
],
"phones": [
{
"type": "PERSONAL",
"number": "564-871-1385"
}
]
},
"orgStructure": {
"designation": "m7Vv4fhvVpoGvM0",
"department": "kLkUPMpzsCEErbt",
"manager": {
"id": "RALpFjOQBAjCozi",
"workEmail": "[email protected]"
}
},
"locations": {
"workAddress": {
"addressLine1": "jHvul9kxXMmpGsa",
"addressLine2": "ZRZEUuGtghgY9bx",
"city": "Bengaluru",
"state": "KA",
"country": "IN",
"zipCode": "560016",
"addressType": "WORK"
},
"permanentAddress": null,
"presentAddress": null
},
"dependents": [
{
"id": "iaNR6Abj8qksGTe",
"firstName": "cQxqiWWVLMhMDsO",
"lastName": "lCnk39U3TUCC38t",
"birthDate": "1970-01-01T00:00:00Z",
"relation": "FATHER",
"gender": "MALE"
},
{
"id": "nVtWLlJluoG6CgL",
"firstName": "gCRiIxi1aSTyEkd",
"lastName": "HMfoPrjy4dGyxiJ",
"birthDate": "1970-01-01T00:00:00Z",
"relation": "MOTHER",
"gender": "FEMALE"
}
],
"bankAccounts": [
{
"accountNumber": "ROY12486516AS",
"accountType": "SAVINGS",
"bankName": "Waystar Roy Bank",
"routingInfo": [
{
"type": "IFSC_CODE",
"number": "AIDN309301034"
},
{
"type": "BRANCH_CODE",
"number": "AIDN"
}
]
},
{
"accountNumber": "548493043F903J",
"accountType": "Chekcing",
"bankName": "Gold Star Bank",
"routingInfo": [
{
"type": "BANK_IDENTIFICATION_CODE",
"number": "GSBK302K0140EW"
}
]
}
],
"employeeKYC": {
"aadharNumber": "46743545",
"aadharURL": "link.com/aadhar",
"panNumber": "PED5663",
"panURL": "link.com/pan"
},
"employeeIdentificationData": [
{
"type": "NATIONAL_ID",
"subType": "SSN",
"identificationNumber": "RIDOFJSIDJF"
}
],
"employeeProfilePicture": {
"pictureName": "avatar.jpg",
"pictureURL": "link.com/picture"
},
"compensation": {
"fixed": [
{
"type": "SALARY",
"planId": "SALARY_Salary_Plan",
"amount": 192674.38,
"percentage": null,
"currency": "USD",
"payPeriod": "MONTHLY",
"frequency": "ANNUAL"
},
{
"type": "ALLOWANCE",
"planId": "ALLOWANCE_Cell_Mobile_Phone_Allowance_USA",
"amount": 150,
"percentage": null,
"currency": "USD",
"payPeriod": "MONTHLY",
"frequency": "MONTHLY"
},
{
"type": "ALLOWANCE",
"planId": "ALLOWANCE_Car_Allowance_Plan",
"amount": 500,
"percentage": null,
"currency": "USD",
"payPeriod": "MONTHLY",
"frequency": "MONTHLY"
}
],
"variable": [
{
"type": "BONUS",
"planId": "BONUS_PERCENT_BASED_Executive_Bonus_Plan",
"amount": null,
"percentage": 0.2,
"currency": "USD",
"payPeriod": "MONTHLY",
"frequency": "QUARTERLY"
}
],
"stock": [
{
"planId": "STOCK_2008_Stock_Plan_Executive",
"type": "Options",
"targetShares": 5000,
"optionsPercentage": 0.85,
"stockPercentage": 0.15,
"vestingScheduleId": "4YQ",
"vestingScheduleName": "4-Year, Quarterly"
}
]
},
"deductions": [
{
"type": "401k",
"name": "401k Deduction Plan",
"deductionId": "PF9434F9",
"deductionCode": "DEDUC401",
"employeeContribution": {
"amount": 100.0,
"percentage": 0
},
"employerContribution": {
"amount": 100.0,
"percentage": 0
},
"currency": "USD",
"frequency": "MONTHLY",
"startDate": "2023-01-01T00:00:Z",
"endDate": "2023-12-31T00:00:Z"
}
],
"customFields": {
"fields": {
"unmappedFieldKey": "value"
}
},
"leaveRequests": [
{
"id": "1437",
"startDate": "2024-02-19T00:00:00Z",
"endDate": "2024-02-23T00:00:00Z",
"requestedOn": "2024-01-04T00:00:00Z",
"note": null,
"status": "REQUESTED",
"leaveType": {
"id": "78",
"name": "Vacation",
"type": "VACATION"
},
"unit": "HOURS",
"amount": 40.0,
"isPaid": "NOT_SPECIFIED"
},
{
"id": "1448",
"startDate": "2024-03-20T00:00:00Z",
"endDate": "2024-03-21T00:00:00Z",
"requestedOn": "2024-03-19T00:00:00Z",
"note": "Going to Disneyland",
"status": "APPROVED",
"leaveType": {
"id": "78",
"name": "Vacation",
"type": "VACATION"
},
"unit": "HOURS",
"amount": 16.0,
"isPaid": "NOT_SPECIFIED"
}
],
"w4Data": {
"filingStatus": "JOINTLY_FILED",
"hasMultipleJobs": "TRUE",
"totalDependentsAmount": "200.0",
"qualifiedDependentsAmount": "100.0",
"otherDependentsAmount": "100.0",
"numberOfQualifiedDependents": "1",
"numberOfOtherDependents": "1",
"otherIncomeAmount": "500.0",
"deductionsAmount": "300.0",
"extraWithholdingAmount": "100.0",
"withholdingStatus": "EXEMPT"
},
"company": {
"companyId": "WSRC_TECH",
"companyName": "Waystar Royco Technologies"
},
"rawValues": {
"profile": {
"employmentStatus": "Probation",
"maritalStatus": "single",
"gender": "male",
"employmentType": "full time"
}
}
}→ Full employee data model reference →
Create an employee
curl --request POST \
--url https://api.getknit.dev/v1.0/hr.employee.create \
--header 'accept: application/json' \
--header 'content-type: application/json'→ Create employee API reference →
Fetch leave balances
curl --request GET \
--url https://api.getknit.dev/v1.0/hr.employees.leave.balance \
--header 'accept: application/json'→ Leave balance API reference →
Rate limitsKnit applies per-provider rate limits based on the underlying HRIS's constraints and manages it automatically if you've setup a sync. When your're making write calls - If you hit a limit, the API returns a
429response with aRetry-Afterheader.
Use Cases
Employee Onboarding Automation
Sync new hire data from any HRIS the moment an employee is added. Trigger account provisioning, tool setup, and welcome workflows automatically.
Typical flow: record.created webhook → create employee record → provision SSO account → enroll in deductions/benefits → upload offer document
Secure Employee Offboarding
Detect terminations via webhook and immediately revoke access, archive records, and close workflows — before IT or HR files a ticket.
Typical flow: record.deleted webhook → terminate employee with termination reason → revoke SSO access → unenroll from benefits
Employee Directory & Org Sync
Keep org charts, reporting structures, and people directories current across every tool in your stack.
Typical flow: Sync Employees employees + departments + positions → update internal directory → refresh org chart
Time & Attendance Tools
Read and write leave requests, PTO balances, and attendance records for scheduling and time-tracking products.
Typical flow: Fetch leave types → read leave balances → create leave requests → write attendance records + timesheet entries
Payroll & Compensation Sync
Surface payroll data and compensation structures inside your product without building per-HRIS payroll parsers.
Typical flow: Fetch pay periods → pull employee payroll → sync compensation plans → display or reconcile data in your product
Benefits Administration
Manage benefit and deduction enrollment for employees across any HRIS — create plans, enroll employees, and keep records in sync.
Typical flow: Fetch company deductions → create or update plans → enroll employees → update individual deduction amounts
AI Agents & HR Automation
Feed normalized, real-time employee data into LLM pipelines, RAG systems, and MCP-compatible AI agents. Build HR copilots with live org awareness — no per-provider logic needed.
Typical flow: Sync employees + departments → embed into vector store → ground LLM responses in real org context → use MCP write tools to take action back into the HRIS
FAQ
What is a unified HRIS API? A unified HRIS API is a single, standardized interface that lets your product read and write employee data across multiple HR platforms without building a separate integration for each one. You integrate with Knit once; Knit normalizes the data models, authentication, and API differences between providers.
How long does it take to integrate? Most teams go live in 1–3 days with Knit. Building a production-ready 1:1 native integration against a single HRIS like Workday or ADP typically takes 2–3 months but when you build with Knit, one integration unlocks 50+ platforms — and Knit maintains all connectors as providers update their APIs.
Does Knit store employee data? No. Knit is a pass-through layer — requests hit the source HRIS in real time and no employee data is stored at rest. This reduces your GDPR, CCPA, and SOC 2 compliance scope.
What if a customer's HRIS isn't on the list? Using the Connector Builder we can add a new connector in hours. See the full list of supported integrations →
How do webhooks work for platforms that don't support them natively? Knit's virtual webhooks poll the source API, detect changes, and emit events using the same interface . Your subscription code is identical either way.
Is Knit compatible with AI agents and MCP? Yes. Knit is MCP-compatible, so agents in MCP-compatible frameworks can perform authenticated HRIS read/write actions via Knit with no per-provider logic.
What's the passthrough API? The passthrough API lets you make direct calls to the underlying HRIS using Knit's authentication layer. Use it for fields or endpoints outside the unified schema.
Next Steps
| 🚀 Get your API key | Start building in minutes |
| 👤 Employee data model | Full field reference for the core object |
| 📋 Payroll data models | Payslip and pay period field reference |
| 🌴 Leave data models | Leave policy, balance, and request fields |
| 📄 Document data model | Employee file and document field reference |
| 🔗 Supported HRIS integrations | Full list of connected platforms |
Updated about 5 hours ago