Domain intelligence with WHOIS, DNS and SSL

Four cheap calls describe a domain's history, its plumbing and the health of its certificate. Read together, they answer two practical questions: should I trust this domain, and is my own about to break?

A page tells you what its owner wants you to see. The domain underneath tells you things that are harder to fake: when it was registered, whether it can be transferred, whether it can receive mail, and whether the certificate a browser is about to trust is valid and actually issued for that name.

That information serves two very different jobs. Pointed outward, it is a trust signal: a payout request from a supplier domain registered nine days ago deserves a second look, and so does a lookalike of your brand. Pointed inward, it is monitoring: domains lapse, certificates expire, and DNS changes in ways nobody approved. Both use the same four APIs, and both reward knowing exactly which fields you can rely on.

The registration record: WHOIS and domain age

WHOIS Lookup (whoislookup) reads the registry's RDAP or WHOIS record for a domain. It is a GET with a domain parameter and costs 8 credits.

Try it liveWHOIS Lookup8 credits
GEThttps://api.apiverve.com/v1/whoislookup
curl "https://api.apiverve.com/v1/whoislookup?domain=example.com" \
  -H "x-api-key: YOUR_API_KEY"
Sign in or create a free account to run this with your own key.

createdDate, expiryDate, registrar and statusDetails are the fields that drive decisions.

For example.com the record shows a createdDate of 1995-08-14T04:00:00Z, an expiryDate, the registrar, two Cloudflare nameservers, and three EPP status codes. The raw codes are in domainStatus as the registry publishes them; the API also gives you statusDetails, where each code is normalised (clientTransferProhibited), attributed to whoever set it (registrar or registry) and explained in plain English. On top of those it derives booleans you would otherwise compute yourself: isTransferLocked, isOnHold and isPendingDelete.

Those three flags are the ones worth alerting on for your own domains:

FlagWhat it means for you
isTransferLocked: falseAnyone who gets into your registrar account, or social-engineers it, can move the domain. Lock it.
isOnHold: trueThe domain is not resolving. Usually a billing or verification problem at the registrar.
isPendingDelete: trueThe registration lapsed and is in redemption or deletion. You have days, not weeks.

Registrant details are another matter. Since GDPR, most registries redact personal contact data, and many registrants use privacy services on top. registrantOrganization and registrantCountry appear only when published, and isPrivacyProtected tells you when the contact was redacted or proxied. Privacy protection is not a negative signal. It is the default at many registrars and is what a careful individual should do. Never score a domain down for it.

The record also carries domainAgeDays and domainAgeYears. Paid plans add isRecentlyRegistered, trustScore and trustLevel; on other plans you compute what you need from domainAgeDays, which is available everywhere.

When age is all you want, Domain Age (domainage) answers directly. GET with domain, 10 credits.

Try it liveDomain Age10 credits
GEThttps://api.apiverve.com/v1/domainage
curl "https://api.apiverve.com/v1/domainage?domain=google.com" \
  -H "x-api-key: YOUR_API_KEY"
Sign in or create a free account to run this with your own key.

ageCategory is the bracket; isNewlyRegistered flips true under 30 days.

It returns createdDate, the age in days, months and years, a readable domainAgeText such as "29 years, 1 month", an ageCategory bracket (new under 30 days, young under a year, established under 5 years, mature under 10, then veteran) and isNewlyRegistered. The brackets are convenient for rules, and they spare you the date arithmetic.

One behaviour to handle explicitly: for a domain with no published registration date, typically one that is not registered at all, Domain Age responds with a 404 and the error "No registration date is published for this domain." That is an answer, not an outage. Catch it and record unregistered, rather than retrying.

WHOIS Lookup reports the same situation differently. For an unregistered name it still returns status: "ok", but the record is nearly empty: no createdDate, an empty nameServers list and a registration status of null. So the test for "is this registered at all" is the presence of createdDate, not the HTTP status. Two APIs, two conventions; code for each one as it actually behaves.

Check yourself

A vendor's domain shows `isPrivacyProtected: true` and no registrantOrganization. How should your trust check treat this?

Answer the check above to continue.

Run every example on your own key. Free plan, no card.

Scaling up?

Volume pricing, custom SLAs, and dedicated support for high-traffic teams.

Contact sales