Super Whois API
Simple, JSON-based WHOIS lookups for domains, IPs, and ASNs.
v2.2.2Base URL
POST JSON accepts {"q":"example.com"} or {"queries":["example.com","example.org"]}.
Authentication
The API is public by default. Authenticated requests receive a higher, finite quota.
Send keys with Authorization: Bearer (preferred) or X-API-Key. For a simple local setup, put your SK code in api_keys.php; environment secrets are preferred in production. Query-string keys are deprecated.
Simple local setup (edit api_keys.php)
Rate Limiting
Unauthenticated clients receive 60 lookup units per hour per IP. Each unique query costs one unit; DNS enrichment costs one extra unit.
| Response Header | Description |
|---|---|
RateLimit-Limit | Maximum lookup units per window |
RateLimit-Remaining | Lookup units remaining this window |
RateLimit-Reset | Seconds until the current window resets |
Retry-After | Seconds until a rate-limited request may be retried |
Query Parameters
| Parameter | Required | Description |
|---|---|---|
q / queries |
Required | The target to look up. Accepts a domain name (e.g. google.com), IPv4 / IPv6 address, or ASN (e.g. AS15169). Separate with commas or newlines for batch mode. POST JSON accepts {"q":"example.com"} or {"queries":["example.com","example.org"]}. Public/authenticated caps: 10/50 queries. Duplicate output positions are preserved while upstream work is deduplicated. |
key |
Optional | Deprecated query-string API key. Prefer the Authorization or X-API-Key header. |
dns |
Optional | Set to true to include DNS records (A, AAAA, MX, TXT, NS) in domain lookup results |
raw |
Optional | Single queries include raw data by default; batches omit it by default. Set explicitly to true or false; included raw data is size-bounded. |
pretty |
Optional | Set to true to pretty-print JSON; compact JSON is the default |
lang |
Optional | Docs language: en (default), zh-cn (Simplified), or zh-tw (Traditional) |
Endpoints & Examples
Domain lookup
IP lookup
ASN lookup
Domain + DNS Records lookup
Batch lookup
Response Fields
HTTP 200 means the request was processed. Clients must also inspect each item status; lookup failures remain application-level status=error for v2 compatibility.
| Field | Type | Description |
|---|---|---|
query | string | The sanitized input query |
query_type | string | domain | ipv4 | ipv6 | asn |
query_method | string | RDAP, WHOIS, a fallback method, or none |
lookup_domain | string|null | PSL-derived registrable domain used for domain queries |
unicode_domain | string? | Readable Unicode form when the input is an IDN A-label |
is_subdomain | boolean? | True when the input was normalized to a registrable apex |
status | string | registered | available | found | restricted | error. available means authoritative not-found, not a purchase guarantee |
whois_server | string|null | The upstream RDAP or WHOIS server that provided the data |
attempted_servers | array? | Servers tried before the result; useful for transport/fallback diagnostics |
timestamp | ISO 8601 | UTC time of this API response |
query_ms | integer | Query time in milliseconds |
cached | boolean | Whether the normalized lookup came from the server-side cache |
cache_age_s | integer | Age of a cached value in seconds |
stale | boolean? | Registered last-known-good value served after a transient refresh failure |
duration_ms | number | Lookup or batch wall time in milliseconds |
availability | string? | not_found for an authoritative RDAP 404; not a purchase guarantee |
upstream_status | integer? | Relevant upstream HTTP status when available |
dns_records | object? | Exact input hostname DNS data when dns=true |
error_code | string? | Stable machine-readable application error |
request_id | string | Correlation ID also returned in X-Request-ID |
api_version | string | API version string |
data | object | Structured parsed fields (domain queries only, when registered) |
data.creation_date | ISO 8601 | Domain registration date |
data.expiration_date | ISO 8601 | Domain expiry date |
data.updated_date | ISO 8601 | Last updated date |
data.registrar | string | Registrar name |
data.registrar_iana_id | string | Registrar IANA ID |
data.registrant_addressdata.registrant_citydata.registrant_regiondata.registrant_postal_code | string? | Registrant address components when the registry publishes them |
data.nameservers | array | List of nameservers (lowercase, unique; order is not guaranteed) |
data.status | array | Domain EPP status codes |
data.dnssec | string | signed or unsigned |
subdomain_suggestion | string? | If querying a subdomain, the suggested apex domain |
raw | string? | Raw RDAP/WHOIS response (IPs redacted); omit with raw=false; Bounded to 131072 bytes per item |
raw_truncated | boolean? | True when raw upstream data was size-limited |
batch/count/succeeded/failed | Batch envelope metadata | Batch envelope summary; results keep request order |
Sample Response — api.php?q=google.com
Batch Response — api.php?q=google.com,github.com
Error Codes
| HTTP | Meaning |
|---|---|
400 | Bad Request — invalid or missing q parameter |
401 | Unauthorized — API key required but not provided or invalid |
405 | Method not allowed |
413 | Request body or generated response exceeds the configured limit |
422 | Batch query limit exceeded |
429 | Too Many Requests — rate limit exceeded |
503 | Rate-limit storage or another required runtime service is unavailable |
500 | Server Error — PHP extension missing or misconfiguration |
Try It
Code Examples
JavaScript (fetch)
Python (requests)
cURL
Batch Query (cURL)
POST JSON