Keka HR Payroll API

The Payroll API from Keka HR — 11 operation(s) for payroll.

Operations 12

GET /api/v1/payroll/salarycomponents Get Salary components #
GET /api/v1/payroll/paygroups Get all pay groups #
GET /api/v1/payroll/paygroups/{payGroupId}/paycycles Get all pay cycles #
GET /api/v1/payroll/paygroups/{payGroupId}/paycycles/{payCycleId}/payregister Get pay register #
GET /api/v1/payroll/paygroups/{payGroupId}/paycycles/{payCycleId}/paybatches Get all pay batches #
GET /api/v1/payroll/paygroups/{payGroupId}/paycycles/{payCycleId}/paybatches/{payBatchId}/payments Get all batch payments #
PUT /api/v1/payroll/paygroups/{payGroupId}/paycycles/{payCycleId}/paybatches/{payBatchId}/payments Update the payment status #
GET /api/v1/time/payroll/paygrades Get all Pay Grades #
GET /api/v1/payroll/payband Get All Pay Bands #
GET /api/v1/payroll/salaries Get all Employee Salaries #
GET /api/v1/payroll/employees/fnf Get all employee FnF details #
GET /get-all-bonus-types Get all Bonus Types #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/keka-payroll-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

keka-payroll-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Keka HR Assets Payroll API
  description: REST API for the Keka HR and payroll platform covering employee records, attendance, leave, payroll, expense management, performance, recruitment, professional services automation, helpdesk, background verification, and rewards.
  version: v1
  contact:
    url: https://developers.keka.com/
  license:
    name: Keka Terms of Service
    url: https://www.keka.com/terms-of-service
servers:
- url: https://{tenant}.keka.com/api/v1
  description: Keka HR API
  variables:
    tenant:
      default: your-company
      description: Your Keka tenant subdomain
security:
- oauth2:
  - kekaapi
