> Documentation index: https://docs.kiste.run/llms.txt, a list of every page in this documentation.

# Overview

> How Kiste reports errors, and every error code with its meaning and fix.

Every failure you can see in Kiste, in the CLI, the console, the desktop viewer or the HTTP API, is one registered error with a short code such as `K01`. The same code means the same thing everywhere, and this reference is rendered from the registry itself, the file [kiste.run/errors.json](https://kiste.run/errors.json).

## Reading an error

The API answers with one envelope:

```json
{
  "error": {
    "code": "K01",
    "type": "machine_not_found",
    "message": "There is no Kiste named review-42 in your account. (code: K01)",
    "hint": "Check the name in your list of Kisten.",
    "param": null,
    "retryable": false,
    "request_id": "01J9Z8X7W6V5T4S3R2Q1P0N9M8",
    "docs_url": "https://kiste.run/errors/K01"
  }
}
```

| Field | Meaning |
| --- | --- |
| `code` | The support code. It also ends the message as `(code: K01)`. Quote it to support. |
| `type` | A stable name for the error. Scripts and integrations branch on `type`; its meaning never changes. |
| `message` | A sentence for people, safe to show as it is. |
| `hint` | What to do next. |
| `param` | The request field the error is about, or `null`. |
| `retryable` | Whether the same request can succeed later. |
| `request_id` | The ID of this request. Every answer also carries it in the `x-request-id` header. |
| `docs_url` | The explanation of this code. |

Errors that can be retried after a fixed time also send a `Retry-After` header with the seconds to wait. The CLI prints the same information:

```text
× There is no Kiste named review-42 in your account. (code: K01)
  hint Check available names with `kiste list`.
  request: 01J9Z8X7W6V5T4S3R2Q1P0N9M8
```

With `--json` the CLI writes the envelope to standard error as `{"ok":false,"error":{…}}` and exits with the code listed for the error. [Output modes and exit codes](https://docs.kiste.run/cli/output.md) has the details.

Codes that are used only between Kiste's own services are not listed; you never see them.

## Codes by area

| Prefix | Area | Codes |
| --- | --- | --- |
| [K](https://docs.kiste.run/errors/k.md) | Kisten (machines, snapshots, images, environments, commands) | 35 |
| [N](https://docs.kiste.run/errors/n.md) | Network and connections | 8 |
| [D](https://docs.kiste.run/errors/d.md) | Desktop and browser links | 7 |
| [S](https://docs.kiste.run/errors/s.md) | Kiste Stream (published apps on kiste.stream) | 7 |
| [A](https://docs.kiste.run/errors/a.md) | Account and sign-in | 32 |
| [B](https://docs.kiste.run/errors/b.md) | Billing | 17 |
| [L](https://docs.kiste.run/errors/l.md) | Limits and capacity | 16 |
| [C](https://docs.kiste.run/errors/c.md) | The kiste command-line tool | 18 |
| [P](https://docs.kiste.run/errors/p.md) | Platform | 7 |

## All codes

| Code | Type | Message |
| --- | --- | --- |
| [K01](https://docs.kiste.run/errors/k.md#k01) | `machine_not_found` | There is no Kiste named {name} in your account. |
| [K02](https://docs.kiste.run/errors/k.md#k02) | `machine_name_taken` | You already have a Kiste named {name}. |
| [K03](https://docs.kiste.run/errors/k.md#k03) | `machine_not_running` | {name} isn't running. |
| [K04](https://docs.kiste.run/errors/k.md#k04) | `machine_not_ready` | {name} is still starting up. |
| [K05](https://docs.kiste.run/errors/k.md#k05) | `machine_busy` | Another change to this Kiste is still in progress. |
| [K06](https://docs.kiste.run/errors/k.md#k06) | `invalid_machine_request` | That Kiste request isn't valid: {detail}. |
| [K07](https://docs.kiste.run/errors/k.md#k07) | `machine_start_failed` | This Kiste couldn't start. Its disk is kept. |
| [K08](https://docs.kiste.run/errors/k.md#k08) | `snapshot_not_found` | There is no snapshot {snapshot} in your account. |
| [K09](https://docs.kiste.run/errors/k.md#k09) | `snapshot_busy` | The snapshot {snapshot} is already being deleted. |
| [K10](https://docs.kiste.run/errors/k.md#k10) | `invalid_snapshot_request` | That snapshot request isn't valid: {detail}. |
| [K11](https://docs.kiste.run/errors/k.md#k11) | `snapshot_failed` | The snapshot couldn't be taken. The Kiste is unchanged. |
| [K12](https://docs.kiste.run/errors/k.md#k12) | `image_not_found` | There is no image {image} in your account. |
| [K13](https://docs.kiste.run/errors/k.md#k13) | `image_name_taken` | The image name {image} is already taken. |
| [K14](https://docs.kiste.run/errors/k.md#k14) | `image_in_use` | The image {image} is still used by a Kiste. |
| [K15](https://docs.kiste.run/errors/k.md#k15) | `image_not_ready` | The image {image} isn't ready yet. |
| [K16](https://docs.kiste.run/errors/k.md#k16) | `invalid_image_request` | That image request isn't valid: {detail}. |
| [K17](https://docs.kiste.run/errors/k.md#k17) | `environment_not_found` | There is no environment {environment} in your account. |
| [K18](https://docs.kiste.run/errors/k.md#k18) | `environment_name_taken` | You already have an environment named {environment}. |
| [K19](https://docs.kiste.run/errors/k.md#k19) | `invalid_environment` | That environment isn't valid: {detail}. |
| [K20](https://docs.kiste.run/errors/k.md#k20) | `environment_setup_failed` | The environment setup on {name} failed. |
| [K21](https://docs.kiste.run/errors/k.md#k21) | `command_not_found` | There is no command {command} on this Kiste. |
| [K22](https://docs.kiste.run/errors/k.md#k22) | `command_id_taken` | A command with the ID {command} already exists. |
| [K23](https://docs.kiste.run/errors/k.md#k23) | `invalid_command` | That command request isn't valid: {detail}. |
| [K24](https://docs.kiste.run/errors/k.md#k24) | `command_interrupt_failed` | The command couldn't be interrupted. |
| [K25](https://docs.kiste.run/errors/k.md#k25) | `metrics_unavailable` | The usage of {name} can't be read right now. |
| [K26](https://docs.kiste.run/errors/k.md#k26) | `guest_unresponsive` | This Kiste stopped responding and was stopped. Its disk is kept. |
| [K27](https://docs.kiste.run/errors/k.md#k27) | `snapshot_unavailable` | Snapshots aren't available for this Kiste right now. |
| [K28](https://docs.kiste.run/errors/k.md#k28) | `machine_stop_failed` | This Kiste couldn't be stopped cleanly. Its disk is kept. |
| [K29](https://docs.kiste.run/errors/k.md#k29) | `machine_restart_failed` | This Kiste couldn't restart. Its disk is kept. |
| [K30](https://docs.kiste.run/errors/k.md#k30) | `machine_delete_failed` | This Kiste couldn't be deleted. |
| [K31](https://docs.kiste.run/errors/k.md#k31) | `snapshot_restore_failed` | The snapshot couldn't be restored. The snapshot is kept. |
| [K32](https://docs.kiste.run/errors/k.md#k32) | `machine_fork_failed` | This Kiste couldn't be copied. The original is unchanged. |
| [K33](https://docs.kiste.run/errors/k.md#k33) | `snapshot_delete_failed` | The snapshot couldn't be deleted. |
| [K34](https://docs.kiste.run/errors/k.md#k34) | `snapshot_name_taken` | You already have a snapshot named {snapshot}. |
| [K35](https://docs.kiste.run/errors/k.md#k35) | `command_failed` | The command couldn't be run in {name}. |
| [N01](https://docs.kiste.run/errors/n.md#n01) | `compute_unreachable` | kiste.run can't reach the compute service right now. Your Kisten are safe. |
| [N02](https://docs.kiste.run/errors/n.md#n02) | `compute_bad_response` | The compute service sent an answer kiste.run didn't expect. |
| [N03](https://docs.kiste.run/errors/n.md#n03) | `request_timeout` | That took too long and was stopped. |
| [N04](https://docs.kiste.run/errors/n.md#n04) | `edge_unreachable` | Can't reach kiste.run. |
| [N05](https://docs.kiste.run/errors/n.md#n05) | `connection_interrupted` | The connection to kiste.run was interrupted. |
| [N06](https://docs.kiste.run/errors/n.md#n06) | `client_timeout` | kiste.run didn't answer in time. |
| [N07](https://docs.kiste.run/errors/n.md#n07) | `ssh_connection_failed` | Couldn't open an SSH connection to {name}. |
| [N08](https://docs.kiste.run/errors/n.md#n08) | `ssh_key_not_accepted` | {name} didn't accept this computer's key. |
| [D01](https://docs.kiste.run/errors/d.md#d01) | `desktop_unavailable` | The desktop isn't available right now. |
| [D02](https://docs.kiste.run/errors/d.md#d02) | `desktop_not_supported` | {name} has no desktop. |
| [D03](https://docs.kiste.run/errors/d.md#d03) | `desktop_stream_failed` | The desktop stream couldn't be started. |
| [D04](https://docs.kiste.run/errors/d.md#d04) | `desktop_session_not_found` | This desktop session has ended. |
| [D05](https://docs.kiste.run/errors/d.md#d05) | `invalid_desktop_request` | That desktop request isn't valid: {detail}. |
| [D06](https://docs.kiste.run/errors/d.md#d06) | `desktop_sign_in_required` | Sign in to Kiste in this browser to open the desktop. |
| [D07](https://docs.kiste.run/errors/d.md#d07) | `link_invalid` | This link is no longer valid. |
| [S01](https://docs.kiste.run/errors/s.md#s01) | `service_not_found` | There is no published app {service}. |
| [S02](https://docs.kiste.run/errors/s.md#s02) | `service_name_taken` | {name} already publishes an app named {service}. |
| [S03](https://docs.kiste.run/errors/s.md#s03) | `invalid_service` | That app can't be published: {detail}. |
| [S04](https://docs.kiste.run/errors/s.md#s04) | `service_unavailable` | This app isn't answering right now. |
| [S05](https://docs.kiste.run/errors/s.md#s05) | `service_request_rejected` | This request can't be passed to the app: {detail}. |
| [S06](https://docs.kiste.run/errors/s.md#s06) | `stream_address_not_found` | Nothing is streamed at this address. |
| [S07](https://docs.kiste.run/errors/s.md#s07) | `service_busy` | This app is getting more requests than it can take. Please wait {seconds} seconds and try again. |
| [A01](https://docs.kiste.run/errors/a.md#a01) | `authentication_required` | Please sign in to continue. |
| [A02](https://docs.kiste.run/errors/a.md#a02) | `invalid_credentials` | The email address or password is wrong. |
| [A03](https://docs.kiste.run/errors/a.md#a03) | `too_many_attempts` | Too many sign-in attempts. Please wait {seconds} seconds and try again. |
| [A04](https://docs.kiste.run/errors/a.md#a04) | `account_locked` | This account is locked for {seconds} seconds after failed sign-ins. |
| [A05](https://docs.kiste.run/errors/a.md#a05) | `signup_disabled` | Signing up isn't open. |
| [A06](https://docs.kiste.run/errors/a.md#a06) | `email_taken` | An account with this email address already exists. |
| [A07](https://docs.kiste.run/errors/a.md#a07) | `invalid_signup` | That sign-up isn't valid: {detail}. |
| [A08](https://docs.kiste.run/errors/a.md#a08) | `api_token_not_found` | There is no API key {token} in your account. |
| [A09](https://docs.kiste.run/errors/a.md#a09) | `api_token_name_taken` | You already have an active API key named {label}. |
| [A10](https://docs.kiste.run/errors/a.md#a10) | `invalid_api_token_request` | That API key request isn't valid: {detail}. |
| [A11](https://docs.kiste.run/errors/a.md#a11) | `api_token_cannot_mint` | An API key can't create other API keys. |
| [A12](https://docs.kiste.run/errors/a.md#a12) | `invalid_origin` | This request didn't come from kiste.run. |
| [A13](https://docs.kiste.run/errors/a.md#a13) | `cli_token_required` | This needs a sign-in from the command-line tool or an API key. |
| [A14](https://docs.kiste.run/errors/a.md#a14) | `oauth_invalid_request` | The sign-in request isn't valid. |
| [A15](https://docs.kiste.run/errors/a.md#a15) | `oauth_code_invalid` | The sign-in code is invalid or has expired. |
| [A16](https://docs.kiste.run/errors/a.md#a16) | `oauth_user_gone` | The account for this sign-in no longer exists. |
| [A17](https://docs.kiste.run/errors/a.md#a17) | `operator_only` | Only the operator can do this. |
| [A18](https://docs.kiste.run/errors/a.md#a18) | `device_key_not_found` | There is no computer {id} signed in to your account. |
| [A19](https://docs.kiste.run/errors/a.md#a19) | `invalid_device_key` | That computer key isn't valid: {detail}. |
| [A20](https://docs.kiste.run/errors/a.md#a20) | `session_not_found` | There is no sign-in {id} on your account. |
| [A22](https://docs.kiste.run/errors/a.md#a22) | `test_account_exists` | The test account {name} already exists. |
| [A23](https://docs.kiste.run/errors/a.md#a23) | `invalid_test_account` | That test account isn't valid: {detail}. |
| [A24](https://docs.kiste.run/errors/a.md#a24) | `webhook_not_found` | There is no webhook endpoint {id} in your account. |
| [A25](https://docs.kiste.run/errors/a.md#a25) | `webhook_name_taken` | You already have a webhook endpoint named {name}. |
| [A26](https://docs.kiste.run/errors/a.md#a26) | `invalid_webhook` | That webhook endpoint isn't valid: {detail}. |
| [A27](https://docs.kiste.run/errors/a.md#a27) | `alert_not_found` | That alert doesn't exist. |
| [A28](https://docs.kiste.run/errors/a.md#a28) | `invalid_alert` | That alert setting isn't valid: {detail}. |
| [A29](https://docs.kiste.run/errors/a.md#a29) | `token_rejected` | Your sign-in is no longer valid. |
| [A30](https://docs.kiste.run/errors/a.md#a30) | `account_deletion_requires_sign_in` | Deleting your account needs your own sign-in; an API key can't do it. |
| [A31](https://docs.kiste.run/errors/a.md#a31) | `account_deletion_operator` | The operator account can't be deleted. |
| [A32](https://docs.kiste.run/errors/a.md#a32) | `account_deletion_unconfirmed` | To delete your account, type its e-mail address exactly as confirmation. |
| [A33](https://docs.kiste.run/errors/a.md#a33) | `export_link_invalid` | This download link has expired or belongs to another account. |
| [B01](https://docs.kiste.run/errors/b.md#b01) | `billing_past_due` | Your last payment failed. |
| [B02](https://docs.kiste.run/errors/b.md#b02) | `wallet_empty` | Your credit is used up. |
| [B03](https://docs.kiste.run/errors/b.md#b03) | `plan_shape_not_included` | The {plan} plan doesn't include {shape} Kisten. |
| [B04](https://docs.kiste.run/errors/b.md#b04) | `plan_machine_limit` | The {plan} plan's Kiste limit is {limit}. |
| [B05](https://docs.kiste.run/errors/b.md#b05) | `plan_running_limit` | The {plan} plan's limit of running Kisten at once is {limit}. |
| [B06](https://docs.kiste.run/errors/b.md#b06) | `unknown_plan` | Please choose one of the offered paid plans. |
| [B07](https://docs.kiste.run/errors/b.md#b07) | `unknown_pack` | Please choose one of the offered credit packs. |
| [B08](https://docs.kiste.run/errors/b.md#b08) | `no_payment_method` | There is no saved card for auto-refill yet. |
| [B09](https://docs.kiste.run/errors/b.md#b09) | `no_customer` | There is nothing to manage before your first purchase. |
| [B10](https://docs.kiste.run/errors/b.md#b10) | `billing_unavailable` | Payments aren't available right now. |
| [B11](https://docs.kiste.run/errors/b.md#b11) | `payment_provider_unavailable` | The payment service isn't answering right now. |
| [B12](https://docs.kiste.run/errors/b.md#b12) | `invalid_billing_request` | That billing request isn't valid: {detail}. |
| [B13](https://docs.kiste.run/errors/b.md#b13) | `invalid_payment_event` | This payment event was refused. |
| [B14](https://docs.kiste.run/errors/b.md#b14) | `payment_event_failed` | This payment event couldn't be processed yet. |
| [B15](https://docs.kiste.run/errors/b.md#b15) | `already_subscribed` | You're already on the {plan} plan. |
| [B16](https://docs.kiste.run/errors/b.md#b16) | `plan_change_in_portal` | You already have a plan. Change it in the payment portal. |
| [B17](https://docs.kiste.run/errors/b.md#b17) | `api_key_cannot_change_billing` | An API key can't change payments or billing settings. |
| [L01](https://docs.kiste.run/errors/l.md#l01) | `rate_limited` | Too many requests. Please wait {seconds} seconds and try again. |
| [L02](https://docs.kiste.run/errors/l.md#l02) | `machine_limit` | Your account's Kiste limit is {limit}. |
| [L03](https://docs.kiste.run/errors/l.md#l03) | `running_limit` | Your account's limits for running Kisten at once are reached: {machines} running, {vcpu} vCPU, {memory_gib} GiB of memory. |
| [L04](https://docs.kiste.run/errors/l.md#l04) | `disk_limit` | Your Kisten and snapshots may use at most {gib} GiB of disk. |
| [L05](https://docs.kiste.run/errors/l.md#l05) | `machine_size_limit` | That Kiste is larger than your account allows: {detail}. |
| [L06](https://docs.kiste.run/errors/l.md#l06) | `image_limit` | Your account's image limit is {limit}. |
| [L07](https://docs.kiste.run/errors/l.md#l07) | `webhook_limit` | Your account's webhook endpoint limit is {limit}. |
| [L08](https://docs.kiste.run/errors/l.md#l08) | `api_token_limit` | Your account's limit of active API keys is {limit}. |
| [L09](https://docs.kiste.run/errors/l.md#l09) | `device_key_limit` | Your account's limit of signed-in computers is {limit}. |
| [L10](https://docs.kiste.run/errors/l.md#l10) | `test_account_limit` | The test account limit is {limit}. |
| [L11](https://docs.kiste.run/errors/l.md#l11) | `service_limit` | The limit of published apps per Kiste is {limit}. |
| [L12](https://docs.kiste.run/errors/l.md#l12) | `ssh_connection_limit` | You have too many SSH connections open (at most {limit}). |
| [L13](https://docs.kiste.run/errors/l.md#l13) | `capacity_unavailable` | There's no free capacity for this Kiste right now. |
| [L14](https://docs.kiste.run/errors/l.md#l14) | `connection_capacity` | Too many connections are open right now. |
| [L15](https://docs.kiste.run/errors/l.md#l15) | `environment_limit` | Your account's environment limit is {limit}. |
| [L16](https://docs.kiste.run/errors/l.md#l16) | `command_limit` | You have too many commands running at once (at most {limit}). |
| [C01](https://docs.kiste.run/errors/c.md#c01) | `invalid_arguments` | {detail}. |
| [C02](https://docs.kiste.run/errors/c.md#c02) | `confirmation_required` | This needs a confirmation. |
| [C03](https://docs.kiste.run/errors/c.md#c03) | `command_cancelled` | Cancelled. |
| [C04](https://docs.kiste.run/errors/c.md#c04) | `config_unreadable` | Your kiste settings couldn't be read. |
| [C05](https://docs.kiste.run/errors/c.md#c05) | `ssh_client_missing` | This needs the ssh program, which isn't installed. |
| [C06](https://docs.kiste.run/errors/c.md#c06) | `update_unavailable` | No update is available right now. |
| [C07](https://docs.kiste.run/errors/c.md#c07) | `update_failed` | The update couldn't be installed. |
| [C08](https://docs.kiste.run/errors/c.md#c08) | `remote_command_failed` | The command failed inside {name}. |
| [C09](https://docs.kiste.run/errors/c.md#c09) | `forward_not_running` | There is no port forward running for {name}. |
| [C10](https://docs.kiste.run/errors/c.md#c10) | `unexpected_response` | kiste.run sent an answer this version doesn't understand. |
| [C11](https://docs.kiste.run/errors/c.md#c11) | `usage_error` | {detail}. |
| [C12](https://docs.kiste.run/errors/c.md#c12) | `output_mode_unsupported` | {detail}. |
| [C13](https://docs.kiste.run/errors/c.md#c13) | `provider_not_configured` | {provider} is not signed in inside {name}. |
| [C14](https://docs.kiste.run/errors/c.md#c14) | `ssh_command_failed` | {program} failed: {detail}. |
| [C15](https://docs.kiste.run/errors/c.md#c15) | `credentials_not_carried` | Not every credential could be carried ({count}): {names}. |
| [C16](https://docs.kiste.run/errors/c.md#c16) | `doctor_found_problems` | Not everything is healthy. |
| [C17](https://docs.kiste.run/errors/c.md#c17) | `browser_sign_in_failed` | The browser sign-in didn't complete: {detail}. |
| [C18](https://docs.kiste.run/errors/c.md#c18) | `credential_unavailable` | {credential} can't be carried: {detail}. |
| [P01](https://docs.kiste.run/errors/p.md#p01) | `internal_error` | Something went wrong on our side. |
| [P02](https://docs.kiste.run/errors/p.md#p02) | `invalid_request` | That request isn't valid: {detail}. |
| [P03](https://docs.kiste.run/errors/p.md#p03) | `payload_too_large` | That request is too large. |
| [P04](https://docs.kiste.run/errors/p.md#p04) | `not_found` | This address doesn't exist. |
| [P05](https://docs.kiste.run/errors/p.md#p05) | `method_not_allowed` | This address doesn't accept that kind of request. |
| [P07](https://docs.kiste.run/errors/p.md#p07) | `shutting_down` | The compute service is restarting. |
| [P13](https://docs.kiste.run/errors/p.md#p13) | `api_token_activation_failed` | The new API key couldn't be activated. |

## Related topics

- [K: Kisten (machines, snapshots, images, environments, commands)](https://docs.kiste.run/errors/k.md)
- [N: Network and connections](https://docs.kiste.run/errors/n.md)
- [D: Desktop and browser links](https://docs.kiste.run/errors/d.md)
- [S: Kiste Stream (published apps on kiste.stream)](https://docs.kiste.run/errors/s.md)
- [A: Account and sign-in](https://docs.kiste.run/errors/a.md)
- [B: Billing](https://docs.kiste.run/errors/b.md)
- [L: Limits and capacity](https://docs.kiste.run/errors/l.md)
- [C: The kiste command-line tool](https://docs.kiste.run/errors/c.md)
- [P: Platform](https://docs.kiste.run/errors/p.md)
- Previous: [Schemas](https://docs.kiste.run/api/schemas.md)
- Next: [K: Kisten (machines, snapshots, images, environments, commands)](https://docs.kiste.run/errors/k.md)
