runlot
Reference

Error code

The list of error codes the CLI prints in the error [code] … format. In your program, branch on code, and use message only for display.

The source of truth for this page is Go source in cp/internal/public, cp/internal/core, node/internal/front, and node/internal/agent. The docs build generates this content from that source.

Reading error responses

All failed API responses use the same structure.

{ "error": { "code": "database_required", "message": "Create a database first" } }

The CLI prints this response in the error [database_required] … format and exits with code 1. In automation scripts, branch on code. message is a description for users and can change at any time.

The same code can be returned with different HTTP status codes depending on the situation. When that applies, all of them are listed in the status code column.

Error code list (84)

CodeHTTP statusDescription
access_denied401The access control bypass secret is incorrect.
access_exchange_failed502Access permission check did not complete. Retry shortly.
access_required401This deployment has access control configured, so login is required.
access_unavailable503The request was not processed because access permission could not be verified.
active_subscription409you still have an active paid subscription — cancel it on the billing screen first
already_member409The user is already a member of the organization. Change the role with a separate command.
already_pro409already on the Pro plan
artifact_lock_unavailable503artifact storage can't serialize deploy and teardown
backendThe backend service failed to process the request.
backup_failed503Failed to create the database backup.
bad_request400The request format is invalid.
bad_signature403the webhook signature does not match
billing_off501크레딧 충전이 설정되지 않았다
billing_unavailable502결제 서비스가 응답하지 않는다
bundle_too_largeThe bundle size exceeds the upload limit.
cold503The project is cold and is being restored from a backup. Retry shortly.
compatibility_date_unsupported400compatibilityDate … exceeds this runtime's maximum of … — lower the value in runlot.json to … or earlier
confirm_mismatch400The confirmation string does not match the project name.
cron_limit400the … plan allows up to … scheduled runs per org (currently …, this deployment adds …)
drain_incomplete503The switch cannot be made safely because the existing request has not finished processing.
email_failed503
email_not_declared409
email_rate_limited429
export_failed502 · 503Failed to export database diagnostics.
forbidden403You are authenticated, but you do not have permission to perform this action.
front_not_ready503The traffic frontend's initial sync is not complete yet.
front_unacked503The traffic frontend has not acknowledged the configuration change.
git_unavailable503repository browsing is not enabled
git_unreachable503failed to read the repository
github_token502Failed to exchange the GitHub token.
github_user502Failed to look up GitHub user information.
grant_failed500Failed to renew deployment permissions.
hostname_taken409This hostname is already in use by another project.
internal500An internal server error occurred. Try again shortly.
invite_expired409the invite has expired — ask an admin to resend it
invite_revoked409the invite has been canceled — ask an admin for a new one
invite_used409the invite has already been accepted
last_admin409The last admin of the organization. Changing the role leaves no one to manage the organization.
no_core503The control plane core service address is not set.
no_email501this node cannot receive mail
no_host400The request is missing the Host header.
no_log_buffer503No log source is configured for the admin API.
no_payment_method409저장된 결제 수단이 없다 — 먼저 한 번 충전하면 그 카드로 자동 충전을 켤 수 있다
no_placement503The project has not been placed on a node yet.
no_purge501this node can't tear down the project
no_ses_hook501the SES webhook is disabled
no_wake501This node cannot start an idle project.
no_writable_state501This node has no storage available to perform that database operation.
node_unreachable502Cannot connect to the node. Try again shortly.
not_a_member403The user is not a member of this organization.
not_found404The requested organization, project, or deployment could not be found.
not_here404This node cannot handle the requested project.
not_pro409not on the Pro plan
not_ready503Initial configuration sync is not complete yet.
op_conflict409The same operation ID is already in use for another operation.
op_in_flight503 · 409The same operation is already in progress.
org_not_empty409you can't delete this org because it still holds something — clean up projects, domains, and repositories first
org_slug_taken409This organization slug is already in use.
personal_org409you can't delete a personal org — this is the org created at your first login
project_deleting409the project is tearing down and can't accept new changes
project_name_taken409This project name is already in use.
rate_limitedYou exceeded the request limit. Try again shortly.
repo_exists409repository … already exists
reserved_name400This name is reserved and cannot be used.
restore_busy429You exceeded the number of restore operations that can run at the same time.
restore_failed500Failed to restore the database.
restore_stalled503The database restore operation was interrupted. Contact support.
restore_too_large429The restore operation exceeded the node's restore capacity limit.
restoring503The database is being restored. Try again after it finishes.
revoked403Permission for this placement has been revoked.
seal_failed503Failed to save the final database generation.
ssh_key_exists409this public key is already registered
suspended403 · 409The project is suspended.
unauthorized401The token is missing or has expired. Run runlot login again.
unknownAn intermediate proxy or similar, not the Runlot server, responded.
unknown_hostname404No project connected to that hostname could be found on this node.
unknown_node503Could not identify the project's home node address.
unknown_state503Unrecognized deployment state.
unsupportedThe current storage backend does not support this feature.
upstream_rate_limited
upstream_unreachableCannot connect to the deployed worker. Check the deployment status.
user_not_found404There is no login record for this account. Log in once first.
wake_failed503Failed to start the idle project.
workerd_unchecked503 · 500Failed to check the commit path state for the worker.

