Resources
Troubleshooting
Common issues and their solutions when working with the Licentric API.
Validation Codes
When a license validation fails, the response includes a code field explaining why. Here are the most common codes and how to resolve them.
FINGERPRINT_NOT_FOUNDDevice not activatedCause: The fingerprint provided during validation does not match any activated machine for this license.
Solution: Call the activate endpoint first to register the device, then retry validation with the same fingerprint.
MACHINE_LIMIT_EXCEEDEDToo many devicesCause: The license has reached the maximum number of activated machines allowed by its policy.
Solution: Deactivate an existing machine to free up a slot, or increase the maxMachines limit in the policy.
NOT_FOUNDInvalid license keyCause: The license key does not exist or was mistyped.
Solution: Verify the key for typos. Ensure you are using the correct environment (test keys do not exist in live, and vice versa).
HEARTBEAT_REQUIREDDevice needs to check inCause: The policy requires heartbeats, and the device has not sent one within the required interval.
Solution: Call the heartbeat endpoint for the machine. Implement a periodic heartbeat loop (e.g. every 5 minutes).
ENTITLEMENTS_MISSINGRequired features not presentCause: The validation request specified entitlements that the license does not have.
Solution: Add the required entitlements to the license in the dashboard, or adjust the entitlements check in your application.
EXPIREDLicense has expiredCause: The license expiresAt timestamp is in the past.
Solution: Renew the license by updating its expiration date. Verify server time is synced to UTC.
HTTP Errors
401 Unauthorized
The request is missing authentication or the credentials are invalid.
- Verify the API key includes the
Bearerprefix in the Authorization header - Check that the key has not been revoked or rotated in the dashboard
- Ensure the environment matches:
lk_live_keys only work in production,lk_test_keys only in test mode
403 Forbidden
The API key is valid but lacks the required scope for this operation.
- Check the key’s scopes in the dashboard under Settings → API Keys
- Add the missing scope (e.g.
licenses:write) or create a new key with broader permissions
429 Rate Limited
You have exceeded the rate limit. The response includes a Retry-After header indicating how many seconds to wait.
- Implement caching for validation results to reduce API calls
- Use exponential backoff when retrying
- Consider upgrading your plan for higher rate limits
# Python — exponential backoff
import time
from licentric.exceptions import RateLimitError
def validate_with_retry(client, key, max_retries=3):
for attempt in range(max_retries):
try:
return client.validate(key)
except RateLimitError as e:
if attempt == max_retries - 1:
raise
time.sleep(e.retry_after)Connection Issues
Connection Timeout
- Check firewall rules allow outbound HTTPS to
licentric.com - Verify the base URL is correct (no trailing slash, includes protocol)
- Increase the client timeout if on a slow network
- Try again — transient network issues resolve on retry
Stale Validation Results
- Reduce the cache TTL in your application
- Use webhook-based invalidation to clear the cache when license state changes
- For critical operations, bypass the cache and validate directly
License Expired but Should Be Active
- Check that the server’s system clock is synced (NTP/UTC)
- All timestamps in Licentric use UTC — ensure your comparison is timezone-aware
- Renew the license by updating the
expiresAtfield