Knit Unified API

Knit's unified API provides standardized endpoints for connecting with multiple HR, recruitment, and chat tools in one integration. Access employee data, departments, locations, time-off records, job postings, and sync statuses through a single normalized interface.

OpenAPI Specification

knit-unified-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Knit Unified API
  description: >-
    Knit provides a unified API for B2B products, AI agents, and MCP clients to
    integrate with HR, recruitment, and collaboration tools. Knit handles cron jobs,
    rate limits, and retries for predictable data syncing at scale. The API provides
    standardized endpoints for accessing employee data, time-off, departments,
    locations, and more across multiple HRIS, ATS, and communication platforms.
  version: v1
  contact:
    name: Knit Developer Support
    url: https://developers.getknit.dev/
  license:
    name: Knit Terms of Service
    url: https://www.getknit.dev/terms
servers:
  - url: https://api.getknit.dev/v1
    description: Knit API production endpoint
security:
  - apiKey: []
tags:
  - name: Employees
    description: Operations for managing employee data across connected HRIS platforms.
  - name: Departments
    description: Operations for managing department data across connected platforms.
  - name: Locations
    description: Operations for managing location/office data.
  - name: Time Off
    description: Operations for managing time off and leave data.
  - name: Jobs
    description: Operations for managing job postings and applications via ATS integrations.
  - name: Integrations
    description: Operations for managing connected integrations.
  - name: Syncs
    description: Operations for monitoring sync status and triggering syncs.
paths:
  /employees:
    get:
      operationId: listEmployees
      summary: List Employees
      description: >-
        Returns a list of employees from connected HRIS integrations with
        standardized fields.
      tags:
        - Employees
      parameters:
        - name: integration_id
          in: query
          description: Filter by integration ID.
          required: false
          schema:
            type: string
        - name: page
          in: query
          description: Page number for pagination.
          required: false
          schema:
            type: integer
        - name: page_size
          in: query
          description: Number of records per page.
          required: false
          schema:
            type: integer
        - name: updated_after
          in: query
          description: Filter employees updated after this timestamp.
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: A list of employees.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Employee'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
        '401':
          description: Unauthorized.
        '500':
          description: Internal Server Error.
  /employees/{id}:
    get:
      operationId: getEmployee
      summary: Get Employee
      description: Returns details for a specific employee.
      tags:
        - Employees
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Employee details.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Employee'
        '404':
          description: Employee not found.
  /departments:
    get:
      operationId: listDepartments
      summary: List Departments
      description: Returns a list of departments from connected integrations.
      tags:
        - Departments
      parameters:
        - name: integration_id
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: A list of departments.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Department'
        '401':
          description: Unauthorized.
  /locations:
    get:
      operationId: listLocations
      summary: List Locations
      description: Returns a list of office locations from connected integrations.
      tags:
        - Locations
      parameters:
        - name: integration_id
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: A list of locations.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Location'
        '401':
          description: Unauthorized.
  /time-off:
    get:
      operationId: listTimeOff
      summary: List Time Off
      description: Returns a list of time-off entries from connected integrations.
      tags:
        - Time Off
      parameters:
        - name: integration_id
          in: query
          required: false
          schema:
            type: string
        - name: employee_id
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: A list of time-off entries.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/TimeOff'
        '401':
          description: Unauthorized.
  /jobs:
    get:
      operationId: listJobs
      summary: List Jobs
      description: Returns a list of job postings from connected ATS integrations.
      tags:
        - Jobs
      parameters:
        - name: integration_id
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: A list of jobs.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Job'
        '401':
          description: Unauthorized.
  /integrations:
    get:
      operationId: listIntegrations
      summary: List Integrations
      description: Returns a list of connected integrations for your account.
      tags:
        - Integrations
      responses:
        '200':
          description: A list of integrations.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Integration'
        '401':
          description: Unauthorized.
  /syncs:
    get:
      operationId: listSyncs
      summary: List Syncs
      description: Returns a list of sync operations and their statuses.
      tags:
        - Syncs
      responses:
        '200':
          description: A list of syncs.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Sync'
        '401':
          description: Unauthorized.
    post:
      operationId: triggerSync
      summary: Trigger Sync
      description: Triggers a new data sync for a connected integration.
      tags:
        - Syncs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - integration_id
              properties:
                integration_id:
                  type: string
                  description: The integration to sync.
      responses:
        '200':
          description: Sync triggered successfully.
        '400':
          description: Bad Request.
        '401':
          description: Unauthorized.
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: Authorization
      description: API key authentication via Bearer token.
  schemas:
    Employee:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the employee.
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
          format: email
        job_title:
          type: string
        department:
          type: string
        location:
          type: string
        employment_status:
          type: string
          enum:
            - active
            - inactive
            - terminated
        start_date:
          type: string
          format: date
        termination_date:
          type: string
          format: date
          nullable: true
        manager_id:
          type: string
          nullable: true
        integration_id:
          type: string
    Department:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        parent_id:
          type: string
          nullable: true
        integration_id:
          type: string
    Location:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        address:
          type: string
        city:
          type: string
        state:
          type: string
        country:
          type: string
        integration_id:
          type: string
    TimeOff:
      type: object
      properties:
        id:
          type: string
        employee_id:
          type: string
        type:
          type: string
        status:
          type: string
          enum:
            - pending
            - approved
            - denied
            - cancelled
        start_date:
          type: string
          format: date
        end_date:
          type: string
          format: date
        integration_id:
          type: string
    Job:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        description:
          type: string
        status:
          type: string
        department:
          type: string
        location:
          type: string
        integration_id:
          type: string
    Integration:
      type: object
      properties:
        id:
          type: string
        provider:
          type: string
          description: The HRIS/ATS provider name.
        status:
          type: string
          enum:
            - active
            - inactive
            - error
        created_at:
          type: string
          format: date-time
        last_synced_at:
          type: string
          format: date-time
          nullable: true
    Sync:
      type: object
      properties:
        id:
          type: string
        integration_id:
          type: string
        status:
          type: string
          enum:
            - pending
            - in_progress
            - completed
            - failed
        started_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
          nullable: true
    Pagination:
      type: object
      properties:
        page:
          type: integer
        page_size:
          type: integer
        total_count:
          type: integer
        total_pages:
          type: integer