1. Help
  2. Integrations
  3. iPaaS
  4. connector-documentation
  5. Checkmk Connector

purple icon for coordination.
We’ve moved!
Our Help Center has a new home and our URLs have changed. Please update your bookmark to this page before April 30, 2026

Checkmk Connector

Retrieve host configuration and hardware/software inventory data for CMDB synchronization.

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.

Input Parameters

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

Example Input

{
"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.

Input Parameters

None.

Example Input

{}

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.

Input Parameters

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)

Example Input

{
"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 hostsGet 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)