Errors

A failed call answers one JSON envelope with a stable code, an HTTP status and a hint for what to do next.

Docs menu

Every error response has the same shape:

{
  "error": "the collection 'orders' does not exist",
  "code": "COLLECTION_NOT_FOUND",
  "status": 404,
  "detail": "collection: orders",
  "retryable": false,
  "next_action": "refresh_resource",
  "fix": {
    "operation": "collection.list"
  }
}
Field Type Description
error string Human-readable message. Do not match on its text.
code string The stable error name (COLLECTION_NOT_FOUND, KEY_NOT_FOUND, UNIQUE, and so on). Branch on this.
status integer The HTTP status of the response.
detail string Optional. Extra context: the field, path or value involved.
path string Optional. The request path the error applies to.
retryable boolean Whether the same request can succeed unchanged after a wait.
next_action string A fixed hint: retry, reauthenticate, request_permission, reduce_request_or_increase_limit, refresh_resource, choose_supported_operation, correct_request, inspect_detail, version.live.set, follow_location or sign_in.
fix object Optional. { operation, tool, cli, method, path, arguments } naming the next call to make (an MCP tool name, a CLI command, or an HTTP method and path) and, for a list call, named arguments to run it with.

Branch on code, never on error's text: the message can change without notice, the code cannot. Read retryable and next_action to decide the next request instead of pattern-matching the error family from the code's name.

Code families

Codes are grouped by a 4-hex-digit range so a mask (code & 0xF000) answers the family without a string compare.

Range Family
0x0000 General
0x0100 Lifecycle and system
0x1000 Storage I/O
0x2000 Memory
0x3000 Transaction and concurrency
0x4000 Key-value
0x5000 Cursor and batch
0x6000 Graph
0x7000 Dimensional and geo
0x8000 Schema
0x9000 Quota, rate and function limits
0xA000 Auth and session
0xB000 Query
0xC000 App and resource
0xF000 API and serialization

Retry guidance

retryable: true appears only for a transient condition: a transaction conflict, rate limiting, a concurrency limit, server load or a timeout. Retry those within your own deadline, with backoff; preserve the request's idempotency key so a retried write is not applied twice.

Do not retry a non-retryable error by resending the same request. A validation error (INVALID_ARGUMENT), a permission error, a schema violation or an unsupported operation fails the same way every time until you change the request. A write guarded by an expected version (if: { _version }) that lost a race needs a fresh read before the next attempt, not a blind retry.

Next-operation hints

fix.operation names the call most likely to resolve a failure, independent of the error text. A *_NOT_FOUND error for a collection, function, account member, API key or thread points at that resource's list operation, so a caller refreshes its view of what exists before trying again. Call the operation fix names (an MCP tool by fix.tool, a CLI command by fix.cli, or the HTTP method and path) rather than guessing a listing endpoint from the resource name.

Every typed error code, its hex value, HTTP status and message are listed below.

Every error code

The code of a failed call is one of these names. The status is the HTTP status the call answers with. Where a follow-up call resolves the error whatever operation raised it, it is listed.

