Create, manage, and verify healthchecks.io monitors via the REST API. Use when adding monitoring to a new cron job or service, auditing existing checks, wiring ping URLs into configs, or verifying a check fired correctly.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add edmundmiller/dotfiles --skill healthchecks-io --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Healthchecks Io?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/edmundmiller-healthchecks-io)More formats (shields.io, HTML) on the badges page.
---
name: healthchecks-io
description: Create, manage, and verify healthchecks.io monitors via the REST API. Use when adding monitoring to a new cron job or service, auditing existing checks, wiring ping URLs into configs, or verifying a check fired correctly.
---
# healthchecks.io API
Credentials available as env vars:
- `$HC_API_KEY` — read-write API key (create/update/delete checks)
- `$HC_API_KEY_READONLY` — read-only API key (list/view only)
- `$HC_PING_KEY` — ping key (for `https://hc-ping.com/$HC_PING_KEY/<slug>` URLs)
```bash
HC_API="https://healthchecks.io/api/v3"
```
## Create a check
```bash
curl -s -X POST "$HC_API/checks/" \
-H "X-Api-Key: $HC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "service: job-name",
"tags": "nuc cron",
"desc": "What this monitors",
"grace": 3600,
"schedule": "0 * * * *",
"tz": "America/Chicago"
}' | jq '{name, ping_url, uuid}'
```
Key fields:
- `grace` — seconds after expected ping before alerting (3600 = 1h buffer)
- `schedule` — cron expression for expected cadence (sets the deadline clock)
- `timeout` — alternative to schedule for simple heartbeats (seconds between pings)
- `tz` — timezone for cron interpretation
Returns `ping_url` (`https://hc-ping.com/<uuid>`) — save this to your config.
## List / find existing checks
```bash
# All checks with status summary
curl -s "$HC_API/checks/" -H "X-Api-Key: $HC_API_KEY" \
| jq '.checks[] | {name, status, last_ping, ping_url}'
# Find by name substring
curl -s "$HC_API/checks/" -H "X-Api-Key: $HC_API_KEY" \
| jq '.checks[] | select(.name | contains("gatus")) | {name, uuid, status, ping_url}'
# Find by tag
curl -s "$HC_API/checks/" -H "X-Api-Key: $HC_API_KEY" \
| jq '.checks[] | select(.tags | contains("nuc")) | {name, status}'
```
Statuses: `new` `up` `grace` `down` `paused`
## Delete a check
```bash
curl -s -X DELETE "$HC_API/checks/<uuid>" -H "X-Api-Key: $HC_API_KEY" \
| jq '{name, n_pings, last_ping}' # returns the deleted check
```
## Ping from a script
```bash
PING_URL="https://hc-ping.com/<uuid>"
# Signal start (measures duration, alerts if no success follows)
curl -sS -m 10 --retry 3 "$PING_URL/start"
# Signal success
curl -sS -m 10 --retry 3 "$PING_URL"
# Signal failure
curl -sS -m 10 --retry 3 "$PING_URL/fail"
# Signal success/failure by exit code (0 = success, non-zero = fail)
curl -sS -m 10 --retry 3 "$PING_URL/$EXIT_CODE"
# Attach logs to a ping (POST body, up to 10KB)
curl -sS -m 10 --retry 3 "$PING_URL" --data-raw "$(journalctl -u myservice -n 50 --no-pager)"
```
Wrap a script with start+exit-code:
```bash
curl -sS -m 10 "$PING_URL/start"
/path/to/my-script.sh
curl -sS -m 10 "$PING_URL/$?"
```
## Verify a check received pings
```bash
# Single check detail (includes last_ping, n_pings, status)
curl -s "$HC_API/checks/<uuid>" -H "X-Api-Key: $HC_API_KEY" \
| jq '{name, status, n_pings, last_ping, next_ping}'
# Recent ping log for a check
curl -s "$HC_API/checks/<uuid>/pings/" -H "X-Api-Key: $HC_API_KEY" \
| jq '.pings[:5] | .[] | {type, date, body}'
```
Ping types in log: `start` `success` `fail`
## Update an existing check
```bash
curl -s -X POST "$HC_API/checks/<uuid>" \
-H "X-Api-Key: $HC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"grace": 7200, "tags": "nuc cron updated"}'
```
## Pause / resume
```bash
curl -s -X POST "$HC_API/checks/<uuid>/pause" -H "X-Api-Key: $HC_API_KEY"
curl -s -X POST "$HC_API/checks/<uuid>/resume" -H "X-Api-Key: $HC_API_KEY"
```
Useful when intentionally stopping a service (prevents false alarms).
## Naming convention
```
<service>: <job-name> # gatus: deadman
<host>/<service> # nuc/znapzend
```
Tags: host + category (e.g. `nuc backup`, `gatus monitoring`).
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!