ValidonX API Error Codes
Per ADR-009: Error Taxonomy & Error Handling Last updated: 2026-04-03
Error Response Format
All errors follow the structured envelope format:
json
{
"error": {
"code": "DOMAIN.CATEGORY",
"message": "Human-readable description",
"type": "domain",
"status": 401,
"details": {}
},
"meta": {
"request_id": "uuid",
"api_version": "1"
}
}Error Code Reference
AUTH — Authentication & Authorization
| Code | HTTP | Description |
|---|---|---|
AUTH.INVALID_CREDENTIALS | 401 | Email or password is incorrect |
AUTH.INVALID_API_KEY | 401 | Missing, invalid, or revoked API key |
AUTH.API_KEY_REVOKED | 401 | API key has been revoked |
AUTH.ACCOUNT_LOCKED | 429 | Account temporarily locked due to repeated failed login attempts |
AUTH.UNAUTHENTICATED | 401 | No valid authentication token provided |
AUTH.FORBIDDEN | 403 | Authenticated but insufficient permissions |
AUTH.INSUFFICIENT_PERMISSIONS | 403 | User lacks required role/ability |
AUTH.VERIFICATION_FAILED | 403 | Invalid email verification link |
AUTH.PASSWORD_RESET_FAILED | 422 | Invalid or expired password reset token |
RATE_LIMIT — Rate Limiting
| Code | HTTP | Description |
|---|---|---|
RATE_LIMIT.EXCEEDED | 429 | Too many requests — check Retry-After header |
TENANT — Tenant Resolution
| Code | HTTP | Description |
|---|---|---|
TENANT.NOT_FOUND | 404 | Tenant does not exist |
TENANT.INVALID_STATE | 403 | Tenant is not in a valid state for this operation |
TENANT.STATUS.SUSPENDED | 403 | Tenant is suspended |
LICENSE — License Operations
| Code | HTTP | Description |
|---|---|---|
LICENSE.NOT_FOUND | 404 | License key does not exist |
LICENSE.REVOKED | 403 | License has been revoked |
ACTIVATION — Activation Operations
| Code | HTTP | Description |
|---|---|---|
ACTIVATION.INVALID | 422 | Invalid activation request |
ACTIVATION.LIMIT_EXCEEDED | 403 | Maximum activations reached for this license |
ENTITLEMENTS — Entitlement Operations
| Code | HTTP | Description |
|---|---|---|
ENTITLEMENTS.MISSING | 403 | Required entitlement not available on current plan |
ENTITLEMENTS.LIMIT_EXCEEDED | 403 | Entitlement usage limit exceeded |
BILLING — Billing & Subscription
| Code | HTTP | Description |
|---|---|---|
BILLING.SUBSCRIPTION_NOT_FOUND | 404 | Subscription does not exist |
BILLING.SUBSCRIPTION_ALREADY_CANCELED | 409 | Subscription is already cancelled |
BILLING.SUBSCRIPTION_STRIPE_ERROR | 502 | Stripe API error during subscription operation |
BILLING.INVOICE_NOT_FOUND | 404 | Invoice does not exist |
BILLING.REFUND_NOT_ALLOWED | 422 | Refund not allowed for this invoice |
BILLING.PAYMENT_METHOD_NOT_FOUND | 404 | Payment method does not exist |
BILLING.AUTH_FORBIDDEN | 403 | Insufficient billing role |
ONBOARDING — Self-Service Onboarding
| Code | HTTP | Description |
|---|---|---|
ONBOARDING.PLAN_NOT_FOUND | 404 | Selected plan is not available |
ONBOARDING.CHECKOUT_FAILED | 502 | Stripe Checkout session creation failed |
ONBOARDING.PROVISIONING_FAILED | 500 | Tenant provisioning pipeline failed |
ONBOARDING.STRIPE_CUSTOMER_FAILED | 502 | Stripe customer creation failed |
CATALOG — Product Catalog
| Code | HTTP | Description |
|---|---|---|
CATALOG.INVALID_PRODUCT | 422 | Invalid product data |
CATALOG.INVALID_PLAN | 422 | Invalid plan data |
CATALOG.NOT_FOUND | 404 | Catalog item not found |
SYSTEM — Internal Errors
| Code | HTTP | Description |
|---|---|---|
INTERNAL.ERROR | 500 | Unexpected internal error |
SYSTEM.STRIPE_NOT_CONFIGURED | 500 | Stripe API keys not configured |
VALIDATION.FAILED | 422 | Request validation failed (see details for field errors) |