Documentation
Short guides to the parts of ICPWatch that are not obvious.
Guides
- How it works: the data model, confidence labels, projections.
- Data sources: every source, what it provides, and how fresh it is.
- API: JSON endpoints for everything on the site.
- Alerts: subscribing, channels, and how dedup works.
Webhook payload
Webhook subscribers receive a POST with a JSON body and an X-ICPWatch-Signature header containing the hex HMAC-SHA256 of the raw body, keyed with the secret shown at subscribe time.
{
"event": "incident.opened", // or "incident.resolved"
"incident": {
"id": 1842,
"type": "low_cycles", // low_cycles | frozen | approaching_deletion | burn_anomaly
"severity": "warn",
"title": "Low cycles: CHAT Archive 2",
"detail": "0.62 T left, about 12 days until it freezes...",
"opened_at": 1790000000,
"resolved_at": null
},
"canister": { "id": "...", "label": "...", "role": "archive", "token": "CHAT", "cycles": 620000000000, "confidence": "measured" },
"url": "https://icpwatch.com/canister/..."
}Health states
| State | Meaning |
|---|---|
| Healthy | More than 45 days until freeze at the current burn. |
| At risk | Under 45 days until freeze. |
| Low cycles | Under 14 days until freeze. |
| Frozen | Rejecting calls. Burning storage cost until deletion. |
| Life support | Deliberately held frozen and above zero by ICPWatch. |
| Responding | Balance not readable, but the canister answers queries. |