UNKNOWN | 0x0001 | 500 | An unknown error occurred | |
NOT_IMPLEMENTED | 0x0002 | 501 | This feature is not implemented | |
SYSTEM_CLOSED | 0x0100 | 503 | Database system is closed | |
SYSTEM_ALREADY_OPEN | 0x0101 | 409 | Database system is already open | |
INVALID_ARGUMENT | 0x0102 | 400 | That value is not accepted. | |
INVALID_HANDLE | 0x0103 | 400 | That handle is not open. | |
THREAD_INIT_FAILED | 0x0104 | 500 | Thread initialization failed | |
SHUTDOWN_IN_PROGRESS | 0x0105 | 503 | System is shutting down | |
INTERNAL | 0x0106 | 500 | Something went wrong on our side. Try again. | |
NULL_TREE | 0x0107 | 500 | Index tree is not initialized | |
NULL_SYSTEM | 0x0108 | 500 | Tree is not bound to a system | |
BARRIER_UNSUPPORTED | 0x0109 | 500 | Process-wide memory barrier unavailable | |
STORAGE_IO | 0x1000 | 500 | We could not read or save that just now. Try again. | |
DISK_FULL | 0x1001 | 503 | Disk storage is full | |
FILE_NOT_FOUND | 0x1002 | 404 | File not found | |
PERMISSION_DENIED | 0x1003 | 403 | You do not have access to that. | |
FILE_CORRUPT | 0x1004 | 500 | File is corrupted | |
MMAP_FAILED | 0x1005 | 500 | Memory mapping failed | |
FSYNC_FAILED | 0x1006 | 500 | File sync failed | |
LOCK_FAILED | 0x1007 | 409 | File lock failed | |
NOT_A_DATABASE | 0x1008 | 500 | File is not a database | |
OLD_FORMAT | 0x1009 | 500 | Database file is in an older format than this build reads | |
NEWER_FORMAT | 0x100A | 500 | Database file is in a newer format than this build reads | |
OUT_OF_MEMORY | 0x2000 | 503 | Out of memory | |
BUFFER_TOO_SMALL | 0x2001 | 500 | Buffer too small | |
ALLOCATOR_FAULT | 0x2002 | 500 | Memory allocator fault | |
TRANSACTION_CONFLICT | 0x3000 | 409 | Transaction conflict, please retry | |
RETRY | 0x3001 | 409 | Operation should be retried | |
TRANSACTION_READ_ONLY | 0x3002 | 403 | Transaction is read-only | |
TRANSACTION_NOT_FOUND | 0x3003 | 404 | Transaction not found | |
DEADLOCK_DETECTED | 0x3004 | 409 | Deadlock detected | |
TIMEOUT | 0x3005 | 504 | Operation timed out | |
NO_ACTIVE_TRANSACTION | 0x3006 | 400 | No active transaction | |
LWW_STALE | 0x3007 | 409 | A newer version exists | |
CANCELLED | 0x3008 | 409 | Operation cancelled | |
KEY_NOT_FOUND | 0x4000 | 404 | We could not find that. | |
KEY_TOO_LARGE | 0x4001 | 400 | Key exceeds maximum size | |
VALUE_TOO_LARGE | 0x4002 | 413 | Value exceeds maximum size | |
KEY_EMPTY | 0x4003 | 400 | Key cannot be empty | |
KEY_EXISTS | 0x4004 | 409 | Key already exists | |
MISSING_INDEX | 0x4005 | 400 | Required index not found | |
OWNERSHIP_REQUIRED | 0x4006 | 403 | Record ownership required | |
KEY_PREFIX_COLLISION | 0x4007 | 409 | Key prefix collision | |
KEY_DELETED | 0x4008 | 404 | Key was deleted | |
UNIQUE | 0x4009 | 409 | A unique field already holds the value | |
ID_RESERVED | 0x400A | 400 | _id is assigned by the collection; use put(doc) to choose an id | |
INVALID_ID | 0x400B | 400 | _id names no document: it must be a base62 id string or a positive whole number | |
ID_MISMATCH | 0x400C | 400 | the body's _id is not the id in the path | |
INDEX_DUPLICATES | 0x400D | 409 | documents already share a value of the field: it cannot be declared unique | |
FIELD_IDS_EXHAUSTED | 0x400E | 507 | every 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_ROWS | 0x400F | 507 | the 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_ISSUED | 0x4010 | 400 | the 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_HELD | 0x4011 | 500 | a 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_STALE | 0x4012 | 409 | the 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_EXHAUSTED | 0x5000 | 200 | Cursor exhausted | |
CURSOR_INVALIDATED | 0x5001 | 409 | Cursor invalidated | |
INVALID_RANGE | 0x5002 | 400 | That range is not accepted. | |
BATCH_OP_FAILED | 0x5003 | 500 | Batch operation failed | |
NODE_NOT_FOUND | 0x6000 | 404 | Node not found | |
EDGE_NOT_FOUND | 0x6001 | 404 | Edge not found | |
PROPERTY_NOT_FOUND | 0x6002 | 404 | Property not found | |
INVALID_EDGE | 0x6003 | 400 | That edge is not accepted. | |
PATH_NOT_FOUND | 0x6004 | 404 | Path not found | |
GRAPH_CYCLE_DETECTED | 0x6005 | 409 | Cycle detected | |
DIMENSION_MISMATCH | 0x7000 | 400 | Dimension mismatch | |
POINT_NOT_FOUND | 0x7001 | 404 | Point not found | |
INVALID_BOUNDS | 0x7002 | 400 | Those bounds are not accepted. | |
INVALID_RADIUS | 0x7003 | 400 | That radius is not accepted. | |
SCHEMA_VIOLATION | 0x8000 | 400 | Schema violation | |
TYPE_MISMATCH | 0x8001 | 400 | Type mismatch | |
CONSTRAINT_VIOLATION | 0x8002 | 409 | Constraint violation | |
TOO_MANY_FIELDS | 0x8003 | 400 | a 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_REFUSED | 0x8004 | 400 | The document does not match the collection's schema | |
SCHEMA_VIOLATORS | 0x8005 | 409 | stored documents already break the constraint: it is not declared | |
SECRET_FIELD | 0x8006 | 400 | a secret field cannot be filtered, sorted, grouped, aggregated, joined on or selected by name | |
TYPE_TAG_NOT_FIRST | 0x8007 | 400 | the $type tag must be the first member of its object | |
STORAGE_QUOTA_EXCEEDED | 0x9000 | 507 | Storage quota exceeded | |
DOCUMENT_QUOTA_EXCEEDED | 0x9001 | 507 | Document quota exceeded | |
BANDWIDTH_QUOTA_EXCEEDED | 0x9002 | 429 | Bandwidth quota exceeded | |
RATE_LIMIT_EXCEEDED | 0x9003 | 429 | Too many requests. Wait a moment and try again. | |
REQUEST_TOO_LARGE | 0x9004 | 413 | Request payload too large | |
CONCURRENT_LIMIT | 0x9005 | 429 | Concurrent request limit exceeded | |
COLLECTION_LIMIT | 0x9006 | 413 | Collection limit exceeded | |
INDEX_LIMIT | 0x9007 | 413 | Index limit exceeded | |
FUNCTION_LIMIT | 0x9008 | 429 | Cloud function limit exceeded | |
CF_CPU_TIMEOUT | 0x9009 | 408 | Cloud function exceeded CPU time limit | |
CF_MEMORY_EXCEEDED | 0x900A | 413 | Cloud function exceeded memory limit | |
CF_EXECUTION_FAILED | 0x900B | 500 | Cloud function execution error | |
SERVER_BUSY | 0x900C | 503 | The server is busy; retry shortly | |
CF_TENANT_MEMORY | 0x900D | 503 | The tenant's function memory budget is full; retry shortly | |
CF_WALL_TIMEOUT | 0x900E | 504 | Cloud function exceeded its wall-clock limit | |
CF_SERVER_MEMORY | 0x900F | 503 | The server is low on memory and starts no new function container; retry shortly | |
KEY_RATE_LIMIT_EXCEEDED | 0x9010 | 429 | This key's own request rate limit is exceeded | |
REALTIME_LIMIT | 0x9011 | 429 | This tenant's realtime_connections_limit is at its cap | |
CRON_LIMIT | 0x9012 | 429 | This tenant's cron_limit is at its cap | |
SPACE_FULL | 0x9013 | 507 | The account's space is full: free space (delete data or an app) or raise the account's space | |
TOKEN_EXPIRED | 0xA000 | 401 | Your sign-in has expired. Sign in again. | |
TOKEN_INVALID | 0xA001 | 401 | Your sign-in is not valid. Sign in again. | |
TOKEN_REVOKED | 0xA002 | 401 | Your sign-in was ended. Sign in again. | |
SESSION_EXPIRED | 0xA003 | 401 | Your session has expired. Sign in again. | |
ACCOUNT_SUSPENDED | 0xA004 | 403 | This account is suspended. | |
TENANT_SUSPENDED | 0xA005 | 403 | Tenant has been suspended | |
IP_BLOCKED | 0xA006 | 403 | IP address is blocked | |
INSUFFICIENT_PERMISSIONS | 0xA007 | 403 | You do not have access to do that. | |
CREDENTIAL_REQUIRED | 0xA008 | 401 | Authentication credentials required | |
OAUTH_INVALID | 0xA009 | 401 | The sign-in provider's answer was not accepted. Try again. | |
PROVIDER_NOT_CONFIGURED | 0xA00A | 409 | Authentication provider not configured | |
PROVIDER_DISABLED | 0xA00B | 403 | Authentication provider is disabled | |
TENANT_READ_ONLY | 0xA00C | 423 | Tenant is read-only: writes are refused | |
APPROVAL_REQUIRED | 0xA00D | 403 | This call is irreversible and a person must approve it: show the person approve_url, and once they approve, repeat the same call | |
APPROVAL_INVALID | 0xA00E | 403 | No such approval | |
APPROVAL_DENIED | 0xA00F | 403 | A person denied this call; a repeat is refused until the approval lapses | |
AGENT_BUDGET_EXHAUSTED | 0xA010 | 403 | This agent session spent its request budget (its own or one of its parents') | |
KEY_BUDGET_EXHAUSTED | 0xA011 | 403 | This key spent its own request budget | |
EMAIL_VERIFICATION_REQUIRED | 0xA012 | 403 | Verify your email address to continue | |
LIVE_BY_PROMOTE | 0xA013 | 409 | This app changes only by promote: change its dev sandbox and promote the version | source.edit |
TENANT_MOVED | 0xA014 | 308 | This app moved to another server: send the request to the address in Location | |
GRANT_REQUIRED | 0xA015 | 403 | This app has not been granted the capability the call needs; the system admin grants it (tenant.update grants) | |
KEY_ORIGIN_REFUSED | 0xA016 | 403 | A publishable key is refused here: the request's Origin is not one of its origins, or the route does not take one | |
APPROVAL_PENDING | 0xA017 | 403 | No person has approved this call yet: show the person approve_url, and once they approve, repeat the same call | |
APPROVAL_SPENT | 0xA018 | 403 | This exact call already ran with its approval; a repeat is refused until the approval lapses | |
APPROVAL_EXPIRED | 0xA019 | 403 | The approval lapsed before it was used: repeat the call without it to ask again | |
APPROVAL_MISMATCH | 0xA01A | 403 | The approval names another call or another session: it works only for the exact call that asked for it | |
WEBHOOK_SIGNATURE_INVALID | 0xA01B | 400 | The payment provider webhook's signature does not verify | |
BILLING_NOT_SET_UP | 0xA01C | 503 | Billing is not set up: the payment provider's keys are not set | |
EMAIL_TAKEN | 0xA01D | 409 | That email already has an account. Sign in instead. | |
CREDENTIALS_MISMATCH | 0xA01E | 401 | That email and password do not match. | |
PASSWORD_LENGTH | 0xA01F | 400 | Use a password of 8 to 128 characters. | |
EMAIL_INVALID | 0xA020 | 400 | Enter a valid email address. | |
USER_NOT_FOUND | 0xA021 | 404 | We could not find that person. | |
ACCOUNT_LOCKED | 0xA022 | 423 | This account is locked. Reset your password to sign in again. | |
SECRET_KEY_IN_URL | 0xA023 | 400 | A 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_UNSUBSCRIBED | 0xA024 | 409 | You turned off this app's email, so no code was sent. Ask for a link to turn it back on. | |
APP_OVER_PLAN | 0xA025 | 403 | This 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_COMPLEX | 0xB000 | 400 | Query is too complex | |
QUERY_TIMEOUT | 0xB001 | 504 | Query execution timed out | |
RESULT_SET_TOO_LARGE | 0xB002 | 413 | Result set exceeds maximum size | |
SORT_LIMIT_EXCEEDED | 0xB003 | 400 | Sort operation exceeds limit | |
SCAN_LIMIT_EXCEEDED | 0xB004 | 400 | Scan operation exceeds limit | |
INVALID_QUERY_SYNTAX | 0xB005 | 400 | That query does not parse. | |
SQL_FAILED | 0xB006 | 400 | The SQL statement did not parse or run | |
TENANT_NOT_FOUND | 0xC000 | 404 | Tenant not found | |
TENANT_ALREADY_EXISTS | 0xC001 | 409 | Tenant already exists | |
TENANT_INVALID | 0xC002 | 400 | That app is not one this server knows. | |
TENANT_CANNOT_DROP_DEFAULT | 0xC003 | 403 | Cannot drop the default tenant | |
COLLECTION_NOT_FOUND | 0xC004 | 404 | Collection not found | collection.list |
COLLECTION_ALREADY_EXISTS | 0xC005 | 409 | Collection already exists | |
FUNCTION_NOT_FOUND | 0xC006 | 404 | Function not found | function.list |
THREAD_NOT_FOUND | 0xC007 | 404 | Thread not found | thread.list |
MESSAGE_NOT_FOUND | 0xC008 | 404 | Message not found | thread.messages.list |
DATABASE_ERROR | 0xC009 | 500 | Database error | |
ACCOUNT_NOT_FOUND | 0xC00A | 404 | Account not found | account.list |
ACCOUNT_MEMBER_NOT_FOUND | 0xC00B | 404 | No such member of the account | account.member.list |
ACCOUNT_LAST_OWNER | 0xC00C | 409 | An account keeps at least one owner | |
ACCOUNT_HAS_APPS | 0xC00D | 409 | The account still owns apps | |
ACCOUNT_LIMIT | 0xC00E | 409 | An account limit is reached | |
ACCOUNT_KEY_NOT_FOUND | 0xC00F | 404 | No such key of the account | account.key.list |
ACCOUNT_INVITE_NOT_FOUND | 0xC010 | 404 | No such invite, or it was used or revoked | account.invite.list |
ACCOUNT_INVITE_EXPIRED | 0xC011 | 409 | The invite has expired | |
ACCOUNT_INVITE_EMAIL | 0xC012 | 403 | The invite is for another verified email address | |
UNDO_TOKEN_NOT_FOUND | 0xC013 | 404 | No such undo token for this app, or it was used | |
UNDO_TOKEN_EXPIRED | 0xC014 | 410 | The undo token has expired | |
UNDO_RESOURCE_CHANGED | 0xC015 | 409 | The resource changed after this undo token was issued | |
APP_OWNED_BY_ANOTHER_ACCOUNT | 0xC016 | 409 | The app belongs to another account | |
KEY_EXPIRED | 0xC017 | 401 | The tenant key has expired | |
TENANT_KEY_NOT_FOUND | 0xC018 | 404 | No such key of the tenant | |
TENANT_SLUG_RESERVED | 0xC019 | 409 | This slug was renamed away recently and is held for its former account | |
TENANT_NOTE_TOO_LONG | 0xC01A | 400 | The suspension note is longer than the 127 bytes the record holds; shorten it (nothing is cut) | |
TENANT_JOBS_DISABLED | 0xC01B | 409 | This tenant's background work is switched off; nothing queued is lost and tenant.resume starts it again | |
TOOL_BAD_NAME | 0xC020 | 400 | A tool's name is 1 to 63 bytes of lowercase letters, digits, '-' and '_', not starting with '-' or '_' | |
TOOL_HASH_MISMATCH | 0xC021 | 400 | The uploaded bytes do not hash to the declared sha256 | |
TOOL_BAD_SIZE | 0xC022 | 400 | The tool's image is empty or larger than the per-tenant limit | |
TOOL_BAD_FORMAT | 0xC023 | 400 | The tool's image is not an executable this platform runs | |
TOOL_TOO_MANY | 0xC024 | 409 | This tenant already has as many tools installed as it may | |
TOOL_STORAGE_IO | 0xC025 | 500 | The tool's image could not be stored | |
TOOL_NOT_INSTALLED | 0xC026 | 404 | No such tool version is installed | |
TOOL_TOO_MANY_BYTES | 0xC027 | 409 | This tenant's installed tool images already total as many bytes as it may | |
TOOL_LIMIT_OUT_OF_RANGE | 0xC028 | 400 | A tool limit is above the ceiling this platform allows for it | |
TOOL_BAD_ARGS | 0xC029 | 400 | tool.run's args, env or stdin are not shaped as this operation requires | |
TOOL_CONFINEMENT_UNAVAILABLE | 0xC02A | 503 | This host cannot confine a tool process; tool.run never runs one unconfined | |
TOOL_SPAWN_FAILED | 0xC02B | 500 | The tool process could not be started | |
DIRECT_CHANGES | 0xC02C | 409 | A function deployed outside a version would be overwritten or deleted; send direct:"replace" or direct:"keep" | |
HOST_NOT_FOUND | 0xC02D | 404 | Host not found | |
HOST_HAS_NODES | 0xC02E | 409 | The host still carries nodes; move them off it first | |
NODE_LABEL_NOT_FOUND | 0xC02F | 404 | Node label not found; node_label.set defines it | |
NODE_LABEL_IN_USE | 0xC030 | 409 | A host still carries the node label; take it off the host first | |
NODE_LABEL_LIMIT | 0xC031 | 409 | Every one of the 64 node labels is defined; delete one first | |
HOST_CAPABILITY_MISSING | 0xC032 | 409 | The host lacks a capability the operation needs (the detail names it); run host.probe first | |
HOST_AT_CAPACITY | 0xC033 | 409 | The host holds as many apps as its max_tenants allows; raise it or place the app on another host | |
HOST_HAS_APPS | 0xC034 | 409 | Apps are still placed on the host; tenant.place moves them off it | |
SETTING_IS_PLATFORM | 0xC035 | 403 | The key is a server-wide platform setting; a system admin sets it with platform.setting.set | |
NO_CALL_CONTEXT | 0xC036 | 400 | The host call was made outside a function's call: no database or function context is bound | |
LEDGER_UNAVAILABLE | 0xC037 | 503 | The app's ledger could not be opened | |
APP_QUERY_NOT_INDEXED | 0xC038 | 400 | An offered query's where field is not declared indexed on its collection (index.create kind collection) | |
APP_QUERY_FIELD_NOT_EXPOSED | 0xC039 | 400 | The reader names a field the offered query does not select | |
APP_USE_UNKNOWN_APP | 0xC03A | 200 | The word names an app that does not exist yet; kept, and refused per call until it does | |
SECRET_NOT_FOUND | 0xC03B | 404 | The app has no secret of this key; secret.list names the ones it has | |
EDIT_NO_MATCH | 0xC03C | 409 | The unit does not hold the edit's old text as given; read it again (version.unit) and edit what it holds | version.unit |
EDIT_AMBIGUOUS | 0xC03D | 400 | The edit's old text occurs more than once; give more of the surrounding text, or replace_all | version.unit |
MODULE_NOT_FOUND | 0xC040 | 400 | An import names a file the version does not hold; commit the file or fix the specifier | |
IMPORT_OUTSIDE_PROJECT | 0xC041 | 400 | An import climbs above the version's root; import only files of the version | |
IMPORT_NEEDS_VERSION | 0xC042 | 400 | A function deployed outside a version imports a file; ship it in a version (version.commit, then version.live.set) | version.commit |
PACKAGE_NOT_FOUND | 0xC043 | 400 | A bare import names a package the version does not hold under node_modules; add it with package.add | |
PACKAGE_NOT_EXPORTED | 0xC044 | 400 | The package's "exports" names no entry for the imported subpath; import one it exports | |
PACKAGE_NOT_ESM | 0xC045 | 400 | The package's entry is CommonJS by its own package.json; only ES module packages load | |
PACKAGE_MANIFEST_INVALID | 0xC046 | 400 | The package's package.json is not a JSON object; add the package again with package.add | |
HOST_TAKEN | 0xC048 | 409 | Another app holds this host's label (under one root or another); choose another label | |
HOST_INVALID | 0xC049 | 400 | The 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_RESERVED | 0xC04A | 409 | The 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_FOUND | 0xC04B | 404 | This app has no such host; env.host.list names its hosts | env.host.list |
ENVIRONMENT_NOT_FOUND | 0xC04C | 404 | No such environment: live, a sandbox from sandbox.list, or a host from env.host.list | sandbox.list |
ROOT_DOMAIN_UNKNOWN | 0xC04D | 404 | The host is not under a root domain of this platform; env.host.list answers the roots a host may be bound under | env.host.list |
ROOT_DOMAIN_DISABLED | 0xC04E | 409 | The root domain is disabled: no host is bound under it until the platform admin enables it | |
ROOT_DOMAIN_IN_USE | 0xC04F | 409 | Test hosts are bound under the root domain (hosts is their count); they are removed with env.host.remove first | |
FEATURED_APP_NOT_FOUND | 0xC050 | 404 | No featured app has this name; featured.list names every one | |
FEATURED_NOT_ENABLED | 0xC051 | 409 | The account has not enabled this featured app; featured.enable it first | |
FEATURED_NEEDS_PLANS | 0xC052 | 400 | Only an app open to other accounts' keys whose plans file has a featured block (title, summary, admin) can be featured | |
BILLING_KEY_NOT_TEST | 0xC060 | 503 | The 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_EMPTY | 0xC061 | 400 | The cart buys nothing: name at least one plan in items, or funds | |
CART_PLAN_NOT_FOUND | 0xC062 | 400 | The app has no plan by this id; billing.catalog lists every plan | |
CART_PLAN_NOT_FOR_SALE | 0xC063 | 400 | This plan is free: featured.enable or account.plan.change puts the account on it, no cart needed | |
CART_APP_REPEATED | 0xC064 | 400 | The cart names this app twice; one plan an app | |
CART_COVERED | 0xC065 | 400 | The cart's Substrio plan already includes this app at this plan or a higher one; take it out | |
CART_MIXED | 0xC066 | 400 | Every plan in one cart has the first one's currency and interval; buy the other in a cart of its own | |
FUNDS_OUT_OF_RANGE | 0xC067 | 400 | Funds are from 500 to 1000000 in the minor unit (5.00 to 10,000.00) | |
CART_NOT_FOUND | 0xC068 | 404 | The account has no cart by this id; billing.cart.create makes one | |
CART_CLOSED | 0xC069 | 409 | The cart's checkout has started or is paid, so it no longer changes; make a new cart | |
CHECKOUT_PERSON_ONLY | 0xC06A | 403 | Paying is the person's own: give them the cart's checkout_url to pay on | |
PAYMENT_NOT_DONE | 0xC06B | 409 | The cart is not paid: the person pays on its checkout page (billing.checkout.start), then this call | |
PAYMENT_PROCESSING | 0xC06C | 409 | The payment is still being processed by the provider; ask again shortly | |
SUBSCRIPTION_NONE | 0xC06D | 404 | The account has no subscription to cancel | |
PROVIDER_ANSWER_INVALID | 0xC06E | 503 | The payment provider's answer was not the object asked for (the field names it); nothing was applied, ask again | |
PLAN_LIMIT | 0xC06F | 409 | The 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_PLAN | 0xC070 | 400 | The plan the account would be on sells no space add-on; a plan with space_addon (Scale) does | |
SPACE_ADDON_HELD | 0xC071 | 409 | The account holds space add-on blocks the new plan does not sell; release them first (a cart with space_blocks 0) | |
SPACE_ADDON_IN_USE | 0xC072 | 409 | The account uses more than the space it would keep; delete data first, then release the blocks | |
PLAN_NOT_ON_SALE | 0xC073 | 409 | This 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_FOUND | 0xC080 | 404 | The app's MCP manifest has no tool of this name; mcp.tool.list names the ones it has | |
MCP_TOOL_INVALID | 0xC081 | 400 | The tool is not one the app's /mcp can serve; field names the member at fault | |
MCP_TEST_USER_NOT_FOUND | 0xC082 | 404 | The app has no user of this id to call the tool as; user.list names its people | |
MCP_TOOL_FROM_ROUTE | 0xC083 | 409 | The tool is a route's own; its function takes it out with tools: {"<route>": false} (functions/<name>.json) | |
KEY_AUTOMATION_NEEDS_PERSON | 0xC090 | 403 | Only a person signed in as themselves makes an automation key; a key, an agent or the system key makes agent keys | |
PACKAGE_REGISTRY_UNSET | 0xC0A0 | 503 | package.add has no registry: the platform setting package_registry_origin is unset | |
PACKAGE_UNKNOWN | 0xC0A1 | 404 | The registry has no package of that name | |
PACKAGE_NAME_INVALID | 0xC0A2 | 400 | Not an npm package name: lowercase letters, digits, - . _ ~, an optional @scope/ | |
PACKAGE_RANGE_INVALID | 0xC0A3 | 400 | Not a version, a range or a dist-tag | |
PACKAGE_VERSION_NOT_FOUND | 0xC0A4 | 404 | No published version of the package meets the range or tag | |
PACKAGE_VERSION_CONFLICT | 0xC0A5 | 409 | One package name would need two versions; a version holds one of each name | |
PACKAGE_REGISTRY_FAILED | 0xC0A6 | 502 | The registry could not be reached or answered with an error | |
PACKAGE_TARBALL_OUTSIDE_REGISTRY | 0xC0A7 | 502 | The registry names a tarball outside its own origin; only the configured registry is fetched from | |
PACKAGE_INTEGRITY_MISMATCH | 0xC0A8 | 502 | The tarball's SHA-512 is not the registry's dist.integrity, or the registry gives no sha512 | |
PACKAGE_TARBALL_INVALID | 0xC0A9 | 502 | The tarball is not a gzip tar of a package: a link, an unsafe path, or no package.json | |
PACKAGE_TOO_LARGE | 0xC0AA | 413 | The package unpacks past 256 MiB, or its metadata past 64 MiB | |
ADOPT_DISABLED | 0xC0B0 | 409 | This 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_FOUND | 0xC0B1 | 404 | No file of this name is beneath the server's adopt directory; source names it relative to that directory | |
ADOPT_SOURCE_OUTSIDE | 0xC0B2 | 400 | The source is outside the server's adopt directory (an absolute name, or .. past it) | |
ADOPT_SOURCE_SYMLINK | 0xC0B3 | 400 | The source's name passes a symbolic link; name the file itself | |
ADOPT_SOURCE_NOT_REGULAR | 0xC0B4 | 400 | The source is not a regular file (a directory, a pipe, a device or a socket) | |
ADOPT_SOURCE_LINKED | 0xC0B5 | 409 | The source has another name (a hard link), which would stay a writable name of the stored file; remove the other name first | |
ADOPT_CROSS_DEVICE | 0xC0B6 | 409 | The 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_CHANGED | 0xC0B7 | 409 | The source was written, or its name moved, while it was hashed; adopt it again once nothing writes it | |
CONSOLE_LINK_NEEDS_PERSON | 0xC0B8 | 403 | Only a person mints a console link: an agent session for its own person, or the person signed in to the console; a key, the master key or an agent token is no person | |
CONSOLE_LINK_UNKNOWN | 0xC0B9 | 404 | No live console link has this token: it is mistyped, or a newer link replaced it; the agent mints a new one | |
CONSOLE_LINK_USED | 0xC0BA | 410 | This console link was already used; each signs in once, so the agent mints a new one | |
CONSOLE_LINK_EXPIRED | 0xC0BB | 410 | This console link is past its life; the agent mints a new one | |
CONSOLE_LINK_STEP_UP | 0xC0BC | 403 | This session came from your agent's console link: sign in again with your email code or second factor to decide approvals or make an automation key | |
AGENT_CODE_INVALID | 0xC0BD | 401 | This 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_CONNECTED | 0xC0BE | 409 | This 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_UNKNOWN | 0xC0BF | 404 | No tool of this name reaches this credential; GET /v1/_agent/tools names the ones that do | |
CPU_HISTORY_OFF | 0xC0C0 | 409 | This 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_FOUND | 0xC0C1 | 404 | There is no subscription of yours by this id; subscriptions.mine lists them | |
PLAN_FEATURE_REQUIRED | 0xC0C2 | 403 | Your plan at this app does not include this feature; the app's plans name the ones that do | |
SUBSCRIBERS_NOT_VISIBLE | 0xC0C3 | 403 | Only the selling app and the apps of its own account read its subscribers | |
SUBSCRIPTION_PERSON_REQUIRED | 0xC0C4 | 403 | This is a person's own call: sign in as the person (an agent or a key cannot buy or list for them) | |
PLAN_FEATURE_UNKNOWN | 0xC0C5 | 403 | The route's plan gate names a feature the app's plans file does not have | |
APP_NOT_NAMED | 0xC0C7 | 400 | This call runs at an app and the request names none: send X-Substrio-Tenant: <app>, or call the app's own host | |
SHELL_SYNTAX | 0xC0D0 | 400 | The command is not in the shell's grammar (the detail says where); nothing ran | |
SHELL_UNKNOWN_COMMAND | 0xC0D1 | 400 | The shell has no such command; the detail lists the ones it has | |
SHELL_UNKNOWN_VARIABLE | 0xC0D2 | 400 | The shell has no such variable: PWD HOME SRC SITE FILES BRANCH and ? are the ones it has | |
SHELL_PATH_OUTSIDE | 0xC0D3 | 400 | The path is under no mount: /src, /site and /files are the shell's whole file system | |
SHELL_READ_ONLY | 0xC0D4 | 400 | /site is the live release, read only: change /src and ship a version | |
SHELL_WRITE_NOT_GRANTED | 0xC0D5 | 403 | The command writes, and the caller's grant reads only; nothing landed | |
SHELL_FILES_DELETE | 0xC0D6 | 403 | A stored file is deleted with file.delete, which asks a person first; nothing landed | |
SHELL_OFFSET_WRITES | 0xC0D7 | 400 | offset continues a command's output, and this command writes: run it without offset | |
SHELL_CPU_BUDGET | 0xC0D8 | 408 | The command ran past the shell's CPU budget; nothing landed: narrow it | |
SHELL_PIPE_BUDGET | 0xC0D9 | 413 | One stage of the command wrote past the shell's pipe budget; nothing landed: narrow it | |
DASHBOARD_INVALID | 0xC0E0 | 400 | The 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_FOUND | 0xC0F0 | 404 | No region of this slug; region.list names them | |
REGION_IN_USE | 0xC0F1 | 409 | A host still names this region; host.update moves or clears it first | |
REGION_LIMIT | 0xC0F2 | 409 | The platform holds the most regions it can; region.remove frees one | |
REGION_UNAVAILABLE | 0xC0F3 | 409 | This region is not offered: it is hidden, unknown or serves no apps yet; region.choices lists the ones you can pick | |
REGION_FULL | 0xC0F4 | 409 | Every host in this region is at its app limit; pick another region from region.choices or try again later | |
HOST_NOT_PROBED | 0xC0F5 | 409 | This host has not been probed, so its CPU and systemd are unknown; host.probe first | |
HOST_NO_SYSTEMD | 0xC0F6 | 409 | This host runs no systemd, which a node's service needs | |
HOST_NGINX_PRESENT | 0xC0F7 | 409 | nginx is installed or running on this host; the platform serves :80 and :443 itself and never shares a host with a proxy | |
RELEASE_NOT_FOUND | 0xC0F8 | 404 | The master holds no release of this id; release.list names them | |
RELEASE_NOT_PACKED | 0xC0F9 | 409 | This release has no packed tarball (.tar.zst and .sha256) beside its folder, so it cannot be sent to a host | |
RELEASE_ISA_UNKNOWN | 0xC0FA | 409 | This release's manifest names no instruction set, so no host can be checked against it | |
HOST_CPU_MISSING | 0xC0FB | 409 | This host's CPU lacks features the release needs; the detail names them | |
HOST_NODE_LIMIT | 0xC0FC | 409 | This host holds the most nodes it can; host.node.undeploy frees a slot | |
NODE_BUSY | 0xC0FD | 409 | A deploy or undeploy of this node is under way; host.node.list shows when it ends | |
TEST_TENANT_REQUIRED | 0xC570 | 403 | Only a test tenant (tenant.create test=true) has fetch stubs and a clock | |
ARCHIVE_INVALID | 0xC580 | 400 | The 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_WRONG | 0xC581 | 400 | The 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 | |
SERIALIZATION | 0xF000 | 500 | Serialization error | |
DESERIALIZATION | 0xF001 | 400 | Deserialization error | |
PIPELINE_TOO_LARGE | 0xF002 | 400 | Pipeline too large | |
INVALID_JSON | 0xF003 | 400 | The request body is not valid JSON. | |
EMPTY_PAYLOAD | 0xF004 | 400 | Request payload is empty | |
BODY_REQUIRED | 0xF005 | 400 | Request body is required | |
METHOD_NOT_ALLOWED | 0xF006 | 405 | HTTP method not allowed | |
ENDPOINT_NOT_FOUND | 0xF007 | 404 | API endpoint not found | |
MISSING_FIELD | 0xF008 | 400 | Required field is missing | |
UNSUPPORTED_OPERATION | 0xF009 | 400 | Operation not supported | |
NO_WAIT_IN_QUERY | 0xF00A | 400 | Cannot 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_TRANSACTION | 0xF00B | 400 | Cannot 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_UPSERT | 0xF00C | 400 | Cannot 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_GATE | 0xF00D | 400 | Cannot 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_FAILED | 0xF00E | 502 | The fetch's upstream could not be reached or broke off | |
CRITICAL_SEGFAULT | 0xFFFF | 500 | Critical system failure | |