---
title: "List variable pay entries for a list of employees"
method: GET
path: "/bulk/people/variable"
tags: ["Employee Tables"]
---

# List variable pay entries for a list of employees

`GET /bulk/people/variable`

## Request

- Base URL: `https://api.hibob.com/v1`
- URL: `https://api.hibob.com/v1/bulk/people/variable`
- Auth: one of:
  - HTTP basic
  - HTTP bearer

Returns variable pay table entries for all employees or a specific list of employees. Variable pay is a multi-current history table: an employee may have multiple variable types concurrently (for example Bonus and Commission), each with its own effective-date timeline. Responses include timeline fields such as `effectiveDate`, `endEffectiveDate`, and `isCurrent`.<br /> <br /> You can fetch employee IDs using the <a href="https://apidocs.hibob.com/reference/post_people-search" target="_blank">People search</a> endpoint.<br /> <br /> **<b>Required permissions</b>** <br /> People's Data > People's fields > Variable Pay (Table) > View history (and View on the table or required columns), or View for current-effective rows only.<br /> **For the employees**: People's Data > Access data for > Make sure the employees are in the list. Employees that are not listed and were specifically requested will be listed under `errors` in the response. <br /> <br />
**<b>Pagination</b>** <br /> This endpoint uses cursor-based pagination to handle large number of table entries. To learn more, see <a href="https://apidocs.hibob.com/docs/pagination" target="_blank">Pagination in Bob's API</a>

## Query parameters

- `limit` number
- `cursor` string
- `employeeIds` string
- `includeArchived` boolean

## Response `200`

Variable pay table entries.

- BulkVariableTableResponse: Cursor-paginated bulk response for variable pay table entries.
  - `results` object[]: Variable pay table entries grouped by employee.
    - `employeeId` string: Employee ID these variable pay entries belong to.
    - `values` ReadVariableEntry[]: Variable pay entries for this employee on the current page.
      - `id` number: The identifier of the entry in the Variable Pay table
      - `effectiveDate` string, date: The date this entry becomes effective.
      - `endEffectiveDate` string, date: For entries that are not active - this is the date this entry became not effective.
      - `isCurrent` boolean: Indicates whether this is the 'current' row (effective date is current)
      - `canBeDeleted` boolean
      - `amount` CurrencyValue
        - `value` number, double, required
        - `currency` string, required: Three-letter currency code.
      - `departmentPercent` number: The employee's department on-target weight, in percentage.
      - `individualPercent` number: The employee's individual on-target weight, in percentage.
      - `payoutType` string: The variable pay type - currenly only "amount" is supported.
      - `variableType` string: The type of variable pay. Can be any of: "Bonus", "ExecutiveBonus", "Commission".
      - `paymentPeriod` string: This represents the period for this variable entry. It can be one of: Annual, Half-Yearly, Quarterly, Monthly.
      - `creationDate` string, date: The date the variable pay entry was created.
      - `endDate` string, date: The date of variable pay completion.
      - `modificationDate` string, date: The date the variable pay entry was updated.
      - `percentageOfAnnualSalary` number: Calculated field (not supported at the moment via the API)
      - `companyPercent` number: The employee's company on-target weight, in percentage.
      - `customColumns` object
      - `change` object: Details of the last change and the ID of the user who updated this entry
        - `reason` string
        - `changedBy` string
        - `changedById` string
  - `response_metadata` object: Pagination metadata for the bulk response.
    - `next_cursor` string: Contains a string value if there is a 'next' page of data. `null` if there is no more data. Use this value as the `cursor` parameter for pagination to get the next page.
  - `errors` object[]: Permission errors for employees that were requested but could not be read. In the live JSON payload this is an object keyed by employee ID (`{ "<employeeId>": { "error", "message" } }`); documented as an array of entries (same pattern as other bulk employee-table responses) so the schema stays strict without `additionalProperties`.
    - `employeeId` string: Employee ID that could not be accessed.
    - `error` string: Machine-readable error code.
    - `message` string: Human-readable explanation of the permission error.
  - `restricted_columns` RestrictedColumnsMetadata: Indicates which columns were filtered from the response due to field-level permissions. This object is only present when the service user has partial column permissions. To learn more, see <a href="https://apidocs.hibob.com/docs/employee-data-api-field-level-permissions#detecting-restricted-columns-in-api-responses" target="_blank">Field level permissions</a>.
    - `no_view_permission` string[]: Columns filtered because the service user lacks View permission for these fields.
    - `no_view_history_permission` string[]: Columns filtered because the service user lacks View History permission. Only present for historical tables (work, employment, salaries, lifecycle).

## Other responses

- `400`: Bad request.
- `403`: Forbidden. The service user does not have permissions to access this table or employees. Check the permissions as explained in the endpoint description.

## Changes

- **2026-11-03** `9ac25373a355`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/hibob/apis/employee-data-api/changes/bulk/people/variable/get.md)

---

[API](https://skmtc.dev/hibob/apis/employee-data-api.md) - [All operations](https://skmtc.dev/hibob/apis/employee-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hibob/apis/employee-data-api/revisions/9ac25373a355?raw)