Errors returned by the running service (56)

This error code is returned when an internal runlot operation, such as placement, restore, or lease management, fails. Most cases resolve if you try again shortly. If the same error continues, contact support.

CodeHTTP statusDescription
already_done409The requested operation already completed.
cas_conflict409The resource state changed, so the request cannot be applied. Check the latest state and try again.
cert_generation403The certificate generation used in the request has been revoked.
claimed409Another instance is using this database. Try again shortly.
cname_conflict409A CNAME record cannot coexist with a record of another type on the same DNS name.
database_required409You need a database first. Add "database": true to runlot.json and deploy.
db_rewound409The metadata DB was restored to a previous state, so lease issuance stopped. This requires operator recovery action.
dek_unwrap_failed500Could not decrypt the project data encryption key.
dns_not_configured503The domain cannot be purchased because nameserver setup is not complete.
dnssec_off409DNSSEC is disabled for the domain zone. Enable it first.
domain_taken409This domain is already registered.
domain_unavailable409This domain cannot be registered.
email_address_taken409address … is in use by another project
email_unavailable409this installation has no mail domain (RUNLOT_MAIL_DOMAIN) — email cannot be enabled
era_ahead409The state version (era) in the request is higher than the version stored in the control plane.
era_write_failed500Failed to save the state version (era).
identity_mismatch403The hostname on the certificate does not match the hostname in the request body.
invalid_provider400Unsupported auth provider.
last_node_unavailable503The node that held the final database generation is unavailable.
lease_alive409The request cannot be processed because the existing lease is still valid.
lease_drain_pending409The existing lease is ending. Try again shortly.
lease_quarantine409The lease is isolated, so the request cannot be processed.
lease_seq_ahead409The lease sequence number in the request is behind the state recognized by the control plane.
lifecycle_disabled503Lifecycle operations are disabled.
managed_rrset409This is a DNS record managed by Runlot, so you cannot edit it directly.
master_key_version503The current control plane does not hold the master key version required for the request.
no_access_key503The key for creating access control cookies is not set.
no_database409This project has no database connected.
no_home_node503 · 409Could not identify the project's home node address.
no_last_node503Could not identify the node that held the final database generation.
no_master_key503The control plane's master key is not set.
no_node503No node is available for placement.
no_node_admin503No node admin API address is configured.
no_object_node503no active node can delete the project object
no_session_key503The key required to connect the login session is not set.
no_slot503No capacity is available. Try again shortly.
node_not_active409This node is not currently able to perform placement operations.
not_abortable409The operation has reached an irreversible stage and cannot be aborted.
not_active409This operation cannot be performed in the current state.
not_cold409The project is not in a cold state, so the reactivation operation cannot start.
not_granted404This project has no auth service connected.
not_home403 · 409This node is not the home node for the requested project generation.
not_quarantined409The lease is not isolated, so it cannot be activated.
not_terminal409The operation is not in a terminal state yet.
op_stalled409The operation is in an aborted state. Resolve the cause, then restart it.
payment_failed402Payment was not authorized. Check your payment method.
registrar_error502The domain registrar returned an error.
registrar_not_configured503The domain registrar is not yet connected.
registrar_rejected422an earlier purchase of this name was declined: …
saga_incomplete502The domain purchase operation did not complete. Send the same request again to continue processing.
stale_epoch409This request is for an earlier project generation. Retry with the latest state.
storage_unavailable409the node this project is placed on has no file storage backend — an operator needs to attach a backend to the node
too_largethe source exceeds … bytes
user_rrset409This is a user-created DNS record, so it cannot be overwritten by a managed record.
witness_unavailable503The witness information used to verify the metadata DB state could not be read, so lease issuance or activation was held.
zone_taken409This DNS zone already exists.

On this page