Skip to content
DocsAll docs
Console

Errors

Lists the errors that the API returns and the action to take for each.

Last updated

On this page

Quota

409, plain text. Creating, cloning, restoring, or taking a snapshot past a ceiling, or starting a workspace while over the disk ceiling:

{dimension}: {used} of {limit} in use; request more under Quota

{dimension} is workspaces, environments, snapshots, diskGb, cpu, memoryGb, or capsules. A retry after you free something succeeds. To raise a ceiling, open a quota request; it answers 409 a request is already pending while another of the same kind is open.

Team access

StatusBodyWhen
403your access to {team} is pausedYour membership is paused. Everything of the team's is refused until an admin unpauses you.
403you are no longer a member of {team}You were removed from the team and are acting on an object you own there.
404not foundThe object does not exist, or is not yours to see.

The team routes have their own wording; see teams, keys and tokens.

Names

422, JSON. A workspace, environment, or desk name that breaks the rule:

{"error": "name must be 1-40 lowercase letters, digits or '-', start with a letter, end with a letter or digit, no '--', and not be reserved (ws, env, api, admin, system, kl, bld-*) or look like an id"}

400, plain text. A service name that breaks its rule (reserved words are allowed for services): service name "{name}" must be 1-40 lowercase letters, digits or '-', start with a letter, end with a letter or digit, no '--'.

409, plain text. The name is taken by another of yours:

  • a workspace named "{name}" already exists here
  • an environment named "{name}" already exists here
  • you already have a desk named {name} in {team}

409, JSON. The name given matches more than one object you can see. Qualify it as team/name (or ?owner=), or use the id:

json
{"error": "\"backend\" is ambiguous; qualify it as owner/name", "matches": [{"id": "ws-…", "name": "backend", "team": "acme"}]}

A desk named ambiguously across teams answers more than one desk is named {name}; name it as team/{name} as plain text (api/desks.rs:273).

Lifecycle conflicts

All 409, plain text unless noted.

BodyWhen
the storage pool is full; retry later or ask an operatorA create, a restore, a clone or a push that the shared storage pool cannot hold.
a snapshot is already being cut for this workspaceA second snapshot while one is in flight.
this snapshot is the base of {kind} {display}Deleting a snapshot a workspace or environment was built from.
this snapshot is where {kind} {display} stands now (its latest push)Deleting the latest push of a workspace or environment.
a sync point cannot be deleted by handDeleting the internal copy that a clone makes.
the volume still has a workspace or environmentDeleting a volume that still has a working copy.
this desk has no environment; connect one with PUT /v1/desks/{id}/environmentA desk route that needs an environment on a desk without one.
that workspace is in desk {name}; remove it there firstAdding a workspace that belongs to another desk.
conflict, retry / the desk changed; retry / the workspace was changed while this was being written; try againAnother write won; repeat the call.

Capsule routes answer 409 and 422 in JSON (api/capsules/mod.rs:97-103); their wording is on the capsule reference.

Named volumes

Plain text unless noted. The first four rows are the answers of a push. The capsule routes answer in JSON.

StatusBodyWhen
422volume: this volume has no name yet; name it on its first pushThe first push of a volume has no volume.
422volume {name}: …The name breaks the rule, starts with an id prefix, or is a reserved word.
409volume {name} already exists; delete it firstAnother volume of the owner has the name.
409this volume is named {a}, not {b}A push names a volume that already has another name.
409volume {name} now names another volume; nothing was pushedThe name moved to another volume while the push ran.
409the version counter of {name} is busy; retryThe counter changed five times while this call tried to number its push. Repeat the call.
404volume {name} does not existA reference names a volume that the owner does not have. A volume of another owner gives the same answer.
404volume {name} has no version {n}A name@N reference, or a version route, names a version that does not exist or is not ready.
404volume {name} has no ready versionA name reference, and no version of the volume is ready.
422{ref}: a version is a whole number from 1, written without a leading zeroA reference such as go-base@0 or go-base@01.
409volume {name} is used by {readers}Deleting a volume that a pipeline or a run reads.
409version {n} of {name} is used by {readers}Deleting a version that a pipeline or a run reads.
503pipelines cannot be read right now; retryA delete cannot check the readers, so it deletes nothing.

