Technical
RDAP versus WHOIS for domain registration data
Every domain age check starts with the same question: which server holds the registration record, and how do you read the answer? WHOIS answers with free text, RDAP answers with JSON over HTTPS. This post walks through both, the IANA file that tells a client where to ask, and what our domain age lookup does with the result.
WHOIS gives text, RDAP gives structure
WHOIS is a very small protocol. A client opens a TCP connection to port 43, sends one line of text, and reads until the server closes the connection. The specification says the reply is meant to be human readable, and it defines no field layout and no way to declare the character set 1. Two registries can describe the same fact in different words, so every consumer ends up writing one parser per server.
RDAP keeps the idea (ask a registry about a registered object) and replaces the transport and the format. Queries are ordinary HTTP GET requests, clients and servers must support HTTPS, the reply carries an RDAP JSON media type, and a server with no matching record answers 404 2. Rate limiting is a plain 429 2. Those are the same status codes the rest of your stack already handles.
| Question | WHOIS | RDAP |
|---|---|---|
| Transport | TCP port 43 1 | HTTP, with HTTPS required to be supported 2 |
| Reply format | Free text, no defined fields 1 | JSON with defined object classes 4 |
| No such record | Server specific text | HTTP 404 2 |
| Domain query | A bare search term 1 | The path domain/<name> 3 |
| Internationalized names | No character set indication 1 | A-label or U-label form accepted 3 |
WHOIS and RDAP compared, from the protocol documents
How a client finds the right server
There is no single RDAP server. IANA publishes a bootstrap file for domain names at data.iana.org/rdap/dns.json, and RFC 9224 defines how to use it 5. The file holds a version, a publication timestamp and a services array. Each service is a pair: a list of labels, then a list of base URLs 56. When we read the live file its publication field was 2026-09-30T23:00:03Z, and its first entries pair a country code label with a single base URL 6.
The client matches the queried name against the labels from right to left and takes the most specific match. If a service lists both HTTPS and HTTP URLs, the secure one is tried first 5. RFC 9224 replaces RFC 7484, which described the same bootstrap idea 7. A top-level domain with no entry has no published RDAP service, so a client cannot look it up this way.
What the registration fields mean
The domain object class in RFC 9083 (which replaces RFC 7483) carries a name in letters, digits and hyphens, an array of status strings, a list of events and a list of entities 4. Each event has an action and a date. The registered actions we rely on are registration, last changed and expiration 4. An entity has roles, and the registrar role names the authority responsible for the registration in the registry. Contact details inside an entity use jCard, where the name member is required but may be empty if the name is missing or redacted 4.
| RDAP source | Meaning in the standard | Our output field |
|---|---|---|
| Event action registration | The object was first registered 4 | created_at, and age_days counted from it |
| Event action last changed | The object information last changed 4 | updated_at |
| Event action expiration | The object is or will be removed at a set time 4 | expires_at |
| Entity with role registrar | The authority responsible for the registration 4 | registrar, read from the jCard name |
| status array | The state of the object, such as transfer prohibited 4 | status |
RDAP fields and the domain age output fields built from them
What the domain age lookup does
Our domain age lookup downloads the IANA file, keeps it in memory for a day, and uses the last label of the domain to pick the registry server. It lowercases the name, converts an internationalized name to punycode, and drops a leading www. It has no public suffix list, so a deeper subdomain is queried as written and comes back not found with a hint to look up the registered domain.
- A registry 404 returns not found, and a top-level domain with no RDAP service also returns not found with that reason.
- A rate limit, an outage or a network failure returns unavailable, never not found, so a registry problem is not cached as an unregistered domain.
- It tries each listed server for the label, secure URLs first.
The request below uses the same body the docs use. The reply shown after it is a captured example from our test run for example.com, which is a reserved domain.
curl -X POST https://YOUR_API_HOST/v1/domain-age \
-H "Authorization: Bearer $LOOKVALID_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"example.com"}'
Look up a domain
{
"domain": "example.com",
"registered": true,
"created_at": "1995-08-14T04:00:00.000Z",
"age_days": 11387,
"expires_at": "2027-08-13T04:00:00.000Z",
"registrar": "RESERVED-Internet Assigned Numbers Authority",
"rdap_server": "https://rdap.verisign.com/com/v1/"
}
Captured example response data
The age is counted from the time the answer was computed, so a cached answer keeps its original number. Registration facts do not say who runs a site or whether it is trustworthy. They tell you how long a name has existed and which registrar holds it, which is a useful input next to other signals. Run one in the browser with the domain age checker, read the RDAP glossary entry, or start from the quickstart.
Sources
- RFC 3912: WHOIS Protocol Specification, read 2026-10-19
- RFC 7480: HTTP Usage in the Registration Data Access Protocol (RDAP), read 2026-10-19
- RFC 9082: Registration Data Access Protocol (RDAP) Query Format, read 2026-10-19
- RFC 9083: JSON Responses for the Registration Data Access Protocol (RDAP), read 2026-10-19
- RFC 9224: Finding the Authoritative Registration Data Access Protocol (RDAP) Service, read 2026-10-19
- IANA: RDAP bootstrap file for Domain Name System registrations, read 2026-10-19
- RFC 7484: Finding the Authoritative Registration Data (RDAP) Service, read 2026-10-19