> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kombo.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Get staffing entities

> Retrieve all staffing entities.

<Accordion title="Supported integrations" icon="list-check">
  This feature is currently available for the following integrations:

  <ul>
    <li class="flex items-center"><img src="https://storage.googleapis.com/kombo-assets/integrations/workday/icon.svg" height="16px" width="16px" class="m-0 mr-2" /><a href="/hris/connectors/workday">Workday</a></li>
    <li class="flex items-center"><img src="https://storage.googleapis.com/kombo-assets/integrations/ukgpro/icon.svg" height="16px" width="16px" class="m-0 mr-2" /><a href="/hris/connectors/ukgpro">UKG Pro</a></li>
    <li class="flex items-center"><img src="https://storage.googleapis.com/kombo-assets/integrations/sandbox/icon.svg" height="16px" width="16px" class="m-0 mr-2" /><a href="/hris/connectors/sandbox">Kombo Sandbox</a></li>
  </ul>

  You'd like to see this feature for another integration? Please reach out!
  We're always happy to discuss extending our coverage.
</Accordion>

Retrieve all staffing entities (positions, requisitions, and jobs) from the HRIS system.

Many enterprise HRIS platforms distinguish between **positions**, **requisitions**, and **jobs** — three related but different concepts used to manage headcount and hiring. Not every HRIS uses all three, and naming varies across systems, but here is a general overview:

* **Position**: A slot in the organizational structure that represents a role to be filled (or already filled) by one or more employees. Positions typically carry metadata like department, location, cost center, and reporting line. Think of it as "a chair at a desk" — it exists whether someone is sitting in it or not.
* **Requisition**: A formal request to fill a position. When a manager wants to hire for an open position, they usually create a requisition that goes through an approval workflow. Requisitions are time-bound and tied to a specific hiring need. In Kombo's data model, a requisition's `parent_id` points to the position it was opened for.
* **Job**: Some systems use "job" as a more generic or lightweight alternative to a requisition. Jobs often represent an ongoing, unlimited hiring need (e.g., a company that is always hiring for "Software Engineer") rather than a one-off backfill. This is reflected in the `OPEN_UNLIMITED` status.

