---
title: "Webhook event types"
description: ""
canonical: "https://kingminos.com/docs/webhooks/event-types/"
sourceKind: "source-mdx"
---

## Active events (Run Health tranche)

| Event | Fires when |
|---|---|
| `run.failed` | A workspace×capability stream transitions **healthy → failing** — one alert per incident, not every failed run. 3 consecutive failed runs for the same workspace×capability fire once. A success in between resets the count. A **platform-breaking failure** (KingMinos storage outage) fires on the first failure. |
| `run.recovered` | A previously failing stream starts succeeding again (failing → healthy) on its next successful run. |
| `test.ping` | Delivered only by `POST /v1/webhooks/{id}/test` — not a subscription type. Ignores `enabled_events`. |

## What counts as a failure

Only system-level run failures reach the tracker: a run that fails outright (HTTP 5xx, storage errors, deadlines). Business misses stay HTTP 200 answers and vendor rate-limits or timeouts absorbed by the waterfall are not failures. The first alert after the threshold carries `consecutive_failures: 3`. A storage outage fires immediately and carries the running count — `1` from a clean state, higher if earlier failures had already started counting.

Every `run.failed` payload pairs a readable **`reason`** (≤240 characters, email addresses redacted, never raw JSON) with a **`remediation`** — the exact fix, ending in a docs link.

## Reserved event names

These names are held in the namespace. Subscribing to one returns `400` with the list of available types. They are not delivered yet — do not build against them:

- `billing.frozen`, `billing.unfrozen`
- `credits.exhausted`, `credits.low`
- `vendor.uptime.changed`
- `run.completed` (KingMinos answers synchronously; a per-run delivery tranche would be opt-in and capped)
