Reference
Error codes
The list of error codes the CLI prints in its 오류 [code] … format. In a program, branch on code and use message for display only.
The reference sources for this page are the Go sources in
cp/internal/public, cp/internal/core, node/internal/front and node/internal/agent. The content is generated from those sources when the documentation is built.Reading an error response
Every failed API response uses the same structure.
{ "error": { "code": "database_required", "message": "먼저 데이터베이스를 생성하세요" } }The CLI prints this response in the form 오류 [database_required] … and exits with code 1. In automation scripts, branch on code. message is an explanation for users and may change at any time.
The same code can be returned with several HTTP status codes depending on the situation. Where that applies, all of them are shown in the status column.
오류 코드 목록 (76)
| Code | HTTP status | Description |
|---|---|---|
access_denied | 401 | The access control bypass secret is not correct. |
access_exchange_failed | 502 | Could not complete the access permission check. Please try again in a moment. |
access_required | 401 | This deployment has access control enabled, so login is required. |
access_unavailable | 503 | The request was not processed because access permission could not be verified. |
already_member | 409 | The user is already a member of the organization. Change the role with a separate command. |
already_pro | 409 | 이미 프로 요금제다 |
backend | — | The backend service could not process the request. |
backup_failed | 503 | Failed to create the database backup. |
bad_request | 400 | The request format is not valid. |
bad_signature | 403 | 웹훅 서명이 맞지 않는다 |
billing_off | 501 | 결제가 설정되지 않았다 |
billing_unavailable | 502 | 결제 서비스가 응답하지 않는다 |
bundle_too_large | — | The bundle size exceeds the upload limit. |
cold | 503 | A cold project is being restored from backup. Please try again in a moment. |
compatibility_date_unsupported | 400 | compatibilityDate … exceeds this runtime's maximum … — lower the value in runlot.json to … or earlier |
confirm_mismatch | 400 | The confirmation string does not match the project name. |
cron_limit | 400 | the … plan allows up to … scheduled executions per organization (… now, and this deploy adds …) |
drain_incomplete | 503 | Existing requests have not finished, so the switch cannot be made safely. |
email_failed | 503 | … |
email_not_declared | 409 | … |
email_rate_limited | 429 | … |
export_failed | 502 · 503 | Failed to export the database diagnostics. |
forbidden | 403 | You are authenticated but do not have permission to perform this operation. |
front_not_ready | 503 | The traffic frontend has not finished its initial sync. |
front_unacked | 503 | The traffic frontend has not acknowledged the configuration change. |
git_unavailable | 503 | Repository browse is not enabled |
git_unreachable | 503 | Could not read the repository |
github_token | 502 | Failed to exchange the GitHub token. |
github_user | 502 | Failed to look up the GitHub user information. |
grant_failed | 500 | Failed to renew the deployment permission. |
hostname_taken | 409 | This hostname is already in use by another project. |
internal | 500 | An internal server error occurred. Please try again in a moment. |
invite_expired | 409 | 만료된 초대입니다 — 관리자에게 다시 보내 달라고 요청해 주세요 |
invite_revoked | 409 | 취소된 초대입니다 — 관리자에게 다시 요청해 주세요 |
invite_used | 409 | 이미 수락된 초대입니다 |
last_admin | 409 | This is the last admin of the organization. Changing the role would leave no user able to manage it. |
no_core | 503 | The control plane core service address is not configured. |
no_email | 501 | This node cannot receive mail |
no_host | 400 | The request has no Host header. |
no_log_buffer | 503 | No log source is configured for the admin API. |
no_placement | 503 | The project has not been placed on a node yet. |
no_ses_hook | 501 | The SES webhook is off |
no_wake | 501 | This node cannot start an idle project. |
no_writable_state | 501 | This node has no storage that can perform that database operation. |
node_unreachable | 502 | Cannot connect to the node. Please try again in a moment. |
not_a_member | 403 | The user is not a member of this organization. |
not_found | 404 | The requested organization, project or deployment was not found. |
not_here | 404 | This node cannot serve the requested project. |
not_pro | 409 | 프로 요금제가 아니다 |
not_ready | 503 | The initial configuration sync has not finished yet. |
op_conflict | 409 | The same operation ID is already in use by a different operation. |
op_in_flight | 503 · 409 | The same operation is already in progress. |
org_slug_taken | 409 | This organization slug is already in use. |
project_name_taken | 409 | This project name is already in use. |
rate_limited | — | The request limit has been exceeded. Please try again in a moment. |
repo_exists | 409 | Repository … already exists |
reserved_name | 400 | This is a reserved name and cannot be used. |
restore_busy | 429 | The number of restore operations that can run at once has been exceeded. |
restore_failed | 500 | Failed to restore the database. |
restore_stalled | 503 | The database restore was aborted. Please contact support. |
restore_too_large | 429 | The restore exceeds the node's restore capacity limit. |
restoring | 503 | The database is being restored. Please try again once it finishes. |
revoked | 403 | The permission for this placement has been revoked. |
seal_failed | 503 | Failed to save the final database generation. |
ssh_key_exists | 409 | The public key is already registered |
suspended | 403 · 409 | The project is suspended. |
unauthorized | 401 | The token is missing or expired. Run runlot login again. |
unknown | — | The response came from an intermediate proxy rather than a runlot server. |
unknown_hostname | 404 | No project bound to that hostname was found on this node. |
unknown_node | 503 | Could not determine the project's home node address. |
unknown_state | 503 | Unrecognized placement state. |
unsupported | — | The current storage backend does not support this feature. |
upstream_unreachable | — | Cannot connect to the deployed worker. Check the deployment status. |
user_not_found | 404 | There is no login record for this account. Please log in once first. |
wake_failed | 503 | Failed to start the idle project. |
workerd_unchecked | 503 · 500 | Could not check the worker's commit path status. |
Errors returned by the production service (55)
These error codes are returned when an internal runlot operation such as placement, restore or lease management fails. Most are resolved by retrying in a moment. If the same error keeps occurring, please contact support.
| Code | HTTP status | Description |
|---|---|---|
already_done | 409 | The requested operation has already completed. |
cas_conflict | 409 | The resource state changed, so the request cannot be applied. Check the latest state and try again. |
cert_generation | 403 | The certificate generation used in the request has been revoked. |
claimed | 409 | Another instance is using this database. Please try again in a moment. |
cname_conflict | 409 | A CNAME record and records of other types cannot coexist on the same DNS name. |
database_required | 409 | A database is required first. Add "database": true to runlot.json and deploy. |
db_rewound | 409 | The metadata DB was restored to an earlier state, so lease issuance has been halted. Operator recovery is required. |
dek_unwrap_failed | 500 | Failed to decrypt the project data encryption key. |
dns_not_configured | 503 | The nameserver setup is not complete, so the domain cannot be purchased. |
dnssec_off | 409 | DNSSEC is disabled for the domain zone. Enable it first. |
domain_taken | 409 | The domain is already registered. |
domain_unavailable | 409 | The domain cannot be registered. |
email_address_taken | 409 | The address … is in use by another project |
email_unavailable | 409 | This deployment has no mail domain (RUNLOT_MAIL_DOMAIN) — email cannot be turned on |
era_ahead | 409 | The state version (era) in the request is higher than the version stored in the control plane. |
era_write_failed | 500 | Failed to save the state version (era). |
identity_mismatch | 403 | The hostname in the certificate does not match the hostname in the request body. |
invalid_provider | 400 | Unsupported auth provider. |
last_node_unavailable | 503 | The node holding the final database generation is unavailable. |
lease_alive | 409 | The existing lease is still valid, so the request cannot be processed. |
lease_drain_pending | 409 | The existing lease is being terminated. Please try again in a moment. |
lease_quarantine | 409 | The lease is quarantined, so the request cannot be processed. |
lease_seq_ahead | 409 | The lease sequence number in the request is ahead of the state the control plane knows. |
lifecycle_disabled | 503 | Lifecycle operations are disabled. |
managed_rrset | 409 | This DNS record is managed by runlot and cannot be edited directly. |
master_key_version | 503 | The control plane does not currently hold the master key version the request requires. |
no_access_key | 503 | The key for creating access control cookies is not configured. |
no_database | 409 | This project has no database attached. |
no_home_node | 503 · 409 | Could not determine the project's home node address. |
no_last_node | 503 | Could not identify the node that held the final database generation. |
no_master_key | 503 | The control plane master key is not configured. |
no_node | 503 | There is no node available for placement. |
no_node_admin | 503 | The node admin API address is not configured. |
no_session_key | 503 | The key required for login session binding is not configured. |
no_slot | 503 | No capacity is available. Please try again in a moment. |
node_not_active | 409 | This node is not currently in a state where it can perform placement. |
not_abortable | 409 | The operation has reached an irreversible stage and cannot be aborted. |
not_active | 409 | This operation cannot be performed in the current state. |
not_cold | 409 | The project is not cold, so the reactivation cannot be started. |
not_granted | 404 | This project has no auth service attached. |
not_home | 403 · 409 | This node is not the home node for the requested project generation. |
not_quarantined | 409 | The lease is not quarantined, so it cannot be activated. |
not_terminal | 409 | The operation is not in a terminal state yet. |
op_stalled | 409 | The operation is in an aborted state. Resolve the cause and start it again. |
payment_failed | 402 | The payment was not approved. Check your payment method. |
registrar_error | 502 | The domain registrar returned an error. |
registrar_not_configured | 503 | The domain registrar is not connected yet. |
registrar_rejected | 422 | An earlier purchase of this name was rejected: … |
saga_incomplete | 502 | The domain purchase did not finish. Sending the same request again resumes it. |
stale_epoch | 409 | This request is from an earlier project generation. Try again from the latest state. |
storage_unavailable | 409 | The node this project is placed on has no file storage backend — an operator has to attach a backend to the node |
too_large | — | The raw message exceeds … bytes |
user_rrset | 409 | This DNS record was created by the user, so it cannot be overwritten by a managed record. |
witness_unavailable | 503 | The witness information that verifies the metadata DB state could not be read, so lease issuance and activation were withheld. |
zone_taken | 409 | This DNS zone already exists. |