Reference · Tools
HaloPSA
Manage clients, sites, tickets, and users in HaloPSA IT service management platform
The HaloPSA node manages the core records of an IT service desk — clients, sites, tickets and users — through the HaloPSA API. A typical build is opening a ticket automatically from a monitoring alert, attached to the right client and site, then updating it as the incident progresses.
- Node type
- Action
- Parameters
- 46
- Outputs
- Output, Error
- Credentials
- HaloPSA API
HaloPSA
Manage clients, sites, tickets, and users in HaloPSA
Overview
HaloPSA is a professional services automation (PSA) and IT service management (ITSM) platform. This tool enables CRUD operations on clients, sites, tickets, and users. It uses OAuth2 client credentials for authentication and supports filtering, pagination, and simplified output modes.
Category: Communication
Tool Name: halo_psa
Version: 1
Appearance: Icon: lucide-Wrench | Color: #2ACAEA
Node Type
Action — processes input items and produces output
Input / Output
| Direction | Port(s) |
|---|---|
| Input | Input |
| Output | Output, Error |
Credentials
This tool requires HaloPSA API credentials. See the Credentials Guide for setup instructions.
Resources
| Resource | Value |
|---|---|
| Client | client |
| Site | site |
| Ticket | ticket |
| User | user |
Operations
Every resource offers the same five operations.
| Operation | Value | Description |
|---|---|---|
| Create | create | Create a new record |
| Delete | delete | Delete a record by ID |
| Get | get | Retrieve one record by ID |
| Get Many | getAll | List records, with filtering and pagination |
| Update | update | Update an existing record |
Parameters
Client: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Name (clientName) | string | Yes | — | The name of the client to create. Supports expressions like {{ $json.company }}. |
| Additional Fields | collection | No | {} | Optional client attributes. Add only the ones you need. |
— Account Status (inactive) | options | No | false | Whether the client account is active. |
Options: false (Active), true (Inactive) | ||||
| — Notes | string | No | — | Free-text notes stored on the client. |
— VIP (is_vip) | boolean | No | false | Whether the client is VIP or not. |
| — Website | string | No | — | The client’s website URL. |
Client: Get
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Client ID | string | Yes | — | The ID of the client. Supports expressions. |
| Simplify | boolean | No | true | Whether to return a simplified version of the response instead of the raw data. |
Client: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Simplify | boolean | No | true | Whether to return a simplified version of the response instead of the raw data. |
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 50 | Max number of results to return. (shown when Return All is false) |
| Filters | collection | No | {} | Narrow the client list. Add only the filters you need. |
— Active Status (activeStatus) | options | No | active | Which accounts to include. |
Options: active (Active Only), all, inactive (Inactive Only) | ||||
— Text To Filter By (search) | string | No | — | Filter clients by your search string. |
Client: Update
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Client ID | string | Yes | — | The ID of the client to update. Supports expressions. |
| Update Fields | collection | No | {} | Fields to change on the client. Add only the ones you need. |
— Account Status (inactive) | options | No | false | Whether the client account is active. |
Options: false (Active), true (Inactive) | ||||
| — Name | string | No | — | The client’s name. |
| — Notes | string | No | — | Free-text notes stored on the client. |
— VIP (is_vip) | boolean | No | false | Whether the client is VIP or not. |
| — Website | string | No | — | The client’s website URL. |
Client: Delete
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Client ID | string | Yes | — | The ID of the client. Supports expressions. |
Site: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Name (siteName) | string | Yes | — | The name of the site to create. Supports expressions. |
| Client ID | string | Yes | — | The ID of the client this site belongs to. Find in HaloPSA under Clients. Supports expressions. |
| Additional Fields | collection | No | {} | Optional site attributes. Add only the ones you need. |
— Main Contact (maincontact_name) | string | No | — | Name of the site’s main contact. |
| — Notes | string | No | — | Free-text notes stored on the site. |
— Phone Number (phonenumber) | string | No | — | Telephone number for the site. |
Site: Get
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Site ID | string | Yes | — | The ID of the site. Supports expressions. |
| Simplify | boolean | No | true | Whether to return a simplified version of the response instead of the raw data. |
Site: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Simplify | boolean | No | true | Whether to return a simplified version of the response instead of the raw data. |
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 50 | Max number of results to return. (shown when Return All is false) |
| Filters | collection | No | {} | Narrow the site list. Add only the filters you need. |
— Active Status (activeStatus) | options | No | all | Which sites to include. |
Options: active (Active Only), all, inactive (Inactive Only) | ||||
— Text To Filter By (search) | string | No | — | Filter sites by your search string. |
Site: Update
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Site ID | string | No | — | The ID of the site to update. Supports expressions. |
| Update Fields | collection | No | {} | Fields to change on the site. Add only the ones you need. |
— Client ID (client_id) | string | No | — | The ID of the client this site belongs to. |
— Main Contact (maincontact_name) | string | No | — | Name of the site’s main contact. |
| — Name | string | No | — | Enter site name. |
| — Notes | string | No | — | Free-text notes stored on the site. |
— Phone Number (phonenumber) | string | No | — | Telephone number for the site. |
Site: Delete
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Site ID | string | Yes | — | The ID of the site. Supports expressions. |
Ticket: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Ticket Type ID (ticketType) | string | Yes | — | The ID of the ticket type. Find in HaloPSA under Configuration > Ticket Types. Note: types containing “Request”, “Offboarding”, “Onboarding”, “Other Hardware”, or “Software Change” may fail with 400 errors as they require CAB approval. |
| Summary | string | Yes | — | The summary/title of the ticket. Supports expressions. |
| Details | string | Yes | — | The details/description of the ticket. Supports expressions. |
| Additional Fields | collection | No | {} | Optional ticket attributes. Add only the ones you need. |
— Assigned Agent ID (agent_id) | string | No | — | The ID of the agent to assign. Find in HaloPSA under Configuration > Agents. |
— Start Date (startdate) | string | No | — | The start date for the ticket (ISO 8601 format). |
— Target Date (targetdate) | string | No | — | The target/due date for the ticket (ISO 8601 format). |
Ticket: Get
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Ticket ID | string | Yes | — | The ID of the ticket. Supports expressions. |
| Simplify | boolean | No | true | Whether to return a simplified version of the response instead of the raw data. |
Ticket: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Simplify | boolean | No | true | Whether to return a simplified version of the response instead of the raw data. |
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 50 | Max number of results to return. (shown when Return All is false) |
| Filters | collection | No | {} | Narrow the ticket list. Add only the filters you need. |
— Active Status (activeStatus) | options | No | all | Which tickets to include. |
Options: active (Active Only), all, inactive (Inactive Only) | ||||
— Text To Filter By (search) | string | No | — | Filter tickets by your search string. |
Ticket: Update
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Ticket ID | string | No | — | The ID of the ticket to update. Supports expressions. |
| Update Fields | collection | No | {} | Fields to change on the ticket. Add only the ones you need. |
— Assigned Agent ID (agent_id) | string | No | — | The ID of the agent to assign. Find in HaloPSA under Configuration > Agents. |
| — Details | string | No | — | The details/description of the ticket. |
— Start Date (startdate) | string | No | — | The start date for the ticket (ISO 8601 format). |
| — Summary | string | No | — | The summary/title of the ticket. |
— Target Date (targetdate) | string | No | — | The target/due date for the ticket (ISO 8601 format). |
Ticket: Delete
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Ticket ID | string | Yes | — | The ID of the ticket. Supports expressions. |
User: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Name (userName) | string | Yes | — | The name of the user to create. Supports expressions. |
| Site ID | string | Yes | — | The ID of the site the user belongs to. Find in HaloPSA under Clients > Sites. Supports expressions. |
| Additional Fields | collection | No | {} | Optional user attributes. Add only the ones you need. |
— Email (emailaddress) | string | No | — | The user’s email address. |
| — Notes | string | No | — | Free-text notes stored on the user. |
| — Password | string | No | — | Must be at least 8 characters long and contain at least one letter, one number or symbol, one upper case and one lower case character. |
| — Surname | string | No | — | The user’s surname. |
— User Is Inactive (inactive) | boolean | No | false | Whether the user account is inactive. |
User: Get
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| User ID | string | Yes | — | The ID of the user. Supports expressions. |
| Simplify | boolean | No | true | Whether to return a simplified version of the response instead of the raw data. |
User: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Simplify | boolean | No | true | Whether to return a simplified version of the response instead of the raw data. |
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 50 | Max number of results to return. (shown when Return All is false) |
| Filters | collection | No | {} | Narrow the user list. Add only the filters you need. |
— Active Status (activeStatus) | options | No | all | Which users to include. |
Options: active (Active Only), all, inactive (Inactive Only) | ||||
— Text To Filter By (search) | string | No | — | Filter users by your search string. |
User: Update
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| User ID | string | No | — | The ID of the user to update. Supports expressions. |
| Update Fields | collection | No | {} | Fields to change on the user. Add only the ones you need. |
— Email (emailaddress) | string | No | — | The user’s email address. |
| — Name | string | No | — | Enter user name. |
| — Notes | string | No | — | Free-text notes stored on the user. |
| — Password | string | No | — | Must be at least 8 characters long and contain at least one letter, one number or symbol, one upper case and one lower case character. |
— Site ID (site_id) | string | No | — | The ID of the site to assign the user to. Find in HaloPSA under Clients > Sites. |
| — Surname | string | No | — | The user’s surname. |
— User Is Inactive (inactive) | boolean | No | false | Whether the user account is inactive. |
User: Delete
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| User ID | string | Yes | — | The ID of the user. Supports expressions. |
All Operations
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Max Concurrency | number | No | 10 | Maximum number of items to process concurrently. |
Output Data
The HaloPSA record is merged into the incoming item JSON at the top level, so the fields you sent in pass through and binary data is forwarded.
| Operation | Output items |
|---|---|
create, update | One item — the record HaloPSA returns. Simplify does not apply to writes, so the full record comes back. |
get | One item — the record, trimmed by Simplify when it is on. |
getAll | Fans out — one output item per record. Return All pages through the whole result set; otherwise up to Limit records. |
delete | One item — HaloPSA’s delete response. |
Simplify keeps only the fields that matter for most workflows, and differs per resource:
| Resource | Fields kept when Simplify is on |
|---|---|
| Client | id, name, notes, is_vip, website |
| Site | id, name, client_id, maincontact_name, notes, phonenumber |
| Ticket | id, summary, details, agent_id, startdate, targetdate |
| User | id, name, site_id, emailaddress, notes, surname, inactive |
Turn Simplify off when a downstream node needs a field that is not in that list.
Usage Examples
- Create a new client in HaloPSA
- Get all open tickets from HaloPSA
- Update a HaloPSA user email address
- Delete a site in HaloPSA
- List all HaloPSA clients filtered by search term
Example Configuration
Get one client, simplified:
{
"type": "halo_psa",
"parameters": {
"resource": "client",
"operation": "get",
"clientId": "123",
"simplify": true
}
}
List active clients matching a search string:
{
"type": "halo_psa",
"parameters": {
"resource": "client",
"operation": "getAll",
"returnAll": false,
"limit": 50,
"simplify": true,
"filters": {
"activeStatus": "active",
"search": "Acme"
}
}
}
Update a client:
{
"type": "halo_psa",
"parameters": {
"resource": "client",
"operation": "update",
"clientId": "123",
"updateFields": {
"name": "Acme Corporation Ltd",
"notes": "Updated company name after incorporation",
"website": "https://acmecorp.com",
"is_vip": true
}
}
}
Create a site under a client returned by an upstream node:
{
"type": "halo_psa",
"parameters": {
"resource": "site",
"operation": "create",
"siteName": "Acme Headquarters",
"clientId": "{{ $json.id }}",
"additionalFields": {
"maincontact_name": "John Smith",
"phonenumber": "+1-555-0123",
"notes": "Main office location"
}
}
}
Raise a ticket:
{
"type": "halo_psa",
"parameters": {
"resource": "ticket",
"operation": "create",
"ticketType": "1",
"summary": "Network connectivity issues",
"details": "Users are experiencing intermittent network connectivity issues in the main office.",
"additionalFields": {
"agent_id": "5",
"startdate": "2024-01-15T09:00:00Z",
"targetdate": "2024-01-15T17:00:00Z"
}
}
}
Create a user on a site:
{
"type": "halo_psa",
"parameters": {
"resource": "user",
"operation": "create",
"userName": "Jane Doe",
"siteId": "789",
"additionalFields": {
"emailaddress": "jane.doe@acmecorp.com",
"surname": "Doe",
"password": "TempPassword123!",
"notes": "New employee - IT Department",
"inactive": false
}
}
}
List active users without trimming the response:
{
"type": "halo_psa",
"parameters": {
"resource": "user",
"operation": "getAll",
"returnAll": false,
"limit": 100,
"simplify": false,
"filters": {
"activeStatus": "active"
}
}
}
Error Handling
| Mode | Behavior |
|---|---|
| stop | Halts workflow on first error |
| continue | Skips failed items, passes successful ones through |
| errorPort | Routes failed items to Error output port |
Tips
Manage clients, sites, tickets, and users in HaloPSA for IT service management and helpdesk workflows.
Notes
- Build the hierarchy in order. A site needs a Client ID and a user needs a Site ID, so create the client first, feed its
idinto the site, then feed the site’sidinto the user. - The Name field has a different internal name per resource. In a JSON config it is
clientName,siteNameoruserNamedepending on the resource — but plainnameinside Update Fields. - Some ticket types need approval. Types whose names contain “Request”, “Offboarding”, “Onboarding”, “Other Hardware” or “Software Change” can be rejected with a 400 because HaloPSA requires CAB approval for them.
- Simplify is on by default. If a downstream expression reads a field that is missing, turn Simplify off before assuming the record is incomplete.
Frequently asked questions
In what order do I have to create records?
Follow the hierarchy: a site needs a Client ID and a user needs a Site ID. Create the client first, feed its `id` into the site, then feed the site's `id` into the user. Trying to create a user before its site exists fails.
Why does the Name field have a different key depending on what I create?
Its internal name changes per resource — `clientName`, `siteName` or `userName` in a JSON configuration — while inside Update Fields it is plain `name`. Copy the key shown for the resource you selected rather than assuming.
Why is my ticket sitting unactioned?
Some ticket types require approval. Types whose names contain Request, Onboarding or Offboarding route into an approval flow, so the ticket exists but waits for a decision before progressing.
Which credential does it use?
A HaloPSA API credential. The same credential covers clients, sites, tickets and users, so one setup serves every operation on the node.
Build with the HaloPSA node
Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need HaloPSA API credentials first.
Open BusyBotLast updated . Spotted something wrong? Tell us.