Unlike the other ITSM connectors, a native Fivetran HaloITSM connector has not been confirmed, so this integration is assumed to use a custom REST API / Connector SDK extraction path against Halo's OAuth2-protected REST API. Public Halo documentation confirms the API is token-based OAuth2, JSON, and exposed under each tenant's
/api resource server - but most object and field details below are API-derived and need tenant validation, because the clearest public field schema is a HaloPSA mirror rather than Halo's official ITSM page. Treat menu paths, scope names, and field availability in this guide as a starting point to confirm against your own tenant, not as exact labels. HaloITSM, HaloPSA, and HaloCRM share API surface; this guide covers HaloITSM ticket analytics only.
ABefore you start
You will need:
- Administrator access to your HaloITSM instance
- Your HaloITSM API resource server URL
- Your HaloITSM authorization/token endpoint URL
- A dedicated read-only agent to bind the API application to
- Access to the Info-Tech portal where the OAuth client ID, client secret, and tenant URLs will be entered
BHaloITSM objects required
The integration requires read-only API access to the following HaloITSM REST resources (Swagger endpoint names may vary slightly by version):
Required objects
/Tickets- ticket records (also called Faults)/Actions- ticket actions: notes, emails, status changes, and time entries/Users- end users / requesters/Agent- agents / technicians/Team- teams/Client- clients / customer organizations/Site- sites
Required objects (cont.)
/Status- ticket statuses/Priority- priorities/Category- categories/TicketType- ticket types/SLA- SLA definitions/Field,/FieldInfo- custom field definitions
No create, edit, delete, or write-back permissions are required.
Note: satisfaction (CSAT) in HaloITSM is captured at the ticket level via satisfactionlevel and satisfactioncomment fields on the ticket - no separate survey object is needed. Time entries are read via GET /Actions?timeentriesonly=true. Verify the worklog grain, the timetaken unit, and CSAT scale per tenant during onboarding.
HaloITSM controls API access through multiple layers that all apply simultaneously. The API application's OAuth scopes, the bound agent's role, and the agent's individual permission settings each constrain what the access token can see. A token request without the correct scope will mint successfully but return
401 on all API endpoints. An agent without cross-team ticket visibility will return zero tickets even with correct scopes and role. All layers must be configured for the integration to retrieve complete data.
- 1Create a dedicated read-only agent
- 2Configure agent permissions for full read visibility
- 3Register an OAuth2 API application
- 4Scope the application to read-only
- 5Verify the OAuth credentials work
- 6Enter the credentials in the Info-Tech portal
Create an agent whose only purpose is API access for this integration, and assign it a read-only role. The OAuth application is bound to this agent, so the application's effective permissions are bounded by the agent's role.
- Open Configuration. Go to the HaloITSM configuration / admin area.
- Create or designate a read-only role. Under Teams & Agents → Roles (or the equivalent permissions area), create a role with read/view access to tickets, actions, and the reference objects listed above. Do not grant create, edit, delete, or administration permissions.
- Create the integration agent. Under Agents, create an agent named
CIOAnalyticswith emailcioanalytics@yourcompany.com, and assign the read-only role. - Save the agent. If your tenant does not allow object-level read scoping on a role, choose the narrowest available read-only role and note this for your Info-Tech onboarding contact.
HaloITSM agents default to seeing only their own tickets and no clients. The integration agent must be configured to see all tickets across all teams, all clients, and all ticket types. Without these settings, the API will return 200 OK but with zero or partial results - there is no error message indicating missing data.
Departments & Teams tab
- Add the agent to all teams. Open the Departments & Teams tab and add the CIOAnalytics agent to every team (1st Line Support, 2nd Line Support, Facilities, Infrastructure, etc.). The membership level should be “Access to Teams Tickets” for each.
Permissions tab
- Enable cross-agent ticket visibility. Under Tickets Permissions, set “Can view Tickets that are assigned to other Agents” to Yes. Without this, the API returns only tickets assigned to the CIOAnalytics agent itself - which will be none.
- Enable all ticket types. Under Ticket Type Restrictions, set “Allow use of all Ticket Types” to Yes. If this is left as “Not set” with an empty Accessible Ticket Types list, the agent may be silently filtered to a subset of ticket types.
Client Restrictions tab
- Enable all clients. Set “Allow use of all Clients” to Yes so the agent can see tickets from every client organization. Do not enable the Co-managed IT Agent toggle or set a Client Group Override - the Co-managed flag restricts the agent's visibility model and is not appropriate for an integration agent.
Unlike API scopes and role permissions, these agent-level settings are not visible in the API application configuration. They silently filter API results without returning errors. The most common symptom is the API returning
200 OK with "record_count": 0 even though tickets exist in the system. If you see zero or fewer records than expected, review this step first.
Halo's REST API is OAuth2-protected. Register an API application to obtain a client ID and client secret the integration uses to request access tokens from your tenant's OAuth2 token endpoint.
- Open the Halo API integration area. Under Configuration → Integrations, open the Halo API / API Applications section.
- Create a new API application. Name it
Info-Tech CIOAnalytics. - Choose the authentication method. Select the Client Credentials (server-to-server) flow if available, so the integration authenticates with the client ID and secret without an interactive login. If only an agent-bound flow is available, bind it to the
CIOAnalyticsagent from Step 1. - Record the credentials and endpoints. Save the Client ID and Client Secret, and note your tenant's authorization/token endpoint URL and API resource server URL (under
/api). These go into the Info-Tech portal. Treat the client secret like a password.
Halo API applications are granted scopes that govern what the access token may do. The integration requires three specific read scopes. A token minted without any scope will return a valid access_token but produce 401 Unauthorized on all API endpoints.
Select these three scopes only
| Scope | Covers these required objects |
|---|---|
read:tickets |
/Tickets, /Actions, /Status, /Priority, /Category, /TicketType, /SLA, /Field, /FieldInfo |
read:customers |
/Users, /Client, /Site |
read:timesheets |
Time entries via /Actions?timeentriesonly=true |
Note: /Agent and /Team are accessible with the above scopes - no additional scope is needed.
- Grant the three read scopes. Assign
read:tickets,read:customers, andread:timesheetsto the API application. Do not select anyedit:*scopes,admin,all, orall:teams. - Confirm the application is bound to the read-only agent from Step 1, so both the scope and the agent role constrain access.
- Save the application.
Before entering the credentials in the Info-Tech portal, confirm the application can mint an access token and read tickets and the reference objects through the Halo REST API. Replace the host and endpoints with your tenant's values.
5.1 - Mint an access token
Request a token from your tenant's OAuth2 token endpoint using the client credentials. The scope parameter is required - omitting it produces a token with no API access.
curl --ssl-no-revoke -X POST "https://YOUR_TENANT/auth/token" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "client_id=YOUR_CLIENT_ID" \
--data-urlencode "client_secret=YOUR_CLIENT_SECRET" \
--data-urlencode "scope=read:tickets read:customers read:timesheets"
You should receive a JSON response containing an access_token. The exact token endpoint path varies by tenant - confirm it in your Halo API configuration. If the request fails, recheck the client ID, secret, scope, and endpoint.
If you receive a valid
access_token but all API calls return 401 Unauthorized, the most likely cause is a missing scope parameter in the token request. HaloITSM will issue a token without a scope, but that token has no API access. Re-request the token with the scope parameter included.
5.2 - Test a basic ticket read
Using the access token:
curl --ssl-no-revoke -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json" \
"https://YOUR_TENANT/api/Tickets?count=1"
A successful response returns ticket JSON with record_count greater than zero. If record_count is 0 but you know tickets exist, review the agent permissions in Step 2 - particularly “Can view Tickets that are assigned to other Agents” and “Allow use of all Clients”. 401 Unauthorized means the token has no API access - recheck that the scope parameter was included in the token request. 403 Forbidden means the application or agent lacks read access for that endpoint.
5.3 - Test the time-entries (worklog) read
Confirm the filtered Actions endpoint returns time entries:
curl --ssl-no-revoke -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json" \
"https://YOUR_TENANT/api/Actions?timeentriesonly=true&count=1"
Confirm the response includes timing fields such as timetaken. If the endpoint or filter is not recognized, flag it with your Info-Tech onboarding contact.
5.4 - Test reference reads
Confirm each returns data. If any return 403 Forbidden, add the minimum read scope/role permission for that object and test again:
/api/Users?count=1
/api/Agent?count=1
/api/Team?count=1
/api/Client?count=1
/api/Site?count=1
/api/Status?count=1
/api/Priority?count=1
/api/Category?count=1
/api/TicketType?count=1
/api/SLA?count=1
5.5 - Verify complete data retrieval
As a final check, confirm the total ticket count from the API matches what the HaloITSM UI shows. Fetch all tickets (use a high count value) and compare record_count to the total across all views in the UI:
curl --ssl-no-revoke -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json" \
"https://YOUR_TENANT/api/Tickets?count=1000"
If the API count is significantly lower than the UI total, review Step 2 - the agent may be missing team membership, client visibility, or ticket type access.
- Go to https://us.app.cioanalytics.ai/
- Open the Connections page.
- On the IT Service Management (ITSM) row, click Connect Tool.
- In the Connect to ITSM Tool dialog, select HaloITSM from the dropdown.
- Click Continue.
- Follow the instructions in the Setup Guide panel on the right to fill in the fields on the left.
- When every field is complete, click Add Connection.
- Wait for the connection test to finish.
After the connection test succeeds, CIO Analytics takes over the rest of the process automatically.
- You are returned to the Connections page once the connection is saved.
- Your HaloITSM data syncs automatically for the first time. Depending on how much history is being pulled, the first sync can take anywhere from a few hours to a few days.
- Once that first sync completes, an Info-Tech analyst will reach out to you to continue your onboarding. No further action is needed from you in the meantime.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Token mints (200) but all API calls return 401 | scope parameter missing from the token request |
Add scope=read:tickets read:customers read:timesheets to the token request |
API calls return 200 but record_count is 0 |
Agent cannot see other agents' tickets | Enable “Can view Tickets that are assigned to other Agents” on the agent's Permissions tab |
| API returns tickets but the count is lower than expected | Agent is restricted to specific clients or ticket types | Enable “Allow use of all Clients” on Client Restrictions and “Allow use of all Ticket Types” on Permissions |
| API returns tickets but some reference endpoints return 403 | Read scope missing for that object type | Verify all three scopes (read:tickets, read:customers, read:timesheets) are assigned to the API application |
- HaloITSM navigation and available scope names vary by version. If a menu item is not in the exact location shown, use the closest matching Configuration, Integrations, or Agents page.
- Because a native Fivetran HaloITSM connector has not been confirmed, treat object names, field names, and endpoint paths as starting points to validate against your tenant's schema during onboarding.
- Questions about anything in this guide can be directed to your Info-Tech onboarding contact.