WHOIS.CX
Lookup Plans API My Domains Monitors Settings
Servers Rules TLD Limits Pricing
Users Tiers Tag Rules Pending Tags Notification Logs Raw Logs API Keys Settings
Notifications
No notifications

DomainIntelligence

Real-time WHOIS data extraction

⬡
Comparing domains...
Querying WHOIS servers...
Lookup Failed
AGE
—
EXPIRES
—
Created —
Expires —
Premium
CREATED
—
UPDATED
—
EXPIRES
—
REGISTRAR
Name —
IANA ID —
Abuse Contact —
NAMESERVERS
STATUS

                    
COMPARE

Choose Your Plan

Unlock advanced domain monitoring and intelligence features

API Documentation

Programmatic access to WHOIS/RDAP domain intelligence data.

Authentication Endpoints WHOIS Lookup Account Info Rate Limits Error Codes Code Examples

Authentication

All API requests require an API key. Generate one from My Settings.

Pass your key via the X-API-Key header (recommended) or the api_key query parameter:

Header Authentication
curl -H "X-API-Key: whois_your_api_key_here" \
  https://whois.cx/api/v1/whois/google.com
Query Parameter
curl "https://whois.cx/api/v1/whois/google.com?api_key=whois_your_api_key_here"
Security: Always use the header method when possible. Never expose your API key in client-side code or URLs that may be logged.

Endpoints

Base URL: https://whois.cx/api/v1

Method Endpoint Description
GET /v1/whois/{domain} WHOIS/RDAP lookup for a domain
GET /v1/account Your API key info and usage stats

WHOIS Lookup

GET /v1/whois/{domain}

Look up WHOIS/RDAP registration data for a domain name.

Parameters
ParameterTypeLocationDescription
domain string path Required. Domain name (e.g., google.com, example.co.uk)
Response
200 OK
{
  "domain": "google.com",
  "registrar": "MarkMonitor Inc.",
  "registrar_iana_id": "292",
  "registrar_abuse_email": "[email protected]",
  "creation_date": "1997-09-15T04:00:00Z",
  "updated_date": "2019-09-09T15:39:04Z",
  "expiry_date": "2028-09-14T04:00:00Z",
  "nameservers": [
    "ns1.google.com",
    "ns2.google.com",
    "ns3.google.com",
    "ns4.google.com"
  ],
  "status": [
    "client delete prohibited",
    "client transfer prohibited",
    "client update prohibited",
    "server delete prohibited",
    "server transfer prohibited",
    "server update prohibited"
  ],
  "dnssec": "unsigned",
  "_meta": {
    "protocol": "rdap",
    "duration_ms": 245
  }
}
Response Fields
FieldTypeDescription
domainstringQueried domain name
registrarstringDomain registrar name
registrar_iana_idstringRegistrar's IANA accreditation ID
registrar_abuse_emailstringRegistrar abuse contact email
creation_datestringDomain registration date (ISO 8601)
updated_datestringLast modification date (ISO 8601)
expiry_datestringDomain expiration date (ISO 8601)
nameserversarrayList of DNS nameservers
statusarrayDomain status codes (EPP format)
dnssecstringDNSSEC status
registrant_namestringRegistrant name/organization (if available)
registrant_countrystringRegistrant country (if available)
availablebooleanWhether the domain appears unregistered
_meta.protocolstringProtocol used: rdap, whois, or hybrid
_meta.duration_msintegerServer-side lookup duration in ms
Note: Fields with no data are omitted from the response. Only non-null, non-empty values are returned.

Account Info

GET /v1/account

Retrieve information about your API key, including usage stats and current rate limit status.

Response
200 OK
{
  "key_name": "My App",
  "key_prefix": "whois_a1b2c3",
  "total_requests": 1542,
  "rate_limits": {
    "1m": 10,
    "1h": 200,
    "1d": 2000
  },
  "rate_usage": {
    "1m": {"limit": 10, "used": 3, "remaining": 7, "reset": 1709740800},
    "1h": {"limit": 200, "used": 45, "remaining": 155, "reset": 1709740800},
    "1d": {"limit": 2000, "used": 312, "remaining": 1688, "reset": 1709769600}
  },
  "created_at": "2025-01-15 10:30:00"
}

Rate Limits

API requests are rate-limited across three time windows:

WindowDefault LimitDescription
Per Minute10Short-burst protection
Per Hour200Medium-term limit
Per Day2,000Daily quota

Rate limit info is included in response headers:

Response Headers
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1709740800

When a rate limit is exceeded, you'll receive a 429 Too Many Requests response:

429 Too Many Requests
{"error": "Rate limit exceeded. Try again in 45s"}

Error Codes

StatusMeaningDescription
200OKSuccessful lookup
400Bad RequestInvalid domain format
401UnauthorizedMissing or invalid API key
403ForbiddenAPI key revoked or API disabled
404Not FoundDomain not found / unsupported TLD
429Too Many RequestsRate limit exceeded
500Server ErrorInternal lookup failure

All error responses follow this format:

Error Response
{"error": "Description of what went wrong"}

Code Examples

cURL
# Lookup a domain
curl -H "X-API-Key: whois_your_key" \
  https://whois.cx/api/v1/whois/google.com

# Check account status
curl -H "X-API-Key: whois_your_key" \
  https://whois.cx/api/v1/account
Python
import requests

API_KEY = "whois_your_key"
BASE_URL = "https://whois.cx/api/v1"

# Lookup a domain
response = requests.get(
    f"{BASE_URL}/whois/google.com",
    headers={"X-API-Key": API_KEY}
)
data = response.json()

print(f"Registrar: {data.get('registrar')}")
print(f"Expires: {data.get('expiry_date')}")
print(f"Nameservers: {', '.join(data.get('nameservers', []))}")
JavaScript (Node.js / Browser)
const API_KEY = "whois_your_key";
const BASE_URL = "https://whois.cx/api/v1";

// Lookup a domain
const response = await fetch(`${BASE_URL}/whois/google.com`, {
  headers: { "X-API-Key": API_KEY }
});
const data = await response.json();

console.log(`Registrar: ${data.registrar}`);
console.log(`Expires: ${data.expiry_date}`);
console.log(`Nameservers: ${data.nameservers?.join(", ")}`);
PHP
$apiKey = "whois_your_key";
$baseUrl = "https://whois.cx/api/v1";

$ch = curl_init("$baseUrl/whois/google.com");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: $apiKey"],
]);
$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);

echo "Registrar: " . ($data['registrar'] ?? 'N/A') . "\n";
echo "Expires: " . ($data['expiry_date'] ?? 'N/A') . "\n";
echo "Nameservers: " . implode(', ', $data['nameservers'] ?? []) . "\n";

Forgot Password

Enter your email address and we'll send you a link to reset your password.

Remember your password? Login

Login

Forgot password?
Don't have an account? Sign Up

Reset Password

Enter your new password below.

Sign Up

Already have an account? Login

Email Verification

Verifying your email...

✓

Email Verified!

Your email has been successfully verified.

✕

Verification Failed

Invalid or expired token.