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 sandboxes. 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 session 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 session 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 session named ambiguously across teams answers more than one session is named {name}; name it as team/{name} as plain text (api/sessions.rs:273).

Lifecycle conflicts

All 409, plain text unless noted.

BodyWhen
workspace is interrupted: its node is down; it resumes when the node returnsStarting a workspace whose node is down. environment is interrupted: … for an environment, which has no clone fallback.
the source's node is down and no other node holds a sync point of it yet; nothing can be cloned until one syncs or the node returnsCloning an interrupted workspace before any other node holds a copy.
a snapshot is already being cut for this workspaceA second snapshot while one is in flight.
this snapshot is the base of a running worktreeDeleting a snapshot a running workspace stands on.
a sync point cannot be deleted by handDeleting a platform-cut sync point.
the volume still has a workspace or environmentDeleting a volume that still has a working copy.
this session has no environment; connect one with PUT /v1/sessions/{id}/environmentA session route that needs an environment on a session without one.
that workspace is in session {name}; remove it there firstAdding a workspace that belongs to another session.
conflict, retry / the session changed; retry / the workspace was changed while this was being written; try againAnother write won; repeat the call.

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

Named volumes

Plain text unless noted. The first four rows are the answers of a push. The sandbox 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 sandbox did not exit 0; nothing was savedThe job did not succeed, so it saves nothing.
the job's sandbox is gone; nothing was savedThe sandbox ended before the save.
the job's sandbox was saved by another job; nothing was savedAnother job already saved this sandbox.
the job's sandbox does not save to {target}; nothing was savedThe sandbox 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, sandbox 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 kl git-credential: {sentence}, and git then fails the command.

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, bench or sandbox of a paused or removed member asks for a credential.
404{host} is not a git host Kloudlite 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 sandbox is overThe request comes after the sandbox 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.