API Documentation
Integrate WHOIS lookups, DNS checks, blacklist monitoring, and batch domain analysis into your applications with our REST API.
Quick Start
Get up and running with the WHOIS Wolf API in under a minute. All responses are returned in JSON format.
Your First Request
Run a WHOIS lookup for any domain with a single HTTP request:
# Look up WHOIS data for any domain
curl "https://api.whoiswolf.app/whois?domain=google.com"
const response = await fetch('https://api.whoiswolf.app/whois?domain=google.com');
const data = await response.json();
console.log(data);
import requests
response = requests.get('https://api.whoiswolf.app/whois', params={'domain': 'google.com'})
data = response.json()
print(data)
Authentication
Free-tier requests (up to 1,000 lookups/month) require no authentication. For Pro plans and above, include your API key in the request headers:
# Include your API key in the Authorization header
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.whoiswolf.app/whois?domain=example.com"
Getting Your API Key
- Sign in at whoiswolf.app using Google or email
- Subscribe to a Pro plan or higher
- Your API key is available in your account dashboard after subscribing
Base URL
All API requests should be made to:
All endpoints return JSON. Responses include appropriate HTTP status codes. HTTPS is required for all requests.
Endpoint Reference
Retrieve WHOIS registration data for a domain, including registrar, registrant, dates, name servers, and status codes with health warnings.
Parameters
| Parameter | Type | Description |
|---|---|---|
domain required |
string | The domain name to look up (e.g., google.com) |
curl "https://api.whoiswolf.app/whois?domain=google.com"
const response = await fetch('https://api.whoiswolf.app/whois?domain=google.com');
const data = await response.json();
console.log(data.registrar, data.expires);
import requests
response = requests.get('https://api.whoiswolf.app/whois', params={'domain': 'google.com'})
data = response.json()
print(f"Registrar: {data['registrar']}")
print(f"Expires: {data['expires']}")
{
"domain": "google.com",
"available": false,
"registrar": "MarkMonitor Inc.",
"registrant": "Google LLC",
"created": "1997-09-15T04:00:00Z",
"updated": "2019-09-09T15:39:04Z",
"expires": "2028-09-14T04:00:00Z",
"status": [
"clientDeleteProhibited",
"clientTransferProhibited",
"clientUpdateProhibited",
"serverDeleteProhibited",
"serverTransferProhibited",
"serverUpdateProhibited"
],
"nameservers": [
"ns1.google.com",
"ns2.google.com",
"ns3.google.com",
"ns4.google.com"
]
}
Check DNS propagation status for a domain across multiple global resolvers including Google, Cloudflare, OpenDNS, and Quad9.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
domain required |
string | The domain name to check (e.g., example.com) |
curl "https://api.whoiswolf.app/dns/example.com"
const response = await fetch('https://api.whoiswolf.app/dns/example.com');
const data = await response.json();
console.log(data.resolvers);
import requests
response = requests.get('https://api.whoiswolf.app/dns/example.com')
data = response.json()
for resolver in data['resolvers']:
print(f"{resolver['name']}: {resolver['ip']}")
{
"domain": "example.com",
"propagated": true,
"resolvers": [
{
"name": "Google",
"ip": "8.8.8.8",
"resolved": true,
"address": "93.184.216.34",
"responseTime": 12
},
{
"name": "Cloudflare",
"ip": "1.1.1.1",
"resolved": true,
"address": "93.184.216.34",
"responseTime": 8
},
{
"name": "OpenDNS",
"ip": "208.67.222.222",
"resolved": true,
"address": "93.184.216.34",
"responseTime": 15
},
{
"name": "Quad9",
"ip": "9.9.9.9",
"resolved": true,
"address": "93.184.216.34",
"responseTime": 18
}
]
}
Retrieve detailed DNS records for a domain including A, AAAA, MX, TXT, NS, and SOA records with TTL values.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
domain required |
string | The domain name to query (e.g., example.com) |
curl "https://api.whoiswolf.app/dns/example.com/records"
const response = await fetch('https://api.whoiswolf.app/dns/example.com/records');
const data = await response.json();
console.log(data.records);
import requests
response = requests.get('https://api.whoiswolf.app/dns/example.com/records')
data = response.json()
for record in data['records']:
print(f"{record['type']}: {record['value']} (TTL: {record['ttl']})")
{
"domain": "example.com",
"records": [
{ "type": "A", "value": "93.184.216.34", "ttl": 3600 },
{ "type": "AAAA", "value": "2606:2800:220:1:248:1893:25c8:1946", "ttl": 3600 },
{ "type": "MX", "value": "0 .", "ttl": 3600 },
{ "type": "NS", "value": "a.iana-servers.net", "ttl": 86400 },
{ "type": "NS", "value": "b.iana-servers.net", "ttl": 86400 },
{ "type": "TXT", "value": "v=spf1 -all", "ttl": 3600 },
{ "type": "SOA", "value": "ns.icann.org hostmaster.icann.org 2024010101 7200 3600 1209600 3600", "ttl": 3600 }
]
}
Check a domain's reputation against 16 DNS-based blackhole list (DNSBL) providers. Useful for detecting domains flagged for spam, malware, or phishing.
Parameters
| Parameter | Type | Description |
|---|---|---|
domain required |
string | The domain to check against blacklists |
curl "https://api.whoiswolf.app/blacklist?domain=example.com"
const response = await fetch('https://api.whoiswolf.app/blacklist?domain=example.com');
const data = await response.json();
console.log(`Listed: ${data.listed}, Clean: ${data.clean}`);
import requests
response = requests.get('https://api.whoiswolf.app/blacklist', params={'domain': 'example.com'})
data = response.json()
print(f"Blacklisted: {data['listed']}/{data['total']} providers")
{
"domain": "example.com",
"clean": true,
"listed": 0,
"total": 16,
"providers": [
{ "name": "Spamhaus ZEN", "listed": false },
{ "name": "Barracuda", "listed": false },
{ "name": "SURBL", "listed": false },
{ "name": "SpamCop", "listed": false }
]
}
Check multiple domains in a single request. Returns status information for each domain. Requires authentication for paid plans.
Request Body
| Field | Type | Description |
|---|---|---|
urls required |
string[] | Array of domain names to check (max varies by plan) |
curl -X POST "https://api.whoiswolf.app/batch/check" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"urls": ["google.com", "github.com", "example.com"]}'
const response = await fetch('https://api.whoiswolf.app/batch/check', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
urls: ['google.com', 'github.com', 'example.com']
})
});
const data = await response.json();
console.log(data.results);
import requests
response = requests.post(
'https://api.whoiswolf.app/batch/check',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={'urls': ['google.com', 'github.com', 'example.com']}
)
data = response.json()
for result in data['results']:
print(f"{result['domain']}: {result['status']}")
{
"results": [
{
"domain": "google.com",
"status": "registered",
"available": false,
"registrar": "MarkMonitor Inc."
},
{
"domain": "github.com",
"status": "registered",
"available": false,
"registrar": "MarkMonitor Inc."
},
{
"domain": "example.com",
"status": "registered",
"available": false,
"registrar": "IANA"
}
]
}
Authentication Endpoints
These endpoints handle user account creation and authentication. Used internally by the WHOIS Wolf web app.
| Method | Endpoint | Description |
|---|---|---|
| POST | /auth/google |
Sign in with Google OAuth. Send the Google ID token in the request body. |
| POST | /auth/email/register |
Register a new account with email and password. |
| POST | /auth/email/login |
Sign in with email and password. Returns a session token. |
Authorization header as described in the Authentication section.
Rate Limits
API requests are rate-limited based on your subscription tier. Limits reset on the 1st of each calendar month.
| Plan | Monthly Price | Lookups / Month | Batch Size |
|---|---|---|---|
| Free | $0 | 1,000 | 5 domains |
| Starter | $3/mo | 10,000 | 25 domains |
| Pro | $7/mo | 75,000 | 100 domains |
| Business | $19/mo | 300,000 | 250 domains |
| Enterprise | $49/mo | 1,500,000 | 500 domains |
| Agency | $99/mo | 5,000,000 | 1,000 domains |
Annual billing is available at a 25% discount. See pricing for details.
X-RateLimit-Limit — your monthly limitX-RateLimit-Remaining — lookups remaining this monthX-RateLimit-Reset — Unix timestamp when your limit resets
Need More Lookups?
Upgrade your plan to unlock higher limits, batch lookups, and API key access.
View Pricing PlansError Codes
The API uses standard HTTP status codes to indicate the success or failure of a request. Error responses include a JSON body with details.
| Code | Status | Description |
|---|---|---|
| 400 | Bad Request | Missing or invalid parameters. Check the domain parameter is a valid domain name. |
| 401 | Unauthorized | Missing or invalid API key. Ensure your Authorization header is correct. |
| 403 | Forbidden | Your plan does not include access to this endpoint, or your account has been suspended. |
| 404 | Not Found | The requested domain or resource was not found. Verify the domain name is correct. |
| 429 | Too Many Requests | Monthly rate limit exceeded. Upgrade your plan for higher limits. |
| 500 | Internal Server Error | An unexpected error occurred. Try again later or contact support. |
{
"error": "Rate limit exceeded",
"code": 429,
"message": "You have exceeded your monthly lookup limit of 1,000. Upgrade your plan for more lookups."
}