Skip to content

Error Handling

Last updated: Phase 8.5

Error Envelope

All ValidonX API errors return a structured JSON envelope:

json
{
  "error": {
    "code": "DOMAIN.IDENTIFIER",
    "message": "Human-readable description of what went wrong",
    "type": "domain",
    "status": 404,
    "details": {}
  },
  "meta": {
    "request_id": "uuid",
    "api_version": "1"
  }
}

Fields

FieldTypeDescription
error.codestringMachine-readable error code (e.g., LICENSE.NOT_FOUND)
error.messagestringHuman-readable message safe to display to users
error.typestringError domain (derived from code prefix)
error.statusintegerHTTP status code
error.detailsobjectAdditional context (varies by error)
meta.request_idstringUnique request ID for support tickets
meta.api_versionstringAlways "1"

Using error.code

The error.code field is the primary mechanism for programmatic error handling:

javascript
try {
  const response = await fetch('/api/v1/integration/licenses/key/validate', { ... })
  const data = await response.json()
  if (!response.ok) {
    switch (data.error.code) {
      case 'LICENSE.NOT_FOUND':
        // Handle missing license
        break
      case 'LICENSE.REVOKED':
        // Handle revoked license
        break
      case 'RATE_LIMIT.EXCEEDED':
        // Back off and retry
        break
      default:
        // Unknown error
        console.error(data.error.message)
    }
  }
} catch (e) {
  // Network error
}

Using meta.request_id

Every response includes a request_id in the meta block. When contacting support, include this ID for fast diagnosis:

Support ticket: "License validation failing for key VX-ACME-..."
Request ID: 3f2504e0-4f89-11d3-9a0c-0305e82c3301

You can also send your own X-Request-ID header — the backend will echo it back in meta.request_id.

Common Auth Errors

CodeHTTPWhen
AUTH.INVALID_API_KEY401Missing, invalid, or revoked API key
AUTH.INVALID_CREDENTIALS401Wrong email or password on login
AUTH.UNAUTHENTICATED401Missing or invalid Bearer token
AUTH.INSUFFICIENT_PERMISSIONS403Token lacks required ability
TENANT.STATUS.SUSPENDED403Tenant is suspended
RATE_LIMIT.EXCEEDED429Too many requests

See Error Codes for the complete list.

Built by Veltara Works