tags:
- name: Payroll
paths:
  /api/v1/payroll/salarycomponents:
    get:
      operationId: get_salary_components
      summary: Get Salary components
      tags:
      - Payroll
      responses:
        '200':
          description: Successful response
      description: '<p>This API is used for fetching list of all salary components.</p>

        '
  /api/v1/payroll/paygroups:
    get:
      operationId: get_all_pay_groups
      summary: Get all pay groups
      tags:
      - Payroll
      responses:
        '200':
          description: Successful response
      description: '<p>This API is used for fetching list of all pay groups.</p>

        '
  /api/v1/payroll/paygroups/{payGroupId}/paycycles:
    get:
      operationId: get_all_pay_cycles
      summary: Get all pay cycles
      tags:
      - Payroll
      responses:
        '200':
          description: Successful response
      description: '<p>This API is used for fetching list of all pay cycles in a pay group.</p>

        <h2 id="enumerated-values">Enumerated Values</h2>

        <div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>PayrollRunStatus</th>

        <th>RemunerationType</th>

        <th>PaymentStatus</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td>0 = Pending  <br />1 = Finalized  <br />3 = Partial</td>

        <td>0 = Monthly  <br />1 = Daily  <br />2 = Hourly</td>

        <td>0 = UnPaid  <br />1 = Paid</td>

        </tr>

        </tbody>

        </table>

        </div><div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>EmployeePayrollCycleRunStatus</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td>0 = SalaryOnHold = 0  <br />1 = PaymentOnHold  <br />3 = Skipped  <br />6 = SalaryVoid  <br />7 = PaymentVoid  <br />8 = ExecutedAsSalary  <br />9 = ExecutedAsArrear  <br />10 = FinalSettlement  <br />11 = FinalSettlementVoid  <br />12 = ReleasePayment  <br />13 = FinalSettlementPaymentVoid  <br />14 = AlreadyPaid  <br />15 = FinalSettlementAlreadyPaid  <br />16 = '
      parameters:
      - name: payGroupId
        in: path
        required: true
        schema:
          type: string
  /api/v1/payroll/paygroups/{payGroupId}/paycycles/{payCycleId}/payregister:
    get:
      operationId: get_pay_register
      summary: Get pay register
      tags:
      - Payroll
      responses:
        '200':
          description: Successful response
      description: '<p>This API is used for fetching pay register for a given pay cycle.</p>

        <h2 id="enumerated-values">Enumerated Values</h2>

        <div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>PayrollRunStatus</th>

        <th>RemunerationType</th>

        <th>PaymentStatus</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td>0 = Pending  <br />1 = Finalized  <br />3 = Partial</td>

        <td>0 = Monthly  <br />1 = Daily  <br />2 = Hourly</td>

        <td>0 = UnPaid  <br />1 = Paid</td>

        </tr>

        </tbody>

        </table>

        </div><div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>EmployeePayrollCycleRunStatus</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td>0 = SalaryOnHold = 0  <br />1 = PaymentOnHold  <br />3 = Skipped  <br />6 = SalaryVoid  <br />7 = PaymentVoid  <br />8 = ExecutedAsSalary  <br />9 = ExecutedAsArrear  <br />10 = FinalSettlement  <br />11 = FinalSettlementVoid  <br />12 = ReleasePayment  <br />13 = FinalSettlementPaymentVoid  <br />14 = AlreadyPaid  <br />15 = FinalSettlementAlreadyPaid  <br />16 = Fin'
      parameters:
      - name: payGroupId
        in: path
        required: true
        schema:
          type: string
      - name: payCycleId
        in: path
        required: true
        schema:
          type: string
  /api/v1/payroll/paygroups/{payGroupId}/paycycles/{payCycleId}/paybatches:
    get:
      operationId: get_all_pay_batches
      summary: Get all pay batches
      tags:
      - Payroll
      responses:
        '200':
          description: Successful response
      description: '<p>This API is used for fetching list of all pay batches in a pay group.</p>

        <h2 id="enumerated-values">Enumerated Values</h2>

        <div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>PayrollRunStatus</th>

        <th>RemunerationType</th>

        <th>PaymentStatus</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td>0 = Pending  <br />1 = Finalized  <br />3 = Partial</td>

        <td>0 = Monthly  <br />1 = Daily  <br />2 = Hourly</td>

        <td>0 = UnPaid  <br />1 = Paid</td>

        </tr>

        </tbody>

        </table>

        </div><div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>EmployeePayrollCycleRunStatus</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td>0 = SalaryOnHold = 0  <br />1 = PaymentOnHold  <br />3 = Skipped  <br />6 = SalaryVoid  <br />7 = PaymentVoid  <br />8 = ExecutedAsSalary  <br />9 = ExecutedAsArrear  <br />10 = FinalSettlement  <br />11 = FinalSettlementVoid  <br />12 = ReleasePayment  <br />13 = FinalSettlementPaymentVoid  <br />14 = AlreadyPaid  <br />15 = FinalSettlementAlreadyPaid  <br />16 ='
      parameters:
      - name: payGroupId
        in: path
        required: true
        schema:
          type: string
      - name: payCycleId
        in: path
        required: true
        schema:
          type: string
  /api/v1/payroll/paygroups/{payGroupId}/paycycles/{payCycleId}/paybatches/{payBatchId}/payments:
    get:
      operationId: get_all_batch_payments
      summary: Get all batch payments
      tags:
      - Payroll
      responses:
        '200':
          description: Successful response
      description: '<p>This API is used for fetching batch payments against against a batch ID,.</p>

        <h2 id="enumerated-values">Enumerated Values</h2>

        <div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>PayrollRunStatus</th>

        <th>RemunerationType</th>

        <th>PaymentStatus</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td>0 = Pending  <br />1 = Finalized  <br />3 = Partial</td>

        <td>0 = Monthly  <br />1 = Daily  <br />2 = Hourly</td>

        <td>0 = UnPaid  <br />1 = Paid</td>

        </tr>

        </tbody>

        </table>

        </div><div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>EmployeePayrollCycleRunStatus</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td>0 = SalaryOnHold = 0  <br />1 = PaymentOnHold  <br />3 = Skipped  <br />6 = SalaryVoid  <br />7 = PaymentVoid  <br />8 = ExecutedAsSalary  <br />9 = ExecutedAsArrear  <br />10 = FinalSettlement  <br />11 = FinalSettlementVoid  <br />12 = ReleasePayment  <br />13 = FinalSettlementPaymentVoid  <br />14 = AlreadyPaid  <br />15 = FinalSettlementAlreadyPaid  <br />'
      parameters:
      - name: payGroupId
        in: path
        required: true
        schema:
          type: string
      - name: payCycleId
        in: path
        required: true
        schema:
          type: string
      - name: payBatchId
        in: path
        required: true
        schema:
          type: string
    put:
      operationId: update_the_payment_status
      summary: Update the payment status
      tags:
      - Payroll
      responses:
        '200':
          description: Successful response
      description: '<p>This API is used for updating payment status for a given batch ID. Only 100 bulk transactions will be allowed for a particular batch.</p>

        <h2 id="enumerated-values">Enumerated Values</h2>

        <div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>PayrollRunStatus</th>

        <th>RemunerationType</th>

        <th>PaymentStatus</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td>0 = Pending  <br />1 = Finalized  <br />3 = Partial</td>

        <td>0 = Monthly  <br />1 = Daily  <br />2 = Hourly</td>

        <td>0 = UnPaid  <br />1 = Paid</td>

        </tr>

        </tbody>

        </table>

        </div><div class="click-to-expand-wrapper is-table-wrapper"><table>

        <thead>

        <tr>

        <th>EmployeePayrollCycleRunStatus</th>

        </tr>

        </thead>

        <tbody>

        <tr>

        <td>0 = SalaryOnHold = 0  <br />1 = PaymentOnHold  <br />3 = Skipped  <br />6 = SalaryVoid  <br />7 = PaymentVoid  <br />8 = ExecutedAsSalary  <br />9 = ExecutedAsArrear  <br />10 = FinalSettlement  <br />11 = FinalSettlementVoid  <br />12 = ReleasePayment  <br />13 = FinalSettlementPaymentVoid  <br />14 '
      parameters:
      - name: payGroupId
        in: path
        required: true
        schema:
          type: string
      - name: payCycleId
        in: path
        required: true
        schema:
          type: string
      - name: payBatchId
        in: path
        required: true
        schema:
          type: string
  /api/v1/time/payroll/paygrades:
    get:
      operationId: get_all_pay_grades
      summary: Get all Pay Grades
      tags:
      - Payroll
      responses:
        '200':
          description: Successful response
  /api/v1/payroll/payband:
    get:
      operationId: get_all_pay_bands
      summary: Get All Pay Bands
      tags:
      - Payroll
      responses:
        '200':
          description: Successful response
  /api/v1/payroll/salaries:
    get:
      operationId: get_all_employee_salaries
      summary: Get all Employee Salaries
      tags:
      - Payroll
      responses:
        '200':
          description: Successful response
  /api/v1/payroll/employees/fnf:
    get:
      operationId: get_all_employee_fnf_details
      summary: Get all employee FnF details
      tags:
      - Payroll
      responses:
        '200':
          description: Successful response
  /get-all-bonus-types:
    get:
      operationId: get_all_bonus_types
      summary: Get all Bonus Types
      tags:
      - Payroll
      responses:
        '200':
          description: Successful response
      description: '<p>Get all bonus types</p>

        '
components:
  securitySchemes:
    oauth2:
      type: oauth2
      description: OAuth 2.0 client credentials flow
      flows:
        clientCredentials:
          tokenUrl: https://login.keka.com/connect/token
          scopes:
            kekaapi: Access to Keka HR API