recovery.readiness_changed
A line of the Disaster Recovery readiness checklist changed state, and here is the whole checklist as it stands now.
When this fires
The readiness checklist is what a creator has in place before anything happens: a second factor on the account, a backup sign-in account, and, per connector, the standbys, mirrors and automatic failover the platform can verify. Subscriby records the checklist's state after every event that could move a line (a standby registered or removed, a resource failed over or replaced, an account relinked, a connector installed, connected, disconnected or uninstalled) and once a night for the things that fire no event (a second factor, a passkey, a plan change). When the state differs from the last one recorded, this event fires with the checklist as it stands. Recording the same state twice fires nothing.
Required ability
project-recovery:view — token must carry this at mint time to subscribe an endpoint to this event.
Payload
{
"id": "evt_01HX...",
"type": "recovery.readiness_changed",
"created_at": "2026-09-01T14:22:09Z",
"api_version": "2026-05-01",
"project_id": null,
"data": {
"completed": 4,
"total": 6,
"complete": false,
"items": [
{ "key": "second_factor", "connector": null, "done": true, "locked": false },
{ "key": "backup_identity", "connector": null, "done": true, "locked": false },
{ "key": "standby_installation", "connector": "telegram", "done": true, "locked": false },
{ "key": "standby_spaces", "connector": "telegram", "done": false, "locked": false },
{ "key": "auto_failover", "connector": "telegram", "done": true, "locked": false },
{ "key": "live_mirror", "connector": "telegram", "done": false, "locked": false }
],
"changed": ["telegram:standby_spaces", "telegram:live_mirror"]
}
}Field reference
| Field | Type | Notes |
|---|---|---|
id | string ULID | Unique event id, prefixed evt_. Use for idempotent processing. |
type | string | Always recovery.readiness_changed for this event. |
created_at | ISO 8601 timestamp | Server-side emission time. |
api_version | string | Webhook API contract version. |
project_id | null | Readiness is the creator's, not one project's. |
data.completed | integer | Verifiable lines in place. |
data.total | integer | Verifiable lines in all; reminders are not counted. |
data.complete | boolean | Whether every verifiable line is in place. |
data.items | array | Every verifiable line, in the order the dashboard shows them. |
data.items[].key | string | The line's key: second_factor, backup_identity, or a connector's own key such as standby_spaces. |
data.items[].connector | string | null | The connector the line belongs to; null for the account-level lines. |
data.items[].done | boolean | Whether the line is in place. |
data.items[].locked | boolean | Whether the plan lacks the prevention feature the line needs. |
data.changed | array of string | The lines still open after the change, as connector:key (or key for an account-level line). |
Caveats
- The first checklist ever recorded for a creator fires nothing: there is no earlier state to differ from.
- Reminders (a copy of the content elsewhere, a second human administrator) never appear here; they cannot be verified.
- The labels, descriptions and fix links of each line are not in the payload; read them from
GET /v1/recovery/readiness.
Related events
recovery.standby_registered— one of the changes that leads here.recovery.standby_removed— another.- Recovery events overview — back to family overview.
How is this guide?