On-call settings
Every setting of a service's on-call configuration, the generic alert format and how kanman checks webhook signatures.
Settings of a service under Services > (service) > On-call settings. Owners and admins change them; members see them. Every change is recorded in the audit log (event “Service changed”).
Settings
| Setting | Values | Default | Effect |
|---|---|---|---|
| Observe only | on, off | off | Hard switch. On: kanman opens incidents, investigates, posts and notifies, but never starts a fix, never proposes a revert and never changes an alert in your tool. |
| Start expedite fixes on its own | on, off | off | For a code-caused incident without a suspect merge. On: kanman files an expedite story and starts the fix. Off: it asks in Decisions first (“Start the expedite fix” or “Leave it to the person on call”). |
| Acknowledge and resolve alerts in the source | on, off | off | PagerDuty and Opsgenie with API credentials: kanman acknowledges the alert when it starts investigating and resolves it when you resolve the incident in kanman. Off: kanman never touches the alert. |
| Lowest severity that opens an incident | Critical, High, Medium, Low, Info | High | Alerts below are recorded under the source but open no incident. Alerts that belong to an open incident always join it. |
| On-call hours for kanman | Always, or days, start, end and time zone | Always | Outside the hours kanman records alerts but opens no incident. Overnight windows (for example 22:00 to 06:00) are allowed. |
| Who gets notified | Workspace members | none | Each gets a notification in kanman when an incident opens and when it is resolved, and is named in the incident post. |
| Incident places | The team’s Slack and Microsoft Teams places | every channel of the team | Where incidents are posted, one thread per place. Places are added under the team’s Communication settings. |
Production changes outside the code are never configurable: kanman always asks a person.
Severities
Each alerting tool’s levels are mapped to kanman’s five severities:
| kanman | Examples from tools |
|---|---|
| Critical | critical, P1, SEV1, Sev0 (Azure), “major outage” (Statuspage), [critical] in a CloudWatch alarm description |
| High | high, error, P2, Sev1 (Azure), “partial outage”, untagged CloudWatch alarms |
| Medium | warning, P3, Sev2 (Azure), “degraded performance”, unknown values |
| Low | low, minor, P4, Sev3 (Azure) |
| Info | info, P5, Sev4 (Azure), maintenance |
Generic alert format
Send POST requests with a JSON body to the source’s webhook URL. One alert, or several under alerts:
{
"fingerprint": "checkout-5xx",
"status": "firing",
"severity": "critical",
"title": "Checkout returns 500",
"description": "Error rate above 5% for 5 minutes",
"service": "checkout",
"environment": "production",
"startedAt": "2026-10-01T10:00:00Z",
"labels": { "region": "eu" },
"links": [{ "label": "Runbook", "url": "https://runbooks.example.com/checkout" }]
}
| Field | Required | Meaning |
|---|---|---|
title |
yes | Short description, shown as the incident title |
status |
no | firing (default) or resolved |
fingerprint |
no | Identity of the alert. A resolved alert with the same fingerprint recovers it. Default: id, else a hash of title and labels |
id |
no | Your id of the alert |
severity |
no | See Severities; default medium |
service |
no | Picks the service when the source feeds several (matched against the service name) |
description, environment, startedAt, endedAt, labels, links |
no | Shown on the incident |
Signature
Sign the exact request body with the source’s secret, HMAC-SHA256, hex encoded:
X-Kanman-Signature: sha256=<hex HMAC-SHA256 of the body>
To protect against replays, add X-Kanman-Timestamp: <unix seconds> and sign <timestamp>.<body> instead; kanman then refuses requests older than five minutes.
Example with curl and openssl:
BODY='{"fingerprint":"checkout-5xx","status":"firing","severity":"critical","title":"Checkout returns 500"}'
SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$KANMAN_SOURCE_SECRET" -hex | sed 's/^.* //')
curl -X POST "https://api.kanman.ai/functions/v1/signal-webhook/<source token>" \
-H "Content-Type: application/json" -H "X-Kanman-Signature: sha256=$SIG" -d "$BODY"
How kanman checks webhooks
| Tool | What kanman expects |
|---|---|
| Generic format | X-Kanman-Signature (above) |
| Grafana | HMAC signature header of the contact point, or Authorization: Bearer <secret> |
| PagerDuty | X-PagerDuty-Signature made with the subscription’s signing secret |
| Sentry | Sentry-Hook-Signature made with the integration’s client secret |
| Alertmanager, Datadog, New Relic, Opsgenie | Authorization: Bearer <secret> or X-Kanman-Token: <secret> |
| CloudWatch, Azure Monitor, Statuspage | ?key=<secret> in the URL; for CloudWatch also a valid AWS signature on every message |
Requests without the right proof are refused with status 401; unknown addresses with 404. Accepted requests are answered with 202. Payloads larger than 512 KB are refused.
Audit events
| Event | When |
|---|---|
| Service changed | A service or its on-call settings were created, changed or deleted |
| Signal source changed | A source was added, changed, paused, deleted or its secret rotated |
| Signal received | A delivery from an alerting tool or a failing or recovering uptime check |
| Incident opened, updated, resolved | The incident’s life cycle, including expedite fixes kanman started |
| Alert updated in source | kanman acknowledged or resolved an alert in PagerDuty or Opsgenie |
See Audit export format.
Last updated: January 1, 0001
Open kanman