← Plugin SDK

Error Codes

Numeric error codes returned by the License API and how clients should react to each.

Every non-200 response from /api/v1/license/* carries a stable numeric code in the JSON body. Match on the code, not the HTTP status — the HTTP status describes the category, but the code pins down the exact reason and is more durable across protocol revisions.

CodeNameHTTPWhenClient response
1700LICENSE_API_BAD_SIGNATURE401Missing header / malformed nonce / HMAC mismatch / replayed nonceCheck client clock + secret; do not retry blindly
1701LICENSE_API_STALE_TIMESTAMP401|now − timestamp| > 300sSync client clock; retry with a fresh timestamp + nonce
1702LICENSE_API_MALFORMED400Body failed Zod schema validationFix the request; do not retry
1703LICENSE_API_NOT_FOUND404License key unknown or soft-deletedTreat as permanent failure; surface support link
1704LICENSE_API_INACTIVE403License exists but not in ACTIVE state (and not REVOKED)Poll /status on a longer interval
1705LICENSE_API_LIMIT_REACHED409Activation cap exceeded on /activateDirect user to /dashboard/activations to free a slot
1706LICENSE_API_RATE_LIMITED429Per-key or per-IP bucket trippedHonour Retry-After; back off with jitter
1707LICENSE_API_SECRET_NOT_SET500Server misconfigured (LICENSE_API_SECRET env var missing)Report to support; not actionable client-side
1708LICENSE_API_REVOKED403License revoked (chargeback / fraud / manual)Permanent failure; lock feature; show support link
1709LICENSE_API_MACHINE_NOT_ACTIVATED404License OK but this machine has never been activatedCall /activate

Retry policy

  • Retry with backoff: RATE_LIMITED, STALE_TIMESTAMP (after clock sync), 500 (transient).
  • Retry once after a corrective action: MACHINE_NOT_ACTIVATED (call /activate, then retry the original op).
  • Do not retry: BAD_SIGNATURE, MALFORMED, NOT_FOUND, LIMIT_REACHED, INACTIVE, REVOKED, SECRET_NOT_SET. These are either permanent or require user action.

For retried calls, always generate a fresh nonce — re-using the previous nonce will trip the replay check (BAD_SIGNATURE) on the second attempt.

Stability guarantee

Numeric codes are part of the public contract. New codes will be added; existing codes will not be re-purposed.