Skip to main content

HaloPSA Integration

Connect Palisade to HaloPSA to automatically import domains, create tickets, and synchronize billing.

Read PSA Integrations Overview first if you have not. It covers the two things that most often stop tickets reaching a PSA -- the group mapping every domain needs, and the four-hour delay before a new task is pushed.

Step 1: Create an API-Only Agent in HaloPSA

  1. In HaloPSA, navigate to Configuration > Agents.
  2. Click New to create a new agent.
  3. Check the API Agent checkbox to designate this as an API-only agent.
  4. Assign the agent to the appropriate team and department.
  5. Save the agent.

Step 2: Grant Permissions

Configure the following permissions for the API agent:

Module Permissions:

  • Tickets: Read and Modify
  • Customers: Read Only
  • Users: Read Only (Palisade derives domains from each client's contacts, so without this the domain import returns nothing)
  • Projects: Read and Modify (see the note below)

Ticket Permissions:

  • Can add new tickets
  • Can view unassigned tickets
  • Can view others' tickets
  • Can edit others' tickets (without this, status updates fail with "You do not have permission to update this Ticket")
info

Palisade creates two records in your HaloPSA during setup. When the connection is configured, Palisade creates a project called Palisade DMARC and an Import Domains task inside it, and reuses them on later connections rather than creating duplicates. This is why the API agent needs Projects read and modify access. Nothing else is written outside the tickets Palisade raises.

Step 3: Create an API Application

  1. Navigate to Configuration > Integrations > HaloPSA API.
  2. Create a new API application.
  3. Note the following details:
    • Server Host -- Your HaloPSA server hostname (see warning below)
    • Client ID
    • Client Secret
  4. Set the authentication method to Client ID and Secret.
  5. Set the agent to log in as to the API agent you created in Step 1.
  6. Configure the application permissions:
    • Read/Edit Tickets
    • Read Customers
    • Read Users/Contacts
warning

Use your base HaloPSA domain as the Server Host. Do not include https:// or /api in the hostname. Do not use custom domains -- use the original HaloPSA-provided domain.

tip

Copy your Client ID and Client Secret immediately after creation. The Client Secret may not be accessible again later.

Step 4: Configure in Palisade

  1. In Palisade, navigate to the Integrations page.
  2. Select HaloPSA as your PSA.
  3. Enter the following credentials:
    • Server Host -- Your HaloPSA server hostname (without https:// or /api)
    • Client ID -- From the API application
    • Client Secret -- From the API application
  4. Click Connect to establish the connection.
  5. Once connected, configure the integration:
    • Configure ticket type -- Select the ticket type Palisade should use when creating tickets. Set this before anything else; Palisade needs it to create the Palisade DMARC project.
    • Configure statuses -- Map all six Palisade ticket statuses to your HaloPSA status workflow.
    • Configure priorities -- Map all four Palisade priority levels to your HaloPSA priorities.
    • Choose which tasks create tickets -- Select the kinds of task that open a HaloPSA ticket. Every kind is selected to begin with. See Choosing Which Tickets Palisade Opens.
    • Domain Import -- whether Palisade derives domains from contact email addresses.
    • Map PSA customers -- see below.

Map PSA Customers

Palisade maps groups to HaloPSA customers. A group is Palisade's own grouping of domains, and it is what carries the customer link. There are two ways to get a mapped group:

Import customers from HaloPSA. Palisade creates one group per customer, already mapped, and -- if Domain Import is on -- pulls in the domains it finds on each customer's users/contacts.

Map groups you already have. Groups you created yourself start with no customer mapped, and there is no way to set the mapping while creating a group. Pick the HaloPSA customer for each group and click Save Changes.

warning

A group with no HaloPSA customer mapped raises no tickets at all, and neither does a domain that is in no group. If you were using Palisade before you connected HaloPSA, every group you made yourself is unmapped until you map it here.

When you map a group that already has open tasks, Palisade asks whether to create tickets for the tasks raised while it was unmapped. Choose Sync Tickets to push them.

Verification Checklist

After completing the setup, verify the integration is working correctly:

  • Connection status shows as Connected on the Integrations page, with no permission warning
  • Every group has a HaloPSA customer mapped, and every domain is in a group
  • All six statuses and all four priorities are mapped
  • Domain import pulls the expected client domains
  • A ticket appears in HaloPSA for a task older than four hours
note

Sync runs one way. Palisade creates tickets and keeps their status up to date, but closing a ticket in HaloPSA does not resolve the task in Palisade. See Sync Runs One Way.

Troubleshooting

No tickets are appearing

  1. Has it been four hours? See Tickets Wait Four Hours.
  2. Is every group mapped to a customer? Groups you created yourself are not mapped automatically. The blue notice at the top of the integration page counts the tasks skipped for that reason, and View Logs names the group behind each one.
  3. Is every domain in a group?
  4. Is the integration Active?
  5. Are all six statuses and all four priorities mapped?
  6. Is the task type still selected?

"You do not have permission to update this Ticket"

The API agent can create tickets but not edit them. Grant the agent can edit others' tickets in its ticket permissions, and confirm the API application itself has Tickets read and modify.

Domains are not importing

  • Domain Import may be turned off in the integration's settings.
  • The API application, or the agent it logs in as, may not be able to read Users/Contacts. Click Test Connection -- Palisade warns about this specifically. Granting only Clients and Tickets is a common misconfiguration: clients import fine and domain import silently produces nothing.

Anything else

Check the Logs tab on the integration page. It records every push, update and sync with the error message for anything that failed. A task that raised no ticket because its group is unmapped or its domain has no group is listed as Skipped rather than as an error, and names the group and the domain.