Setup Overview
Setting up the HaloPSA integration involves three main steps:Creating an Agent Resource
Set up a dedicated agent in HaloPSA that Neo Agent will use for time entries, ticket assignments, and action attribution.
Creating an API Application
Configure API credentials with the right scopes for Neo Agent to access your HaloPSA system programmatically.
Connecting to Neo Agent
Configure the connection between your HaloPSA system and Neo Agent using API credentials and integration settings.
Webhook Events
The ticket events Neo Agent subscribes its webhook to, created for you on connect.
Optional Capabilities
Letting Neo Manage Email Rules
Let an agent block repeat spam senders at source with an Ignore Email rule, instead of closing the same spam ticket over and over. Needs one extra OAuth scope.
How Permissions Work
Neo Agent uses two layers of access control: the HaloPSA API application’s OAuth scopes set the maximum API access (configured during setup), while the Neo Agent dashboard controls what Neo actually does — which areas it can read, write, or ignore, and whether actions require technician approval.Projects and Project Tasks
HaloPSA stores projects and project tasks as tickets, so an agent or workflow that processes tickets also runs on them. Its ticket filter decides whether it does. Filter on Ticket Type ID:- Only project work: add a rule Ticket Type ID is in list with your project ticket types, such as Project and Project Task.
- No project work: add one rule Ticket Type ID
!=per project ticket type, all joined with AND.
Mandatory Fields
HaloPSA lets you mark any field mandatory, and it enforces that on API writes as well as in the web interface. When an agent creates something that omits one — an action on a ticket, a new ticket, a contact, a knowledge base article — Halo refuses the write with a message such asCategories is mandatory.
Neo reads that refusal, tells the agent which field Halo asked for, and lets it look up the valid
values for your instance and retry. Two things follow from this:
- Keep the picklist behind a mandatory field populated. If Halo requires a category but the list has no option the agent may select, the write cannot succeed and the agent reports the refusal instead.
Categories is mandatoryon an action is about the ticket. An action that carries an outcome makes Halo re-validate the ticket the outcome applies to, and Category is a ticket field. So this refusal usually means the ticket’s own Category 1 is empty, or holds a value that is not valid for the ticket’s type — a category the ticket kept after its type changed, for example. Halo shows such a ticket with a category ID but no category name.- That one needs a person, or permission. Category is a triage field, and most dispatch agents are told not to change a ticket’s triage fields. When the agent may not set it, the agent reports the blocker in its run summary and the ticket stays where it is until someone sets a valid Category. A note on the ticket is not a dependable record of that blocker: a note that carries an outcome is itself an action, and Halo refuses it for the same reason. Correcting the ticket, or allowing the agent to set categories, unblocks it.
Prerequisites
Before starting the integration setup, ensure you have:- Admin Access: Administrative access to your HaloPSA system (Configuration section)
- API Access: An active HaloPSA subscription with API access enabled
- Named Licence: An available agent licence for the Neo Agent resource
