connector.installed
A connector was installed on a project — a pending installation with no credentials yet.
When this fires
A creator (or a token) installs a connector on a project: from the Connectors tab, through POST /v1/projects/{project}/connectors/{key} or the install_connector tool. Installing says "this project runs this connector" and opens the row the Connectors tab shows as pending; connecting, which hands the connector the creator's credentials, is a separate act and fires connector.connected. Installing a connector that is already installed changes nothing and fires nothing; bringing an uninstalled connector back fires this again, the row pending once more with its settings kept.
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.installed",
"created_at": "2026-09-12T10:05:00Z",
"api_version": "2026-05-01",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"data": {
"connector": "discord",
"installation_id": "3b8f0c6e-2d41-4a97-9e5f-1c7d6b2a8e40",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"state": "pending"
}
}Field reference
| Field | Type | Notes |
|---|---|---|
id | string ULID | Unique event id, prefixed evt_. Use for idempotent processing. |
type | string | Always connector.installed 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, as the directory lists it. |
data.installation_id | string UUID | The installation row; what the project's connector endpoints return as id. |
data.project_id | string UUID | Mirrors top-level project_id. |
data.state | string | Always pending here: nothing is connected yet. |
Caveats
- A second distinct connector on a project needs the owner's
multi_connectorcapability (Growth); the install is refusedCONNECTOR_TIER_REQUIREDand nothing fires. - The first connector's bot flow connects in one step from the dashboard, so an existing project sees
connector.connectedwithout a precedingconnector.installed.
Related events
connector.connected— the credentials handed over.connector.disconnected— the reverse.- Connector events overview — back to family overview.
How is this guide?