Error Codes

Every error has a stable code, a fixed HTTP status, and a localized message. Below is a representative subset per category.

Format & response shape

  • Format: EQ-ACC-{httpStatus}{sequence}, e.g. EQ-ACC-4040024 = HTTP 404, sequence 0024. The 3-digit HTTP status is embedded in the code itself.
  • Every error response returns the error code, a localized message, and the numeric HTTP status.

HTTP status quick reference

Code family Meaning
EQ-ACC-400xxxx 400 Bad Request (malformed input, missing ids)
EQ-ACC-401xxxx (via 423-series enum) see auth codes below
EQ-ACC-403xxxx 403 Forbidden (insufficient permission, inactive instance)
EQ-ACC-404xxxx 404 Not Found
EQ-ACC-409xxxx 409 Conflict (duplicates, in-use, overlaps)
EQ-ACC-422xxxx 422 Unprocessable (validation / business-rule failures)
EQ-ACC-423xxxx Auth/JWT codes (map to 401/403, see ERROR_STATUS_CODES)
EQ-ACC-500xxxx 500 internal errors (and non-fatal log codes)
EQ-ACC-502xxxx 502 upstream integration failures (registration)

Common / generic

Code HTTP Constant When How to resolve
EQ-ACC-4000001 400 INVALID_ID ObjectId param is malformed Send a valid 24-hex Mongo id
EQ-ACC-4000004 400 INVALID_REQUEST_BODY_FORMAT Body is not valid JSON Fix JSON payload
EQ-ACC-4000005 400 INVALID_REQUEST_FIELDS Unknown field in body Remove unrecognized fields
EQ-ACC-4220003 422 INVALID_PAGINATION page/limit out of range Use valid pagination values
EQ-ACC-4040010 404 ROUTE_NOT_FOUND No matching route Check method + path
EQ-ACC-4030074 403 AUTH_INSUFFICIENT_PERMISSIONS Required privilege not granted Grant the required account:* privilege

Instance & attribute

Code HTTP Constant When How to resolve
EQ-ACC-4040011 404 INSTANCE_NOT_FOUND instanceId not found Use a valid instance
EQ-ACC-4090012 409 INSTANCE_NAME_ALREADY_EXISTS Duplicate instance name Choose another name
EQ-ACC-4030075 403 INSTANCE_INACTIVE Instance is INACTIVE Reactivate instance or use active one
EQ-ACC-4090021 409 DUPLICATE_ATTRIBUTE_KEY Attribute key exists Use a unique key

Account domain (entities)

Code HTTP Constant When How to resolve
EQ-ACC-4040024 404 ACCOUNT_NOT_FOUND Account id not found Verify accountId/instanceId
EQ-ACC-4090025 409 ACCOUNT_ALREADY_EXISTS Duplicate account name in instance Use another name
EQ-ACC-4000026 400 INVALID_PARENT_ACCOUNT parentAccountId invalid/other instance Use a valid parent in same instance
EQ-ACC-4090033 409 CIRCULAR_HIERARCHY_DETECTED Reparenting would create a cycle Choose a non-descendant parent
EQ-ACC-4040031 404 ACCOUNT_USER_NOT_FOUND Account-user link absent Verify user link
EQ-ACC-4090037 409 COST_CENTRE_ALREADY_EXISTS Duplicate cost-centre name Rename
EQ-ACC-4090079 409 COST_CENTRE_IN_USE_BY_TEAM Cost centre linked to team(s) Unlink teams first
EQ-ACC-4040040 404 CONTRACT_NOT_FOUND Contract absent Verify contractId
EQ-ACC-4090076 409 PAYMENT_ALREADY_EXISTS Duplicate paymentMethodId Use a new payment-method id

Validation (422) & PO order validation

Code HTTP Constant When How to resolve
EQ-ACC-4220049 422 ACCOUNT_VALIDATION_FAILED Account payload fails domain validation Fix fields per schema
EQ-ACC-4090059 409 CONTRACT_DATE_OVERLAP Overlapping contract period Adjust contract dates
EQ-ACC-4220091 422 NO_ACTIVE_CONTRACT No active/in-window contract Ensure an ACTIVE contract exists
EQ-ACC-4220092 422 NO_ACTIVE_BUDGET No active budget for cost centre Create/activate a budget
EQ-ACC-4220093 422 BUDGET_EXCEEDED orderAmount + spent > budget amount Increase budget or reduce order
EQ-ACC-4220094 422 CREDIT_LIMIT_EXCEEDED PO order over contract credit limit Raise credit limit or lower order
EQ-ACC-4000095 400 PO_NUMBER_REQUIRED PURCHASE_ORDER without purchaseOrderNumber Supply a PO number

Budget-transaction idempotency

Code HTTP Constant When How to resolve
EQ-ACC-4090081 409 BUDGET_DEBIT_AMOUNT_MISMATCH DEBIT retry for same orderId with different amount Reconcile the order amount
EQ-ACC-4220077 422 BUDGET_CREDIT_WITHOUT_DEBIT CREDIT for an orderId with no prior DEBIT Ensure a DEBIT exists first

Account action (invite/membership)

Code HTTP Constant When
EQ-ACC-4220089 422 USER_INVITE_FAILED User-service invite/lookup failed
EQ-ACC-4090090 409 TEAM_MEMBER_ALREADY_EXISTS User already on the team
EQ-ACC-4090091 409 BUYER_ALREADY_EXISTS Email already a buyer of the account

Authentication / Authorization (423-series enum)

AUTH_MISSING_TOKEN, AUTH_INVALID_TOKEN, AUTH_TOKEN_EXPIRED, AUTH_INVALID_SIGNATURE, AUTH_INVALID_ISSUER, AUTH_INVALID_AUDIENCE, AUTH_FORBIDDEN, plus test-token codes — coded EQ-ACC-4230001EQ-ACC-4230015, mapped to 401 (or 403 for AUTH_FORBIDDEN) by ERROR_STATUS_CODES.

Self-registration (0075–0087) & admin-invite log codes (0088–0089)

Code HTTP Constant When
EQ-ACC-4040075 404 REGISTER_STORE_NOT_FOUND storeId matches no active store
EQ-ACC-4220076 422 REGISTER_INELIGIBLE_STORE_TYPE Store type does not support B2B registration
EQ-ACC-4090077 409 REGISTER_COMPANY_ALREADY_EXISTS Account name already taken
EQ-ACC-5000081 500 REGISTER_USER_CREATE_FAILED User service errored during registration
EQ-ACC-5020086 502 REGISTER_FOUNDATION_INTEGRATION_FAILED Foundation integration call failed
EQ-ACC-5020087 502 REGISTER_USER_INTEGRATION_FAILED User integration call failed
EQ-ACC-5000088 (log only) ADMIN_REGISTER_INVITE_EMAIL_FAILED Invite email failed; 201 still returned
EQ-ACC-5000089 (log only) ADMIN_REGISTER_INVITE_PARAM_MISSING activationParam missing; 201 still returned

Revision History
2026-08-05 | AN – Page created and uploaded the contents