Whois API Documentation

Everything you need to integrate the WhoisJsonAPI endpoints.

Our Hosted Whois API Web Service provides registration details, also known as WHOIS Records, of a domain names.

Whoisjsonapi.com provides a RESTful API to get access to the whois data. It is designed for server-to-server communication between your system and the whoisjsonapi.com network using HTTPs protocol. Query responses are delivered in JSON format based on your requests which are made via GET method.

To begin, you must have a developer's account on whoisjsonapi.com, and an authentication token is necessary for each API usage.

The following data is included:

  • Important Dates (i.e. Expiration, Creation)
  • Owner and contact information if available
  • Nameservers
  • Registrar information
We store the WHOIS record in cache for a maximum of 24 hours. When you submit a query, we initially verify if the cached WHOIS record is older than 24 hours. If it is, we retrieve the most recent information in real time.

Single domain request

By making a single domain request, you can obtain only the whois information for the specific domain you are querying. This request operates swiftly as it doesn't necessitate additional resources.

API endpoint
GET https://whoisjsonapi.com/v1/{domain}
Input parameters: required
apiToken Get your personal API TOKEN on the Dashboard page.
domainName The domain for which WHOIS data is requested.
Example
curl --location 'https://whoisjsonapi.com/v1/twitter.com' \
--header 'Authorization: Bearer {your-api-token}'

Bulk request

Bulk WHOIS API gives you parsed domain WHOIS ownership information for a list of domains

The list of requested domains is limited. You can request a maximum of 20 domains at once
API endpoint
GET https://whoisjsonapi.com/v1/domains?d={domain1},{domain2},{domain3},...{domain20}
Input parameters: required
apiToken Get your personal API TOKEN on the Dashboard page.
domainNames Comma separated list of domain names. You must specify at least one domain.
Example
curl --location 'https://whoisjsonapi.com/v1/domains?d=facebook.com,twitter.com,bbc.com' \
--header 'Authorization: Bearer {your-api-token}'

Domain availability

The domain availability method checks the availability status of a single domain name. It accepts one argument: domain

The response will contain a JSON array of status objects with keys: domain and status*. The status key contains the status for the given domain.

There are two statuses provided by the API: active and inactive. INACTIVE domains indicate that they are available for purchase.

API endpoint
GET https://whoisjsonapi.com/v1/status/{domainName}
Input parameters: required
apiToken Get your personal API TOKEN on the Dashboard page.
domainName The domain for which status is requested.
Example
curl --location 'https://whoisjsonapi.com/v1/status/whois.com' \
--header 'Authorization: Bearer {your-api-token}'
Response
{
    "domain": "whois.com",
    "status": "active"
}

DNS records

The DNS records endpoint returns grouped DNS records for a hostname. It is available to Premium and Enterprise plans and uses the same shared request allowance as WHOIS: each accepted DNS lookup consumes one request, regardless of the number of requested record types.

Send your API token in the Authorization header using the bearer token scheme. Successful responses include X-Requests-Remaining when the shared allowance value is available.

API endpoint
GET https://whoisjsonapi.com/v1/dns/{domainName}
Input parameters
Parameter Required Description
domainName Yes The hostname to look up. Invalid hostnames return DNS_INVALID_DOMAIN.
types No Comma-separated record types. Omit it, or pass it blank, to request the default set: A, AAAA, MX, NS, TXT, CNAME, SOA, CAA.
Supported record types are exactly A, AAAA, MX, NS, TXT, CNAME, SOA, and CAA. Duplicate values, unsupported values, or empty items in a comma-separated list return DNS_INVALID_TYPES.
Default lookup example
curl --location 'https://whoisjsonapi.com/v1/dns/example.com' \
--header 'Authorization: Bearer {your-api-token}'
Type-filtered lookup example
curl --location 'https://whoisjsonapi.com/v1/dns/example.com?types=A,MX,TXT' \
--header 'Authorization: Bearer {your-api-token}'
Response fields
Field Description
domain Normalized hostname used for the lookup.
domain_ascii Lowercase ASCII or punycode hostname.
status One of success, no_data, nxdomain, or partial.
resolver_policy Resolver policy used for the lookup. The current public value is default.
requested_types Normalized record types returned in canonical order.
fetched_at Timestamp when the DNS data was fetched, or null when unavailable.
expires_at Timestamp when the returned DNS data expires, or null when unavailable.
records Object grouped by requested record type. Requested types without records are returned as empty arrays.
warnings Array of sanitized lookup warnings, if any.
Success response example
{
    "domain": "example.com",
    "domain_ascii": "example.com",
    "status": "success",
    "resolver_policy": "default",
    "requested_types": [
        "A",
        "AAAA",
        "MX",
        "NS",
        "TXT",
        "CNAME",
        "SOA",
        "CAA"
    ],
    "fetched_at": "2026-07-01T12:00:00+00:00",
    "expires_at": "2026-07-01T12:05:00+00:00",
    "records": {
        "A": [
            {
                "name": "example.com.",
                "type": "A",
                "ttl": 120,
                "value": "93.184.216.34"
            }
        ],
        "AAAA": [
            {
                "name": "example.com.",
                "type": "AAAA",
                "ttl": 120,
                "value": "2606:2800:220:1:248:1893:25c8:1946"
            }
        ],
        "MX": [
            {
                "name": "example.com.",
                "type": "MX",
                "ttl": 300,
                "priority": 10,
                "exchange": "mail.example.com."
            }
        ],
        "NS": [
            {
                "name": "example.com.",
                "type": "NS",
                "ttl": 86400,
                "target": "a.iana-servers.net."
            }
        ],
        "TXT": [],
        "CNAME": [],
        "SOA": [
            {
                "name": "example.com.",
                "type": "SOA",
                "ttl": 3600,
                "mname": "ns.icann.org.",
                "rname": "noc.dns.icann.org.",
                "serial": 2026070101,
                "refresh": 7200,
                "retry": 3600,
                "expire": 1209600,
                "minimum": 3600
            }
        ],
        "CAA": []
    },
    "warnings": []
}
Status and error behavior
Value HTTP status Meaning
success 200 The lookup completed and at least one requested record set is available.
no_data 200 The hostname exists, but no records were found for the requested types.
nxdomain 200 DNS reports that the hostname does not exist.
partial 200 A usable partial response was returned with warnings.
DNS_INVALID_DOMAIN 400 The hostname is invalid.
DNS_INVALID_TYPES 400 The type list contains a duplicate, empty, or unsupported value.
DNS_TIMEOUT 504 The DNS lookup timed out before a usable response was available.
DNS_LOOKUP_UNAVAILABLE 503 The DNS lookup service is temporarily unavailable.

