# Events (/docs/reference/events)

> The 32 event families the control plane publishes to webhooks, the SSE watch stream and sinks.



Every event is `{ id, type, tenantId, subject, data, time }`, delivered at least once in commit order. Subscriptions name a type or a family (`node.*`); a pattern nothing in this catalog can match is refused, and `webhooks.eventTypes` returns the same list.

| Type                            | Subject            | Module      | Description                                                                                                                                                                                                                                                                                                                                     |
| ------------------------------- | ------------------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `site.*`                        | `site/{id}`        | `server`    | Sites created, updated and deleted                                                                                                                                                                                                                                                                                                              |
| `project.*`                     | `project/{id}`     | `server`    | Projects created, changed and archived (project.archived: \{ projectId, name })                                                                                                                                                                                                                                                                 |
| `tenant.*`                      | `tenant/{id}`      | `server`    | IAM tenant mirrored as suspended, deleted or active again (tenant.state-changed: \{ tenantId, state, previous, reason }); a deleted tenant fully released by every module (tenant.torn-down)                                                                                                                                                    |
| `pool.*`                        | `pool/{id}`        | `capacity`  | Pools created, updated, offered, unoffered and archived                                                                                                                                                                                                                                                                                         |
| `quota.updated`                 | `pool/{id}`        | `capacity`  | A tenant quota on a pool changed                                                                                                                                                                                                                                                                                                                |
| `quota.budget-exceeded`         | `pool/{id}`        | `capacity`  | A tenant's IAM budget was spent and the pool offer's onBudgetExceeded applied (notify, stop-new or drain)                                                                                                                                                                                                                                       |
| `reservation.*`                 | `reservation/{id}` | `capacity`  | Reservation lifecycle (placed, active, released, ended, …) and awaiting-confirmation                                                                                                                                                                                                                                                            |
| `reservation.reassigned`        | `reservation/{id}` | `capacity`  | An offboarded identity's reservation moved to its successor (§12.7): \{ reservationId, from, to, reason }                                                                                                                                                                                                                                       |
| `node.*`                        | `node/{id}`        | `server`    | Node lifecycle and connectivity: joined, acceptance.\*, adopted, connected, disconnected, unreachable, lost, drained, deleted, status, command.queued, ssh-cert.issued, report-failed                                                                                                                                                           |
| `node.command.cancel-requested` | `node/{id}`        | `server`    | Cancelling a command was requested (\{ nodeId, commandId, kind, state })                                                                                                                                                                                                                                                                        |
| `node.condition.changed`        | `node/{id}`        | `inventory` | A hygiene or pressure condition was raised or cleared (DriverMismatch, CertExpiring, DaemonOutdated, Cpu/Memory/DiskPressure): \{ condition, status, reason, noSchedule }                                                                                                                                                                       |
| `node.remediation.*`            | `node/{id}`        | `provision` | Health remediation started, succeeded or escalated to an operator                                                                                                                                                                                                                                                                               |
| `pool.remediation.paused`       | `node/{id}`        | `provision` | The remediation circuit breaker held a pool back (too many nodes turned unhealthy)                                                                                                                                                                                                                                                              |
| `node.inventory.changed`        | `node/{id}`        | `inventory` | A node reported a different inventory                                                                                                                                                                                                                                                                                                           |
| `node.gpu.*`                    | `node/{id}`        | `inventory` | A GPU appeared or went missing                                                                                                                                                                                                                                                                                                                  |
| `node.mig.*`                    | `node/{id}`        | `inventory` | A MIG layout changed                                                                                                                                                                                                                                                                                                                            |
| `node.disk.*`                   | `node/{id}`        | `inventory` | A disk was replaced                                                                                                                                                                                                                                                                                                                             |
| `node.driver.*`                 | `node/{id}`        | `inventory` | A driver changed                                                                                                                                                                                                                                                                                                                                |
| `node.enrolled`                 | `node/{id}`        | `metal`     | A bare-metal machine enrolled                                                                                                                                                                                                                                                                                                                   |
| `node.pxe-mac.discovered`       | `node/{id}`        | `metal`     | PXE discovery found the MAC of a machine enrolled without MACs, first seen under its product UUID right after metal power-cycled it: a candidate for metal.confirmMac, or bound at once on a pool that trusts its provisioning network (\{ nodeId, mac, productUuid, siteId, agentNodeId, bound })                                              |
| `node.pxe-mac.confirmed`        | `node/{id}`        | `metal`     | An operator bound a machine's PXE MAC with metal.confirmMac (\{ nodeId, mac, discovered, requestId })                                                                                                                                                                                                                                           |
| `node.provision.*`              | `node/{id}`        | `metal`     | Provisioning state transitions of a bare-metal node                                                                                                                                                                                                                                                                                             |
| `command.settled`               | `command/{id}`     | `gateway`   | A command reached a terminal state                                                                                                                                                                                                                                                                                                              |
| `workflow.*`                    | `workflow/{id}`    | `provision` | Provisioning workflow transitions                                                                                                                                                                                                                                                                                                               |
| `instance.*`                    | `instance/{id}`    | `vps`       | VPS instance lifecycle                                                                                                                                                                                                                                                                                                                          |
| `sandbox.*`                     | `sandbox/{id}`     | `vps`       | Sandbox lifecycle (§3.7): created, ready (its instance first runs), extended, expiring (once, before expiry: \{ expiresAt }), expired (before the delete), withdrawn (its agent or delegation ended, or its owner left without a successor: \{ reason }), reassigned (\{ from, to, reason }), deleted; data \{ templateId, instanceId, poolId } |
| `sandbox.snapshot.*`            | `sandbox/{id}`     | `vps`       | A sandbox snapshot settled: ready \{ snapshotId, includeMemory, sha256, sizeBytes } or failed \{ snapshotId, reason }                                                                                                                                                                                                                           |
| `fleet.*`                       | `fleet/{id}`       | `fleet`     | FleetConfig converged or drifted                                                                                                                                                                                                                                                                                                                |
| `rollout.*`                     | `rollout/{id}`     | `rollout`   | Daemon rollouts started, paused, resumed, aborted, completed                                                                                                                                                                                                                                                                                    |
| `tunnel.*`                      | `tunnel/{id}`      | `server`    | Tunnels issued and closed                                                                                                                                                                                                                                                                                                                       |
| `security.*`                    | `varies`           | `server`    | Join tokens, site tokens, refused joins, revoked certificates, secrets                                                                                                                                                                                                                                                                          |
| `webhook.ping`                  | `webhook/{id}`     | `events`    | A test delivery from webhooks.ping                                                                                                                                                                                                                                                                                                              |
