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

FieldTypeNotes
idstring ULIDUnique event id, prefixed evt_. Use for idempotent processing.
typestringAlways recovery.readiness_changed for this event.
created_atISO 8601 timestampServer-side emission time.
api_versionstringWebhook API contract version.
project_idnullReadiness is the creator's, not one project's.
data.completedintegerVerifiable lines in place.
data.totalintegerVerifiable lines in all; reminders are not counted.
data.completebooleanWhether every verifiable line is in place.
data.itemsarrayEvery verifiable line, in the order the dashboard shows them.
data.items[].keystringThe line's key: second_factor, backup_identity, or a connector's own key such as standby_spaces.
data.items[].connectorstring | nullThe connector the line belongs to; null for the account-level lines.
data.items[].donebooleanWhether the line is in place.
data.items[].lockedbooleanWhether the plan lacks the prevention feature the line needs.
data.changedarray of stringThe 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.

How is this guide?

On this page

Subscriby is a product designed by you — for you.

No boardroom full of executives deciding what we ships next. Our roadmap always shaped by you with your feedback.

Share feedback or a request