API REFERENCE · GET · STABLE

Domain Lookup API — /api/v1/domain/lookup

Returns ownership, registrar, key dates (created / updated / expires), nameservers, DNSSEC, and abuse contacts for any apex domain. Automatically picks RDAP when supported and falls back to WHOIS — pass `server` to force one protocol. Contact fields are blank for most TLDs due to ICANN / GDPR redaction.

01 · OVERVIEW

What Domain Lookup does

Returns ownership, registrar, key dates (created / updated / expires), nameservers, DNSSEC, and abuse contacts for any apex domain. Automatically picks RDAP when supported and falls back to WHOIS — pass `server` to force one protocol. Contact fields are blank for most TLDs due to ICANN / GDPR redaction.

  • Method GET
  • Path /api/v1/domain/lookup
  • Stability STABLE
  • Version v2026-05-15
  • Summary WHOIS / RDAP lookup for any registered domain.
02 · PARAMETERS

Request parameters

Pass these as query-string parameters (or, where indicated, in the request headers). Required params marked required.

  • domain (required) — string Apex or subdomain. IDN punycode accepted. Max 253 characters.
  • server — string, default "auto" Which protocol to use. `auto` prefers RDAP and falls back to WHOIS — recommended.
  • cache — boolean, default true Serve from cache when available (24h TTL). Set `false` to force a fresh upstream call.
  • raw — boolean, default false Include the raw WHOIS / RDAP response in the payload for debugging.
03 · RESPONSE

Response schema

All successful responses follow the standard `{ success: true, data: {...} }` envelope. Notable fields on the data object for this endpoint:

  • success — boolean Always `true` on 2xx.
  • data.domain — string Normalized lower-case ASCII domain.
  • data.tld — string The top-level domain (e.g. `com`).
  • data.details.dates.creationDate — ISO8601 When the domain was first registered.
  • data.details.dates.updatedDate — ISO8601 Last registrar update.
  • data.details.dates.expiryDate — ISO8601 When the domain expires.
  • data.details.registrar — object Registrar name, IANA id, abuse contact, WHOIS server URL.
  • data.details.nameServers — array<object> Each NS with `name`, optional `ipv4` / `ipv6`.
  • data.details.dnssec — object `signed` boolean, `dsData[]`, `keyData[]`.
  • data.details.status — array<string> EPP status codes (e.g. clientTransferProhibited).
  • data.details.source — string Either `whois` or `rdap`.
04 · EXAMPLE

Example response

Truncated but representative example for a real lookup:

Sample response
{
  "success": true,
  "data": {
    "domain": "google.com",
    "tld": "com",
    "details": {
      "domainName": "google.com",
      "dates": {
        "creationDate": "1997-09-15T04:00:00.000Z",
        "updatedDate": "2019-09-09T15:39:04.000Z",
        "expiryDate": "2028-09-14T04:00:00.000Z"
      },
      "registrar": {
        "name": "MarkMonitor Inc.",
        "ianaId": "292",
        "whoisServer": "whois.markmonitor.com",
        "abuseContact": {
          "email": "[email protected]",
          "phone": "+1.2086851750"
        }
      },
      "nameServers": [
        {
          "name": "ns1.google.com"
        },
        {
          "name": "ns2.google.com"
        }
      ],
      "dnssec": {
        "signed": false,
        "dsData": [],
        "keyData": []
      },
      "status": [
        "clientDeleteProhibited",
        "clientTransferProhibited"
      ],
      "source": "whois"
    }
  }
}
05 · ERRORS

Error codes

Errors return HTTP status codes paired with stable machine-readable codes. Match on the code field rather than the human-readable message.

  • 400 VALIDATION_ERROR `domain` missing or not a valid hostname.
  • 404 DOMAIN_NOT_FOUND No WHOIS or RDAP record exists for this name.
  • 503 UPSTREAM_UNAVAILABLE The TLD's registry is unreachable.
06 · BEST PRACTICES

Implementation tips

Patterns we recommend when integrating this endpoint:

  • Cache results for at least 24h — registrar data changes rarely.
  • Use `server=auto` unless you specifically need a raw WHOIS text response.
  • Treat 404 as an authoritative signal that a domain is unregistered (or recently dropped).
  • Pass `raw=true` only when debugging — it inflates response size 5–10x.
07 · FAQ

Frequently asked questions

  • Why are contact fields blank? ICANN's redaction policy and GDPR remove personal data for most TLDs. The registrar's abuse contact is always returned.
  • Does this count against my AI quota? No. WHOIS/RDAP calls consume one general API credit, not an AI credit.
  • How fresh is the data? Cached for 24h. Set `cache=false` to bypass.