You can use the `model_types` filter to retrieve only the type(s) relevant to your use case. Each record's `model_type` field tells you which of the three concepts it represents.

Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`


## OpenAPI

````yaml GET /hris/staffing-entities
openapi: 3.1.0
info:
  title: Kombo API
  version: 1.0.0
servers:
  - url: https://api.kombo.dev/v1
    description: Kombo EU API
  - url: https://api.us.kombo.dev/v1
    description: Kombo US API
security:
  - ApiKey: []
tags:
  - name: General
  - name: Kombo Connect
    description: >-
      Endpoints for Kombo Connect, our end-user-facing flow for setting up new
      integrations.
  - name: Unified HRIS API
    description: Unified endpoints to access all the HR concepts you might need.
  - name: Unified ATS API
    description: Unified endpoints to access all the ATS concepts you might need.
  - name: Unified ATS (Assessment & Background Check) API
    description: >-
      Unified endpoints to operate Assessments and Background Checks for many
      applicant tracking systems.
  - name: Unified LMS API
    description: Unified endpoints to access all the LMS concepts you might need.
  - name: AI Apply
    description: Endpoints for AI-powered job application features.
  - name: Custom Endpoints
    description: Custom integration-specific endpoints.
paths:
  /hris/staffing-entities:
    get:
      tags:
        - Unified HRIS API
      summary: Get staffing entities
      description: >-
        Retrieve all staffing entities.


        <Accordion title="Supported integrations" icon="list-check">

        This feature is currently available for the following integrations:


        <ul>

        <li class="flex items-center"><img
          src="https://storage.googleapis.com/kombo-assets/integrations/workday/icon.svg"
          height="16px"
          width="16px"
          class="m-0 mr-2"
        /><a href="/hris/connectors/workday">Workday</a></li>

        <li class="flex items-center"><img
          src="https://storage.googleapis.com/kombo-assets/integrations/ukgpro/icon.svg"
          height="16px"
          width="16px"
          class="m-0 mr-2"
        /><a href="/hris/connectors/ukgpro">UKG Pro</a></li>

        <li class="flex items-center"><img
          src="https://storage.googleapis.com/kombo-assets/integrations/sandbox/icon.svg"
          height="16px"
          width="16px"
          class="m-0 mr-2"
        /><a href="/hris/connectors/sandbox">Kombo Sandbox</a></li>

        </ul>


        You'd like to see this feature for another integration? Please reach
        out!

        We're always happy to discuss extending our coverage.

        </Accordion>



        Retrieve all staffing entities (positions, requisitions, and jobs) from
        the HRIS system.


        Many enterprise HRIS platforms distinguish between **positions**,
        **requisitions**, and **jobs** — three related but different concepts
        used to manage headcount and hiring. Not every HRIS uses all three, and
        naming varies across systems, but here is a general overview:


        - **Position**: A slot in the organizational structure that represents a
        role to be filled (or already filled) by one or more employees.
        Positions typically carry metadata like department, location, cost
        center, and reporting line. Think of it as "a chair at a desk" — it
        exists whether someone is sitting in it or not.

        - **Requisition**: A formal request to fill a position. When a manager
        wants to hire for an open position, they usually create a requisition
        that goes through an approval workflow. Requisitions are time-bound and
        tied to a specific hiring need. In Kombo's data model, a requisition's
        `parent_id` points to the position it was opened for.

        - **Job**: Some systems use "job" as a more generic or lightweight
        alternative to a requisition. Jobs often represent an ongoing, unlimited
        hiring need (e.g., a company that is always hiring for "Software
        Engineer") rather than a one-off backfill. This is reflected in the
        `OPEN_UNLIMITED` status.


        You can use the `model_types` filter to retrieve only the type(s)
        relevant to your use case. Each record's `model_type` field tells you
        which of the three concepts it represents.


        Top level filters use AND, while individual filters use OR if they
        accept multiple arguments. That means filters will be resolved like
        this: `(id IN ids) AND (remote_id IN remote_ids)`
      operationId: GetHrisStaffingEntities
      parameters:
        - in: header
          name: X-Integration-Id
          schema:
            type: string
          description: ID of the integration you want to interact with.
          example: bamboohr:HWUTwvyx2wLoSUHphiWVrp28
          required: true
        - name: cursor
          in: query
          required: false
          description: >-
            An optional cursor string used for pagination. This can be retrieved
            from the `next` property of the previous page response.
          schema:
            $ref: '#/components/schemas/GetHrisStaffingEntitiesParameterCursor'
        - name: page_size
          in: query
          required: false
          description: The number of results to return per page. Maximum is 250.
          schema:
            $ref: '#/components/schemas/GetHrisStaffingEntitiesParameterPageSize'
        - name: updated_after
          in: query
          required: false
          description: >-
            Filter the entries based on the modification date in format
            `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record
            itself **OR** its nested data has been updated since this timestamp,
            even if the record's own `changed_at` field remains unchanged.


            If you want to track entry deletion, also set the
            `include_deleted=true` query parameter, because otherwise, deleted
            entries will be hidden.


            For more details, see [Understanding changed_at vs updated_after
            Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).


            For this endpoint, `updated_after` matches when the returned record
            changed, or when related data changed as described below.


            | Path | Added/Removed | Linked Record |

            | --- | --- | --- |

            | `locations` | ✓ Yes | ✓ Yes |

            | `legal_entities` | ✓ Yes | ✓ Yes |

            | `groups` | ✓ Yes | ✓ Yes |


            _**Added/Removed**: Whether adding or removing entries from this
            list triggers an update (n/a for single records). **Linked Record**:
            Whether changes to the linked record itself trigger an update._
          schema:
            $ref: '#/components/schemas/GetHrisStaffingEntitiesParameterUpdatedAfter'
        - name: include_deleted
          in: query
          required: false
          description: >-
            By default, deleted entries are not returned. Use the
            `include_deleted` query param to include deleted entries too.
          schema:
            $ref: >-
              #/components/schemas/GetHrisStaffingEntitiesParameterIncludeDeleted
        - name: ignore_unsupported_filters
          in: query
          required: false
          description: >-
            When set to `true`, filters targeting fields not supported by this
            integration will be ignored instead of filtering out all results.
          schema:
            $ref: >-
              #/components/schemas/GetHrisStaffingEntitiesParameterIgnoreUnsupportedFilters
        - name: ids
          in: query
          required: false
          description: >-
            Filter by a comma-separated list of IDs such as
            `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
          schema:
            $ref: '#/components/schemas/GetHrisStaffingEntitiesParameterIds'
        - name: remote_ids
          in: query
          required: false
          description: Filter by a comma-separated list of remote IDs.
          schema:
            $ref: '#/components/schemas/GetHrisStaffingEntitiesParameterRemoteIds'
        - name: model_types
          in: query
          required: false
          description: >-
            Filter by a comma-separated list of `JOB`, `POSITION`,
            `REQUISITION`  


            Leave this blank to get results matching all values.
          schema:
            $ref: '#/components/schemas/GetHrisStaffingEntitiesParameterModelTypes'
        - name: statuses
          in: query
          required: false
          description: >-
            Filter by a comma-separated list of `OPEN_LIMITED`,
            `OPEN_UNLIMITED`, `PENDING`, `FROZEN`, `FILLED`, `CLOSED`  


            Leave this blank to get results matching all values.
          schema:
            $ref: '#/components/schemas/GetHrisStaffingEntitiesParameterStatuses'
      responses:
        '200':
          description: GET /hris/staffing-entities Positive response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetHrisStaffingEntitiesPositiveResponse'
              examples:
                example1:
                  value:
                    status: success
                    data:
                      next: >-
                        eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=
                      results:
                        - id: 26vafvWSRmbhNcxJYqjCzuJg
                          remote_id: '32'
                          name: Software Engineer
                          model_type: POSITION
                          description: Description of the position
                          status: OPEN_UNLIMITED
                          employment_types:
                            - remote_label: Vollzeit
                              unified_type: FULL_TIME
                          number_of_openings: null
                          parent_id: KGaJ5XaVPob8mYVfD49W4DGB
                          remote_url: https://example.com/position/32
                          remote_created_at: '2022-08-07T14:01:29.196Z'
                          remote_updated_at: '2022-08-07T14:01:29.196Z'
                          changed_at: '2022-08-07T14:01:29.196Z'
                          remote_deleted_at: null
                          custom_fields: {}
                          integration_fields: []
                          remote_data: null
                          locations:
                            - id: 22st2Ji8XpncEYEak8mvQgQF
                              remote_id: '1348'
                              name: Kombo HQ
                              type: OFFICE
                          legal_entities:
                            - id: 4B9bKBpX5tnwjiG93TAqF7ci
                              remote_id: '49'
                              name: ACME Inc.
                          groups:
                            - id: 4B9bKBpX5tnwjiG93TAqF7ci
                              remote_id: '49'
                              name: Customer Success
                              type: TEAM
        default:
          $ref: '#/components/responses/ErrorResponseHRIS'
      x-codeSamples:
        - lang: python
          label: GetHrisStaffingEntities
          source: |-
            from kombo import Kombo


            with Kombo(
                integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
                api_key="<YOUR_BEARER_TOKEN_HERE>",
            ) as k_client:

                res = k_client.hris.get_staffing_entities(page_size=100, include_deleted=False, ignore_unsupported_filters=False)

                while res is not None:
                    # Handle items

                    res = res.next()
        - lang: typescript
          label: GetHrisStaffingEntities
          source: |-
            import { Kombo } from "@kombo-api/sdk";

            const kombo = new Kombo({
              integration_id: "workday:HWUTwvyx2wLoSUHphiWVrp28",
              api_key: "<YOUR_BEARER_TOKEN_HERE>",
            });

            async function run() {
              const result = await kombo.hris.getStaffingEntities({});

              for await (const page of result) {
                console.log(page);
              }
            }

            run();
        - lang: ruby
          label: GetHrisStaffingEntities
          source: >-
            require 'kombo'


            Models = ::Kombo::Models

            s = ::Kombo::Kombo.new(
              integration_id: 'workday:HWUTwvyx2wLoSUHphiWVrp28',
              security: Models::Shared::Security.new(
                api_key: '<YOUR_BEARER_TOKEN_HERE>'
              )
            )

            res = s.hris.get_staffing_entities(page_size: 100, include_deleted:
            false, ignore_unsupported_filters: false)


            unless res.get_hris_staffing_entities_positive_response.nil?
              # handle response
            end
components:
  schemas:
    GetHrisStaffingEntitiesParameterCursor:
      type: string
      description: >-
        An optional cursor string used for pagination. This can be retrieved
        from the `next` property of the previous page response.
    GetHrisStaffingEntitiesParameterPageSize:
      type: integer
      format: int64
      minimum: 1
      maximum: 250
      default: 100
      description: The number of results to return per page. Maximum is 250.
    GetHrisStaffingEntitiesParameterUpdatedAfter:
      description: >-
        Filter the entries based on the modification date in format
        `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record
        itself **OR** its nested data has been updated since this timestamp,
        even if the record's own `changed_at` field remains unchanged.


        If you want to track entry deletion, also set the `include_deleted=true`
        query parameter, because otherwise, deleted entries will be hidden.


        For more details, see [Understanding changed_at vs updated_after
        Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).


        For this endpoint, `updated_after` matches when the returned record
        changed, or when related data changed as described below.


        | Path | Added/Removed | Linked Record |

        | --- | --- | --- |

        | `locations` | ✓ Yes | ✓ Yes |

        | `legal_entities` | ✓ Yes | ✓ Yes |

        | `groups` | ✓ Yes | ✓ Yes |


        _**Added/Removed**: Whether adding or removing entries from this list
        triggers an update (n/a for single records). **Linked Record**: Whether
        changes to the linked record itself trigger an update._
      type: string
      format: date-time
      pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$
      externalDocs:
        url: >-
          https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
    GetHrisStaffingEntitiesParameterIncludeDeleted:
      type: string
      enum:
        - 'true'
        - 'false'
      default: 'false'
      description: >-
        By default, deleted entries are not returned. Use the `include_deleted`
        query param to include deleted entries too.
    GetHrisStaffingEntitiesParameterIgnoreUnsupportedFilters:
      type: string
      enum:
        - 'true'
        - 'false'
      default: 'false'
      description: >-
        When set to `true`, filters targeting fields not supported by this
        integration will be ignored instead of filtering out all results.
    GetHrisStaffingEntitiesParameterIds:
      type: string
      description: >-
        Filter by a comma-separated list of IDs such as
        `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
    GetHrisStaffingEntitiesParameterRemoteIds:
      type: string
      description: Filter by a comma-separated list of remote IDs.
    GetHrisStaffingEntitiesParameterModelTypes:
      type: string
      description: |-
        Filter by a comma-separated list of `JOB`, `POSITION`, `REQUISITION`  

        Leave this blank to get results matching all values.
    GetHrisStaffingEntitiesParameterStatuses:
      type: string
      description: >-
        Filter by a comma-separated list of `OPEN_LIMITED`, `OPEN_UNLIMITED`,
        `PENDING`, `FROZEN`, `FILLED`, `CLOSED`  


        Leave this blank to get results matching all values.
    GetHrisStaffingEntitiesPositiveResponse:
      type: object
      properties:
        status:
          type: string
          const: success
        data:
          type: object
          properties:
            next:
              type:
                - string
                - 'null'
              description: >-
                Cursor string that can be passed to the `cursor` query parameter
                to get the next page. If this is `null`, then there are no more
                pages.
            results:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                    description: >-
                      The globally unique ID of this object generated by Kombo.
                      We recommend using this as a stable primary key for
                      syncing.
                  remote_id:
                    type: string
                    description: >-
                      The raw ID of the object in the remote system. We don't
                      recommend using this as a primary key on your side as it
                      might sometimes be compromised of multiple identifiers if
                      a system doesn't provide a clear primary key.
                  name:
                    type:
                      - string
                      - 'null'
                    description: The name/title of the staffing entity.
                  model_type:
                    type:
                      - string
                      - 'null'
                    enum:
                      - JOB
                      - POSITION
                      - REQUISITION
                    description: >-
                      The remote model type of the record. Possible values are
                      "JOB", "POSITION" or "REQUISITION". We recommend that
                      users of our `create employee` endpoint ask the customer
                      whether they want to hire into positions or requisitions.
                  description:
                    type:
                      - string
                      - 'null'
                    description: >-
                      A text description of the staffing entity — typically
                      covering responsibilities, requirements, and scope.
                      Commonly referred to as the "job description" in HRIS
                      systems. May contain HTML, depending on the source system.
                  status:
                    type:
                      - string
                      - 'null'
                    enum:
                      - OPEN_LIMITED
                      - OPEN_UNLIMITED
                      - PENDING
                      - FROZEN
                      - FILLED
                      - CLOSED
                    examples:
                      - OPEN_UNLIMITED
                    description: |-
                      The status of the staffing entity.
                              OPEN_LIMITED: The staffing entity is open and has a limited number of openings. Refer to the `number_of_openings` field to get the number of openings.
                              OPEN_UNLIMITED: The staffing entity is open and has an unlimited number of openings. Some enterprise systems refer to this as "Evergreen".
                              PENDING: The staffing entity is pending approval or is waiting to be published.
                              FROZEN: The staffing entity is frozen (hiring freeze) and does not accept applications/hires.
                              FILLED: The staffing entity is filled (to its maximum capacity) and not available for new hires.
                              CLOSED: The staffing entity is closed and not available for new hires.
                  employment_types:
                    type:
                      - array
                      - 'null'
                    items:
                      type: object
                      properties:
                        remote_label:
                          type: string
                          description: >-
                            The label of the employment type how it appears in
                            the remote system.
                        unified_type:
                          type:
                            - string
                            - 'null'
                          enum:
                            - FULL_TIME
                            - PART_TIME
                            - CONTRACT
                            - INTERNSHIP
                            - FREELANCE
                            - WORKING_STUDENT
                            - APPRENTICESHIP
                            - TRAINING
                          description: The unified type, how Kombo categorize this label.
                      required:
                        - remote_label
                        - unified_type
                    description: >-
                      The employment types available for/used by the staffing
                      entity. Use the `remote_label` for display in your UI as
                      it is consistent with the language of the remote system.
                      Use the `unified_type` for internal categorization as it
                      is unified across all tools.
                  number_of_openings:
                    type:
                      - number
                      - 'null'
                    format: double
                    minimum: -1.7976931348623157e+308
                    description: >-
                      The number of openings for the staffing entity. Only
                      meaningful for staffing entities with the status
                      "OPEN_LIMITED".
                  parent_id:
                    type:
                      - string
                      - 'null'
                    description: >-
                      The Kombo ID of the staffing entity’s parent. Usually it’s
                      the position/job that was used to create the requisition.
                      The ID can be used to retrieve the parent staffing entity
                      from the `get staffing entity` endpoint.
                  remote_url:
                    type:
                      - string
                      - 'null'
                    format: uri
                    description: >-
                      URL to the staffing entity in the HRIS system. Use this to
                      implement backlinks into the HRIS/Enterprise System.
                  remote_created_at:
                    description: >-
                      The date and time the object was created in the remote
                      system.
                    type:
                      - string
                      - 'null'
                    format: date-time
                    externalDocs:
                      url: >-
                        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
                  remote_updated_at:
                    description: >-
                      A timestamp retrieved from the remote system, describing
                      when the resource was last updated.
                    type:
                      - string
                      - 'null'
                    format: date-time
                    externalDocs:
                      url: >-
                        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
                  changed_at:
                    description: >-
                      The timestamp when this specific record was last modified.
                      This field only updates when properties directly on this
                      record change, NOT when related or nested models change.
                      For filtering that considers nested data changes, use the
                      `updated_after` parameter which will return records when
                      either the record itself OR its related models have been
                      updated.
                    type: string
                    format: date-time
                    externalDocs:
                      url: >-
                        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
                  remote_deleted_at:
                    description: >-
                      The date and time the object was deleted in the remote
                      system. Objects are automatically marked as deleted when
                      Kombo can't retrieve them from the remote system anymore.
                      Kombo will also anonymize entries 14 days after they
                      disappear.
                    type:
                      - string
                      - 'null'
                    format: date-time
                    externalDocs:
                      url: >-
                        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
                  custom_fields:
                    type:
                      - object
                      - 'null'
                    additionalProperties: true
                    description: >-
                      A key-value store of fields not covered by the schema.
                      [Read more](/custom-fields)
                  integration_fields:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: The globally unique ID of this object.
                        key:
                          type: string
                          description: The key of the field in the remote system.
                        type:
                          type: string
                          enum:
                            - DEFAULT
                            - CUSTOM
                          description: >-
                            - `DEFAULT`: static fields in the remote system.

                            - `CUSTOM`: fields that are created/editable by the
                            user.
                        value:
                          type: 'null'
                          description: The field's value.
                        label:
                          type:
                            - string
                            - 'null'
                          description: The label of the field. (not always available)
                      required:
                        - id
                        - key
                        - type
                        - label
                    description: >-
                      An array of selected passthrough integration fields. [Read
                      more](/integration-fields)
                    examples:
                      - - id: 5NVFhMpB9Ah6by44tzNjZLyE
                          key: firstName
                          type: DEFAULT
                          value: Frank
                          label: First Name
                        - id: 8nuajYpoRd5GnxEQaaWKUDYQ
                          key: customTshirtSize
                          type: CUSTOM
                          value: XL
                          label: T-Shirt Size
                  remote_data:
                    type:
                      - object
                      - 'null'
                    additionalProperties: true
                    description: >-
                      Includes the data fetched from the remote system.

                      Please be aware that including this in you scope config
                      might violate other

                      scopes that are set.


                      Remote data always has the endpoint path that we got the
                      data from as the

                      top level key. For example, it could look like: `{
                      "/companies": { ... }}`


                      This is not available on all plans. Reach out to Kombo if
                      you need it.
                  locations:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: >-
                            The globally unique ID of this object generated by
                            Kombo. We recommend using this as a stable primary
                            key for syncing.
                        remote_id:
                          type:
                            - string
                            - 'null'
                          description: >-
                            The raw ID of the object in the remote system. We
                            don't recommend using this as a primary key on your
                            side as it might sometimes be compromised of
                            multiple identifiers if a system doesn't provide a
                            clear primary key.
                        name:
                          type:
                            - string
                            - 'null'
                          description: The work location’s name
                        type:
                          type:
                            - string
                            - 'null'
                          description: The work location’s type. A freeform string.
                      required:
                        - id
                        - remote_id
                        - name
                        - type
                      examples:
                        - id: 22st2Ji8XpncEYEak8mvQgQF
                          remote_id: '1348'
                          name: Kombo HQ
                          type: OFFICE
                    description: >-
                      The physical work locations associated with this staffing
                      entity. A position or requisition can be linked to one or
                      more offices or sites where the role is to be filled.
                  legal_entities:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: >-
                            The globally unique ID of this object generated by
                            Kombo. We recommend using this as a stable primary
                            key for syncing.
                        remote_id:
                          type:
                            - string
                            - 'null'
                          description: >-
                            The raw ID of the object in the remote system. We
                            don't recommend using this as a primary key on your
                            side as it might sometimes be compromised of
                            multiple identifiers if a system doesn't provide a
                            clear primary key.
                        name:
                          type:
                            - string
                            - 'null'
                          description: The legal entity’s name.
                      required:
                        - id
                        - remote_id
                        - name
                      examples:
                        - id: 4B9bKBpX5tnwjiG93TAqF7ci
                          remote_id: '49'
                          name: ACME Inc.
                    description: >-
                      The legal entities (companies or sub-companies) associated
                      with this staffing entity. Indicates which employing
                      entities within the organization the position or
                      requisition belongs to.
                  groups:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: >-
                            The globally unique ID of this object generated by
                            Kombo. We recommend using this as a stable primary
                            key for syncing.
                        remote_id:
                          type: string
                          description: >-
                            The raw ID of the object in the remote system. We
                            don't recommend using this as a primary key on your
                            side as it might sometimes be compromised of
                            multiple identifiers if a system doesn't provide a
                            clear primary key.
                        name:
                          type:
                            - string
                            - 'null'
                          description: The name of the group.
                        type:
                          type:
                            - string
                            - 'null'
                          enum:
                            - DEPARTMENT
                            - TEAM
                            - COST_CENTER
                          description: Type of the group.
                      required:
                        - id
                        - remote_id
                        - name
                        - type
                      examples:
                        - id: 4B9bKBpX5tnwjiG93TAqF7ci
                          remote_id: '49'
                          name: Customer Success
                          type: TEAM
                    description: >-
                      The organizational groups (such as departments, teams, or
                      cost centers) associated with this staffing entity.
                required:
                  - id
                  - remote_id
                  - name
                  - model_type
                  - description
                  - status
                  - number_of_openings
                  - parent_id
                  - remote_url
                  - remote_created_at
                  - remote_updated_at
                  - changed_at
                  - remote_deleted_at
                  - custom_fields
                  - integration_fields
                  - remote_data
                  - locations
                  - legal_entities
                  - groups
          required:
            - next
            - results
          examples:
            - next: >-
                eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=
              results:
                - id: 26vafvWSRmbhNcxJYqjCzuJg
                  remote_id: '32'
                  name: Software Engineer
                  model_type: POSITION
                  description: Description of the position
                  status: OPEN_UNLIMITED
                  employment_types:
                    - remote_label: Vollzeit
                      unified_type: FULL_TIME
                  number_of_openings: null
                  parent_id: KGaJ5XaVPob8mYVfD49W4DGB
                  remote_url: https://example.com/position/32
                  remote_created_at: '2022-08-07T14:01:29.196Z'
                  remote_updated_at: '2022-08-07T14:01:29.196Z'
                  changed_at: '2022-08-07T14:01:29.196Z'
                  remote_deleted_at: null
                  custom_fields: {}
                  integration_fields: []
                  remote_data: null
                  locations:
                    - id: 22st2Ji8XpncEYEak8mvQgQF
                      remote_id: '1348'
                      name: Kombo HQ
                      type: OFFICE
                  legal_entities:
                    - id: 4B9bKBpX5tnwjiG93TAqF7ci
                      remote_id: '49'
                      name: ACME Inc.
                  groups:
                    - id: 4B9bKBpX5tnwjiG93TAqF7ci
                      remote_id: '49'
                      name: Customer Success
                      type: TEAM
      required:
        - status
        - data
  responses:
    ErrorResponseHRIS:
      description: The standard error response with the error codes for the HRIS use case.
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                enum:
                  - error
              error:
                type: object
                properties:
                  code:
                    type:
                      - string
                      - 'null'
                    enum:
                      - PLATFORM.RATE_LIMIT_EXCEEDED
                      - PLATFORM.CONCURRENCY_LIMIT_EXCEEDED
                      - PLATFORM.INTEGRATION_NOT_FOUND
                      - PLATFORM.INPUT_INVALID
                      - PLATFORM.UNKNOWN_ERROR
                      - PLATFORM.IP_NOT_WHITELISTED
                      - PLATFORM.AUTHENTICATION_INVALID
                      - PLATFORM.TASK_TIMED_OUT
                      - INTEGRATION.PERMISSION_MISSING
                      - INTEGRATION.AUTHENTICATION_INVALID
                      - INTEGRATION.QA_FAILED
                      - INTEGRATION.SETUP_SYNC_PENDING
                      - INTEGRATION.SETUP_INCOMPLETE
                      - INTEGRATION.INACTIVE
                      - INTEGRATION.MODEL_NOT_AVAILABLE
                      - INTEGRATION.MODEL_DISABLED
                      - INTEGRATION.ACTION_NOT_AVAILABLE
                      - INTEGRATION.ACTION_DISABLED
                      - REMOTE.SERVICE_UNAVAILABLE
                      - REMOTE.RATE_LIMIT_EXCEEDED
                      - REMOTE.INPUT_INVALID
                      - REMOTE.UNKNOWN_HTTP_ERROR
                      - HRIS.STAFFING_ENTITY_CLOSED
                      - HRIS.EMPLOYEE_ALREADY_EXISTS
                    example: HRIS.EMPLOYEE_ALREADY_EXISTS
                    description: >-
                      Some errors include an error code that can be used to
                      identify their cause. See the [Error Handling
                      Docs](https://docs.kombo.dev/guides/errors) for more
                      information. For your error handling logic please use the
                      error `code` instead of other properties (e.g. message,
                      http status code, ...).
                  title:
                    type:
                      - string
                      - 'null'
                    description: A static, human-readable label.
                  message:
                    type: string
                    description: >-
                      A dynamic, detailed description of what went wrong in this
                      specific instance.
                  log_url:
                    type:
                      - string
                      - 'null'
                    format: uri
                    description: >-
                      The log page in the Kombo UI lists every interaction with
                      full details. If you need assistance, share that link with
                      our support team.
                required:
                  - code
                  - title
                  - message
                  - log_url
                description: Error details with structured code for programmatic handling.
            required:
              - status
              - error
          examples:
            Error Response:
              description: >-
                When building error handling logic, always use the `code` field
                to identify specific error types programmatically. See the
                complete list of error codes in the
                [docs](https://docs.kombo.dev/guides/errors).
              value:
                status: error
                error:
                  code: INTEGRATION.MODEL_NOT_AVAILABLE
                  title: >-
                    This data model isn't supported for the selected
                    integration.
                  message: >-
                    The "employees" model is not yet available for Greenhouse.
                    Please reach out to Kombo if you need this functionality.
                  log_url: https://app.kombo.dev/my-prod/logs?interactionId=123456
            Minimal Error Response:
              description: >-
                The "message" is always required while other fields can also be
                `null`. See the [docs](https://docs.kombo.dev/guides/errors) for
                more information.
              value:
                status: error
                error:
                  code: null
                  title: null
                  message: The message is always in the response.
                  log_url: null
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      description: >-
        Create an API key on the [Secrets](https://app.kombo.dev/secrets) page
        in the Kombo dashboard.

````