Checks
The 7 probe types (ping, HTTP, TCP, DNS, SNMP, TLS certificate, content), their configuration, their execution and reading the results.
What it's for
A check is a probe attached to a host. It periodically measures an aspect of your infrastructure and produces a result: a status, a latency and a text output. SecuMon automatically schedules each check according to its interval and keeps the history of its results.
The check model
| Field | Type | Required | Description |
|---|---|---|---|
id | uuid | (generated) | Unique identifier. |
host_id | uuid | ✅ | Host the check is attached to. |
name | string | ✅ | Human-readable name (ping web-prod-01). |
check_type | string | ✅ | Probe type: ping, http, tcp, dns, snmp, cert, content. |
config | object | — | Type-specific parameters (see below). |
interval_sec | integer | — | Execution frequency. Default: 60. |
timeout_sec | integer | — | Timeout. Default: 30. |
retries | integer | — | Number of retries before failure. Default: 0. |
enabled | boolean | — | true by default. A disabled check is no longer scheduled. |
tags | object | — | Key/value labels. |
Result status
status | Meaning |
|---|---|
0 | OK |
1 | Degraded |
2 | Critical |
3 | Unknown |
The 7 check types
ping — ICMP availability
Checks that a host responds and measures latency.
config field | Type | Required | Description |
|---|---|---|---|
host | string | ✅ | Host or IP to ping. |
{ "host": "10.0.0.12" }Typical output: pong 1.5ms (status OK) or timeout (status critical).
http — health of a site or an API
Performs an HTTP(S) request and evaluates the response code (and, optionally, the content).
config field | Type | Required | Description |
|---|---|---|---|
url | string | ✅ | URL to query. |
method | string | — | HTTP method. Default: GET. |
expected_status | integer | — | Exact expected code (strict mode). 0 = permissive mode (2xx/3xx = OK). |
expected_body | string | — | Substring that must be present in the body. |
headers | object | — | Headers to send. |
follow_redirects | boolean | — | Follow redirects. Default: true. |
{ "url": "https://web-prod-01.example.com/health", "expected_status": 200, "expected_body": "ok" }In permissive mode, a 5xx code is critical and a 4xx is degraded. In strict mode, only the exact expected code is OK.
tcp — open port
Opens a TCP connection and, optionally, exchanges data.
config field | Type | Required | Description |
|---|---|---|---|
host | string | ✅ | Host or IP. |
port | integer | ✅ | TCP port. |
send_data | string | — | Data to send after connecting. |
expect_data | string | — | Substring expected in the response. |
{ "host": "10.0.0.12", "port": 5432 }dns — resolution and propagation
Resolves a DNS record and checks its value, its propagation and the presence of DNSSEC.
config field | Type | Required | Description |
|---|---|---|---|
host | string | ✅ | Name to resolve. |
record_type | string | — | A, AAAA, MX, TXT, CNAME, NS, PTR. Default: A. |
expected_value | string | — | Value expected in the response. |
nameserver | string | — | DNS server to query. |
check_propagation | boolean | — | Compare the responses of the authoritative NS. Default: false. |
check_dnssec | boolean | — | Check the presence of DNSSEC. Default: false. |
{ "host": "web-prod-01.example.com", "record_type": "A", "expected_value": "10.0.0.12" }A propagation inconsistency or a missing DNSSEC (when requested) produces a degraded status; a missing expected value produces a critical status.
snmp — device metrics
Queries a device via SNMP. See the dedicated SNMP page for the metric templates.
config field | Type | Required | Description |
|---|---|---|---|
host | string | ✅ | Host or IP of the device. |
port | integer | — | SNMP port. Default: 161. |
version | string | — | 2c (default) or 3. |
community | string | — | SNMP community (v2c). Default: public. |
template | string | — | Device template (linux, cisco, mikrotik, ubiquiti, fortinet, generic). |
oids | array | — | List of explicit OIDs (takes priority over the template). |
security_level, username, auth_protocol, auth_passphrase, priv_protocol, priv_passphrase | string | — | SNMPv3 parameters. |
{ "host": "10.0.0.12", "version": "2c", "community": "public", "template": "linux" }cert — TLS certificate
Inspects a service's TLS certificate: days before expiry, issuer, protocol, chain, weak ciphers.
config field | Type | Required | Description |
|---|---|---|---|
host | string | ✅ | Host to inspect. |
port | integer | — | TLS port. Default: 443. |
warn_days | integer | — | Warning threshold (days before expiry). Default: 30. |
critical_days | integer | — | Critical threshold. Default: 7. |
{ "host": "web-prod-01.example.com", "port": 443, "warn_days": 30, "critical_days": 7 }The output includes expiry_days, issuer, protocol, cipher, the chain
state and any weak ciphers detected.
content — page content
Checks the content of a web page using several strategies.
config field | Type | Required | Description |
|---|---|---|---|
url | string | ✅ | URL to fetch. |
mode | string | — | keyword, selector, regex, diff. Inferred from the other fields if absent. |
contains | string | required in keyword mode | Substring that must be present. |
not_contains | string | — | Substring that must be absent. |
selector | string | — | CSS selector (selector mode). |
regex | string | required in regex mode | Pattern to extract/validate. |
diff_threshold_pct | integer | — | Variation threshold in diff mode. Default: 10. |
case_sensitive | boolean | — | Case-sensitive. Default: false. |
{ "url": "https://web-prod-01.example.com/", "mode": "keyword", "contains": "Welcome" }Using it from the portal
The Checks section lists your checks with their latest state. You can Add a check (choose the host, the type and the parameters), edit, disable/delete, run on demand and view the latest result as well as the history graphs.
Listing and viewing: all roles. Create, edit, delete:
ownerandadmin. Run on demand:owner,admin,operator.
Using it through the API
List and filter
GET /api/v2/checks?host_id=<uuid> — the host_id filter is optional.
curl -s "https://api.secumon.secuaas.ovh/api/v2/checks?host_id=8f3b1c2a-2d44-4e1a-9b77-0a1b2c3d4e5f" \
-H "Authorization: Bearer $SECUMON_TOKEN"{
"count": 1,
"checks": [
{
"id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"host_id": "8f3b1c2a-2d44-4e1a-9b77-0a1b2c3d4e5f",
"name": "ping web-prod-01",
"check_type": "ping",
"config": { "host": "10.0.0.12" },
"interval_sec": 60,
"timeout_sec": 10,
"retries": 0,
"enabled": true
}
]
}Create a check
POST /api/v2/checks — host_id, name and check_type are required. The host
must belong to your organization.
curl -s -X POST https://api.secumon.secuaas.ovh/api/v2/checks \
-H "Authorization: Bearer $SECUMON_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"host_id": "8f3b1c2a-2d44-4e1a-9b77-0a1b2c3d4e5f",
"name": "https web-prod-01",
"check_type": "http",
"config": { "url": "https://web-prod-01.example.com/health", "expected_status": 200 },
"interval_sec": 30,
"timeout_sec": 10
}'Response: 201 Created with the full check.
Edit and delete
# Partial edit (e.g. widen the interval, disable)
curl -s -X PUT https://api.secumon.secuaas.ovh/api/v2/checks/1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d \
-H "Authorization: Bearer $SECUMON_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "interval_sec": 120, "enabled": false }'
# Delete
curl -s -X DELETE https://api.secumon.secuaas.ovh/api/v2/checks/1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d \
-H "Authorization: Bearer $SECUMON_TOKEN"Run on demand
POST /api/v2/checks/:id/run forces an immediate run without waiting for the
next cycle.
curl -s -X POST https://api.secumon.secuaas.ovh/api/v2/checks/1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d/run \
-H "Authorization: Bearer $SECUMON_TOKEN"{ "queued": true, "check_id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d", "run_id": "c0ffee00-1234-4abc-9def-0123456789ab" }Read the latest result
GET /api/v2/checks/:id/last-result — see Getting started.
Aggregated history
GET /api/v2/metrics/checks?check_id=<uuid>&from=&to=&granularity= returns the
aggregated results of a check over a period.
curl -s "https://api.secumon.secuaas.ovh/api/v2/metrics/checks?check_id=1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d&from=2026-06-23T00:00:00Z&to=2026-06-23T12:00:00Z&granularity=5min" \
-H "Authorization: Bearer $SECUMON_TOKEN"{
"check_id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"from": "2026-06-23T00:00:00Z",
"to": "2026-06-23T12:00:00Z",
"granularity": "5min",
"count": 144,
"results": [ /* aggregated points (average latency, failure rate...) */ ]
}granularity accepts raw, 1min, 5min, 1h, 1d (resolved automatically
if omitted). Dates are in RFC3339 format.
Use cases
- API monitoring: an
httpcheck withexpected_status: 200andexpected_bodytargeting a health marker. - Anticipating a certificate's expiry: a
certcheck withwarn_days: 30to be alerted a month ahead. - Detecting defacement: a
contentcheck indifforkeywordmode to spot an unexpected change to a critical page. - Validating a DNS migration: a
dnscheck withexpected_valueandcheck_propagation: true.
Tips
- Tune
interval_secto the real need: 30 s for a critical service, 300 s for a low-sensitivity target — this limits load and noise. - Use
retriesto avoid false positives on targets with variable latency. - Disable (
enabled: false) rather than delete a check you intend to re-enable: the history is preserved.