The internet.
In your application.
One endpoint for domains, networks and onchain identities. No API key. Just structured JSON, ready for your next idea.
Start with a single request.
Send a GET request to /api.php with a q parameter. Cross-origin requests are supported.
curl 'https://whois.td/api.php?q=example.com&raw=1'Make it your query.
| Parameter | Type | Description |
|---|---|---|
| q | string · required | Domain, IPv4 / IPv6, AS number, ENS, +Realm or UD name. Maximum 255 bytes. query is also accepted. |
| raw | 0 | 1 | Set to 1 to include the original response in data.raw. Omitted by default. |
| server | string · optional | Advanced: specify a domain WHOIS server. Automatic fallback is skipped when overridden. |
A response you can work with.
An abbreviated domain response is shown below. Fields depend on what the upstream provider publishes; unpublished fields may be absent.
{
"ok": true,
"code": 200,
"query": "example.com",
"normalizedQuery": "example.com",
"type": "domain",
"tld": "com",
"isIDN": false,
"data": {
"currSer": "whois.verisign-grs.com",
"info": {
"domainName": [
"EXAMPLE.COM"
],
"registrar": {
"registrar": "RESERVED-Internet Assigned Numbers Authority"
},
"dns": [
"elliott.ns.cloudflare.com",
"hera.ns.cloudflare.com"
]
}
}
}type can be domain, ip, asn, ens, realm or ud. create, update and expire use Unix timestamps in seconds. data.info holds parsed fields; data.currSer identifies the source.
Take it for a spin.
This playground sends a real API request and displays the actual response and status.
Your response will appear here.
Keep the flow fair.
Each IP can make up to 30 requests per minute and 240 per hour. X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset describe the current window. When limited, respect Retry-After and use exponential backoff.
| HTTP | Meaning |
|---|---|
| 200 | Data retrieved. |
| 400 | Missing or oversized query. |
| 404 | No matching registry record. |
| 409 | Reserved or restricted name. |
| 422 | No public service for this suffix. |
| 502 | Upstream unavailable or invalid response. |
| 503 | Lookup temporarily unavailable. |
| 504 | Upstream lookup timed out. |
| 405 | Method not supported. Use GET. |
| 429 | Local or registry rate limit exceeded. |
Domain lookupStatus distinguishes found, not_found, reserved, unsupported, rate_limited, timeout and upstream_error. A 404 does not establish registration availability; confirm with a registry or registrar.
Go beyond the domain.
| Query | Type |
|---|---|
| 1.1.1.1 | IPv4 |
| 2606:4700:4700::1111 | IPv6 |
| AS13335 | Autonomous system |
| vitalik.eth | Ethereum Name Service |
| %2Bsatoshi | Atomicals Realm · Encode the + sign as %2B |
| brad.crypto | Unstoppable Domains |
Use URLSearchParams in JavaScript to encode query values correctly.
const response = await fetch(
'https://whois.td/api.php?q=example.com'
);
const result = await response.json();
if (result.ok) {
console.log(result.data.info);
}