Error codes

Activation, verification and payment error codes, HTTP statuses and recommended handling.

Every error returns JSON: { "success": false, "error": { "code": "...", "message": "..." } }. Branch on the code, never on the message text.

CodeHTTPMeaningHandling
LICENSE_NOT_FOUND404The key does not exist or was deletedAsk the user to check the key; do not auto-retry
LICENSE_EXPIRED403The license expiredOffer renewal; keep read-only features
LICENSE_SUSPENDED403The license is suspendedAsk the user to contact the owner
LICENSE_REVOKED403The license was revokedLock paid features
ACTIVATION_LIMIT409No device slot leftSend the user to release a device
DEVICE_HELD409The device is held or migratingRetry later or contact support
SEAT_PAUSED403The member is paused over the seat limitAdd a seat or remove a member
FLOATING_LICENSE409A floating license needs a session firstCall floating checkout
RATE_LIMITED429Too many requestsExponential backoff; do not retry in parallel
INVALID_IDEMPOTENCY_KEY400Invalid idempotency key or reused with a different bodyReuse the same key per retry
UNAUTHORIZED401No session for portal/admin routesSign in again or refresh the session
LICENSE_KEY_REQUIRED401A gated release feed needs a licenseSend the license key or token

Retry strategy

  • Retry 5xx, timeouts and 429. Do not blindly retry 4xx business errors.
  • Use the same Idempotency-Key when retrying activation.
  • Exponential backoff with jitter, starting at 1s and capped at 30s.
  • While offline, trust the local token and check in when the network returns.