> ## Documentation Index
> Fetch the complete documentation index at: https://docs.slipway.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Statuses & events

> Every value a deployment or environment status can take, and every event kind.

## Deployment statuses

A deployment is always in exactly one status.

| Status       | Meaning                                                                                              | Terminal                                  |
| ------------ | ---------------------------------------------------------------------------------------------------- | ----------------------------------------- |
| `queued`     | Created, about to start.                                                                             | no                                        |
| `building`   | At least one service is building.                                                                    | no                                        |
| `deploying`  | Images ready; containers starting.                                                                   | no                                        |
| `healthy`    | Every public service is ready. The TTL clock starts here for ephemeral deploys.                      | no — can still be superseded or torn down |
| `sleeping`   | A PR preview is idle and scaled to zero; wakes on the next request. See [Sleep](/deployments/sleep). | no                                        |
| `resuming`   | A request arrived for a sleeping preview; scaling back up (usually 5–20s).                           | no                                        |
| `failed`     | A build, deploy, or healthcheck failed. Reason in `failure_reason`.                                  | yes                                       |
| `cancelled`  | Cancelled by you, or superseded mid-build by a newer commit.                                         | yes                                       |
| `superseded` | A newer healthy deployment for the same branch took over, or an ephemeral TTL expired.               | yes                                       |

```
queued ──► building ──► deploying ──► healthy ──► superseded
   └──────────┴─────────────┴──► cancelled / failed
```

`cancelled` and `failed` are reachable from any non-terminal status; `superseded` only from `healthy`. The deployments list shows status as a coloured pill and can filter to one status at a time.

## Environment statuses

Environments have their own state machine, separate from their component deployments.

| Status                       | Meaning                                                                | Terminal               |
| ---------------------------- | ---------------------------------------------------------------------- | ---------------------- |
| `creating`                   | Row exists; no deploy yet.                                             | no                     |
| `deploying`                  | One or more components in flight.                                      | no                     |
| `healthy`                    | Every component is healthy. TTL clock starts here.                     | no                     |
| `degraded`                   | At least one component failed, but others keep serving.                | no                     |
| `failed`                     | Every component failed on first deploy.                                | yes (until a redeploy) |
| `sleeping` / `resuming`      | A PR-spawned instance is idle / waking. Primary instances never sleep. | no                     |
| `tearing_down` / `torn_down` | Teardown in progress / complete. The row stays for history.            | torn\_down: yes        |

`degraded` is soft — redeploying the failing component flips it back to `healthy`. See [Environment lifecycle](/environments/lifecycle).

## Deployment events

Every state change writes an event. These form the timeline on the deployment page.

| Kind                              | When                                                                | Payload                                                                          |
| --------------------------------- | ------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| `queued`                          | Deployment created.                                                 | —                                                                                |
| `secrets_resolved`                | Secret references looked up.                                        | `{ secrets: [{name, scope, source}] }` — never values                            |
| `vars_resolved`                   | Variable references looked up.                                      | `{ vars: [{name, scope, source, value}] }` — values included                     |
| `registries_resolved`             | Private-registry credentials assembled.                             | `{ registries: [...] }`                                                          |
| `service_refs_resolved`           | Every `${service.*}` reference matched a sibling.                   | `{ refs: [{service, field}] }`                                                   |
| `service_refs_unresolved`         | A `${service.*}` reference couldn't resolve; the deploy is failing. | `{ errors: [{ref, reason}] }`, reason ∈ `unknown` / `no_port` / `no_public_port` |
| `build_start` / `build_end`       | Per buildable service — build started / finished (fresh or cached). | —                                                                                |
| `deploy_start`                    | Containers starting.                                                | —                                                                                |
| `cutover`                         | A public service's URL is live (once per public service).           | —                                                                                |
| `healthy`                         | Every public service is ready.                                      | —                                                                                |
| `failed` / `cancelled`            | Terminal failure / cancellation.                                    | —                                                                                |
| `sleeping` / `resuming` / `awake` | A PR preview slept, started waking, finished waking.                | —                                                                                |
| `gc`                              | Ephemeral TTL expired; torn down.                                   | —                                                                                |
| `notification_failed`             | A Slack / Discord / webhook channel rejected delivery.              | `{ channel_id }`                                                                 |

## Environment events

Surfaced on the environment page's **Log** tab.

| Kind                                              | When                                                                                           |
| ------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| `env_created`                                     | An environment was created.                                                                    |
| `env_deploy_start`                                | An environment deploy started.                                                                 |
| `component_deploy_start` / `component_deploy_end` | One component's deploy started / reached a terminal state.                                     |
| `component_healthy` / `component_failed`          | One component flipped healthy / failed.                                                        |
| `service_name_conflict`                           | Two components expose the same service name; the deploy was aborted. `{ service, components }` |
| `env_healthy` / `env_degraded` / `env_failed`     | The environment settled in that state.                                                         |
| `env_cancelled` / `env_torn_down`                 | The environment was cancelled / fully torn down.                                               |
| `env_clone`                                       | The environment was cloned from another. `{ sourceEnvId }`                                     |
| `env_sleeping` / `env_resuming` / `env_awake`     | A PR-spawned instance slept / started waking / finished waking.                                |

## Volume events

Surfaced as snapshot history on a deployment's page.

| Kind                | When                                                  | Payload                   |
| ------------------- | ----------------------------------------------------- | ------------------------- |
| `snapshot_taken`    | A snapshot was captured as the new latest.            | `{ sequence, sizeBytes }` |
| `snapshot_reverted` | An in-place revert restored an earlier snapshot.      | `{ sequence }`            |
| `snapshot_pruned`   | An old snapshot was pruned past the retention cap.    | `{ sequence }`            |
| `cloned`            | A preview seeded its volume from the latest snapshot. | `{ deploymentId }`        |
| `failed`            | A volume operation errored.                           | `{ error }`               |

## Billing gating

Write actions (deploy, create environment, add a member, provision storage) are gated on the org's billing state:

* **Paused (suspended).** When a card-free trial expires, or a paid invoice fails, and the grace period elapses without payment, the org is paused: every environment is scaled to zero and write actions return **402 Payment Required** with `billing: organization is suspended for non-payment`. Adding a payment method on **Settings → Billing** resumes the org and scales its environments back up automatically.
* **No plan assigned.** In the rare case an org has no plan at all (no default plan is configured for the install), the API returns **402 Payment Required** with `billing: organization has no plan assigned`, and the console routes to the plan picker.

A trialing org is **not** gated — the card-free trial has full access until it expires.
