Overview
This connector integrates with Checkmk to retrieve hosts and hardware/software inventory data
for synchronizing Configuration Items into the Xurrent CMDB.
Prerequisites
To use this connector, you need:
- A Checkmk 2.4+ server with the REST API enabled
- A Checkmk user with read access to hosts and HW/SW inventory
- Site access for every site whose hosts you plan to sync
Authentication
Uses your Username and Password to authenticate. Additionally, provide
your Domain (e.g. myserver.example.com) and Site name (e.g. mysite)
to locate your Checkmk instance.
Triggers
None — this connector is outbound only.
Actions
Get hosts
Retrieves hosts from Checkmk with optional filters for hostnames, site, field selection,
effective attributes, and links. Returns each host with its folder, attributes, and optional
members metadata.
Use case: Fetch the host inventory before retrieving detailed HW/SW inventory, or refresh
host metadata for CMDB tagging and grouping.
| Parameter |
Type |
Required |
Default |
Description |
| effective_attributes |
Boolean |
No |
false |
Show all effective attributes including inherited from parent folders |
| include_links |
Boolean |
No |
false |
Include HATEOAS links in the response |
| fields |
String |
No |
- |
Field selection expression to trim the response (e.g. (value(id,title,extensions))) |
| hostnames |
Array[String] |
No |
- |
Filter results by specific host names |
| site |
String |
No |
- |
Filter results by a specific monitoring site |
{
"effective_attributes": false,
"include_links": false,
"fields": "(value(id,title,extensions))",
"hostnames": ["web-server-01"],
"site": "mysite"
}
Output
| Field |
Type |
Description |
| domain_type |
String |
Checkmk domain type (e.g. host_config) |
| id |
String |
Response collection identifier |
| title |
String |
Response collection title |
| extensions |
Object |
Additional top-level metadata returned by Checkmk |
| hosts |
Array[Host] |
List of hosts matching the filters |
Host fields
| Field |
Type |
Description |
| id |
String |
Host identifier (required) |
| title |
String |
Host title as shown in Checkmk |
| domain_type |
String |
Always host_config for this endpoint |
| members |
Object |
Nested members metadata (folder_config, move); present when returned by Checkmk |
| links |
Array |
HATEOAS links; present only when include_links = true |
| extensions |
Object |
Host-level details — see Host extensions fields |
Host extensions fields
| Field |
Type |
Description |
| folder |
String |
Checkmk folder path (e.g. /, /production) |
| is_cluster |
Boolean |
Whether the host is a cluster node container |
| is_offline |
Boolean |
Whether the host is marked offline |
| cluster_nodes |
Array[String] |
Node host IDs when is_cluster = true |
| effective_attributes |
Object |
Merged attributes including folder inheritance; populated when effective_attributes = true |
| attributes |
Object |
Raw host attributes — see Host attributes fields |
Host attributes fields
| Field |
Type |
Description |
| alias |
String |
Host alias |
| site |
String |
Monitoring site owning this host |
| ipaddress |
String |
Primary IPv4 address |
| ipv6address |
String |
Primary IPv6 address |
| additional_ipv4addresses |
Array[String] |
Secondary IPv4 addresses |
| additional_ipv6addresses |
Array[String] |
Secondary IPv6 addresses |
| parents |
Array[String] |
Parent host IDs for topology |
| tag_address_family |
String |
Address family tag (ip-v4-only, ip-v6-only, ip-v4v6, no-ip) |
| tag_agent |
String |
Agent tag (e.g. cmk-agent, no-agent) |
| tag_snmp_ds |
String |
SNMP data source tag |
| tag_piggyback |
String |
Piggyback tag |
| tag_criticality |
String |
Criticality tag |
| tag_networking |
String |
Networking tag (e.g. lan, wan, dmz) |
| cmk_agent_connection |
String |
Agent connection mode |
| labels |
Object |
Arbitrary key/value labels attached to the host |
| meta_data |
Object |
{ created_at, updated_at, created_by } audit trail |
| contactgroups |
Object |
{ groups, use, use_for_services, recurse_use, recurse_perms } contact assignment |
| locked_by |
Object |
{ site_id, program_id, instance_id } if the host is programmatically locked |
| locked_attributes |
Array[String] |
Attribute names locked from UI edits |
Example Output
{
"domain_type": "host_config",
"id": "host_config",
"title": "All hosts",
"extensions": {},
"hosts": [
{
"id": "monitoring-container",
"title": "monitoring-container",
"domain_type": "host_config",
"extensions": {
"folder": "/",
"attributes": {
"ipaddress": "127.0.0.1",
"meta_data": { "created_at": "2026-02-19T07:18:24Z" }
}
}
},
{
"id": "web-server-01",
"title": "Web Server 01",
"domain_type": "host_config",
"extensions": {
"folder": "/production",
"attributes": {
"ipaddress": "10.0.1.5",
"meta_data": { "created_at": "2026-03-01T12:00:00Z" }
}
}
}
]
}
Error Handling
| Condition |
Behavior |
| 401 / 403 |
Fail immediately with Checkmk authentication error: <status> |
| 429 or 503 |
Retry, respecting Retry-After (default 60s) |
| Other 4xx / 5xx (400, 404, 500, 502, 504) |
Fail with Checkmk HTTP error: <status> |
| Non-JSON body |
Fail with Checkmk response was not valid JSON |
Best Practices
- Use the
fields filter — e.g. (value(id,title,extensions~folder,extensions~attributes)) —
to drop members and links from the wire when only host identity + attributes are needed.
- Combine
hostnames with site to narrow queries on multi-site Checkmk deployments.
- Call Get hosts before Get host inventory timestamps so you have the canonical host
list to diff timestamps against.
Get host inventory timestamps
Retrieves the mk_inventory_last Unix timestamp for every host in one lightweight call.
Returns 0 for hosts that have never been inventoried.
Use case: Drive incremental inventory syncs — compare each host's mk_inventory_last
against the watermark stored from the previous sync, and pass only the changed subset to
Get host inventory.
None.
{}
Output
| Field |
Type |
Description |
| domain_type |
String |
Checkmk domain type (e.g. host) |
| id |
String |
Response collection identifier |
| hosts |
Array[Host] |
One entry per host — see Host fields |
Host fields
| Field |
Type |
Description |
| name |
String |
Host name (required) |
| mk_inventory_last |
Integer |
Unix timestamp of the last HW/SW inventory run; 0 means never inventoried |
Example Output
{
"domain_type": "host",
"id": "host",
"hosts": [
{ "name": "cmk", "mk_inventory_last": 0 },
{ "name": "mysite", "mk_inventory_last": 1776179669 }
]
}
Error Handling
| Condition |
Behavior |
| 401 / 403 |
Fail immediately with Checkmk authentication error: <status> |
| 429 or 503 |
Retry, respecting Retry-After (default 60s) |
| Other 4xx / 5xx (400, 404, 500, 502, 504) |
Fail with Checkmk HTTP error: <status> |
| Non-JSON body |
Fail with Checkmk response was not valid JSON |
Best Practices
- Call this before Get host inventory to filter the
host_names input down to only hosts
whose mk_inventory_last changed since the previous sync.
- Persist each host's
mk_inventory_last as the watermark for the next run.
- Skip hosts where
mk_inventory_last = 0 if your sync only cares about inventoried hosts.
Get host inventory
Retrieves detailed hardware, software, and networking inventory for a batch of hosts.
The action paginates internally — it emits one page per batch and drains the full
host_names list across successive iterations.
Use case: Fetch device inventory (manufacturer, model, serial, CPU, memory, OS,
applications, network interfaces) for CMDB synchronization.
| Parameter |
Type |
Required |
Default |
Description |
| host_names |
Array[String] |
Yes |
- |
Host names to fetch inventory for (typically the changed subset from Get host inventory timestamps) |
| batch_size |
Integer |
No |
50 |
Number of hosts per request (min 1, max 50) |
{
"host_names": ["host1", "host2"],
"batch_size": 50
}
Output
| Field |
Type |
Description |
| has_next_page |
Boolean |
true if more host_names remain after this batch |
| hosts |
Array[Host] |
One entry per host in the current batch — see Host fields |
Host fields
| Field |
Type |
Description |
| hostname |
String |
Host name (required) |
| inventory |
Object |
Inventory tree — see Inventory fields |
Inventory fields
The inventory object mirrors Checkmk's HW/SW inventory tree with snake-cased keys.
Each node carries attributes (with a pairs object of scalar facts), optional nodes
(child sub-trees), and optional table (rows of tabular data such as interfaces).
| Path |
Type |
Description |
| nodes.hardware.nodes.system.attributes.pairs |
Object |
{ manufacturer, model, serial, product, family, uuid } |
| nodes.hardware.nodes.cpu.attributes.pairs |
Object |
{ cores, threads, model, arch, cpus, max_speed, cache_size } |
| nodes.hardware.nodes.memory.attributes.pairs |
Object |
{ total_ram_usable, total_swap, total_vmalloc } in bytes |
| nodes.software.nodes.os.attributes.pairs |
Object |
{ name, version, type, vendor, arch, build, service_pack, kernel_version, install_date } |
| nodes.software.nodes.applications.nodes.check_mk |
Object |
Checkmk-specific application info (cluster, sites, versions) |
| nodes.networking.attributes.pairs |
Object |
{ hostname, domain_name, default_gateway, available_ethernet_ports, total_ethernet_ports, total_interfaces } |
| nodes.networking.nodes.interfaces.table |
Object |
{ key_columns, rows[] } — one row per NIC with alias, description, index, oper_status, phys_address, port_type, speed, available |
Example Output
{
"has_next_page": false,
"hosts": [
{
"hostname": "host1",
"inventory": {
"attributes": {},
"table": {},
"nodes": {
"hardware": {
"attributes": {},
"table": {},
"nodes": {
"system": {
"attributes": {
"pairs": { "manufacturer": "Amazon EC2", "model": "m5a.2xlarge" }
},
"nodes": {},
"table": {}
},
"cpu": {
"attributes": { "pairs": { "cores": 4 } },
"nodes": {},
"table": {}
},
"memory": {
"attributes": { "pairs": { "total_ram_usable": 33688150016 } },
"nodes": {},
"table": {}
}
}
},
"software": {
"attributes": {},
"table": {},
"nodes": {
"os": {
"attributes": {
"pairs": { "name": "Microsoft Windows Server 2019 Datacenter" }
},
"nodes": {},
"table": {}
}
}
},
"networking": {
"attributes": {
"pairs": { "hostname": "host1", "total_interfaces": 2 }
},
"table": {},
"nodes": {
"interfaces": {
"attributes": {},
"nodes": {},
"table": {
"key_columns": ["index"],
"rows": [
{
"index": 1,
"description": "eth0",
"alias": "Primary",
"speed": 10000000000,
"oper_status": 1,
"phys_address": "00:11:22:33:44:55",
"port_type": 6,
"available": true
}
]
}
}
}
}
}
}
}
]
}
Error Handling
| Condition |
Behavior |
| 401 / 403 |
Fail immediately with Checkmk authentication error: <status> |
| 429 or 503 |
Retry, respecting Retry-After (default 60s) |
| Other 4xx / 5xx (400, 404, 500, 502, 504) |
Fail with Checkmk HTTP error: <status> |
Inventory result_code != 0 |
Fail with Checkmk inventory API error [result_code=N]: <message> |
| Non-JSON body |
Fail with Checkmk response was not valid JSON |
Best Practices
- Keep
batch_size at its documented maximum (50) to minimize round-trips.
- Feed
host_names from the diffed output of Get host inventory timestamps — do not
re-fetch inventory for hosts whose mk_inventory_last is unchanged.
- Let the action drain its internal pagination across iterations rather than slicing
host_names manually at the caller.
Rate Limiting
| HTTP Status |
Connector Behavior |
| 200 |
Success |
| 401 / 403 |
Fail immediately with Checkmk authentication error: <status> |
| 429 |
Retry, respecting Retry-After header (default 60s) |
| 503 |
Retry, respecting Retry-After header (default 60s) |
| 400, 404, other 4xx |
Fail with Checkmk HTTP error: <status> |
| 500, 502, 504 |
Fail with Checkmk HTTP error: <status> |
| Invalid JSON body |
Fail with Checkmk response was not valid JSON |
Inventory result_code != 0 |
Fail with Checkmk inventory API error [result_code=N] |
Best Practices
- Run Get host inventory timestamps first, diff
mk_inventory_last against your stored
watermark, then pass only the changed subset as host_names to Get host inventory.
This avoids re-fetching heavy inventory trees for unchanged hosts.
- Keep
batch_size on Get host inventory at its maximum (50).
- Use the
fields filter on Get hosts — e.g.
(value(id,title,extensions~folder,extensions~attributes)) — to drop members and links
from the wire when only hosts plus attributes are needed.
- Narrow Get hosts with
site when your Checkmk is multi-site.
- Persist each host's
mk_inventory_last in Xurrent as the watermark for the next run.
Common Use Cases
- Initial CMDB import → Get hosts → Get host inventory for all hostnames.
- Incremental sync → Get host inventory timestamps → diff against stored watermark →
Get host inventory with the changed subset.
- Host list refresh for tagging and grouping → Get hosts with a
fields filter.
- Troubleshoot a single host → Get hosts with
hostnames=[name] →
Get host inventory with host_names=[name].
References
- Checkmk REST API documentation: https://docs.checkmk.com/latest/en/rest_api.html
- Endpoints used by this connector:
GET /api/1.0/domain-types/host_config/collections/all — Get hosts
POST /api/1.0/domain-types/host/collections/all — Get host inventory timestamps (livestatus-backed host columns)
GET /host_inv_api.py — Get host inventory (HW/SW inventory over Web API)