TCPLab TCPLab

WHOIS Lookup API

Last updated: 2026-10-15

GET https://whois.tcp.lc/v1/whois/{domain}

Returns normalized registration data for a domain, resolved over RDAP where the registry publishes it and falling back to WHOIS otherwise. No API key is required.

This endpoint runs on its own host and follows standard HTTP semantics, not the code envelope used by the /api/v2/ endpoints. The conventions in the API documentation do not apply here: success is 200, and failures use real 4xx/5xx statuses with an error object.

Parameter In Description
domain path Domain to look up. IDNs are accepted; IP addresses are not.
raw query Set to true to get the upstream RDAP/WHOIS response instead of the normalized envelope.

Example:

curl "https://whois.tcp.lc/v1/whois/example.com"

Response fields:

Field Description
query The input as received.
domain The registrable domain that was looked up.
domainUnicode Unicode form for IDNs, otherwise null.
id Registry-assigned domain ID, when available.
tld Top-level domain.
isRegistered Whether the domain is registered.
registrar name, ianaId, url, whoisServer, abuseEmail, abusePhone, reseller.
status EPP status codes.
nameservers name, plus any ipv4 / ipv6 addresses resolved for it.
dnssec signed, and dsData with keyTag, algorithm, digestType, digest.
dates created, updated, expires (ISO 8601).
contacts registrant, admin, tech, billing; each has name, organization, email, phone, address and redacted. Most registries redact personal data.
meta source (rdap or whois), server, fetchedAt and cached.

An unregistered domain is not an error: the response is still 200, with isRegistered: false and empty fields.

Raw response

With ?raw=true the normalized envelope is replaced by the upstream payload — RDAP JSON (application/rdap+json) where the registry publishes it, otherwise plain WHOIS text.

curl "https://whois.tcp.lc/v1/whois/example.com?raw=true"

Errors

Failures use real HTTP status codes and an error object with code, message, and sometimes query, source and detail.

Status error.code Meaning
400 INVALID_DOMAIN The input could not be parsed as a registrable domain.
429 RATE_LIMITED Rate limit exceeded.
501 UNSUPPORTED_TLD No RDAP or WHOIS source exists for the TLD.
504 UPSTREAM_TIMEOUT The upstream registry did not respond in time.

Under edge rate limiting the 429 may be plain text without the error object, so check the status code as well.

Rate limits

10 requests / minute per client IP. When exceeded, the endpoint returns 429 with error.code set to RATE_LIMITED.

Successful answers are cacheable (Cache-Control: public), so repeated lookups of the same domain are usually served from the edge cache.