Skip to main content
All API errors return a consistent JSON format:
{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "Human-readable error description"
  }
}

Error codes

StatusCodeDescription
400VALIDATION_ERRORInvalid request parameters
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENInsufficient permissions for this endpoint
404NOT_FOUNDResource not found (domain, technology, etc.)
409CONFLICTResource already exists
429RATE_LIMITRate limit exceeded — see rate limits
500INTERNAL_ERRORServer error — retry after a brief delay

Examples

{
  "success": false,
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Missing or invalid API key"
  }
}
Fix: Check that your Authorization header includes a valid Bearer token. See how to get your API key.

How to handle errors

1

Check the status code

Use the HTTP status code for control flow. 2xx means success, 4xx means client error, 5xx means server error.
2

Read the error code

The error.code field provides a machine-readable error type you can switch on in your code.
3

Retry when appropriate

Retry on 429 (after Retry-After seconds) and 500 (with exponential backoff). Do not retry 400, 401, 403, or 404.
Always check success: false in the response body in addition to HTTP status codes. This gives you both the error code and a human-readable message for logging.

Frequently asked questions

Retry 429 (rate limit) after waiting the Retry-After header value, and 500 (server error) with exponential backoff. Do not retry 400 (validation), 401 (auth), 403 (permissions), or 404 (not found) — these require fixing the request itself.
The domain might not be in the pre-crawled database yet. Try the live detection endpoint (POST /v1/technology-lookup-live) for real-time scanning. Live detection costs 5 credits.
A 403 response means your API key is valid but doesn’t have permission for the requested endpoint. This typically happens when your plan doesn’t include access to a specific feature, or your account has been restricted. Check your plan’s included endpoints in credits and contact support if the issue persists.
A 400 VALIDATION_ERROR means your request parameters are malformed or missing. Read the error.message field — it tells you exactly which parameter is wrong (e.g., “Parameter ‘domain’ is required”). Double-check required parameters, data types, and value formats against the endpoint’s documentation in the API reference.
Yes. Every error response follows the same JSON structure: {"success": false, "error": {"code": "ERROR_CODE", "message": "..."}}. The code field is a machine-readable string you can use in your error handling logic, and message is a human-readable description. This applies across all /v1/* endpoints.