Skip to content
Gurdx

Docs / Getting started

Error Codes

Every error Gurdx can return, with its code, type and meaning, and how to handle them in your code.

The error envelope#

Errors are delivered with HTTP status 200 and a body in this shape:

{
  "status": "error",
  "code": 101,
  "type": "invalid_key",
  "description": "The API Key is missing or invalid."
}
Field Meaning
status Always error.
code Numeric code, stable across releases. Branch on this.
type Short machine-readable name.
description Human-readable explanation. May be reworded; do not parse it.

Codes 101 to 127 are the core set. Codes 128 to 132 are later additions.

All codes#

CodeTypeDescription
101invalid_keyThe API Key is missing or invalid.
102inactive_userThe API Key owner (the account) is inactive right now. Please contact the support team for more information.
103limit_reachedYou reached the usage limit of your account. Please upgrade your subscription or pay any unpaid invoices.
104invalid_paramsPlease check out the params parameter's value.
105plan_expiredYour plan has expired. Renew the subscription to enable using the API.
106flood_detectedOur system has detected too many requests at the same time. Kindly please try to slow down.
107invalid_callback_nameThe value of the callback parameter cannot be a function name.
108invalid_formatThe value of the format parameter is not a valid format. Use JSON, XML, CSV or Newline.
109callback_not_allowedYou can use the callback feature only with the JSON format.
110invalid_languageThe value of the lang parameter is not a valid format. Use EN, AR, FR, DE, ES, JA, ZH or RU.
111invalid_modeThe value of the mode parameter is not a valid format. Use test or live.
112invalid_ipThe IP Address is not valid or empty.
113domain_not_whitelistedYou are sending the request from a host that is not in the authorized hosts of your account.
114security_module_not_allowedYou cannot use the security module in your plan. Please upgrade your API plan to unlock this feature.
115generic_errorAn error occurred while processing your request. Please try again later.
116invalid_country_codeThe Country Code is invalid or not found.
117feature_not_availableThis feature is not available for your plan, please upgrade your plan first.
118invalid_phone_numberThe Phone Number is invalid or missing.
119invalid_email_addressThe Email Address is invalid or missing.
120invalid_bin_numberThe BIN number is invalid or missing.
121invalid_asnThe AS Number you provided is empty or invalid.
122invalid_ibanThe IBAN is invalid or missing.
123invalid_useridThe user identifier is invalid or too long.
124invalid_user_typeThe user type is invalid or missing. Use email, phone or user_id.
125invalid_user_valueThe user value is invalid or missing (value parameter).
126too_many_deletionsYou have reached the limit of deletions for this day. Please wait until the next day to delete more user data.
127subscription_requiredA paid subscription or an active trial is required to use this API. Subscribe from your dashboard.
128invalid_domainThe domain name is invalid or missing.
129invalid_textThe text is missing or too long (max 10,000 characters).
130invalid_payment_dataThe data object is missing or invalid.
131invalid_feedbackThe feedback is missing or invalid.
132too_many_feedback_itemsSend at most 1,000 feedback items per request.

Handling errors#

Because the HTTP status is 200 for errors too, check status in the body.

PHP#

$res = Http::withToken(env('GURDX_KEY'))->get('https://gurdx.cretip.com/api/lookup/ip', ['ip' => $ip])->json();

if (($res['status'] ?? null) === 'error') {
    match ($res['code']) {
        106 => usleep(500_000),            // slow down, retry later
        103, 105, 127 => notifyBilling(),  // quota or subscription
        101, 113 => alertOps($res),        // key or host problem
        default => logger()->warning('Gurdx error', $res),
    };
    return fallbackDecision();
}

$data = $res['data'];

JavaScript#

const res = await fetch("https://gurdx.cretip.com/api/lookup/ip?ip=1.1.1.1", {
  headers: { Authorization: "Bearer " + process.env.GURDX_KEY },
}).then((r) => r.json());

if (res.status === "error") {
  if (res.code === 106) await new Promise((r) => setTimeout(r, 500));
  throw new Error(`Gurdx ${res.code} ${res.type}: ${res.description}`);
}
console.log(res.data);

Python#

import requests

res = requests.get(
    "https://gurdx.cretip.com/api/lookup/ip",
    params={"ip": "1.1.1.1"},
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    timeout=5,
).json()

if res.get("status") == "error":
    raise RuntimeError(f"Gurdx {res['code']} {res['type']}: {res['description']}")
data = res["data"]

Which errors to retry#

Group Codes What to do
Temporary 106, 115 Retry with back-off.
Input problem 104, 107 to 112, 116, 118 to 125, 128 to 132 Fix the request; retrying will not help.
Account or plan 101 to 103, 105, 113, 114, 117, 127 Fix the key, host rules, plan or billing.

Tip: Log code and type together with the endpoint you called. It makes incidents far easier to diagnose.

Format and errors#

Errors respect the format option when it is valid, so an XML client receives an XML error. If the format itself is invalid (108) or conflicts with callback (109), the error is returned as JSON.

Found a mistake? Tell us on the contact page. Contact