CodeNumberStatusMessageFollow-up
UNKNOWN0x0001500An unknown error occurred
NOT_IMPLEMENTED0x0002501This feature is not implemented
SYSTEM_CLOSED0x0100503Database system is closed
SYSTEM_ALREADY_OPEN0x0101409Database system is already open
INVALID_ARGUMENT0x0102400That value is not accepted.
INVALID_HANDLE0x0103400That handle is not open.
THREAD_INIT_FAILED0x0104500Thread initialization failed
SHUTDOWN_IN_PROGRESS0x0105503System is shutting down
INTERNAL0x0106500Something went wrong on our side. Try again.
NULL_TREE0x0107500Index tree is not initialized
NULL_SYSTEM0x0108500Tree is not bound to a system
BARRIER_UNSUPPORTED0x0109500Process-wide memory barrier unavailable
STORAGE_IO0x1000500We could not read or save that just now. Try again.
DISK_FULL0x1001503Disk storage is full
FILE_NOT_FOUND0x1002404File not found
PERMISSION_DENIED0x1003403You do not have access to that.
FILE_CORRUPT0x1004500File is corrupted
MMAP_FAILED0x1005500Memory mapping failed
FSYNC_FAILED0x1006500File sync failed
LOCK_FAILED0x1007409File lock failed
NOT_A_DATABASE0x1008500File is not a database
OLD_FORMAT0x1009500Database file is in an older format than this build reads
NEWER_FORMAT0x100A500Database file is in a newer format than this build reads
OUT_OF_MEMORY0x2000503Out of memory
BUFFER_TOO_SMALL0x2001500Buffer too small
ALLOCATOR_FAULT0x2002500Memory allocator fault
TRANSACTION_CONFLICT0x3000409Transaction conflict, please retry
RETRY0x3001409Operation should be retried
TRANSACTION_READ_ONLY0x3002403Transaction is read-only
TRANSACTION_NOT_FOUND0x3003404Transaction not found
DEADLOCK_DETECTED0x3004409Deadlock detected
TIMEOUT0x3005504Operation timed out
NO_ACTIVE_TRANSACTION0x3006400No active transaction
LWW_STALE0x3007409A newer version exists
CANCELLED0x3008409Operation cancelled
KEY_NOT_FOUND0x4000404We could not find that.
KEY_TOO_LARGE0x4001400Key exceeds maximum size
VALUE_TOO_LARGE0x4002413Value exceeds maximum size
KEY_EMPTY0x4003400Key cannot be empty
KEY_EXISTS0x4004409Key already exists
MISSING_INDEX0x4005400Required index not found
OWNERSHIP_REQUIRED0x4006403Record ownership required
KEY_PREFIX_COLLISION0x4007409Key prefix collision
KEY_DELETED0x4008404Key was deleted
UNIQUE0x4009409A unique field already holds the value
ID_RESERVED0x400A400_id is assigned by the collection; use put(doc) to choose an id
INVALID_ID0x400B400_id names no document: it must be a base62 id string or a positive whole number
ID_MISMATCH0x400C400the body's _id is not the id in the path
INDEX_DUPLICATES0x400D409documents already share a value of the field: it cannot be declared unique
FIELD_IDS_EXHAUSTED0x400E507every index field id of the collection is taken: a member of this document that a wildcard index rule covers cannot be keyed, so nothing was written
ID_PAST_ROWS0x400F507the collection is a table SQL made, whose row is its id: an id of 2^32 - 1 or more has no row, so nothing was written
ID_NOT_ISSUED0x4010400the collection is a table SQL made, whose row is its id: a given id is taken only once its generator issued it, so nothing was written
ENGINE_GATE_HELD0x4011500a writer of a table SQL made ran inside the SQL engine's gate as a reader: the engine cannot wait for its own reader
ROW_STALE0x4012409the document changed since this row was read: nothing was written, and the row now holds the document as it is; read it and write again
CURSOR_EXHAUSTED0x5000200Cursor exhausted
CURSOR_INVALIDATED0x5001409Cursor invalidated
INVALID_RANGE0x5002400That range is not accepted.
BATCH_OP_FAILED0x5003500Batch operation failed
NODE_NOT_FOUND0x6000404Node not found
EDGE_NOT_FOUND0x6001404Edge not found
PROPERTY_NOT_FOUND0x6002404Property not found
INVALID_EDGE0x6003400That edge is not accepted.
PATH_NOT_FOUND0x6004404Path not found
GRAPH_CYCLE_DETECTED0x6005409Cycle detected
DIMENSION_MISMATCH0x7000400Dimension mismatch
POINT_NOT_FOUND0x7001404Point not found
INVALID_BOUNDS0x7002400Those bounds are not accepted.
INVALID_RADIUS0x7003400That radius is not accepted.
SCHEMA_VIOLATION0x8000400Schema violation
TYPE_MISMATCH0x8001400Type mismatch
CONSTRAINT_VIOLATION0x8002409Constraint violation
TOO_MANY_FIELDS0x8003400a collection names at most 4096 distinct fields (the keys of a document and of every object inside it, together); this document would need more
SCHEMA_REFUSED0x8004400The document does not match the collection's schema
SCHEMA_VIOLATORS0x8005409stored documents already break the constraint: it is not declared
SECRET_FIELD0x8006400a secret field cannot be filtered, sorted, grouped, aggregated, joined on or selected by name
TYPE_TAG_NOT_FIRST0x8007400the $type tag must be the first member of its object
STORAGE_QUOTA_EXCEEDED0x9000507Storage quota exceeded
DOCUMENT_QUOTA_EXCEEDED0x9001507Document quota exceeded
BANDWIDTH_QUOTA_EXCEEDED0x9002429Bandwidth quota exceeded
RATE_LIMIT_EXCEEDED0x9003429Too many requests. Wait a moment and try again.
REQUEST_TOO_LARGE0x9004413Request payload too large
CONCURRENT_LIMIT0x9005429Concurrent request limit exceeded
COLLECTION_LIMIT0x9006413Collection limit exceeded
INDEX_LIMIT0x9007413Index limit exceeded
FUNCTION_LIMIT0x9008429Cloud function limit exceeded
CF_CPU_TIMEOUT0x9009408Cloud function exceeded CPU time limit
CF_MEMORY_EXCEEDED0x900A413Cloud function exceeded memory limit
CF_EXECUTION_FAILED0x900B500Cloud function execution error
SERVER_BUSY0x900C503The server is busy; retry shortly
CF_TENANT_MEMORY0x900D503The tenant's function memory budget is full; retry shortly
CF_WALL_TIMEOUT0x900E504Cloud function exceeded its wall-clock limit
CF_SERVER_MEMORY0x900F503The server is low on memory and starts no new function container; retry shortly
KEY_RATE_LIMIT_EXCEEDED0x9010429This key's own request rate limit is exceeded
REALTIME_LIMIT0x9011429This tenant's realtime_connections_limit is at its cap
CRON_LIMIT0x9012429This tenant's cron_limit is at its cap
SPACE_FULL0x9013507The account's space is full: free space (delete data or an app) or raise the account's space
TOKEN_EXPIRED0xA000401Your sign-in has expired. Sign in again.
TOKEN_INVALID0xA001401Your sign-in is not valid. Sign in again.
TOKEN_REVOKED0xA002401Your sign-in was ended. Sign in again.
SESSION_EXPIRED0xA003401Your session has expired. Sign in again.
ACCOUNT_SUSPENDED0xA004403This account is suspended.
TENANT_SUSPENDED0xA005403Tenant has been suspended
IP_BLOCKED0xA006403IP address is blocked
INSUFFICIENT_PERMISSIONS0xA007403You do not have access to do that.
CREDENTIAL_REQUIRED0xA008401Authentication credentials required
OAUTH_INVALID0xA009401The sign-in provider's answer was not accepted. Try again.
PROVIDER_NOT_CONFIGURED0xA00A409Authentication provider not configured
PROVIDER_DISABLED0xA00B403Authentication provider is disabled
TENANT_READ_ONLY0xA00C423Tenant is read-only: writes are refused
APPROVAL_REQUIRED0xA00D403This call is irreversible and a person must approve it: show the person approve_url, and once they approve, repeat the same call
APPROVAL_INVALID0xA00E403No such approval
APPROVAL_DENIED0xA00F403A person denied this call; a repeat is refused until the approval lapses
AGENT_BUDGET_EXHAUSTED0xA010403This agent session spent its request budget (its own or one of its parents')
KEY_BUDGET_EXHAUSTED0xA011403This key spent its own request budget
EMAIL_VERIFICATION_REQUIRED0xA012403Verify your email address to continue
LIVE_BY_PROMOTE0xA013409This app changes only by promote: change its dev sandbox and promote the versionsource.edit
TENANT_MOVED0xA014308This app moved to another server: send the request to the address in Location
GRANT_REQUIRED0xA015403This app has not been granted the capability the call needs; the system admin grants it (tenant.update grants)
KEY_ORIGIN_REFUSED0xA016403A publishable key is refused here: the request's Origin is not one of its origins, or the route does not take one
APPROVAL_PENDING0xA017403No person has approved this call yet: show the person approve_url, and once they approve, repeat the same call
APPROVAL_SPENT0xA018403This exact call already ran with its approval; a repeat is refused until the approval lapses
APPROVAL_EXPIRED0xA019403The approval lapsed before it was used: repeat the call without it to ask again
APPROVAL_MISMATCH0xA01A403The approval names another call or another session: it works only for the exact call that asked for it
WEBHOOK_SIGNATURE_INVALID0xA01B400The payment provider webhook's signature does not verify
BILLING_NOT_SET_UP0xA01C503Billing is not set up: the payment provider's keys are not set
EMAIL_TAKEN0xA01D409That email already has an account. Sign in instead.
CREDENTIALS_MISMATCH0xA01E401That email and password do not match.
PASSWORD_LENGTH0xA01F400Use a password of 8 to 128 characters.
EMAIL_INVALID0xA020400Enter a valid email address.
USER_NOT_FOUND0xA021404We could not find that person.
ACCOUNT_LOCKED0xA022423This account is locked. Reset your password to sign in again.
SECRET_KEY_IN_URL0xA023400A secret key was sent in the URL (access_token): only a publishable key may be; send a secret key in the Authorization header, from a server
RECIPIENT_UNSUBSCRIBED0xA024409You turned off this app's email, so no code was sent. Ask for a link to turn it back on.
APP_OVER_PLAN0xA025403This app is paused: the account's plan allows fewer apps than it owns. Move it into the first max_apps on the account's Apps page (account.apps.order), or upgrade.
QUERY_TOO_COMPLEX0xB000400Query is too complex
QUERY_TIMEOUT0xB001504Query execution timed out
RESULT_SET_TOO_LARGE0xB002413Result set exceeds maximum size
SORT_LIMIT_EXCEEDED0xB003400Sort operation exceeds limit
SCAN_LIMIT_EXCEEDED0xB004400Scan operation exceeds limit
INVALID_QUERY_SYNTAX0xB005400That query does not parse.
SQL_FAILED0xB006400The SQL statement did not parse or run
TENANT_NOT_FOUND0xC000404Tenant not found
TENANT_ALREADY_EXISTS0xC001409Tenant already exists
TENANT_INVALID0xC002400That app is not one this server knows.
TENANT_CANNOT_DROP_DEFAULT0xC003403Cannot drop the default tenant
COLLECTION_NOT_FOUND0xC004404Collection not foundcollection.list
COLLECTION_ALREADY_EXISTS0xC005409Collection already exists
FUNCTION_NOT_FOUND0xC006404Function not foundfunction.list
THREAD_NOT_FOUND0xC007404Thread not foundthread.list
MESSAGE_NOT_FOUND0xC008404Message not foundthread.messages.list
DATABASE_ERROR0xC009500Database error
ACCOUNT_NOT_FOUND0xC00A404Account not foundaccount.list
ACCOUNT_MEMBER_NOT_FOUND0xC00B404No such member of the accountaccount.member.list
ACCOUNT_LAST_OWNER0xC00C409An account keeps at least one owner
ACCOUNT_HAS_APPS0xC00D409The account still owns apps
ACCOUNT_LIMIT0xC00E409An account limit is reached
ACCOUNT_KEY_NOT_FOUND0xC00F404No such key of the accountaccount.key.list
ACCOUNT_INVITE_NOT_FOUND0xC010404No such invite, or it was used or revokedaccount.invite.list
ACCOUNT_INVITE_EXPIRED0xC011409The invite has expired
ACCOUNT_INVITE_EMAIL0xC012403The invite is for another verified email address
UNDO_TOKEN_NOT_FOUND0xC013404No such undo token for this app, or it was used
UNDO_TOKEN_EXPIRED0xC014410The undo token has expired
UNDO_RESOURCE_CHANGED0xC015409The resource changed after this undo token was issued
APP_OWNED_BY_ANOTHER_ACCOUNT0xC016409The app belongs to another account
KEY_EXPIRED0xC017401The tenant key has expired
TENANT_KEY_NOT_FOUND0xC018404No such key of the tenant
TENANT_SLUG_RESERVED0xC019409This slug was renamed away recently and is held for its former account
TENANT_NOTE_TOO_LONG0xC01A400The suspension note is longer than the 127 bytes the record holds; shorten it (nothing is cut)
TENANT_JOBS_DISABLED0xC01B409This tenant's background work is switched off; nothing queued is lost and tenant.resume starts it again
TOOL_BAD_NAME0xC020400A tool's name is 1 to 63 bytes of lowercase letters, digits, '-' and '_', not starting with '-' or '_'
TOOL_HASH_MISMATCH0xC021400The uploaded bytes do not hash to the declared sha256
TOOL_BAD_SIZE0xC022400The tool's image is empty or larger than the per-tenant limit
TOOL_BAD_FORMAT0xC023400The tool's image is not an executable this platform runs
TOOL_TOO_MANY0xC024409This tenant already has as many tools installed as it may
TOOL_STORAGE_IO0xC025500The tool's image could not be stored
TOOL_NOT_INSTALLED0xC026404No such tool version is installed
TOOL_TOO_MANY_BYTES0xC027409This tenant's installed tool images already total as many bytes as it may
TOOL_LIMIT_OUT_OF_RANGE0xC028400A tool limit is above the ceiling this platform allows for it
TOOL_BAD_ARGS0xC029400tool.run's args, env or stdin are not shaped as this operation requires
TOOL_CONFINEMENT_UNAVAILABLE0xC02A503This host cannot confine a tool process; tool.run never runs one unconfined
TOOL_SPAWN_FAILED0xC02B500The tool process could not be started
DIRECT_CHANGES0xC02C409A function deployed outside a version would be overwritten or deleted; send direct:"replace" or direct:"keep"
HOST_NOT_FOUND0xC02D404Host not found
HOST_HAS_NODES0xC02E409The host still carries nodes; move them off it first
NODE_LABEL_NOT_FOUND0xC02F404Node label not found; node_label.set defines it
NODE_LABEL_IN_USE0xC030409A host still carries the node label; take it off the host first
NODE_LABEL_LIMIT0xC031409Every one of the 64 node labels is defined; delete one first
HOST_CAPABILITY_MISSING0xC032409The host lacks a capability the operation needs (the detail names it); run host.probe first
HOST_AT_CAPACITY0xC033409The host holds as many apps as its max_tenants allows; raise it or place the app on another host
HOST_HAS_APPS0xC034409Apps are still placed on the host; tenant.place moves them off it
SETTING_IS_PLATFORM0xC035403The key is a server-wide platform setting; a system admin sets it with platform.setting.set
NO_CALL_CONTEXT0xC036400The host call was made outside a function's call: no database or function context is bound
LEDGER_UNAVAILABLE0xC037503The app's ledger could not be opened
APP_QUERY_NOT_INDEXED0xC038400An offered query's where field is not declared indexed on its collection (index.create kind collection)
APP_QUERY_FIELD_NOT_EXPOSED0xC039400The reader names a field the offered query does not select
APP_USE_UNKNOWN_APP0xC03A200The word names an app that does not exist yet; kept, and refused per call until it does
SECRET_NOT_FOUND0xC03B404The app has no secret of this key; secret.list names the ones it has
EDIT_NO_MATCH0xC03C409The unit does not hold the edit's old text as given; read it again (version.unit) and edit what it holdsversion.unit
EDIT_AMBIGUOUS0xC03D400The edit's old text occurs more than once; give more of the surrounding text, or replace_allversion.unit
MODULE_NOT_FOUND0xC040400An import names a file the version does not hold; commit the file or fix the specifier
IMPORT_OUTSIDE_PROJECT0xC041400An import climbs above the version's root; import only files of the version
IMPORT_NEEDS_VERSION0xC042400A function deployed outside a version imports a file; ship it in a version (version.commit, then version.live.set)version.commit
PACKAGE_NOT_FOUND0xC043400A bare import names a package the version does not hold under node_modules; add it with package.add
PACKAGE_NOT_EXPORTED0xC044400The package's "exports" names no entry for the imported subpath; import one it exports
PACKAGE_NOT_ESM0xC045400The package's entry is CommonJS by its own package.json; only ES module packages load
PACKAGE_MANIFEST_INVALID0xC046400The package's package.json is not a JSON object; add the package again with package.add
HOST_TAKEN0xC048409Another app holds this host's label (under one root or another); choose another label
HOST_INVALID0xC049400The host is not <label>.<root domain> with a label of lowercase letters, digits and inner hyphens (1 to 63); the detail says why and suggestion is the nearest valid host
HOST_RESERVED0xC04A409The label belongs to the platform (www, api, mcp, platform), to an app's own host, or to sandbox hosts (it holds --); choose another label
ENV_HOST_NOT_FOUND0xC04B404This app has no such host; env.host.list names its hostsenv.host.list
ENVIRONMENT_NOT_FOUND0xC04C404No such environment: live, a sandbox from sandbox.list, or a host from env.host.listsandbox.list
ROOT_DOMAIN_UNKNOWN0xC04D404The host is not under a root domain of this platform; env.host.list answers the roots a host may be bound underenv.host.list
ROOT_DOMAIN_DISABLED0xC04E409The root domain is disabled: no host is bound under it until the platform admin enables it
ROOT_DOMAIN_IN_USE0xC04F409Test hosts are bound under the root domain (hosts is their count); they are removed with env.host.remove first
BILLING_KEY_NOT_TEST0xC060503The payment provider key set is not a test key (sk_test_ or rk_test_); the platform takes test keys only, so nothing was sent
CART_EMPTY0xC061400The cart buys nothing: name at least one plan in items, or funds
CART_PLAN_NOT_FOUND0xC062400The app has no plan by this id; billing.catalog lists every plan
CART_PLAN_NOT_FOR_SALE0xC063400This plan is free: featured.enable or account.plan.change puts the account on it, no cart needed
CART_APP_REPEATED0xC064400The cart names this app twice; one plan an app
CART_COVERED0xC065400The cart's Substrio plan already includes this app at this plan or a higher one; take it out
CART_MIXED0xC066400Every plan in one cart has the first one's currency and interval; buy the other in a cart of its own
FUNDS_OUT_OF_RANGE0xC067400Funds are from 500 to 1000000 in the minor unit (5.00 to 10,000.00)
CART_NOT_FOUND0xC068404The account has no cart by this id; billing.cart.create makes one
CART_CLOSED0xC069409The cart's checkout has started or is paid, so it no longer changes; make a new cart
CHECKOUT_PERSON_ONLY0xC06A403Paying is the person's own: give them the cart's checkout_url to pay on
PAYMENT_NOT_DONE0xC06B409The cart is not paid: the person pays on its checkout page (billing.checkout.start), then this call
PAYMENT_PROCESSING0xC06C409The payment is still being processed by the provider; ask again shortly
SUBSCRIPTION_NONE0xC06D404The account has no subscription to cancel
PROVIDER_ANSWER_INVALID0xC06E503The payment provider's answer was not the object asked for (the field names it); nothing was applied, ask again
PLAN_LIMIT0xC06F409The account's plan allows no more of this (the field names it); account.plan.summary shows the plans that raise it
SPACE_ADDON_NOT_ON_PLAN0xC070400The plan the account would be on sells no space add-on; a plan with space_addon (Scale) does
SPACE_ADDON_HELD0xC071409The account holds space add-on blocks the new plan does not sell; release them first (a cart with space_blocks 0)
SPACE_ADDON_IN_USE0xC072409The account uses more than the space it would keep; delete data first, then release the blocks
PLAN_NOT_ON_SALE0xC073409This plan is priced but not on sale yet: it cannot be bought or moved to until the platform sells it (account.plan.summary shows what can be)
MCP_TOOL_NOT_FOUND0xC080404The app's MCP manifest has no tool of this name; mcp.tool.list names the ones it has
MCP_TOOL_INVALID0xC081400The tool is not one the app's /mcp can serve; field names the member at fault
MCP_TEST_USER_NOT_FOUND0xC082404The app has no user of this id to call the tool as; user.list names its people
MCP_TOOL_FROM_ROUTE0xC083409The tool is a route's own; its function takes it out with tools: {"<route>": false} (functions/<name>.json)
KEY_AUTOMATION_NEEDS_PERSON0xC090403Only a person signed in as themselves makes an automation key; a key, an agent or the system key makes agent keys
PACKAGE_REGISTRY_UNSET0xC0A0503package.add has no registry: the platform setting package_registry_origin is unset
PACKAGE_UNKNOWN0xC0A1404The registry has no package of that name
PACKAGE_NAME_INVALID0xC0A2400Not an npm package name: lowercase letters, digits, - . _ ~, an optional @scope/
PACKAGE_RANGE_INVALID0xC0A3400Not a version, a range or a dist-tag
PACKAGE_VERSION_NOT_FOUND0xC0A4404No published version of the package meets the range or tag
PACKAGE_VERSION_CONFLICT0xC0A5409One package name would need two versions; a version holds one of each name
PACKAGE_REGISTRY_FAILED0xC0A6502The registry could not be reached or answered with an error
PACKAGE_TARBALL_OUTSIDE_REGISTRY0xC0A7502The registry names a tarball outside its own origin; only the configured registry is fetched from
PACKAGE_INTEGRITY_MISMATCH0xC0A8502The tarball's SHA-512 is not the registry's dist.integrity, or the registry gives no sha512
PACKAGE_TARBALL_INVALID0xC0A9502The tarball is not a gzip tar of a package: a link, an unsafe path, or no package.json
PACKAGE_TOO_LARGE0xC0AA413The package unpacks past 256 MiB, or its metadata past 64 MiB
ADOPT_DISABLED0xC0B0409This server adopts no file: it was started without --adopt-dir (or its kernel has no openat2); file.upload stores the bytes instead
ADOPT_SOURCE_NOT_FOUND0xC0B1404No file of this name is beneath the server's adopt directory; source names it relative to that directory
ADOPT_SOURCE_OUTSIDE0xC0B2400The source is outside the server's adopt directory (an absolute name, or .. past it)
ADOPT_SOURCE_NOT_REGULAR0xC0B4400The source is not a regular file (a directory, a pipe, a device or a socket)
ADOPT_SOURCE_LINKED0xC0B5409The source has another name (a hard link), which would stay a writable name of the stored file; remove the other name first
ADOPT_CROSS_DEVICE0xC0B6409The source is on another filesystem than the app's file store, so it cannot be renamed in; move it onto the store's filesystem first
ADOPT_SOURCE_CHANGED0xC0B7409The source was written, or its name moved, while it was hashed; adopt it again once nothing writes it
AGENT_CODE_INVALID0xC0BD401This connect code is unknown, already used or past its life; ask your owner for a new one on the console's Agents page
AGENT_ALREADY_CONNECTED0xC0BE409This connection already acts for your owner, so the connect code is not needed and was not used. A substrio_ae_ code is for an agent with no connection
AGENT_TOOL_UNKNOWN0xC0BF404No tool of this name reaches this credential; GET /v1/_agent/tools names the ones that do
CPU_HISTORY_OFF0xC0C0409This server keeps no usage minutes (usage_history_minutes is 0), so it has no CPU a minute to answer; tenant.usage has the totals
SUBSCRIPTION_NOT_FOUND0xC0C1404There is no subscription of yours by this id; subscriptions.mine lists them
PLAN_FEATURE_REQUIRED0xC0C2403Your plan at this app does not include this feature; the app's plans name the ones that do
SUBSCRIBERS_NOT_VISIBLE0xC0C3403Only the selling app and the apps of its own account read its subscribers
SUBSCRIPTION_PERSON_REQUIRED0xC0C4403This is a person's own call: sign in as the person (an agent or a key cannot buy or list for them)
PLAN_FEATURE_UNKNOWN0xC0C5403The route's plan gate names a feature the app's plans file does not have
APP_NOT_NAMED0xC0C7400This call runs at an app and the request names none: send X-Substrio-Tenant: <app>, or call the app's own host
SHELL_SYNTAX0xC0D0400The command is not in the shell's grammar (the detail says where); nothing ran
SHELL_UNKNOWN_COMMAND0xC0D1400The shell has no such command; the detail lists the ones it has
SHELL_UNKNOWN_VARIABLE0xC0D2400The shell has no such variable: PWD HOME SRC SITE FILES BRANCH and ? are the ones it has
SHELL_PATH_OUTSIDE0xC0D3400The path is under no mount: /src, /site and /files are the shell's whole file system
SHELL_READ_ONLY0xC0D4400/site is the live release, read only: change /src and ship a version
SHELL_WRITE_NOT_GRANTED0xC0D5403The command writes, and the caller's grant reads only; nothing landed
SHELL_FILES_DELETE0xC0D6403A stored file is deleted with file.delete, which asks a person first; nothing landed
SHELL_OFFSET_WRITES0xC0D7400offset continues a command's output, and this command writes: run it without offset
SHELL_CPU_BUDGET0xC0D8408The command ran past the shell's CPU budget; nothing landed: narrow it
SHELL_PIPE_BUDGET0xC0D9413One stage of the command wrote past the shell's pipe budget; nothing landed: narrow it
DASHBOARD_INVALID0xC0E0400The app's dashboard file is not one the console can draw; field names the path in it (nav[2].panels[0].source.route) and the detail what is wrong
REGION_NOT_FOUND0xC0F0404No region of this slug; region.list names them
REGION_IN_USE0xC0F1409A host still names this region; host.update moves or clears it first
REGION_LIMIT0xC0F2409The platform holds the most regions it can; region.remove frees one
REGION_UNAVAILABLE0xC0F3409This region is not offered: it is hidden, unknown or serves no apps yet; region.choices lists the ones you can pick
REGION_FULL0xC0F4409Every host in this region is at its app limit; pick another region from region.choices or try again later
HOST_NOT_PROBED0xC0F5409This host has not been probed, so its CPU and systemd are unknown; host.probe first
HOST_NO_SYSTEMD0xC0F6409This host runs no systemd, which a node's service needs
HOST_NGINX_PRESENT0xC0F7409nginx is installed or running on this host; the platform serves :80 and :443 itself and never shares a host with a proxy
RELEASE_NOT_FOUND0xC0F8404The master holds no release of this id; release.list names them
RELEASE_NOT_PACKED0xC0F9409This release has no packed tarball (.tar.zst and .sha256) beside its folder, so it cannot be sent to a host
RELEASE_ISA_UNKNOWN0xC0FA409This release's manifest names no instruction set, so no host can be checked against it
HOST_CPU_MISSING0xC0FB409This host's CPU lacks features the release needs; the detail names them
HOST_NODE_LIMIT0xC0FC409This host holds the most nodes it can; host.node.undeploy frees a slot
NODE_BUSY0xC0FD409A deploy or undeploy of this node is under way; host.node.list shows when it ends
TEST_TENANT_REQUIRED0xC570403Only a test tenant (tenant.create test=true) has fetch stubs and a clock
ARCHIVE_INVALID0xC580400The archive is not one app.archive made, or an entry does not match its manifest.json; detail names the entry. Nothing was written
ARCHIVE_PASSPHRASE_WRONG0xC581400The X-Substrio-Passphrase header does not open the archive's sealed.bin; send the passphrase it was downloaded with, or none to restore without the sealed part. Nothing was written
SERIALIZATION0xF000500Serialization error
DESERIALIZATION0xF001400Deserialization error
PIPELINE_TOO_LARGE0xF002400Pipeline too large
INVALID_JSON0xF003400The request body is not valid JSON.
EMPTY_PAYLOAD0xF004400Request payload is empty
BODY_REQUIRED0xF005400Request body is required
METHOD_NOT_ALLOWED0xF006405HTTP method not allowed
ENDPOINT_NOT_FOUND0xF007404API endpoint not found
MISSING_FIELD0xF008400Required field is missing
UNSUPPORTED_OPERATION0xF009400Operation not supported
NO_WAIT_IN_QUERY0xF00A400Cannot wait inside an open query cursor: $whereJS runs per row while the query holds its position; do the waiting work before or after the query
NO_WAIT_IN_TRANSACTION0xF00B400Cannot wait inside db.transaction: it holds the database's writer gate for its whole body; do the waiting work before or after the transaction
NO_WAIT_IN_UPSERT0xF00C400Cannot wait inside an upsert: it holds the collection's upsert gate from its find to its insert; do the waiting work before or after the upsert
NO_WAIT_IN_ENGINE_GATE0xF00D400Cannot wait for a script transaction inside a query's sink or a registered function's call: it holds the database's engine gate, which the transaction needs to open
FETCH_FAILED0xF00E502The fetch's upstream could not be reached or broke off
CRITICAL_SEGFAULT0xFFFF500Critical system failure