Skip to content

Error Codes ​

All API errors with resolution steps.

Error Format ​

All API responses use a unified envelope format:

json
{
  "success": false,
  "data": null,
  "error": true,
  "error_code": 20001,
  "error_message": "Missing API key"
}

Error Ranges ​

RangeCategory
10xxxValidation
20xxxAuthentication
30xxxRate/quota
40xxxInternal

Validation (10xxx) ​

10001 — Invalid IP Address ​

HTTP 400

json
{
  "success": false,
  "data": null,
  "error": true,
  "error_code": 10001,
  "error_message": "Invalid IP address format"
}

Fix: Use valid IPv4 (192.0.2.1) or IPv6 (2001:db8::1).


10002 — Private IP Address ​

HTTP 400

json
{
  "success": false,
  "data": null,
  "error": true,
  "error_code": 10002,
  "error_message": "Cannot geolocate private IP address"
}

Fix: Use a public IP. Private ranges: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.


Authentication (20xxx) ​

20001 — Missing API Key ​

HTTP 401

json
{
  "success": false,
  "data": null,
  "error": true,
  "error_code": 20001,
  "error_message": "Missing API key"
}

Fix: Add the X-API-Key header:

bash
curl -H "X-API-Key: hb_live_xxxxx" ...

20002 — Invalid API Key ​

HTTP 401

json
{
  "success": false,
  "data": null,
  "error": true,
  "error_code": 20002,
  "error_message": "Invalid API key"
}

Fix:

  1. Verify key starts with hb_live_
  2. Check key exists in dashboard
  3. Remove extra whitespace

20003 — API Key Revoked ​

HTTP 403

json
{
  "success": false,
  "data": null,
  "error": true,
  "error_code": 20003,
  "error_message": "API key has been revoked"
}

Fix: Create a new key in your dashboard.


Rate/Quota (30xxx) ​

30001 — Rate Limit Exceeded ​

HTTP 429

json
{
  "success": false,
  "data": null,
  "error": true,
  "error_code": 30001,
  "error_message": "Rate limit exceeded"
}

Fix:

  1. Check Retry-After header for wait time
  2. Implement exponential backoff
  3. Upgrade for higher limits

30002 — Quota Exceeded ​

HTTP 429

json
{
  "success": false,
  "data": null,
  "error": true,
  "error_code": 30002,
  "error_message": "Quota exceeded"
}

Fix:

  1. Wait for reset
  2. Upgrade your plan

Internal (40xxx) ​

40001 — Internal Server Error ​

HTTP 500

json
{
  "success": false,
  "data": null,
  "error": true,
  "error_code": 40001,
  "error_message": "Internal server error"
}

Fix: Retry after a short delay. If persistent, contact support with the X-Request-ID header value.


40002 — Service Unavailable ​

HTTP 503

json
{
  "success": false,
  "data": null,
  "error": true,
  "error_code": 40002,
  "error_message": "Service temporarily unavailable"
}

Fix: Retry with exponential backoff. Check status.hummingbirdapi.com.


Quick Reference ​

CodeHTTPMessage
10001400Invalid IP address format
10002400Cannot geolocate private IP
20001401Missing API key
20002401Invalid API key
20003403API key revoked
30001429Rate limit exceeded
30002429Quota exceeded
40001500Internal server error
40002503Service unavailable

Need Help? ​

Include the X-Request-ID header value when contacting [email protected].

Built with VitePress