| title | Error Code Ledger |
|---|---|
| description | Error Code Ledger protocol schemas |
{/*
Error-Code Ledger (ADR-0112 D3).
The top-level error.code vocabulary is two-tier:
- Standard catalog —
StandardErrorCode(errors.zod.ts): a small,
closed set with platform-wide HTTP semantics. It does NOT grow when a
service invents a code.
- Registered extension codes — THIS ledger: every service-specific code
a route may put in error.code, registered under its owning package.
ErrorCode (exported below) is the union, and is what ApiErrorSchema.code
validates against. An unregistered code fails schema parse — which fails the
envelope conformance suites — which fails CI. That friction is the point
(ADR-0112: "no silent fourth state" for error codes, per ADR-0049/0078).
Add it to your package's entry (create the entry if your package has none),
SCREAMING_SNAKE (^[A-Z][A-Z0-9_]*$ — lint-enforced by
error-code-ledger.test.ts), with a trailing // comment when the name
alone doesn't carry the meaning. Prefer a domain prefix for anything not
self-evidently global (ATTACHMENT_*, REPORT_*, SETTINGS_*). If the
condition is generic (not found / permission / validation / rate limit),
use the standard catalog instead of registering a synonym.
A code emitted by several packages is listed once per emitting package —
the union dedupes; the per-package rows are provenance, not identity.
Field-level codes (FieldErrorSchema.code, the fields[] array) are a
SEPARATE vocabulary and do not belong here — see #3977 (ADR-0112 D6).
**Source:** `packages/spec/src/api/error-code-ledger.zod.ts`import { ErrorCode } from '@objectstack/spec/api';
import type { ErrorCode } from '@objectstack/spec/api';
// Validate data
const result = ErrorCode.parse(data);VALIDATION_ERRORINVALID_FIELDMISSING_REQUIRED_FIELDINVALID_FORMATVALUE_TOO_LONGVALUE_TOO_SHORTVALUE_OUT_OF_RANGEINVALID_REFERENCEDUPLICATE_VALUEINVALID_QUERYINVALID_FILTERINVALID_SORTMAX_RECORDS_EXCEEDEDUNAUTHENTICATEDINVALID_CREDENTIALSEXPIRED_TOKENINVALID_TOKENSESSION_EXPIREDMFA_REQUIREDEMAIL_NOT_VERIFIEDPERMISSION_DENIEDINSUFFICIENT_PRIVILEGESFIELD_NOT_ACCESSIBLERECORD_NOT_ACCESSIBLELICENSE_REQUIREDIP_RESTRICTEDTIME_RESTRICTEDRESOURCE_NOT_FOUNDOBJECT_NOT_FOUNDRECORD_NOT_FOUNDFIELD_NOT_FOUNDENDPOINT_NOT_FOUNDRESOURCE_CONFLICTCONCURRENT_MODIFICATIONDELETE_RESTRICTEDDUPLICATE_RECORDLOCK_CONFLICTMETHOD_NOT_ALLOWEDPRECONDITION_REQUIREDRATE_LIMIT_EXCEEDEDQUOTA_EXCEEDEDCONCURRENT_LIMIT_EXCEEDEDINTERNAL_ERRORDATABASE_ERRORTIMEOUTSERVICE_UNAVAILABLENOT_IMPLEMENTEDEXTERNAL_SERVICE_ERRORINTEGRATION_ERRORWEBHOOK_DELIVERY_FAILEDBATCH_PARTIAL_FAILUREBATCH_COMPLETE_FAILURETRANSACTION_FAILEDACCOUNT_LOCKEDALREADY_REVERTEDAMBIGUOUS_MATCHANALYTICS_QUERY_FAILEDAPPROVAL_ACTIONS_FAILEDAPPROVAL_RECALL_FAILEDAPPROVAL_REQUEST_GET_FAILEDAPPROVAL_REQUEST_LIST_FAILEDASYNC_NOT_SUPPORTEDATTACHMENT_DELETE_DENIEDATTACHMENT_DOWNLOAD_DENIEDATTACHMENT_PARENT_ACCESSAUDIENCE_NOT_ALLOWEDAUTH_CONFIG_ERRORAUTH_REQUIREDAUTOMATION_UNSCOPED_RUN_DATA_ACCESSBATCH_ABORTEDBATCH_NOT_ATOMICBATCH_TOO_LARGEBATCH_UNRESOLVED_REFBLANK_MATCH_KEYCLONE_DISABLEDCLOUD_FETCH_FAILEDCLOUD_UNCONFIGUREDCOMMIT_NOT_FOUNDCONCURRENT_UPDATECONFLICTING_MAPPINGCONNECTOR_UPSTREAM_UNAVAILABLECREATE_FAILEDCUBE_NOT_FOUNDDATASET_INVALIDDATASOURCE_ADMIN_ERRORDELEGABLE_SCOPE_FAILEDDELIVERY_NOT_ELIGIBLEDESTRUCTIVE_CHANGEDEVICE_CODE_FAILEDDOMAIN_VERIFICATION_DISABLEDDOMAIN_VERIFICATION_FAILEDDRIVER_UNAVAILABLEDUPLICATE_REQUESTEMAIL_SEND_FAILEDEMAIL_SERVICE_REQUIREDENQUEUE_FAILEDENVIRONMENT_BIND_FAILEDENVIRONMENT_NOT_FOUNDENV_ACCESS_DENIEDERR_BULK_RESULT_MISMATCHERR_DATASOURCE_UNAVAILABLEERR_DRIVER_CONNECTERR_FILE_CONSTRAINTERR_FILE_REFERENCE_COPYERR_SUMMARY_RECOMPUTEEXECUTION_ERROREXPIRED_OR_REVOKEDEXPIRY_IN_PASTEXPIRY_TOO_LONGEXPLAIN_FAILEDEXPORT_NOT_PERMITTEDEXTERNAL_IMPORT_ERROREXTERNAL_SCHEMA_MISMATCHEXTERNAL_SCHEMA_MODE_VIOLATIONEXTERNAL_WRITE_FORBIDDENFEEDS_DISABLEDFILES_DISABLEDFILE_DOWNLOAD_DENIEDFILE_NOT_FOUNDFILTER_TOKEN_UNKNOWNFILTER_TOKEN_UNRESOLVEDFORBIDDENFORM_NOT_FOUNDFORM_RESOLVE_FAILEDIMPORT_JOB_CREATE_FAILEDIMPORT_ROW_FAILEDINTERNALINVALID_EMAILINVALID_EXPIRYINVALID_METADATAINVALID_OR_EXPIREDINVALID_PHONEINVALID_REQUESTINVALID_RESUME_TOKENINVALID_SIGNALINVALID_SIGNATUREINVALID_STATEINVITE_EMAIL_FAILEDINVITE_REQUIRES_EMAILINVITE_SMS_FAILEDIP_NOT_ALLOWEDITEM_LOCKEDLAST_LOCAL_CREDENTIALLOOKUP_NOT_PUBLICLOOKUP_TARGET_MISSINGMANIFEST_CONFLICTMAPPING_FORMAT_MISMATCHMAPPING_FORMAT_UNSUPPORTEDMAPPING_NOT_FOUNDMAPPING_TARGET_MISMATCHMARKETPLACE_PROXY_FAILEDMARKETPLACE_STORAGE_FAILEDMARKETPLACE_UNAVAILABLEMETADATA_BRANCHMETADATA_CONFLICTMETADATA_NOT_FOUNDMETADATA_SCHEMA_INVALIDMONGODB_MULTI_TENANT_UNSUPPORTEDNAMESPACE_PREFIXNEEDS_PASSWORDNODE_FAILURENOTHING_TO_PURGENOT_CREATABLENOT_FOUNDNOT_OVERRIDABLENOT_UNDOABLENO_DRAFTNO_EXECUTORNO_IDENTITYNO_MATCHNO_PENDING_VERIFICATIONOAUTH_REGISTER_FAILEDOBJECT_API_DISABLEDOBJECT_API_METHOD_NOT_ALLOWEDOPENAPI_UNAVAILABLEOS_PROTOCOL_INCOMPATIBLEOVERLAY_PERSISTENCE_FAILEDPACKAGE_DELETE_FAILEDPACKAGE_DELETE_PARTIALPACKAGE_MANIFEST_INVALIDPACKAGE_PUBLISH_FAILEDPASSWORD_ALREADY_SETPASSWORD_EXPIREDPASSWORD_POLICY_VIOLATIONPASSWORD_REUSEPAYLOAD_TOO_LARGEPERMISSION_NOT_ALLOWEDPHONE_NOT_ENABLEDPLUGIN_INSTALL_FAILEDPLUGIN_MANIFEST_INVALIDPLUGIN_REGISTER_FAILEDPROJECT_MEMBERSHIP_REQUIREDPROJECT_NOT_FOUNDPROJECT_PROVISIONINGPROJECT_PROVISIONING_FAILEDRAW_SQL_UNSUPPORTEDRECORD_GONERECORD_LOCKEDREPORTS_LIST_FAILEDREPORT_DELETE_FAILEDREPORT_GET_FAILEDREPORT_NOT_FOUNDREPORT_RUN_FAILEDREPORT_SAVE_FAILEDREPORT_SCHEDULE_FAILEDREQUEST_NOT_FOUNDRESEED_NO_ROWSRESEED_SKIPPEDROUTE_NOT_FOUNDRULE_DEFINE_FAILEDRULE_DELETE_FAILEDRULE_EVALUATE_FAILEDRULE_GET_FAILEDRULE_LIST_FAILEDRULE_NOT_FOUNDSAML_REGISTER_FAILEDSCHEDULES_LIST_FAILEDSCHEDULE_DELETE_FAILEDSETTINGS_ACTION_FAILEDSETTINGS_FORBIDDENSETTINGS_LOCKEDSETTINGS_UNKNOWN_KEYSETTINGS_UNKNOWN_NAMESPACESETTINGS_VALIDATIONSHARES_LIST_FAILEDSHARE_GRANT_FAILEDSHARE_REVOKE_FAILEDSHARING_NOT_ENABLEDSIGN_IN_REQUIREDSSO_REGISTER_FAILEDSSO_REGISTER_FORBIDDENSUGGESTION_CONFIRM_FAILEDSUGGESTION_DISMISS_FAILEDSUGGESTION_LIST_FAILEDSUGGESTION_NOT_FOUNDSUGGESTION_STATESUMMARY_RECOMPUTE_FAILEDUNAUTHORIZEDUNIQUE_VIOLATIONUNKNOWN_KEYUNKNOWN_NAMESPACEUNSUPPORTEDUNSUPPORTED_QUERY_PARAMUNSUPPORTED_TRANSFORMUPLOAD_SESSION_NOT_FOUNDUSER_ALREADY_EXISTSVALIDATION_FAILEDVERSION_NOT_FOUNDVERSION_NOT_RESTORABLEWRITABLE_PACKAGE_REQUIREDWRONG_PASSWORD