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