---
title: "Look up domain registration data via RDAP"
method: GET
path: "/api/domains/whois"
tags: ["Discovery"]
---

# Look up domain registration data via RDAP

`GET /api/domains/whois`

## Request

- Base URL: `https://domani.run`
- URL: `https://domani.run/api/domains/whois`
- Auth: none required

Queries the RDAP (Registration Data Access Protocol) network for domain registration data. Returns registrar, creation/expiry/update dates, days until expiry, status codes, nameservers, DNSSEC status, and contact information (registrant, admin, tech, billing, abuse). Works for any domain - no ownership required.

RDAP is the modern, JSON-native replacement for WHOIS. Falls back to WHOIS (port 43) for TLDs without RDAP, and supplements RDAP with WHOIS referral data when contacts are missing (common post-GDPR). Contact information may be partially or fully redacted due to GDPR or privacy protection services. **Public endpoint** - no authentication required. Authenticated requests get higher rate limits (30/min vs 10/min).

## Query parameters

- `q` string, required

## Response `200`

Domain registration data

- object
  - `domain` string, required
  - `registered` boolean, required: Whether the domain is currently registered
  - `registrar` string, nullable, required: Current registrar name
  - `registrar_url` string, nullable, required: Registrar website URL
  - `registrar_iana_id` string, nullable, required: Registrar IANA ID (from RDAP publicIds)
  - `created` string, nullable, required: Registration date (YYYY-MM-DD)
  - `expires` string, nullable, required: Expiration date (YYYY-MM-DD)
  - `updated` string, nullable, required: Last updated date (YYYY-MM-DD)
  - `days_until_expiry` integer, nullable, required: Days until expiry (null if not registered)
  - `status` string[], required: EPP status codes
  - `nameservers` string[], required: Authoritative nameservers
  - `dnssec` boolean, required: Whether DNSSEC is enabled
  - `redacted` boolean, required: Whether WHOIS/RDAP data is redacted for privacy (GDPR)
  - `contacts` object, required: Contact information by role (null when no data available, fields may be null when redacted)
    - `registrant` Contact, required: Contact information for a domain role (may be redacted due to GDPR/privacy services)
      - `name` string, nullable: Contact name
      - `organization` string, nullable: Organization name
      - `email` string, nullable: Contact email
      - `phone` string, nullable: Phone number
      - `fax` string, nullable: Fax number
      - `street` string, nullable: Street address
      - `city` string, nullable: City
      - `state` string, nullable: State or province
      - `postal_code` string, nullable: Postal/ZIP code
      - `country` string, nullable: Country code or name
    - `admin` Contact, required: Contact information for a domain role (may be redacted due to GDPR/privacy services)
      - `name` string, nullable: Contact name
      - `organization` string, nullable: Organization name
      - `email` string, nullable: Contact email
      - `phone` string, nullable: Phone number
      - `fax` string, nullable: Fax number
      - `street` string, nullable: Street address
      - `city` string, nullable: City
      - `state` string, nullable: State or province
      - `postal_code` string, nullable: Postal/ZIP code
      - `country` string, nullable: Country code or name
    - `tech` Contact, required: Contact information for a domain role (may be redacted due to GDPR/privacy services)
      - `name` string, nullable: Contact name
      - `organization` string, nullable: Organization name
      - `email` string, nullable: Contact email
      - `phone` string, nullable: Phone number
      - `fax` string, nullable: Fax number
      - `street` string, nullable: Street address
      - `city` string, nullable: City
      - `state` string, nullable: State or province
      - `postal_code` string, nullable: Postal/ZIP code
      - `country` string, nullable: Country code or name
    - `billing` Contact, required: Contact information for a domain role (may be redacted due to GDPR/privacy services)
      - `name` string, nullable: Contact name
      - `organization` string, nullable: Organization name
      - `email` string, nullable: Contact email
      - `phone` string, nullable: Phone number
      - `fax` string, nullable: Fax number
      - `street` string, nullable: Street address
      - `city` string, nullable: City
      - `state` string, nullable: State or province
      - `postal_code` string, nullable: Postal/ZIP code
      - `country` string, nullable: Country code or name
    - `abuse` Contact, required: Contact information for a domain role (may be redacted due to GDPR/privacy services)
      - `name` string, nullable: Contact name
      - `organization` string, nullable: Organization name
      - `email` string, nullable: Contact email
      - `phone` string, nullable: Phone number
      - `fax` string, nullable: Fax number
      - `street` string, nullable: Street address
      - `city` string, nullable: City
      - `state` string, nullable: State or province
      - `postal_code` string, nullable: Postal/ZIP code
      - `country` string, nullable: Country code or name

## Other responses

- `400`: Invalid request parameters
- `401`: Missing or invalid API key
- `429`: Rate limit exceeded - wait and retry

---

[API](https://skmtc.dev/domani/apis/domani-run-api.md) · [All operations](https://skmtc.dev/domani/apis/domani-run-api/llms.txt) · [OpenAPI document](https://skmtc.dev/domani/apis/domani-run-api/revisions/7679f8159533?raw)
