connector.outage_opened
A platform refused a project's live installation — token revoked or regenerated, bot deleted — and the connector entered an outage.
When this fires
The hourly health probe recorded a platform-caused refusal of a project's live installation: the platform says the credentials are revoked or regenerated, or that the bot or app no longer exists. Rate limits, unclassified errors, standby installations and a creator's own Disconnect never open an outage. A probe that repeats the same verdict does not fire this again; one outage stays open until connector.outage_closed.
While the outage is open, every plan that unlocks a place on that connector is off sale on the portal, in the bot, through access codes and trials and through the REST checkout, and the installation object reads sales_paused: true with an outage block. See Connector outages for what members and creators see.
Required ability
project-connector:view — token must carry this at mint time to subscribe an endpoint to this event.
Payload
{
"id": "evt_01HX...",
"type": "connector.outage_opened",
"created_at": "2026-09-13T10:05:00Z",
"api_version": "2026-05-01",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"data": {
"connector": "telegram",
"installation_id": "3b8f0c6e-2d41-4a97-9e5f-1c7d6b2a8e40",
"outage_id": "9c1e4d2a-7b3f-4e8a-a2d1-5f6b7c8d9e0f",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"reason": "connector_api_unauthorized",
"started_at": "2026-09-13T10:05:00Z"
}
}Field reference
| Field | Type | Notes |
|---|---|---|
id | string ULID | Unique event id, prefixed evt_. Use for idempotent processing. |
type | string | Always connector.outage_opened for this event. |
created_at | ISO 8601 timestamp | Server-side emission time. |
api_version | string | Webhook API contract version. |
project_id | string UUID | Project this event belongs to. |
data.connector | string | The connector key. |
data.installation_id | string UUID | The refused installation. |
data.outage_id | string UUID | The outage row; the same id closes in connector.outage_closed. |
data.project_id | string UUID | Mirrors top-level project_id. |
data.reason | string | The connector's reason code for the refusal, the same code state_reason carries. |
data.started_at | ISO 8601 timestamp | When the refusal was recorded, which is where the outage's length is measured from. |
Caveats
connector.status_changedfires beside this event withstate: degraded; this event is the narrower signal that sales froze.- A Disaster Recovery incident opens too when the refusal warrants a replacement; see
recovery.incident_opened.
Related events
connector.outage_closed— the outage ended.connector.status_changed— the state transition behind it.- Connector events overview — back to family overview.
How is this guide?