Skip to content

HaloPSA

  • A HaloPSA API application that uses Client Credentials. The connection form’s help says to create it in HaloPSA under Configuration > Integrations > HaloPSA API. You need its client ID and client secret.
  • Your HaloPSA address, for example https://yourcompany.halopsa.com. The tenant and authentication address are only needed when the defaults don’t fit, such as on a self-hosted instance.
  • The application needs access to the records listed in What ZenTop Triage reads and writes.
  • One HaloPSA instance can send intake to one ZenTop Triage workspace.

Open Setup → Configuration → Integrations, then select HaloPSA under PSA. The general steps are in Integrations.

Field What to enter
Client ID The identifier for the connection.
Client Secret The corresponding secret.
Tenant Optional. Leave blank to use the default described beside the field.
Resource URL Your HaloPSA instance address.
Auth URL Optional. Leave blank to use the default described beside the field.

Test Connection checks that the application can sign in to HaloPSA. It doesn’t check what the application is allowed to read or change.

Automatic triage is turned on per team in Teams & Routing. Saving a team with intake on registers a HaloPSA webhook and a new-ticket notification. HaloPSA then notifies ZenTop Triage when a new ticket is logged. Tickets that move into an intake team later are picked up by a check every 5 minutes.

To limit intake to certain ticket types, choose Intake ticket types in the same step. Then, in HaloPSA, set each selected type’s default team to this team so new tickets land there.

ZenTop Triage reads:

  • tickets, their actions (including private notes), and time taken
  • customers (of your selected customer types), users, and each customer’s primary and secondary technicians
  • agents, their workdays, and qualifications
  • teams, ticket types, statuses, the Category 1 tree, and priorities
  • assets, contracts, holidays, approved leave, and appointments

ZenTop Triage writes:

  • new tickets, from Triage and from alert sources
  • ticket fields: team, status, ticket type, category, and agent, plus the summary when summary rewriting is on
  • impact, urgency, and priority
  • private notes, hidden from the end user
  • appointments for assignments and escalations
  • assets and the contract on a ticket, when those settings are on
  • the webhook and notification used for intake

ZenTop Triage doesn’t delete tickets or actions.

In ZenTop Triage In HaloPSA
Service scope Team (Teams & Routing)
Classification Ticket type, category, and category detail
Client company types Customer types (default: every type, plus No type)
Client team The customer’s primary and secondary technicians
Holidays A calendar’s holiday list
Agreement attachment Contracts
PSA Members Agents

With HaloPSA, bundle and merge, search inside the PSA, and documentation PSA-link matching aren’t available. Priority comes from ZenTop Triage’s own table, because HaloPSA’s SLA rules don’t run when tickets are changed through the API. Private agent notes don’t count as touches for escalation thresholds. See Compare PSAs.

Message or symptom What to check
“Invalid credentials — check your Client ID, Client Secret, and Tenant” Check the application’s client ID and secret, and the Tenant if you set one.
“Halo auth endpoint returned status …”, or the connection timed out Check Resource URL and Auth URL.
“Couldn’t load ticket types from HaloPSA.” Shown in the intake step. Test the connection, then try again.
A notice that HaloPSA category filtering is on ZenTop Triage shows the global Category 1 tree, because HaloPSA may not expose the allowed category list for that team or type.
“Failed to refresh holidays from HaloPSA.” Recurring HaloPSA holidays aren’t supported. List their dates individually in HaloPSA, or use manual holidays.
“… saved, but intake callback registration failed” ZenTop Triage couldn’t register the webhook, so intake (including the 5-minute check) is off for that team. Save the team again.