---
title: Halopsa
slug: connectors/halopsa
docTags: 
createdAt: 2026-06-09T16:30:20.844Z
---

HaloPSA is a versatile PSA platform that optimizes service delivery for MSPs and IT professionals.

HaloPSA is a comprehensive IT service management platform designed to streamline ticket management and incident tracking. The HaloPSA connector for Swimlane Turbine enables seamless integration with HaloPSA, allowing users to automate the creation, updating, and retrieval of tickets. This integration enhances the efficiency of security operations by automating routine tasks, reducing manual effort, and ensuring timely incident response.

### Limitations

None to date.

### Supported Versions

This connector supports the latest version of the HaloPSA REST API.

## Additional Docs

- [HaloPSA Authentication Link](https://swimlane.halopsa.com/apidoc/authentication/client)
- [HaloPSA API Docs](https://swimlane.halopsa.com/apidoc/resources/tickets)

### Configuration

## Prerequisites

Before you can use the HaloPSA connector for Turbine, you'll need access to the HaloPSA API. This requires the following:

- OAuth 2.0 Password authentication using the following parameters:
  - URL: The endpoint for accessing HaloPSA services.
  - HaloPSA Username: Your username for HaloPSA account access.
  - HaloPSA Password: The password associated with your HaloPSA account.
  - Client ID: The client identifier for OAuth 2.0 authentication.
  - Scopes: Permissions required for accessing specific resources.
- OAuth 2.0 Client Credentials authentication using the following parameters:
  - URL: The endpoint for accessing HaloPSA services.
  - Client ID: The client identifier for OAuth 2.0 authentication.
  - Client Secret: A secret key used in conjunction with the client ID.
  - Scopes: Permissions required for accessing specific resources.

## Authentication Methods

To effectively utilize the HaloPSA connector within Swimlane Turbine, ensure you have the following prerequisites:

- OAuth 2.0 Client Credentials for authentication with these parameters:
  - URL: Endpoint for HaloPSA API access.
  - Client ID: Unique identifier for the application making the request.
  - Client Secret: A secret known only to the application and the authorization server.
  - Scopes: Permissions the application needs to function correctly.
- OAuth 2.0 Password Credentials for authentication with these parameters:
  - URL: Endpoint for HaloPSA API access.
  - HaloPSA Username: Your HaloPSA user account name.
  - HaloPSA Password: Your HaloPSA user account password.
  - Client ID: Unique identifier for the application making the request.
  - Scopes: Permissions the application needs to function correctly.

## Capabilities

This Connector provides the following capabilities:

- Add or Update Ticket
- Add or Update Attachments
- Delete Ticket by ID
- Get Ticket by ID
- Get Tickets

### Add or Update Ticket

Adds or updates one or more tickets. If ID is included then updates, if not included then creates new.

Swimlane record attachments mapped into the ticket `attachments` field are uploaded via HaloPSA's `/api/Attachment` endpoint after the ticket is created or updated. You can also pass HaloPSA-shaped objects with `filename` and Base64 `data`.

HaloPSA's Documentation for this action can be found [here](https://swimlane.halopsa.com/apidoc/resources/tickets).

### Add or Update Attachments

Adds or updates one or more attachments on an existing ticket. Prefer Base64 `data` with `filename` and `ticket_id`, or map a Swimlane record attachment (`file` + `file_name`).

HaloPSA's Documentation for this action can be found [here](https://swimlane.halopsa.com/apidoc/resources/attachment).

### Delete Ticket by ID

Deletes the ticket and related objects with the specified ID.

HaloPSA's Documentation for this action can be found [here](https://swimlane.halopsa.com/apidoc/resources/tickets).

### Get Ticket by ID

Returns a single ticket object.

HaloPSA's Documentation for this action can be found [here](https://swimlane.halopsa.com/apidoc/resources/tickets).

### Get Tickets

Returns an object containing the count of tickets, and an array of ticket objects.

HaloPSA's Documentation for this action can be found [here](https://swimlane.halopsa.com/apidoc/resources/tickets).

## Additional Documentation

- [Halopsa Connector Documentation](https://docs.swimlane.com/connectors/halopsa)
- [Halopsa API Documentation](https://swimlane.halopsa.com/apidoc/)

# Configurations

## HaloPSA Oauth 2.0 Client Credentials

Authenticates using oauth 2.0 client credentials.

### Configuration Parameters

| **Parameter**  | **Description**                    | **Type** | **Required** |
| -------------- | ---------------------------------- | -------- | ------------ |
| url            | A URL to the target host.          | string   | Required     |
| tenant\_id     | The Tenant ID.                     | string   | Optional     |
| client\_id     | The client ID                      | string   | Required     |
| client\_secret | The client secret.                 | string   | Required     |
| scope          | Permission scopes for this action. | array    | Required     |
| verify\_ssl    | Verify SSL certificate             | boolean  | Optional     |
| http\_proxy    | A proxy to route requests through. | string   | Optional     |

## HaloPSA Oauth 2.0 Password Grant

Authenticates using oauth 2.0 client credentials

### Configuration Parameters

| **Parameter**    | **Description**                    | **Type** | **Required** |
| ---------------- | ---------------------------------- | -------- | ------------ |
| url              | A URL to the target host.          | string   | Required     |
| tenant\_id       | The Tenant ID.                     | string   | Optional     |
| oauth2\_username | The username for authentication    | string   | Required     |
| oauth2\_password | The password for authentication    | string   | Required     |
| client\_id       | The client ID                      | string   | Required     |
| scope            | Permission scopes for this action. | array    | Required     |
| verify\_ssl      | Verify SSL certificate             | boolean  | Optional     |
| http\_proxy      | A proxy to route requests through. | string   | Optional     |

# Actions

## Add or Update Attachments

Add or update attachments on a HaloPSA ticket. File content must be Base64 encoded, or pass a Swimlane record attachment for conversion. Include ID to update; omit ID to create.

### Endpoint

- **URL:** `/api/Attachment`
- **Method:** `POST`

### Output

| **Parameter** | **Type** | **Description**                  |
| ------------- | -------- | -------------------------------- |
| `status_code` | number   | HTTP status code of the response |
| `reason`      | string   | Response reason phrase           |

### Output Example

`{"status_code":201,"response_headers":{},"reason":"Created","json_body":{}}`

## Add or Update Ticket

Add or update a ticket in HaloPSA using the provided JSON body, based on the presence of a ticket ID.

### Endpoint

- **URL:** `/api/Tickets`
- **Method:** `POST`

### Output

| **Parameter** | **Type** | **Description**                  |
| ------------- | -------- | -------------------------------- |
| `status_code` | number   | HTTP status code of the response |
| `reason`      | string   | Response reason phrase           |

### Output Example

`{"status_code":201,"response_headers":{"Content-Type":"text/html; charset=utf-8","x-hsci-cache-time":"2024-10-21T12:01:22.328Z","Content-Encoding":"gzip","Expires":"Mon, 21 Oct 2024 12:08:57 GMT","Cache-Control":"max-age=0, no-cache, no-store","Pragma":"no-cache","Date":"Mon, 21 Oct 2024 12:08:57 GMT"},"reason":"OK","json_body":{}}`

## Delete Ticket by ID

Remove a ticket and its related objects from HaloPSA using the provided unique ID.

### Endpoint

- **URL:** `/api/Tickets/{{id}}`
- **Method:** `DELETE`

### Input

| **Argument Name**    | **Type** | **Required** | **Description**                   |
| -------------------- | -------- | ------------ | --------------------------------- |
| `parameters.reason`  | string   | Optional     | The reason for Ticket's deletion. |
| `path_parameters.id` | string   | Required     | The Ticket's ID.                  |

### Input Example

`{"parameters":{"reason":"Duplicate ticket."},"path_parameters":{"id":"463"}}`

### Output

| **Parameter** | **Type** | **Description**                  |
| ------------- | -------- | -------------------------------- |
| `status_code` | number   | HTTP status code of the response |
| `reason`      | string   | Response reason phrase           |

### Output Example

`{"status_code":200,"response_headers":{"Content-Type":"text/html; charset=utf-8","x-hsci-cache-time":"2024-10-21T12:01:22.328Z","Content-Encoding":"gzip","Expires":"Mon, 21 Oct 2024 12:08:57 GMT","Cache-Control":"max-age=0, no-cache, no-store","Pragma":"no-cache","Date":"Mon, 21 Oct 2024 12:08:57 GMT"},"reason":"OK","json_body":{}}`

## Get Ticket by ID

Retrieve a specific ticket from HaloPSA using the unique identifier (ID) provided.

### Endpoint

- **URL:** `/api/Tickets/{{id}}`
- **Method:** `GET`

### Input

| **Argument Name**              | **Type** | **Required** | **Description**                                                                                                                                           |
| ------------------------------ | -------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `parameters.includedetails`    | boolean  | Optional     | Whether to include extra objects in the response.                                                                                                         |
| `parameters.includelastaction` | boolean  | Optional     | Whether to include the last action in the response.                                                                                                       |
| `parameters.ticketidonly`      | boolean  | Optional     | Returns only the ID fields (Ticket ID, SLA ID, Status ID, Client ID and Name and Lastincomingemail date) of the Tickets (Not compatible with Pagination). |
| `path_parameters.id`           | number   | Required     | The Ticket's ID.                                                                                                                                          |

### Input Example

`{"parameters":{"includedetails":false,"includelastaction":false,"ticketidonly":false},"path_parameters":{"id":3}}`

### Output

| **Parameter**       | **Type** | **Description**                  |
| ------------------- | -------- | -------------------------------- |
| `status_code`       | number   | HTTP status code of the response |
| `reason`            | string   | Response reason phrase           |
| `actioncode`        | number   | Output field: actioncode         |
| `id`                | number   | Unique identifier                |
| `dateoccurred`      | string   | Output field: dateoccurred       |
| `status_id`         | number   | Unique identifier                |
| `tickettype_id`     | number   | Unique identifier                |
| `sla_id`            | number   | Unique identifier                |
| `priority_id`       | number   | Unique identifier                |
| `client_id`         | number   | Unique identifier                |
| `timetaken`         | number   | Output field: timetaken          |
| `respondbydate`     | string   | Date value                       |
| `responsedate`      | string   | Date value                       |
| `responsestartdate` | string   | Date value                       |
| `slaresponsestate`  | string   | Output field: slaresponsestate   |
| `fixbydate`         | string   | Date value                       |
| `dateclosed`        | string   | Output field: dateclosed         |
| `excludefromsla`    | boolean  | Output field: excludefromsla     |
| `slaholdtime`       | number   | Time value                       |
| `slaactiondate`     | string   | Date value                       |
| `slapercused`       | number   | Output field: slapercused        |
| `slatimeleft`       | number   | Output field: slatimeleft        |
| `lastactiondate`    | string   | Date value                       |
| `organisation_id`   | number   | Unique identifier                |
| `department_id`     | number   | Unique identifier                |

### Output Example

`{"status_code":200,"response_headers":{"Content-Type":"text/html; charset=utf-8","x-hsci-cache-time":"2024-10-21T12:01:22.328Z","Content-Encoding":"gzip","Expires":"Mon, 21 Oct 2024 12:08:57 GMT","Cache-Control":"max-age=0, no-cache, no-store","Pragma":"no-cache","Date":"Mon, 21 Oct 2024 12:08:57 GMT","Content-Length":"106931","Connection":"keep-alive"},"reason":"OK","json_body":{"actioncode":0,"id":0,"dateoccurred":"2019-08-02T14:35:55.618Z","status_id":0,"tickettype_id":0,"sla_id":0,"priority_...`

## Get Tickets

Retrieve an array of ticket objects from HaloPSA, offering a summary of existing tickets.

### Endpoint

- **URL:** `/api/Tickets`
- **Method:** `GET`

### Input

| **Argument Name**                    | **Type** | **Required** | **Description**                                                                                                                                           |
| ------------------------------------ | -------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `parameters.pageinate`               | boolean  | Optional     | Whether to use Pagination in the response.                                                                                                                |
| `parameters.page_size`               | number   | Optional     | When using Pagination, the size of the page. Maximum size is 100.                                                                                         |
| `parameters.page_no`                 | number   | Optional     | When using Pagination, the page number to return.                                                                                                         |
| `parameters.order`                   | string   | Optional     | The name of the field to order by.                                                                                                                        |
| `parameters.orderdesc`               | boolean  | Optional     | Whether to order ascending or descending.                                                                                                                 |
| `parameters.ticketidonly`            | boolean  | Optional     | Returns only the ID fields (Ticket ID, SLA ID, Status ID, Client ID and Name and Lastincomingemail date) of the Tickets (Not compatible with Pagination). |
| `parameters.view_id`                 | number   | Optional     | The ID of the filter profile to filter by.                                                                                                                |
| `parameters.columns_id`              | number   | Optional     | The column profile ID.                                                                                                                                    |
| `parameters.includecolumns`          | boolean  | Optional     | Include column details in the response.                                                                                                                   |
| `parameters.includeslaactiondate`    | boolean  | Optional     | Include the SLA action date in the response.                                                                                                              |
| `parameters.includeslatimer`         | boolean  | Optional     | Include SLA timer in the response.                                                                                                                        |
| `parameters.includetimetaken`        | boolean  | Optional     | Include time taken in the response.                                                                                                                       |
| `parameters.includesupplier`         | boolean  | Optional     | Include supplier details in the response.                                                                                                                 |
| `parameters.includerelease1`         | boolean  | Optional     | Include release 1 details in the response.                                                                                                                |
| `parameters.includerelease2`         | boolean  | Optional     | Include release 2 details in the response.                                                                                                                |
| `parameters.includerelease3`         | boolean  | Optional     | Include release 3 details in the response.                                                                                                                |
| `parameters.includechildids`         | boolean  | Optional     | Include child ticket IDs in the response.                                                                                                                 |
| `parameters.includenextactivitydate` | boolean  | Optional     | Include nextactivitydate in the response.                                                                                                                 |
| `parameters.includefirstresponse`    | boolean  | Optional     | Include First Response data in the response.                                                                                                              |
| `parameters.list_id`                 | number   | Optional     | Filters by the specified list.                                                                                                                            |
| `parameters.agent_id`                | number   | Optional     | Filters by the specified agent.                                                                                                                           |
| `parameters.status_id`               | number   | Optional     | Filters by the specified status.                                                                                                                          |
| `parameters.requesttype_id`          | number   | Optional     | Filters by the specified request type.                                                                                                                    |
| `parameters.supplier_id`             | number   | Optional     | Filters by the specified supplier.                                                                                                                        |
| `parameters.client_id`               | number   | Optional     | Filters by the specified client.                                                                                                                          |

### Input Example

`{"parameters":{"pageinate":false,"page_size":10,"page_no":10,"order":"","orderdesc":false,"ticketidonly":false,"view_id":10,"columns_id":10,"includecolumns":false,"includeslaactiondate":false,"includeslatimer":false,"includetimetaken":false,"includesupplier":false,"includerelease1":false,"includerelease2":false,"includerelease3":false,"includechildids":false,"includenextactivitydate":false,"includefirstresponse":false,"list_id":10,"agent_id":10,"status_id":10,"requesttype_id":10,"supplier_id":10,"client_id":10,"site":10,"username":"david","user_id":10,"release_id":10,"asset_id":10,"itil_requesttype_id":10,"open_only":false,"closed_only":false,"unlinked_only":false,"contract_id":10,"withattachments":false,"team":[10],"agent":[10],"status":[10],"requesttype":[10],"itil_requesttype":[10],"category_1":[10],"category_2":[10],"category_3":[10],"category_4":[10],"sla":[10],"priority":[10],"products":[10],"flagged":[10],"excludethese":[10],"search":"","searchactions":false,"datesearch":"","startdate":"","enddate":"","search_user_name":"","search_summary":"","search_details":"","search_reportedby":"","search_version":"","search_release1":"","search_release2":"","search_release3":"","search_releasenote":"","search_inventory_number":"","search_oppcontactname":"","search_oppcompanyname":""}}`

### Output

| **Parameter**           | **Type** | **Description**                    |
| ----------------------- | -------- | ---------------------------------- |
| `status_code`           | number   | HTTP status code of the response   |
| `reason`                | string   | Response reason phrase             |
| `page_no`               | number   | Output field: page\_no             |
| `page_size`             | number   | Output field: page\_size           |
| `record_count`          | number   | Count value                        |
| `tickets`               | array    | Output field: tickets              |
| `tickets.id`            | number   | Unique identifier                  |
| `tickets.dateoccurred`  | string   | Output field: tickets.dateoccurred |
| `tickets.summary`       | string   | Output field: tickets.summary      |
| `tickets.status_id`     | number   | Unique identifier                  |
| `tickets.tickettype_id` | number   | Unique identifier                  |
| `tickets.sla_id`        | number   | Unique identifier                  |
| `tickets.priority_id`   | number   | Unique identifier                  |
| `tickets.client_id`     | number   | Unique identifier                  |
| `tickets.client_name`   | string   | Name of the resource               |
| `tickets.site_id`       | number   | Unique identifier                  |
| `tickets.site_name`     | string   | Name of the resource               |
| `tickets.user_name`     | string   | Name of the resource               |
| `tickets.team`          | string   | Output field: tickets.team         |
| `tickets.agent_id`      | number   | Unique identifier                  |
| `tickets.agent_name`    | string   | Name of the resource               |
| `tickets.category_1`    | string   | Output field: tickets.category\_1  |
| `tickets.category_2`    | string   | Output field: tickets.category\_2  |
| `tickets.category_3`    | string   | Output field: tickets.category\_3  |
| `tickets.category_4`    | string   | Output field: tickets.category\_4  |

### Output Example

`{"status_code":200,"response_headers":{"Content-Type":"text/html; charset=utf-8","x-hsci-cache-time":"2024-10-21T12:01:22.328Z","Content-Encoding":"gzip","Expires":"Mon, 21 Oct 2024 12:08:57 GMT","Cache-Control":"max-age=0, no-cache, no-store","Pragma":"no-cache","Date":"Mon, 21 Oct 2024 12:08:57 GMT","Content-Length":"106931","Connection":"keep-alive"},"reason":"OK","json_body":{"page_no":0,"page_size":0,"record_count":0,"tickets":[{}],"columns_id":0,"columns":[{}]}}`

# Response Headers

| **Header**        | **Description**                                            | **Example**                   |
| ----------------- | ---------------------------------------------------------- | ----------------------------- |
| Cache-Control     | Directives for caching mechanisms                          | max-age=0, no-cache, no-store |
| Connection        | HTTP response header: Connection                           | keep-alive                    |
| Content-Encoding  | HTTP response header: Content-Encoding                     | gzip                          |
| Content-Length    | The length of the response body in bytes                   | 106931                        |
| Content-Type      | The media type of the resource                             | text/html; charset=utf-8      |
| Date              | The date and time at which the message was originated      | Mon, 21 Oct 2024 12:08:57 GMT |
| Expires           | The date/time after which the response is considered stale | Mon, 21 Oct 2024 12:08:57 GMT |
| Pragma            | HTTP response header: Pragma                               | no-cache                      |
| x-hsci-cache-time | HTTP response header: x-hsci-cache-time                    | 2024-10-21T12:01:22.328Z      |
