> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mspilot.io/llms.txt
> Use this file to discover all available pages before exploring further.

# HaloPSA

Connect HaloPSA with a **Client ID and Secret** API application that logs in as an API-only agent. MSPilot uses it to import companies as clients, then keep contacts in sync.

You need a HaloPSA administrator who can create agents and API applications.

## Create an API-only agent

Create this agent first. The API application logs in as this identity, and Halo only returns the companies this agent is allowed to see.

1. Go to **Configuration → Teams & Agents → Agents** and click **New**.
2. Set **Username** to `MSPilot Agent`.
3. Leave **Account Active** checked.
4. Select **Is an API-only Agent**. This agent cannot sign in to Halo or be assigned tickets, and it does not use a license.
5. Set **Default Team**. This list is unique to your Halo site. If **No Default Team** appears, choose that. Otherwise pick your main service desk team. Halo requires a value; you cannot skip it.
6. Set **Work Hours**. If **Default Working Hours** or **24 Hours** appears, use that. Otherwise pick any standard hours calendar your site already uses. API-only agents are not scheduled against tickets; this field only satisfies Halo's required form.
7. Click **Save**.
   <Frame>
     <img src="https://mintcdn.com/mspilot/VEwhVYcTXiuzbYZy/images/psa/halopsa/create-agent.png?fit=max&auto=format&n=VEwhVYcTXiuzbYZy&q=85&s=360ed88a7d68cdc038441a6a73b46a55" alt="Create Agent" width="2602" height="1478" data-path="images/psa/halopsa/create-agent.png" />
   </Frame>
8. Open the agent again, go to the **Permissions** tab. In the **Feature Access** section, set:
   * **Clients Access Level** to **Read Only**
   * **Users Access Level** to **Read Only**
   <Frame>
     <img src="https://mintcdn.com/mspilot/VEwhVYcTXiuzbYZy/images/psa/halopsa/agent-permissions.png?fit=max&auto=format&n=VEwhVYcTXiuzbYZy&q=85&s=c503e5d900a1ccdabeca79a911885fb6" alt="Agent Permissions" width="2604" height="1282" data-path="images/psa/halopsa/agent-permissions.png" />
   </Frame>
9. Then go to **Client Restrictions** tab, and set:
   * **Allow use of all Clients** to **Yes**
   <Frame>
     <img src="https://mintcdn.com/mspilot/VEwhVYcTXiuzbYZy/images/psa/halopsa/agent-restrictions.png?fit=max&auto=format&n=VEwhVYcTXiuzbYZy&q=85&s=669a5c730ffceafc74fd2946cdf4a5d7" alt="Agent Restrictions" width="2602" height="1494" data-path="images/psa/halopsa/agent-restrictions.png" />
   </Frame>
10. Click **Save**.

Application permissions cannot go beyond this agent. If Clients access stays off, connecting fails with a client-read error even when the Client ID and Secret are correct.

Don't use a working technician as this agent. If that person leaves or their teams change, the connection breaks or you only sync a subset of companies.

## Create an API application

1. Go to **Configuration → Integrations → HaloPSA API → View Applications**.
2. Click **New**.
3. Set **Application Name** to `MSPilot`. Leave **Active** checked.
4. Set **Authentication Method** to **Client ID and Secret (Services)**.
   <Frame>
     <img src="https://mintcdn.com/mspilot/VEwhVYcTXiuzbYZy/images/psa/halopsa/app-setup-1.png?fit=max&auto=format&n=VEwhVYcTXiuzbYZy&q=85&s=a034400c4c40d63fce09489af510921f" alt="App Setup 1" width="2600" height="1612" data-path="images/psa/halopsa/app-setup-1.png" />
   </Frame>
5. Set **Login Type** to **Agent**. Don't choose **Client** or **Supplier**.
6. Set **Agent to log in as** to **MSPilot Agent**.
   <Frame>
     <img src="https://mintcdn.com/mspilot/VEwhVYcTXiuzbYZy/images/psa/halopsa/app-setup-2.png?fit=max&auto=format&n=VEwhVYcTXiuzbYZy&q=85&s=0a1c8fc2e7ef21dc90077bd4000912fa" alt="App Setup 2" width="2604" height="1630" data-path="images/psa/halopsa/app-setup-2.png" />
   </Frame>
7. Copy **Client ID** and **Client Secret** to a password manager. The secret is shown once.
8. Open **Permissions** and enable **all:standard** and **all:teams**. Leave **all**, **admin**, and **admin:webhooks** off. **all:standard** is everything the login agent can do, except admin. **all:teams** lets MSPilot read companies across every team.
9. Click **Save**.

## Connect HaloPSA

1. In MSPilot, open **Integrations** and choose **HaloPSA**.
2. Enter **Halo URL** as the address you sign in with, such as `https://yourcompany.halopsa.com`. Don't append `/api`.
3. Paste **Client ID** and **Client secret**.
4. If Halo **API Details** shows a **Tenant** value, enter it. Otherwise leave **Tenant** blank.
5. Click **Connect to HaloPSA**.
   <Frame>
     <img src="https://mintcdn.com/mspilot/VEwhVYcTXiuzbYZy/images/psa/halopsa/connect.png?fit=max&auto=format&n=VEwhVYcTXiuzbYZy&q=85&s=2692560e991039c8ee52d17dbfb791c9" alt="Connect" width="2044" height="1116" data-path="images/psa/halopsa/connect.png" />
   </Frame>

## After you connect

MSPilot imports HaloPSA companies as clients and syncs contacts onto those clients.

If you also connect an RMM, map each client's devices to the matching HaloPSA company so inventory lands in the right client.
