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

# List HR Integrations

> Retrieve a paginated list of all HR integrations configured for your company.

Returns all HR and API integrations connected to your company account, including connection health, last sync details, and whether a manual sync can be triggered. Use the `types` filter to separate HR system integrations from direct API push integrations.

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url "https://v1-api.ticket-plus.app/hr-integrations?page=1&perPage=10" \
    --header "Authorization: Basic <base64(clientId:clientSecret)>"
  ```

  ```python Python theme={null}
  import requests, base64

  credentials = base64.b64encode(b"<clientId>:<clientSecret>").decode()

  res = requests.get(
      "https://v1-api.ticket-plus.app/hr-integrations",
      params={"page": 1, "perPage": 10},
      headers={"Authorization": f"Basic {credentials}"},
  )
  print(res.json())
  ```

  ```javascript Node.js theme={null}
  const credentials = Buffer.from("<clientId>:<clientSecret>").toString("base64");

  const res = await fetch(
    "https://v1-api.ticket-plus.app/hr-integrations?page=1&perPage=10",
    { headers: { Authorization: `Basic ${credentials}` } },
  );
  console.log(await res.json());
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "data": {
      "data": [
        {
          "id": 7,
          "name": "BambooHR",
          "type": "hr-integration",
          "status": "active",
          "initialConnectionStatus": "completed",
          "lastSyncId": "sync_abc123",
          "lastSynced": "2024-05-10T08:00:00Z",
          "lastSyncStatus": "succeeded",
          "canTriggerSync": true,
          "resource": "hr-integration",
          "_links": {
            "self": { "href": "https://v1-api.ticket-plus.app/hr-integrations/7", "type": "application/json" }
          }
        }
      ],
      "page": 1,
      "perPage": 10,
      "totalPages": 1,
      "total": 1
    }
  }
  ```
</ResponseExample>

## Query Parameters

<ParamField query="page" type="integer" default="1">
  Page number to return. Starts at `1`.
</ParamField>

<ParamField query="perPage" type="integer" default="10">
  Number of results per page. Maximum is `100`.
</ParamField>

<ParamField query="sortOrder" type="string" default="desc">
  Sort direction. Allowed values: `asc`, `desc`.
</ParamField>

<ParamField query="sortField" type="string" default="id">
  Field to sort results by. Allowed values: `id`, `createdAt`, `updatedAt`.
</ParamField>

<ParamField query="ids" type="integer[]">
  Filter to specific integration IDs.
</ParamField>

<ParamField query="types" type="string[]">
  Filter by integration type. Allowed values: `hr-integration`,
  `api-integration`.
</ParamField>

## Response

<ResponseField name="data" type="object" required>
  <Expandable title="properties">
    <ResponseField name="data" type="object[]" required>
      Array of HR integration objects.

      <Expandable title="hr integration object">
        <ResponseField name="id" type="integer" required>
          Unique integration identifier.
        </ResponseField>

        <ResponseField name="name" type="string" required>
          Display name of the integration, e.g. `"BambooHR"`.
        </ResponseField>

        <ResponseField name="type" type="string" required>
          Integration type. Allowed values: - `hr-integration` — syncs from a
          third-party HR system. - `api-integration` — you push employee data
          directly via the sync API.
        </ResponseField>

        <ResponseField name="status" type="string" required>
          Connection health. Allowed values: - `active` — connected and working
          normally. - `invalid` — credentials have expired or been revoked;
          re-authentication required. - `inactive` — integration has been
          disabled.
        </ResponseField>

        <ResponseField name="initialConnectionStatus" type="string" required>
          Onboarding progress. Allowed values: - `incomplete` — setup has not
          been completed. - `final-sync-pending` — setup done; awaiting first
          full sync. - `completed` — fully set up and initial sync done.
        </ResponseField>

        <ResponseField name="lastSyncId" type="string | null">
          ID of the most recent sync operation. `null` if no sync has run yet.
        </ResponseField>

        <ResponseField name="lastSynced" type="string | null">
          ISO 8601 timestamp of the last completed sync. `null` if no sync has
          run.
        </ResponseField>

        <ResponseField name="lastSyncStatus" type="string | null">
          Outcome of the last sync. `null` if no sync has run. Allowed values: -
          `succeeded` — all records synced successfully. - `partially-failed` —
          some records failed; job still completed. - `failed` — entire sync job
          failed. - `authentication-failed` — sync failed due to invalid
          credentials.
        </ResponseField>

        <ResponseField name="canTriggerSync" type="boolean" required>
          `true` if a manual sync can be triggered via [Trigger HR
          Sync](/v1/endpoint/hr-integrations-sync). Only `true` when `status` is
          `active` and setup is complete.
        </ResponseField>

        <ResponseField name="resource" type="string" required>
          Resource type label. Always `"hr-integration"`.
        </ResponseField>

        <ResponseField name="_links" type="object" required>
          HAL hypermedia links.

          <Expandable title="properties">
            <ResponseField name="self" type="object" required>
              Link to this integration resource.

              <Expandable title="properties">
                <ResponseField name="href" type="string" required>
                  URL of this integration.
                </ResponseField>

                <ResponseField name="type" type="string" required>
                  Media type.
                </ResponseField>
              </Expandable>
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="page" type="integer" required>
      Current page number.
    </ResponseField>

    <ResponseField name="perPage" type="integer" required>
      Number of results per page.
    </ResponseField>

    <ResponseField name="totalPages" type="integer" required>
      Total number of pages available.
    </ResponseField>

    <ResponseField name="total" type="integer" required>
      Total number of integrations matching your filters.
    </ResponseField>
  </Expandable>
</ResponseField>


## OpenAPI

````yaml GET /hr-integrations
openapi: 3.0.3
info:
  title: JobTicket API
  description: >-
    The JobTicket B2B API lets you read employee data, manage HR integrations,
    and access employee documents programmatically. All endpoints use HTTP Basic
    Auth — pass your API key credentials from the Developer Portal as the
    username and password.
  version: 1.0.0
servers:
  - url: https://v1-api-staging.ticket-plus.app
    description: Staging server
  - url: https://v1-api.ticket-plus.app
    description: Production Server
security:
  - basicAuth: []
externalDocs:
  url: https://jobticket-docs.ticket-plus.app
  description: View our documentation to get more info
paths:
  /hr-integrations:
    get:
      tags:
        - HR Integrations
      summary: Paginate HR Integrations
      description: >-
        Returns a paginated list of all HR and API integrations connected to
        your company. Includes status, last sync details, and whether a manual
        sync can be triggered. Requires the `view-hr-integrations` permission.
      parameters:
        - schema:
            type: integer
            minimum: 0
            default: 1
            nullable: true
          in: query
          name: page
          required: false
          description: Page number to return. Starts at 1.
        - schema:
            type: integer
            minimum: 0
            maximum: 100
            default: 10
            nullable: true
          in: query
          name: perPage
          required: false
          description: Number of results per page. Maximum is 100.
        - schema:
            type: string
            enum:
              - asc
              - desc
            default: desc
            nullable: true
          in: query
          name: sortOrder
          required: false
          description: Sort direction — `asc` for ascending, `desc` for descending.
        - schema:
            type: string
            enum:
              - id
              - createdAt
              - updatedAt
            default: id
            nullable: true
          in: query
          name: sortField
          required: false
          description: Field to sort results by.
        - schema:
            type: array
            items:
              type: integer
              minimum: 0
            nullable: true
          in: query
          name: ids
          required: false
          description: Filter to specific integration IDs.
        - schema:
            type: array
            items:
              type: string
              enum:
                - hr-integration
                - api-integration
            nullable: true
          in: query
          name: types
          required: false
          description: >-
            Filter by integration type: `hr-integration` (third-party HR system)
            or `api-integration` (direct API push).
      responses:
        '200':
          description: A paginated list of HR integrations.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      data:
                        type: array
                        description: Array of HR integration objects.
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                              description: Unique integration identifier.
                            name:
                              type: string
                              description: >-
                                Display name of the integration, e.g.
                                `BambooHR`.
                            type:
                              type: string
                              enum:
                                - hr-integration
                                - api-integration
                              description: >-
                                `hr-integration` for third-party HR systems;
                                `api-integration` for direct API push
                                integrations.
                            status:
                              type: string
                              enum:
                                - active
                                - invalid
                                - inactive
                              description: >-
                                Connection health: `active` (working), `invalid`
                                (credentials expired or revoked), `inactive`
                                (disabled).
                            initialConnectionStatus:
                              type: string
                              enum:
                                - incomplete
                                - final-sync-pending
                                - completed
                              description: >-
                                Onboarding progress: `incomplete` (setup not
                                finished), `final-sync-pending` (awaiting first
                                full sync), `completed` (fully set up).
                            lastSyncId:
                              type: string
                              nullable: true
                              description: ID of the most recent sync operation.
                            lastSynced:
                              type: string
                              nullable: true
                              description: ISO 8601 timestamp of the last completed sync.
                            lastSyncStatus:
                              type: string
                              enum:
                                - succeeded
                                - failed
                                - partially-failed
                                - authentication-failed
                              nullable: true
                              description: >-
                                Outcome of the last sync: `succeeded`, `failed`,
                                `partially-failed`, or `authentication-failed`.
                            canTriggerSync:
                              type: boolean
                              description: >-
                                Whether a manual sync can be triggered for this
                                integration via `POST
                                /hr-integrations/{id}/sync`.
                            resource:
                              type: string
                              description: Resource type label.
                            _links:
                              type: object
                              description: HAL hypermedia links.
                              properties:
                                self:
                                  type: object
                                  description: Link to this integration.
                                  properties:
                                    href:
                                      type: string
                                    type:
                                      type: string
                                  required:
                                    - href
                                    - type
                              required:
                                - self
                          required:
                            - id
                            - name
                            - type
                            - status
                            - initialConnectionStatus
                            - canTriggerSync
                            - resource
                            - _links
                      page:
                        type: integer
                        description: Current page number.
                      perPage:
                        type: integer
                        description: Number of results per page.
                      totalPages:
                        type: integer
                        description: Total number of pages.
                      total:
                        type: integer
                        description: Total number of matching integrations.
                    required:
                      - data
                      - page
                      - perPage
                      - totalPages
                      - total
                required:
                  - data
      security:
        - basicAuth: []
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        HTTP Basic Auth using your API key credentials. Use the username and
        password issued from the Developer Portal. Encode them as
        `Base64(username:password)` and pass in the `Authorization: Basic
        <token>` header.

````