A pipeline job that saves a volume ends with one of these sentences as its detail:

BodyWhen
saveTo {name}: the save failedThe platform cut the snapshot and it ended in error.
saveTo {name}: the save did not finish within 5 minutesThe snapshot was not ready in time. The platform deletes it.
saveTo {name}: volume {name} was created by another run while this job ran; nothing was savedTwo runs started with no volume of that name, and the other run saved first.
the job's capsule did not exit 0; nothing was savedThe job did not succeed, so it saves nothing.
the job's capsule is gone; nothing was savedThe capsule ended before the save.
the job's capsule was saved by another job; nothing was savedAnother job already saved this capsule.
the job's capsule does not save to {target}; nothing was savedThe capsule does not belong to a job that saves to {target}.
fromSnapshot {name}: volume {name} has no ready version; delete that volume or push to itThe volume exists but holds no ready version. A save never moves a name.
fromSnapshot {ref}: volume {name} does not existThe volume was deleted, or a condition skipped the job that makes it.
fromSnapshot {ref}: volume {name} has no version {n}The pinned version does not exist at job start.

Out-of-range values

422. A value outside its bounds (ttl_secs, capsule timeout_secs, cpu, memory_gb) or a package pin that cannot be resolved. The body names the field and the range, for example ttl_secs must be 600..=2592000 seconds. See limits.

Pipelines

Plain text. A refusal of a definition or a start lists every problem at once, one line each, after its first line.

StatusBodyWhen
422pipeline {name} is invalid: and one line for each problemA save of a definition that does not parse, does not validate, names a missing secret, or a missing after pipeline.
422pipeline {name} cannot run: and one line for each problemA start whose inputs or secrets do not fit the version.
403only a team admin can change team pipelinesA team member who is not an admin changes a team pipeline.
409{owner} has 50 pipelines; delete one first / pipeline {name} has 100 versions; delete an old versionA create or a save past a limit.
409pipeline {name} changed; retryAnother save won; repeat the call.
409this run has already finishedA cancel of a finished run.

The cause and the fix of each sentence are in the troubleshooting tables of Pipelines.

Git credentials

Plain text. The git credential helper writes the sentence to the log of the step as kd git-credential: {sentence}, and git then fails the command. In a device workspace the helper writes kode git-credential: {sentence}.

StatusBodyWhen
403job {key} did not ask for permissions.git: readThe token names a job whose definition has no permissions.git: read.
403your access to {team} is paused / you are no longer a member of {team}A workspace or capsule of a paused or removed member asks for a credential.
403this device is disabledA device workspace asks while its device is disabled.
409the workspace is stoppedA device workspace asks after it stopped or while it is deleted.
404{host} is not a git host Kode answers forThe host is not github.com or the GitLab of the region.
404no git connector of {owner} covers {host}/{repo}No connected connector of the owner reaches the repository.
404job {key} is not in this runThe token names a job that the run does not have.
409the run is over / job {key} is not runningThe request comes after the run or the job ended.
409the capsule is overThe request comes after the capsule ended.
404version {n} of {name} is goneThe pipeline version that the run uses was deleted.
409connector {name} is expired / GitHub is not configured / GitLab is not configuredThe connector or the provider app cannot make a credential.
422only https is answered / path is not a repository path / the body is not a git credential requestThe request is not for an HTTPS repository path.
429too many git credential requests; retry in a minuteThe token made more than 60 requests in one minute.
502a fixed sentence of the provider, such as the provider refused the credentialGitHub or GitLab refused to make the credential.

The cause and the fix of each sentence are in the troubleshooting table of Code in a job.