Authentication, subscription access, feature access, and quota failures use the standard API error behavior for authenticated endpoints.


Authorization

When making a request to our REST API, send your API token in the Authorization header using the bearer token scheme. Keep API tokens out of URLs, browser code, public repositories, and logs.

Example: API key in headers
curl --location 'https://whoisjsonapi.com/v1/whois.com' \
--header 'Authorization: Bearer {your-api-token}'

Response

Query responses are delivered in JSON format.

Note: some fields may be missing due to incomplete data provided by the whois providers.

Domain

Field Type Example value
id String 2320948_DOMAIN_COM-VRSN
domain String facebook.com
name String facebook
extension String com
whois_server String whois.registrarsafe.com
status Array ["clientdeleteprohibited", "clienttransferprohibited"]
name_servers Array ["a.ns.facebook.com", "b.ns.facebook.com"]
created_date String 1997-03-29T05:00:00Z
updated_date String 2022-01-26T16:45:06Z
expiration_date String 2031-03-30T04:00:00Z

Registrar

Field Type Example value
id String 3237
name String RegistrarSafe, LLC
phone String +1.6513097004
email String abusecomplaints@registrarsafe.com

Registrant

Field Type Example value
name String Domain Admin
organization String Meta Platforms, Inc.
street String 1601 Willow Rd
city String Menlo Park
province String CA
postal_code String 94025
country String US
phone String +1.6515434890
email domain@fb.com

Administrative

Field Type Example value
name String Domain Admin
organization String Meta Platforms, Inc.
street String 1601 Willow Rd
city String Menlo Park
province String CA
postal_code String 94025
country String US
phone String +1.6515434890
email domain@fb.com

Technical

Field Type Example value
name String Domain Admin
organization String Meta Platforms, Inc.
street String 1601 Willow Rd
city String Menlo Park
province String CA
postal_code String 94025
country String US
phone String +1.6515434890
email domain@fb.com
Response example
{
    "domain": {
        "id": "2320948_DOMAIN_COM-VRSN",
        "domain": "facebook.com",
        "punycode": "facebook.com",
        "name": "facebook.com",
        "extension": "com",
        "whois_server": "whois.registrarsafe.com",
        "status": [
            "clientdeleteprohibited",
            "clienttransferprohibited",
            "clientupdateprohibited",
            "serverdeleteprohibited",
            "servertransferprohibited",
            "serverupdateprohibited"
        ],
        "name_servers": [
            "d.ns.facebook.com",
            "a.ns.facebook.com",
            "b.ns.facebook.com",
            "c.ns.facebook.com"
        ],
        "created_date": "1997-03-29T05:00:00Z",
        "created_date_in_time": "1997-03-29T05:00:00Z",
        "updated_date": "2023-04-26T19:04:19Z",
        "updated_date_in_time": "2023-04-26T19:04:19Z",
        "expiration_date": "2032-03-30T04:00:00Z",
        "expiration_date_in_time": "2032-03-30T04:00:00Z"
    },
    "registrar": {
        "name": "RegistrarSafe, LLC",
        "phone": "+1.6503087004",
        "email": "abusecomplaints@registrarsafe.com",
        "referral_url": "https://www.registrarsafe.com"
    },
    "registrant": {
        "name": "Domain Admin",
        "organization": "Meta Platforms, Inc.",
        "street": "1601 Willow Rd",
        "city": "Menlo Park",
        "province": "CA",
        "postal_code": "94025",
        "country": "US",
        "phone": "+1.6505434800",
        "email": "domain@fb.com"
    }
}

Rate limits

A rate limit is the number of API calls an app or user can make within a given time period. If this limit is exceeded or if CPU or total time limits are exceeded, the app or user may be throttled. API requests made by a throttled user or app will fail.

Platform rate limits

Each endpoint is subject to a rate limit of 50 requests per second. Once this limit is reached, the system will respond with a 429 status code.

Errors

When you request information about a domain, you may receive a message that the domain was not found. This means that the domain has not yet been registered and might be available for purchase.

Code Examples

curl --location \
--request GET 'https://whoisjsonapi.com/v1/youtube.com' \
--header 'Authorization: Bearer {your token}'