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:

LayerWhat Knit handles
Data modelsConsistent field names and structures — employees from BambooHR, Workday, and Personio return the same schema
AuthenticationOAuth, API keys, and tokens managed per-provider; you pass a single X-Integration-Id header
PaginationCursor-based pagination works identically regardless of how the provider implements it
Error formatsStandardized 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 fields

Fields 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

EndpointDescription
Employee data modelFull field reference for the normalized employee object
Create employeeAdd a new employee record to the connected HRIS
Update employeeUpdate profile, employment status, job title, or manager
Terminate employeeMark an employee as terminated with reason and date
Get termination reasonsFetch the list of valid termination reason codes for the HRIS
List positionsRetrieve open and filled positions across the org
List companiesList companies/legal entities in the connected HRIS
List departmentsRetrieve all departments and their hierarchy

Payroll APIs

EndpointDescription
Payroll data modelsField reference for payslip and payroll objects
Get employee payrollRetrieve payslips and payroll records for an employee
Get pay periodsList all pay periods for the connected HRIS

Leave APIs

EndpointDescription
Leave data modelsField reference for leave policy, balance, and request objects
List leave typesFetch all leave policy types configured in the HRIS
Leave requestsList and filter employee leave requests
Leave balancesGet remaining leave balances per employee per policy
Create leave requestSubmit a new leave request on behalf of an employee

Attendance APIs

EndpointDescription
Attendance APIRead attendance records and work hours
Add attendanceWrite a new attendance or check-in record
Timesheet entriesRetrieve detailed timesheet logs per employee

Compensation APIs

EndpointDescription
Compensation plansList salary structures and compensation plans
Update compensationUpdate an employee's compensation record

Document APIs

EndpointDescription
Document data modelField reference for the normalized document object
Employee documentsList all documents associated with an employee
Upload documentAttach a new document to an employee record
Document categoriesFetch valid document category codes for the HRIS

Benefits & Deductions APIs

EndpointDescription
List deductionsRetrieve all deduction types configured for the company
Create deductionAdd a new deduction type to the company
Update deductionModify an existing deduction's configuration
Enroll employeeEnroll an employee into a deduction or benefit plan
Unenroll employeeRemove an employee from a deduction or benefit plan
Update employee deductionChange 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.

CategoryPlatforms
Enterprise HCMWorkday, SAP SuccessFactors, Oracle HCM
Mid-market HRISBambooHR, Hibob, Personio, Namely, Lattice
Payroll & PEOADP Workforce Now, ADP Run, Gusto, Paycor, Paylocity, Paychex Flex, UKG Pro, Ceridian Dayforce, TriNet
Global HRDeel, Remote, Rippling
SMB HRISZenefits, 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_ID

The 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 limits

Knit 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 429 response with a Retry-After header.


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/benefitsupload 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 balancescreate 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 deductionscreate or update plans → enroll employeesupdate 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 keyStart building in minutes
👤 Employee data modelFull field reference for the core object
📋 Payroll data modelsPayslip and pay period field reference
🌴 Leave data modelsLeave policy, balance, and request fields
📄 Document data modelEmployee file and document field reference
🔗 Supported HRIS integrationsFull list of connected platforms