HaloITSM Assets Tool
Read the HaloITSM configuration management database — assets, their types and groups, and stock items. This is the tool for hardware inventory, warranty and CMDB questions on installations running HaloITSM.
Tool ID
haloitsm-assets
Credential Required
Yes — the shared haloitsm credential, owned by the haloitsm connector. Configure the
tenant once and every haloitsm-* tool uses it; rotating the client secret is one edit rather
than four.
It is a server-managed OAuth credential: InTouch mints and refreshes the access token itself and
the connector never sees the secret. Halo uses the OAuth2 client credentials grant, so set
grant_type to client_credentials. The token endpoint is on YOUR tenant host, which is why
it lives in the credential rather than in the connector.
Credential Properties
| Property | Type | Default | Description |
|---|---|---|---|
client_id |
string | — | Required. Halo → Configuration → Integrations → HaloITSM API → View Applications → your application. |
client_secret |
string | — | Required. Generated beside the client id and shown once. Regenerating invalidates the previous secret. |
token_url |
string | — | Required. https://<tenant>.haloitsm.com/auth/token — your own host, shown on the API page as the Authorisation Server. |
grant_type |
string | (blank) | client_credentials for unattended use. |
scope |
string | — | all, or narrower if the application's Permissions tab was restricted. |
access_token |
string | — | Machine-managed. Leave empty; the server mints and persists it. |
refresh_token |
string | — | Not used by the client-credentials grant. |
expires_at |
string | 0 |
Machine-managed expiry, epoch seconds. Halo tokens last 9 hours. |
Halo setup
- Configuration → Integrations → HaloITSM API. The page shows your Resource Server, your Authorisation Server and your tenant name — the first two are the values this credential needs.
- View Applications → New. On Details choose Client ID and Secret (Services); the other six methods either act as a signed-in person (and so cannot be scheduled) or are not OAuth.
- Generate, then copy the secret before saving — Halo shows it once.
- Prefer Application identity over logging in as a named agent, so the integration does not
break when that person leaves. Anything
create_ticketraises is attributed to whatever it logs in as. - On Permissions, tick only what is needed. Halo's own warning is worth heeding: "'all' and 'admin' should not be used in production as they expose administration level access."
Permissions
Read access to Assets and Items on the Halo API application.
Operations
1. list_assets — List assets
Every configuration item. Measured at 115 on a tenant whose unpaginated call reported 50. Calls GET /Asset.
Properties:
| Property | Type | Default | Description |
|---|---|---|---|
operation |
string | — | Required. list_assets |
host |
string | — | Required. Your HaloITSM hostname, e.g. acme.haloitsm.com. Required by every operation. No scheme, no trailing slash. |
query |
string | — | Optional. Halo query parameters as a JSON object string. You do NOT need pagination parameters — listings are drained automatically. Supplying paginate/page_size/page_no yourself switches that off and hands you one page. |
Published Outputs:
- result — the JSON response body
- status — HTTP status code
2. get_asset — Get one asset
A single configuration item in full. Calls GET /Asset/{id}.
Properties:
| Property | Type | Default | Description |
|---|---|---|---|
operation |
string | — | Required. get_asset |
host |
string | — | Required. Your HaloITSM hostname, e.g. acme.haloitsm.com. Required by every operation. No scheme, no trailing slash. |
id |
string | — | Required. Record id. Required by the get_* operations. |
query |
string | — | Optional. Halo query parameters as a JSON object string. You do NOT need pagination parameters — listings are drained automatically. Supplying paginate/page_size/page_no yourself switches that off and hands you one page. |
Published Outputs:
- result — the JSON response body
- status — HTTP status code
3. list_asset_types — List asset types
Resolves the type id carried on each asset. Calls GET /AssetType.
Properties:
| Property | Type | Default | Description |
|---|---|---|---|
operation |
string | — | Required. list_asset_types |
host |
string | — | Required. Your HaloITSM hostname, e.g. acme.haloitsm.com. Required by every operation. No scheme, no trailing slash. |
query |
string | — | Optional. Halo query parameters as a JSON object string. You do NOT need pagination parameters — listings are drained automatically. Supplying paginate/page_size/page_no yourself switches that off and hands you one page. |
Published Outputs:
- result — the JSON response body
- status — HTTP status code
4. get_asset_type — Get one asset type
A single type by id, including its field definitions. Calls GET /AssetType/{id}.
Properties:
| Property | Type | Default | Description |
|---|---|---|---|
operation |
string | — | Required. get_asset_type |
host |
string | — | Required. Your HaloITSM hostname, e.g. acme.haloitsm.com. Required by every operation. No scheme, no trailing slash. |
id |
string | — | Required. Record id. Required by the get_* operations. |
query |
string | — | Optional. Halo query parameters as a JSON object string. You do NOT need pagination parameters — listings are drained automatically. Supplying paginate/page_size/page_no yourself switches that off and hands you one page. |
Published Outputs:
- result — the JSON response body
- status — HTTP status code
5. list_asset_groups — List asset groups
The grouping above type — how this install organises its estate. Calls GET /AssetGroup.
Properties:
| Property | Type | Default | Description |
|---|---|---|---|
operation |
string | — | Required. list_asset_groups |
host |
string | — | Required. Your HaloITSM hostname, e.g. acme.haloitsm.com. Required by every operation. No scheme, no trailing slash. |
query |
string | — | Optional. Halo query parameters as a JSON object string. You do NOT need pagination parameters — listings are drained automatically. Supplying paginate/page_size/page_no yourself switches that off and hands you one page. |
Published Outputs:
- result — the JSON response body
- status — HTTP status code
6. list_items — List stock items
Items and stock control, which Halo keeps separately from configuration items. Calls GET /Item.
Properties:
| Property | Type | Default | Description |
|---|---|---|---|
operation |
string | — | Required. list_items |
host |
string | — | Required. Your HaloITSM hostname, e.g. acme.haloitsm.com. Required by every operation. No scheme, no trailing slash. |
query |
string | — | Optional. Halo query parameters as a JSON object string. You do NOT need pagination parameters — listings are drained automatically. Supplying paginate/page_size/page_no yourself switches that off and hands you one page. |
Published Outputs:
- result — the JSON response body
- status — HTTP status code
7. get_item — Get one stock item
A single item by id. Calls GET /Item/{id}.
Properties:
| Property | Type | Default | Description |
|---|---|---|---|
operation |
string | — | Required. get_item |
host |
string | — | Required. Your HaloITSM hostname, e.g. acme.haloitsm.com. Required by every operation. No scheme, no trailing slash. |
id |
string | — | Required. Record id. Required by the get_* operations. |
query |
string | — | Optional. Halo query parameters as a JSON object string. You do NOT need pagination parameters — listings are drained automatically. Supplying paginate/page_size/page_no yourself switches that off and hands you one page. |
Published Outputs:
- result — the JSON response body
- status — HTTP status code
Paging
Listings are drained automatically, and on Halo that is not a nicety — it is the difference between a report and a wrong report.
Halo pages by number, and its unpaginated answer misstates its own size. Measured against a live tenant on 2026-08-22:
| Call | Returned | record_count says |
Actually |
|---|---|---|---|
GET /Tickets |
50 | 50 | 420 |
GET /Asset |
50 | 50 | 115 |
GET /Actions |
0 | 0 | 1085 |
The count agrees with the truncation, so nothing in the response suggests anything is missing —
and page_size on its own is ignored. Only paginate=true makes the count tell the truth.
/Actions is the starkest: unflagged it reports an empty service desk.
So this connector always requests with the flag set, reads the real total, and walks to it. The
result carries pagesFetched and complete: true. If it ever stops at the page cap it says so —
complete: false with a warning, and the step returns WARNING rather than SUCCESS.
You do not need pagination parameters. Supplying them yourself turns this off and hands you a single page, which is occasionally what you want and usually not.
Endpoints that answer with a bare array rather than an envelope — the reference vocabularies — are not paged and are returned untouched.
Notes
Assets carry type and group as ids, so a readable inventory report resolves them through
list_asset_types and list_asset_groups.
Assets are not tickets. Linking an asset to the incidents raised against it means reading
list_tickets from the haloitsm connector and matching on the asset reference there.
Verification status. Every operation in this document was executed against a live HaloITSM
tenant on 2026-08-22 and returned HTTP 200 with real data. That includes the by-id lookups and
the paged listings; counts quoted above are what came back. What has NOT been exercised is
create_ticket (it writes, and the tenant is somebody's) and behaviour on a self-hosted Halo.
Self-Contained JAR
The jar bundles all runtime dependencies; only intouch-tool-api is provided by the server.
Publishes
The keys a later task may reference as {{taskName.key}}. Referencing anything not listed here resolves to nothing at run time.
completeoperationresultstatuswarning