dropdown

Overview

  • Live Whois Lookup
    Live Whois Lookup provides real-time whois domain data.
  • Historical Whois API
    Whois history API helps to get historical domain whois records.
  • Reverse Whois API
    Reverse whois lookup API lets you get whois records by keyword, email, registrant name or company.
  • Bulk Domain Lookup
    Bulk domain whois lookup allows you to query multiple domains in one request. You can do bulk Whois search through an API upto 100 domains in JSON / XML formats in single request. If you want to query bulk whois upto 3M, you are required to upload files via our billing portal. We'll send you an email with a link to download your whois file as soon as crawling completes.

Authorization

You can make authorized requests to our API by passing API key as a query parameter. To get your API key, login to our billing dashboard and get your API key! If your API key has been compromised, you can change it by clicking on reset button in billing dashboard.


Live Whois Lookup

API

GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=live&domainName=whoisfreaks.com
Copied


Input parameters: required

apiKey Get your API key from our billing dashboard.

whois For getting live or historical or reverse whois.

domainName The domainName for requested whois.

Input parameters: optional

format Two formats are available JSON, XML. If you don't pass 'format' parameter, default format is JSON.


Code Snippets


curl --location --request GET 'https://api.whoisfreaks.com/v1.0/whois?whois=live&domainName=jfreaks.com&apiKey=API_KEY'



var request = require('request');
var options = {
  'method': 'GET',
  'url': 'https://api.whoisfreaks.com/v1.0/whois?whois=live&domainName=jfreaks.com&apiKey=API_KEY',
  'headers': {
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});





OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://api.whoisfreaks.com/v1.0/whois?whois=live&domainName=jfreaks.com&apiKey=API_KEY")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();




import http.client

conn = http.client.HTTPSConnection("api.whoisfreaks.com")
payload = ''
headers = {}

conn.request("GET", "/v1.0/whois?whois=live&domainName=jfreaks.com&apiKey=API_KEY", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))




<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.whoisfreaks.com/v1.0/whois?whois=live&domainName=jfreaks.com&apiKey=API_KEY',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;





require "uri"
require "net/http"

url = URI("https://api.whoisfreaks.com/v1.0/whois?whois=live&domainName=jfreaks.com&apiKey=API_KEY")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)

response = https.request(request)
puts response.read_body





var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("https://api.whoisfreaks.com/v1.0/whois?whois=live&domainName=jfreaks.com&apiKey=API_KEY", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));




var client = new RestClient("https://api.whoisfreaks.com/v1.0/whois?whois=live&domainName=jfreaks.com&apiKey=API_KEY");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);




package main

import (
  "fmt"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://api.whoisfreaks.com/v1.0/whois?whois=live&domainName=jfreaks.com&apiKey=API_KEY"
  method := "GET"

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, nil)

  if err != nil {
    fmt.Println(err)
    return
  }
  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}




CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
  curl_easy_setopt(curl, CURLOPT_URL, "https://api.whoisfreaks.com/v1.0/whois?whois=live&domainName=jfreaks.com&apiKey=API_KEY");
  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
  curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
  struct curl_slist *headers = NULL;
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);





import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif

var semaphore = DispatchSemaphore (value: 0)

var request = URLRequest(url: URL(string: "https://api.whoisfreaks.com/v1.0/whois?whois=live&domainName=jfreaks.com&apiKey=API_KEY")!,timeoutInterval: Double.infinity)
request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request) { data, response, error in
  guard let data = data else {
    print(String(describing: error))
    semaphore.signal()
    return
  }
  print(String(data: data, encoding: .utf8)!)
  semaphore.signal()
}

task.resume()
semaphore.wait()




Response

Live Whois API provides response in JSON/XML formats. You can pass format as parameter to consume API in your required format. Default format is JSON. ICANN grant authority to registrant to put WHOIS GUARD which will hide their personal information like name, email etc. In that case you will get REDACTED FOR PRIVACY or some text like this. Different registrars put different text for WHOIS GUARD. We crawl data as ICANN registry provide us. In some cases, registrar / registrant show limited information, you will observe missing fields in our response in that case. Following is the complete Whois data response format.


{
    "status": true,
    "domain_name": "whoisfreaks.com",
    "query_time": "2022-10-19 07:50:41",
    "whois_server": "whois.verisign-grs.com",
    "domain_registered": "yes",
    "create_date": "2019-03-19",
    "update_date": "2022-02-17",
    "expiry_date": "2023-03-19",
    "domain_registrar": {
        "iana_id": "1068",
        "registrar_name": "NAMECHEAP INC",
        "whois_server": "whois.namecheap.com",
        "website_url": "http://www.namecheap.com",
        "email_address": "abuse@namecheap.com",
        "phone_number": "+1.9854014545"
    },
    "registrant_contact": {
        "name": "Redacted for Privacy",
        "company": "Privacy service provided by Withheld for Privacy ehf",
        "street": "Kalkofnsvegur 2",
        "city": "Reykjavik",
        "state": "Capital Region",
        "zip_code": "101",
        "country_name": "Iceland",
        "country_code": "IS",
        "email_address": "b8e54d7b11b347b285b60992e0889dde.protect@withheldforprivacy.com",
        "phone": "+354.4212434"
    },
    "administrative_contact": {
        "name": "Redacted for Privacy",
        "company": "Privacy service provided by Withheld for Privacy ehf",
        "street": "Kalkofnsvegur 2",
        "city": "Reykjavik",
        "state": "Capital Region",
        "zip_code": "101",
        "country_name": "Iceland",
        "country_code": "IS",
        "email_address": "b8e54d7b11b347b285b60992e0889dde.protect@withheldforprivacy.com",
        "phone": "+354.4212434"
    },
    "technical_contact": {
        "name": "Redacted for Privacy",
        "company": "Privacy service provided by Withheld for Privacy ehf",
        "street": "Kalkofnsvegur 2",
        "city": "Reykjavik",
        "state": "Capital Region",
        "zip_code": "101",
        "country_name": "Iceland",
        "country_code": "IS",
        "email_address": "b8e54d7b11b347b285b60992e0889dde.protect@withheldforprivacy.com",
        "phone": "+354.4212434"
    },
    "name_servers": [
        "dns8.cloudns.net",
        "dns4.cloudns.net",
        "dns3.cloudns.net",
        "dns7.cloudns.net"
    ],
    "domain_status": [
        "clientTransferProhibited"
    ],
    "whois_raw_domain": "\n   Domain Name: WHOISFREAKS.COM\n   Registry Domain ID: 2370976244_DOMAIN_COM-VRSN\n   Registrar WHOIS Server: whois.namecheap.com\n   Registrar URL: http://www.namecheap.com\n   Updated Date: 2022-02-17T09:01:41Z\n   Creation Date: 2019-03-19T18:24:27Z\n   Registry Expiry Date: 2023-03-19T18:24:27Z\n   Registrar: NameCheap, Inc.\n   Registrar IANA ID: 1068\n   Registrar Abuse Contact Email: abuse@namecheap.com\n   Registrar Abuse Contact Phone: +1.6613102107\n   Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited\n   Name Server: DNS3.CLOUDNS.NET\n   Name Server: DNS4.CLOUDNS.NET\n   Name Server: DNS7.CLOUDNS.NET\n   Name Server: DNS8.CLOUDNS.NET\n   DNSSEC: unsigned\n   URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/\n>>> Last update of whois database: 2022-10-19T07:50:26Z <<<\n\nFor more information on Whois status codes, please visit https://icann.org/epp\n\nNOTICE: The expiration date displayed in this record is the date the\nregistrar's sponsorship of the domain name registration in the registry is\ncurrently set to expire. This date does not necessarily reflect the expiration\ndate of the domain name registrant's agreement with the sponsoring\nregistrar.  Users may consult the sponsoring registrar's Whois database to\nview the registrar's reported date of expiration for this registration.\n\nTERMS OF USE: You are not authorized to access or query our Whois\ndatabase through the use of electronic processes that are high-volume and\nautomated except as reasonably necessary to register domain names or\nmodify existing registrations; the Data in VeriSign Global Registry\nServices' (\"VeriSign\") Whois database is provided by VeriSign for\ninformation purposes only, and to assist persons in obtaining information\nabout or related to a domain name registration record. VeriSign does not\nguarantee its accuracy. By submitting a Whois query, you agree to abide\nby the following terms of use: You agree that you may use this Data only\nfor lawful purposes and that under no circumstances will you use this Data\nto: (1) allow, enable, or otherwise support the transmission of mass\nunsolicited, commercial advertising or solicitations via e-mail, telephone,\nor facsimile; or (2) enable high volume, automated, electronic processes\nthat apply to VeriSign (or its computer systems). The compilation,\nrepackaging, dissemination or other use of this Data is expressly\nprohibited without the prior written consent of VeriSign. You agree not to\nuse electronic processes that are automated and high-volume to access or\nquery the Whois database except as reasonably necessary to register\ndomain names or modify existing registrations. VeriSign reserves the right\nto restrict your access to the Whois database in its sole discretion to ensure\noperational stability.  VeriSign may restrict or terminate your access to the\nWhois database for failure to abide by these terms of use. VeriSign\nreserves the right to modify these terms at any time.\n\nThe Registry database contains ONLY .COM, .NET, .EDU domains and\nRegistrars.\nDomain name: whoisfreaks.com\nRegistry Domain ID: 2370976244_DOMAIN_COM-VRSN\nRegistrar WHOIS Server: whois.namecheap.com\nRegistrar URL: http://www.namecheap.com\nUpdated Date: 2022-02-17T09:01:41.82Z\nCreation Date: 2019-03-19T18:24:27.00Z\nRegistrar Registration Expiration Date: 2023-03-19T18:24:27.00Z\nRegistrar: NAMECHEAP INC\nRegistrar IANA ID: 1068\nRegistrar Abuse Contact Email: abuse@namecheap.com\nRegistrar Abuse Contact Phone: +1.9854014545\nReseller: NAMECHEAP INC\nDomain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited\nRegistry Registrant ID: \nRegistrant Name: Redacted for Privacy\nRegistrant Organization: Privacy service provided by Withheld for Privacy ehf\nRegistrant Street: Kalkofnsvegur 2 \nRegistrant City: Reykjavik\nRegistrant State/Province: Capital Region\nRegistrant Postal Code: 101\nRegistrant Country: IS\nRegistrant Phone: +354.4212434\nRegistrant Phone Ext: \nRegistrant Fax: \nRegistrant Fax Ext: \nRegistrant Email: b8e54d7b11b347b285b60992e0889dde.protect@withheldforprivacy.com\nRegistry Admin ID: \nAdmin Name: Redacted for Privacy\nAdmin Organization: Privacy service provided by Withheld for Privacy ehf\nAdmin Street: Kalkofnsvegur 2 \nAdmin City: Reykjavik\nAdmin State/Province: Capital Region\nAdmin Postal Code: 101\nAdmin Country: IS\nAdmin Phone: +354.4212434\nAdmin Phone Ext: \nAdmin Fax: \nAdmin Fax Ext: \nAdmin Email: b8e54d7b11b347b285b60992e0889dde.protect@withheldforprivacy.com\nRegistry Tech ID: \nTech Name: Redacted for Privacy\nTech Organization: Privacy service provided by Withheld for Privacy ehf\nTech Street: Kalkofnsvegur 2 \nTech City: Reykjavik\nTech State/Province: Capital Region\nTech Postal Code: 101\nTech Country: IS\nTech Phone: +354.4212434\nTech Phone Ext: \nTech Fax: \nTech Fax Ext: \nTech Email: b8e54d7b11b347b285b60992e0889dde.protect@withheldforprivacy.com\nName Server: dns3.cloudns.net\nName Server: dns4.cloudns.net\nName Server: dns7.cloudns.net\nName Server: dns8.cloudns.net\nDNSSEC: unsigned\nURL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/\n>>> Last update of WHOIS database: 2022-10-18T16:49:22.15Z <<<\nFor more information on Whois status codes, please visit https://icann.org/epp",
    "registry_data": {
        "domain_name": "WHOISFREAKS.COM",
        "query_time": "2022-10-19 07:50:41",
        "whois_server": "whois.verisign-grs.com",
        "domain_registered": "yes",
        "domain_registrar": {
            "iana_id": "1068",
            "registrar_name": "NameCheap, Inc.",
            "whois_server": "whois.namecheap.com",
            "website_url": "http://www.namecheap.com",
            "email_address": "abuse@namecheap.com",
            "phone_number": "+1.6613102107"
        },
        "name_servers": [
            "dns8.cloudns.net",
            "dns4.cloudns.net",
            "dns3.cloudns.net",
            "dns7.cloudns.net"
        ],
        "domain_status": [
            "clientTransferProhibited"
        ],
        "whois_raw_registery": "\n   Domain Name: WHOISFREAKS.COM\n   Registry Domain ID: 2370976244_DOMAIN_COM-VRSN\n   Registrar WHOIS Server: whois.namecheap.com\n   Registrar URL: http://www.namecheap.com\n   Updated Date: 2022-02-17T09:01:41Z\n   Creation Date: 2019-03-19T18:24:27Z\n   Registry Expiry Date: 2023-03-19T18:24:27Z\n   Registrar: NameCheap, Inc.\n   Registrar IANA ID: 1068\n   Registrar Abuse Contact Email: abuse@namecheap.com\n   Registrar Abuse Contact Phone: +1.6613102107\n   Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited\n   Name Server: DNS3.CLOUDNS.NET\n   Name Server: DNS4.CLOUDNS.NET\n   Name Server: DNS7.CLOUDNS.NET\n   Name Server: DNS8.CLOUDNS.NET\n   DNSSEC: unsigned\n   URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/\n>>> Last update of whois database: 2022-10-19T07:50:12Z <<<\n\nFor more information on Whois status codes, please visit https://icann.org/epp\n\nNOTICE: The expiration date displayed in this record is the date the\nregistrar's sponsorship of the domain name registration in the registry is\ncurrently set to expire. This date does not necessarily reflect the expiration\ndate of the domain name registrant's agreement with the sponsoring\nregistrar.  Users may consult the sponsoring registrar's Whois database to\nview the registrar's reported date of expiration for this registration.\n\nTERMS OF USE: You are not authorized to access or query our Whois\ndatabase through the use of electronic processes that are high-volume and\nautomated except as reasonably necessary to register domain names or\nmodify existing registrations; the Data in VeriSign Global Registry\nServices' (\"VeriSign\") Whois database is provided by VeriSign for\ninformation purposes only, and to assist persons in obtaining information\nabout or related to a domain name registration record. VeriSign does not\nguarantee its accuracy. By submitting a Whois query, you agree to abide\nby the following terms of use: You agree that you may use this Data only\nfor lawful purposes and that under no circumstances will you use this Data\nto: (1) allow, enable, or otherwise support the transmission of mass\nunsolicited, commercial advertising or solicitations via e-mail, telephone,\nor facsimile; or (2) enable high volume, automated, electronic processes\nthat apply to VeriSign (or its computer systems). The compilation,\nrepackaging, dissemination or other use of this Data is expressly\nprohibited without the prior written consent of VeriSign. You agree not to\nuse electronic processes that are automated and high-volume to access or\nquery the Whois database except as reasonably necessary to register\ndomain names or modify existing registrations. VeriSign reserves the right\nto restrict your access to the Whois database in its sole discretion to ensure\noperational stability.  VeriSign may restrict or terminate your access to the\nWhois database for failure to abide by these terms of use. VeriSign\nreserves the right to modify these terms at any time.\n\nThe Registry database contains ONLY .COM, .NET, .EDU domains and\nRegistrars."
    }
}

            


HTTP Error Codes

Below mentioned possible type of error and desc.

HTTP Code
Error Message
403 We are not providing the whois of this domain extension(comsdf) 400 Please pass domain param correct value[For Technical Support: support@whoisfreaks.com] 408 Unable to fetch whois data.Please try again [For Technical Support: support@whoisfreaks.com] 401 Provided API key is invalid. [For Technical Support: support@whoisfreaks.com] 401 Provided API key is inactive. [For Technical Support: support@whoisfreaks.com] 401 Please buy subscription plan or add api credits then use this api key. [For Technical Support: support@whoisfreaks.com] 413 You have exceeded the limit of api credits requests [allowed_request_no].Please upgrade your plan [For Technical Support: support@whoisfreaks.com] 412 You have exceeded the limit of api plan requests and your subscription canceled.Please contact our technical support team: support@whoisfreaks.com] 413 You have exceeded the limit of Surcharge Requests [allowed_surcharge_request_no]. Please upgrade your plan [For Technical Support: support@whoisfreaks.com] 401 Your subscription is deactivated.Please buy new plan or add api credits for using whoisfreaks api's [For Technical Support: support@whoisfreaks.com] 401 Your subscription is deactivated due to many time payment failure.Please buy new plan or add api credits for using whoisfreaks api's 401 Your account is deactivated.[For Technical Support: support@whoisfreaks.com] 206 Partial Response

Historical Whois API

API

GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=historical&domainName=google.com
Copied


Input parameters: required

apiKey Get your API key on our billing dashboard.

whois For getting live or historical or reverse whois.

domainName The domainName for requested whois.

Input parameters: optional

format Two formats are available JSON, XML. If you don't pass format parameter, default format is JSON


Code Snippets


curl --location --request GET 'https://api.whoisfreaks.com/v1.0/whois?whois=historical&domainName=jfreaks.com&apiKey=API_KEY'



var request = require('request');
var options = {
  'method': 'GET',
  'url': 'https://api.whoisfreaks.com/v1.0/whois?whois=historical&domainName=jfreaks.com&apiKey=API_KEY',
  'headers': {
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});





OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://api.whoisfreaks.com/v1.0/whois?whois=historical&domainName=jfreaks.com&apiKey=API_KEY")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();




import http.client

conn = http.client.HTTPSConnection("api.whoisfreaks.com")
payload = ''
headers = {}

conn.request("GET", "/v1.0/whois?whois=historical&domainName=jfreaks.com&apiKey=API_KEY", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))




<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.whoisfreaks.com/v1.0/whois?whois=historical&domainName=jfreaks.com&apiKey=API_KEY',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;





require "uri"
require "net/http"

url = URI("https://api.whoisfreaks.com/v1.0/whois?whois=historical&domainName=jfreaks.com&apiKey=API_KEY")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)

response = https.request(request)
puts response.read_body





var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("https://api.whoisfreaks.com/v1.0/whois?whois=historical&domainName=jfreaks.com&apiKey=API_KEY", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));




var client = new RestClient("https://api.whoisfreaks.com/v1.0/whois?whois=historical&domainName=jfreaks.com&apiKey=API_KEY");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);




package main

import (
  "fmt"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://api.whoisfreaks.com/v1.0/whois?whois=historical&domainName=jfreaks.com&apiKey=API_KEY"
  method := "GET"

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, nil)

  if err != nil {
    fmt.Println(err)
    return
  }
  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}




CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
  curl_easy_setopt(curl, CURLOPT_URL, "https://api.whoisfreaks.com/v1.0/whois?whois=historical&domainName=jfreaks.com&apiKey=API_KEY");
  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
  curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
  struct curl_slist *headers = NULL;
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);





import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif

var semaphore = DispatchSemaphore (value: 0)

var request = URLRequest(url: URL(string: "https://api.whoisfreaks.com/v1.0/whois?whois=historical&domainName=jfreaks.com&apiKey=API_KEY")!,timeoutInterval: Double.infinity)
request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request) { data, response, error in
  guard let data = data else {
    print(String(describing: error))
    semaphore.signal()
    return
  }
  print(String(data: data, encoding: .utf8)!)
  semaphore.signal()
}

task.resume()
semaphore.wait()




Response


{
    "status": true,
    "whois": "historical",
    "total_records": "2",
    "whois_domains_historical": [
        {
            "num": 1,
            "status": true,
            "domain_name": "Google.com",
            "query_time": "2022-07-23 18:56:27",
            "create_date": "1997-09-15",
            "update_date": "2019-09-09",
            "expiry_date": "2028-09-13",
            "domain_registrar": {
                "iana_id": "292",
                "registrar_name": "MarkMonitor, Inc.",
                "whois_server": "whois.markmonitor.com",
                "website_url": "http://www.markmonitor.com"
            },
            "registrant_contact": {
                "company": "google llc",
                "state": "CA",
                "country_name": "United States",
                "country_code": "US",
                "email_address": "select request email form at https://domains.markmonitor.com/whois/google.com"
            },
            "administrative_contact": {
                "company": "Google LLC",
                "state": "CA",
                "country_name": "United States",
                "country_code": "US",
                "email_address": "Select Request Email Form at https://domains.markmonitor.com/whois/google.com"
            },
            "technical_contact": {
                "company": "Google LLC",
                "state": "CA",
                "country_name": "United States",
                "country_code": "US",
                "email_address": "Select Request Email Form at https://domains.markmonitor.com/whois/google.com"
            },
            "name_servers": [
                "ns1.google.com",
                "NS2.GOOGLE.COM",
                "NS1.GOOGLE.COM",
                "NS4.GOOGLE.COM"
            ],
            "domain_status": [
                "clientDeleteProhibited",
                "clientTransferProhibited",
                "serverDeleteProhibited",
                "serverTransferProhibited"
            ]
        },
        {
            "num": 2,
            "status": true,
            "domain_name": "google.com",
            "create_date": "2017-01-30",
            "expiry_date": "2020-09-14",
            "domain_registrar": {
                "registrar_name": "MarkMonitor Inc."
            },
            "registrant_contact": {
                "name": "Dns Admin",
                "company": "Google Inc.",
                "city": "Mountain View",
                "state": "CA",
                "zip_code": "94043",
                "country_name": "United States",
                "country_code": "US",
                "email_address": "dns-admin@google.com",
                "phone": "+1.6502530000",
                "mailing_address": "Please contact contact-admin@google.com, 1600 Amphitheatre Parkway"
            }
        }
    ]
}

            



HTTP Error Codes

Below mentioned possible type of error and desc.

HTTP Code
Error Message
404 Record not found 400 Please pass domain param correct value[For Technical Support: support@whoisfreaks.com] 401 Provided API key is invalid. [For Technical Support: support@whoisfreaks.com] 401 Provided API key is inactive. [For Technical Support: support@whoisfreaks.com] 401 Please buy subscription plan or add api credits then use this api key. [For Technical Support: support@whoisfreaks.com] 413 You have exceeded the limit of api credits requests [allowed_request_no].Please upgrade your plan [For Technical Support: support@whoisfreaks.com] 412 You have exceeded the limit of api plan requests and your subscription canceled.Please contact our technical support team: support@whoisfreaks.com] 413 You have exceeded the limit of Surcharge Requests [allowed_surcharge_request_no]. Please upgrade your plan [For Technical Support: support@whoisfreaks.com] 401 Your subscription is deactivated.Please buy new plan or add api credits for using whoisfreaks api's [For Technical Support: support@whoisfreaks.com] 401 Your subscription is deactivated due to many time payment failure.Please buy new plan or add api credits for using whoisfreaks api's 401 Your account is deactivated.[For Technical Support: support@whoisfreaks.com]

Reverse Whois API

API

Reverse Whois lookup API lets you query in two modes.
  1. Default Mode.
  2. Mini Mode.
Reverse Whois search API allows you access data in pagination.

GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&keyword=youtube
Copied
GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&email=abc@gmail.com
Copied
GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&owner=michal
Copied
GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&company=youtube
Copied
GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&company=youtube&mode=mini
Copied
GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&company=youtube&mode=mini&page=2
Copied


Input parameters: required

apiKey Get your API key on our billing dashboard.

whois For getting live or historical or reverse whois.

keyword The domain keyword for requested whois.
or
email The email for requested whois.
or
owner The owner Name for requested whois.
or
company The company Name for requested whois.


Input parameters: optional

mode Two modes are available mini, default

page For getting next or desired page whois info

format Two formats are available JSON, XML. If you don't pass format parameter, default format is JSON


Code Snippet


curl --location --request GET 'https://api.whoisfreaks.com/v1.0/whois?whois=reverse&keyword=youtube&apiKey=API_KEY'



var request = require('request');
var options = {
  'method': 'GET',
  'url': 'https://api.whoisfreaks.com/v1.0/whois?whois=reverse&keyword=youtube&apiKey=API_KEY',
  'headers': {
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});





OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://api.whoisfreaks.com/v1.0/whois?whois=reverse&keyword=youtube&apiKey=API_KEY")
  .method("GET", null)
  .build();
Response response = client.newCall(request).execute();




import http.client

conn = http.client.HTTPSConnection("api.whoisfreaks.com")
payload = ''
headers = {}

conn.request("GET", "/v1.0/whois?whois=reverse&keyword=youtube&apiKey=API_KEY", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))




<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.whoisfreaks.com/v1.0/whois?whois=reverse&keyword=youtube&apiKey=API_KEY',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;




require "uri"
require "net/http"

url = URI("https://api.whoisfreaks.com/v1.0/whois?whois=reverse&keyword=youtube&apiKey=API_KEY")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)

response = https.request(request)
puts response.read_body




var requestOptions = {
  method: 'GET',
  redirect: 'follow'
};

fetch("https://api.whoisfreaks.com/v1.0/whois?whois=reverse&keyword=youtube&apiKey=API_KEY", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));




var client = new RestClient("https://api.whoisfreaks.com/v1.0/whois?whois=reverse&keyword=youtube&apiKey=API_KEY");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);




package main

import (
  "fmt"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://api.whoisfreaks.com/v1.0/whois?whois=reverse&keyword=youtube&apiKey=API_KEY"
  method := "GET"

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, nil)

  if err != nil {
    fmt.Println(err)
    return
  }
  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}




CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
  curl_easy_setopt(curl, CURLOPT_URL, "https://api.whoisfreaks.com/v1.0/whois?whois=reverse&keyword=youtube&apiKey=API_KEY");
  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
  curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
  struct curl_slist *headers = NULL;
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);





import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif

var semaphore = DispatchSemaphore (value: 0)

var request = URLRequest(url: URL(string: "https://api.whoisfreaks.com/v1.0/whois?whois=reverse&keyword=youtube&apiKey=API_KEY")!,timeoutInterval: Double.infinity)
request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request) { data, response, error in
  guard let data = data else {
    print(String(describing: error))
    semaphore.signal()
    return
  }
  print(String(data: data, encoding: .utf8)!)
  semaphore.signal()
}

task.resume()
semaphore.wait()




Response


default mode response(You can get upto 50 whois record per page)

{ "total_Result": 323, "total_Pages": 7, "current_Page": 1, "whois_domains_historical": [ { "num": 1, "status": true, "domain_name": "youtube.ovh", "query_time": "2020-04-06 15:16:34", "create_date": "2016-08-01", "expiry_date": "2020-08-01", "domain_registrar": { "registrar_name": "OVH", "website_url": "http://www.ovh.com" }, "registrant_contact": { "name": "REDACTED FOR PRIVACY", "city": "REDACTED FOR PRIVACY", "zip_code": "REDACTED FOR PRIVACY", "country_name": "France", "country_code": "FR", "email_address": "Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.", "phone": "REDACTED FOR PRIVACY", "fax": "REDACTED FOR PRIVACY" }, "administrative_contact": { "name": "REDACTED FOR PRIVACY", "company": "REDACTED FOR PRIVACY", "city": "REDACTED FOR PRIVACY", "state": "REDACTED FOR PRIVACY", "zip_code": "REDACTED FOR PRIVACY", "country_name": "REDACTED FOR PRIVACY", "country_code": "REDACTED FOR PRIVACY", "email_address": "Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.", "phone": "REDACTED FOR PRIVACY", "fax": "REDACTED FOR PRIVACY" }, "technical_contact": { "name": "REDACTED FOR PRIVACY", "company": "REDACTED FOR PRIVACY", "city": "REDACTED FOR PRIVACY", "state": "REDACTED FOR PRIVACY", "zip_code": "REDACTED FOR PRIVACY", "country_name": "REDACTED FOR PRIVACY", "country_code": "REDACTED FOR PRIVACY", "email_address": "Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.", "phone": "REDACTED FOR PRIVACY", "fax": "REDACTED FOR PRIVACY" }, "billing_contact": {}, "name_servers": [ "dave.ns.cloudflare.com", "vera.ns.cloudflare.com" ], "domain_status": [ "clientDeleteProhibited", "clientTransferProhibited" ] }, { "num": 2, "status": true, "domain_name": "youtube.ovh", "create_date": "2016-08-01", "expiry_date": "2017-08-01", "domain_registrar": { "registrar_name": "OVH" }, "registrant_contact": { "name": "chebiri mohamed", "city": "Roubaix Cedex 1", "zip_code": "59053", "country_name": "FRANCE", "email_address": "s04z2azkjpbmg75jsjli@z.o-w-o.info", "phone": "33972101007", "mailing_address": "youtube.ovh, office #9657345|c/o Owo, Bp80157" } }, { "num": 3, "status": true, "domain_name": "youtube.ovh", "create_date": "2015-06-05", "expiry_date": "2016-06-05", "domain_registrar": { "registrar_name": "OVH" }, "registrant_contact": { "name": "Harry Spink", "company": "Sandbox Media", "city": "Bristol", "zip_code": "BS3 1TF", "country_name": "UNITED KINGDOM", "email_address": "2oc70dbb602lmt04jyzy@z.o-w-o.info", "phone": "4.41179E+11", "mailing_address": "Tobacco Factory,|Bristol" } }, . . . . { "num": 50, "status": true, "domain_name": "youtube.capetown", "query_time": "2020-04-01 20:26:50", "create_date": "2014-09-30", "expiry_date": "2020-09-30", "domain_registrar": { "registrar_name": "MarkMonitor", "website_url": "markmonitor.com" }, "registrant_contact": { "name": "REDACTED", "city": "REDACTED", "state": "CA", "zip_code": "REDACTED", "country_name": "United States", "country_code": "US", "email_address": "Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin or Tech contacts of the domain name.", "phone": "REDACTED", "fax": "REDACTED" }, "administrative_contact": { "name": "REDACTED", "company": "REDACTED", "city": "REDACTED", "state": "REDACTED", "zip_code": "REDACTED", "country_name": "REDACTED", "country_code": "REDACTED", "email_address": "Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin or Tech contacts of the domain name.", "phone": "REDACTED", "fax": "REDACTED" }, "technical_contact": { "name": "REDACTED", "company": "REDACTED", "city": "REDACTED", "state": "REDACTED", "zip_code": "REDACTED", "country_name": "REDACTED", "country_code": "REDACTED", "email_address": "Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin or Tech contacts of the domain name.", "phone": "REDACTED", "fax": "REDACTED" }, "billing_contact": { "name": "REDACTED", "company": "REDACTED", "city": "REDACTED", "state": "REDACTED", "zip_code": "REDACTED", "country_name": "REDACTED", "country_code": "REDACTED", "email_address": "Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin or Tech contacts of the domain name.", "phone": "REDACTED", "fax": "REDACTED" }, "name_servers": [ "ns1.google.com", "ns2.google.com", "ns3.google.com", "ns4.google.com" ], "domain_status": [ "clientDeleteProhibited", "clientTransferProhibited", "clientUpdateProhibited" ] } ] }



Mini mode response(You can get upto 100 whois record per page)

{ "total_Result": 323, "total_Pages": 4, "current_Page": 1, "whois_domains_historical": [ { "num": 1, "domain_name": "youtube.ovh", "create_date": "2016-08-01", "expiry_date": "2020-08-01", "name": "redacted for privacy", "email": "please query the rdds service of the registrar of record identified in this output for information on how to contact the registrant, admin, or tech contact of the queried domain name.", "company_name": "" }, { "num": 2, "domain_name": "youtube.ovh", "create_date": "2016-08-01", "expiry_date": "2017-08-01", "name": "redacted for privacy", "email": "please query the rdds service of the registrar of record identified in this output for information on how to contact the registrant, admin, or tech contact of the queried domain name.", "company_name": "" }, { "num": 3, "domain_name": "youtube.ovh", "create_date": "2015-06-05", "expiry_date": "2016-06-05", "name": "redacted for privacy", "email": "please query the rdds service of the registrar of record identified in this output for information on how to contact the registrant, admin, or tech contact of the queried domain name.", "company_name": "" }, . . . . { "num": 100, "domain_name": "youtube.la", "create_date": "2014-08-03", "expiry_date": "2020-08-03", "name": "", "email": "https://whois.nic.la/contact/youtube.la/registrant", "company_name": "" } ] }


HTTP Error Codes

Below mentioned possible type of error and desc

HTTP Code
Error Message
404 Record not found 400 Please pass param value 401 Provided API key is invalid. [For Technical Support: support@whoisfreaks.com] 401 Provided API key is inactive. [For Technical Support: support@whoisfreaks.com] 401 Please buy subscription plan or add api credits then use this api key. [For Technical Support: support@whoisfreaks.com] 413 You have exceeded the limit of api credits requests [allowed_request_no].Please upgrade your plan [For Technical Support: support@whoisfreaks.com] 412 You have exceeded the limit of api plan requests and your subscription canceled.Please contact our technical support team: support@whoisfreaks.com] 413 You have exceeded the limit of Surcharge Requests [allowed_surcharge_request_no]. Please upgrade your plan [For Technical Support: support@whoisfreaks.com] 401 Your subscription is deactivated.Please buy new plan or add api credits for using whoisfreaks api's [For Technical Support: support@whoisfreaks.com] 401 Your subscription is deactivated due to many time payment failure.Please buy new plan or add api credits for using whoisfreaks api's 401 Your account is deactivated.[For Technical Support: support@whoisfreaks.com]

Bulk Domain Lookup

You can use this API to query live bulk whois upto 100 domains. Bulk domain search is available for live and historical whois record. You can upload file with one domain per line on our billing dashboard. We'll send you an email with a link to download whois file in CSV format.

API

POST https://api.whoisfreaks.com/v1.0/bulkwhois?apiKey=API_KEY
Copied
Body
    

{
    "domainNames":[
        "google.com",
        "abc.com",
        "google.uk",
        "google.us"
    ]
}



            

Input parameters: required

apiKey Get your API key on our billing dashboard.

Input parameters: optional

format Two formats are available JSON, XML. If you don't pass 'format' parameter, default format is JSON.


Code Snippet


curl -d '{"domainNames":["google.com","abc.com","google.uk","google.us"]}' -H "Content-Type: application/json" -X POST https://api.whoisfreaks.com/v1.0/bulkwhois?apiKey=API_KEY



var request = require('request');
var options = {
  'method': 'POST',
  'url': 'https://api.whoisfreaks.com/v1.0/bulkwhois?apiKey=API_KEY',
  'headers': {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"domainNames": ["google.com", "abc.com", "google.uk", "google.us"]})

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});




OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"domainNames\":[\"google.com\",\"abc.com\",\"google.uk\",\"google.us\"]}");
Request request = new Request.Builder()
  .url("https://api.whoisfreaks.com/v1.0/bulkwhois?apiKey=API_KEY")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();




import http.client
import json

conn = http.client.HTTPSConnection("api.whoisfreaks.com")
payload = json.dumps({"domainNames": ["google.com", "abc.com", "google.uk","google.us"]})
headers = {'Content-Type': 'application/json'}

conn.request("POST", "/v1.0/bulkwhois?apiKey=API_KEY", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))




<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.whoisfreaks.com/v1.0/bulkwhois?apiKey=API_KEY',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "domainNames":[
        "google.com",
        "abc.com",
        "google.uk",
        "google.us"
    ]
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;    




require "uri"
require "json"
require "net/http"

url = URI("https://api.whoisfreaks.com/v1.0/bulkwhois?apiKey=API_KEY")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request.body = JSON.dump({
  "domainNames": [
    "google.com",
    "abc.com",
    "google.uk",
    "google.us"
  ]
})

response = https.request(request)
puts response.read_body    




var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "domainNames": [
    "google.com",
    "abc.com",
    "google.uk",
    "google.us"
  ]
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api.whoisfreaks.com/v1.0/bulkwhois?apiKey=API_KEY", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));




var client = new RestClient("https://api.whoisfreaks.com/v1.0/bulkwhois?apiKey=API_KEY");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
var body = @"{" + "\n" +
@"    ""domainNames"":[" + "\n" +
@"        ""google.com""," + "\n" +
@"        ""abc.com""," + "\n" +
@"        ""google.uk""," + "\n" +
@"        ""google.us""" + "\n" +
@"    ]" + "\n" +
@"}";
request.AddParameter("application/json", body,  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);




package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://api.whoisfreaks.com/v1.0/bulkwhois?apiKey=API_KEY"
  method := "POST"

  payload := strings.NewReader(`{
    "domainNames":[
        "google.com",
        "abc.com",
        "google.uk",
        "google.us"
    ]
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}




CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
  curl_easy_setopt(curl, CURLOPT_URL, "https://api.whoisfreaks.com/v1.0/bulkwhois?apiKey=API_KEY");
  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
  curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
  struct curl_slist *headers = NULL;
  headers = curl_slist_append(headers, "Content-Type: application/json");
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  const char *data = "{\n    \"domainNames\":[\n        \"google.com\",\n        \"abc.com\",\n        \"google.uk\",\n        \"google.us\"\n    ]\n}";
  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
  res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);




import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif

var semaphore = DispatchSemaphore (value: 0)

let parameters = "{\n    \"domainNames\":[\n        \"google.com\",\n        \"abc.com\",\n        \"google.uk\",\n        \"google.us\"\n    ]\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "https://api.whoisfreaks.com/v1.0/bulkwhois?apiKey=API_KEY")!,timeoutInterval: Double.infinity)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
  guard let data = data else {
    print(String(describing: error))
    semaphore.signal()
    return
  }
  print(String(data: data, encoding: .utf8)!)
  semaphore.signal()
}

task.resume()
semaphore.wait()    



Response


{    
    "bulk_whois_response": [
        {
            "status": true,
            "domain_name": "google.com",
            "query_time": "2022-10-07 07:01:52",
            "whois_server": "whois.verisign-grs.com",
            "domain_registered": "yes",
            "create_date": "1997-09-15",
            "update_date": "2019-09-09",
            "expiry_date": "2028-09-13",
            "domain_registrar": {
                "iana_id": "292",
                "registrar_name": "MarkMonitor, Inc.",
                "whois_server": "whois.markmonitor.com",
                "website_url": "http://www.markmonitor.com",
                "email_address": "abusecomplaints@markmonitor.com",
                "phone_number": "+1.2083895770"
            },
            "registrant_contact": {...},
            "administrative_contact": {...},
            "technical_contact": {...},
            "name_servers": [
                "ns1.google.com",
                "NS2.GOOGLE.COM",
                "NS1.GOOGLE.COM",
                "NS4.GOOGLE.COM",
                "NS3.GOOGLE.COM",
                "ns2.google.com",
                "ns3.google.com",
                "ns4.google.com"
            ],
            "domain_status": [...],
            "registry_data": {...},
            .
            .
            .
        },
        {
            "status": true,
            "domain_name": "abc.com",
            "query_time": "2022-10-07 07:01:52",
            "whois_server": "whois.verisign-grs.com",
            "domain_registered": "yes",
            "create_date": "1996-05-22",
            "update_date": "2022-04-10",
            "expiry_date": "2023-05-23",
            "domain_registrar": {
                "iana_id": "299",
                "registrar_name": "CSC CORPORATE DOMAINS, INC.",
                "whois_server": "whois.corporatedomains.com",
                "website_url": "www.cscprotectsbrands.com",
                "email_address": "domainabuse@cscglobal.com",
                "phone_number": "+1.8887802723"
            },
            "registrant_contact": {...},
            "administrative_contact": {...},
            "technical_contact": {...},
            "name_servers": [
                "ns-1869.awsdns-41.co.uk",
                "NS-318.AWSDNS-39.COM",
                "ns-1368.awsdns-43.org",
                "NS-736.AWSDNS-28.NET",
                "NS-1368.AWSDNS-43.ORG",
                "ns-318.awsdns-39.com",
                "NS-1869.AWSDNS-41.CO.UK",
                "ns-736.awsdns-28.net"
            ],
            "domain_status": [...],
            "registry_data": {...},
            .
            .
            .
        },
        {
            "status": true,
            "domain_name": "google.uk",
            "query_time": "2022-10-07 07:01:51",
            "whois_server": "whois.nic.uk",
            "domain_registered": "yes",
            "create_date": "2014-06-11",
            "update_date": "2022-05-10",
            "expiry_date": "2023-06-11",
            "domain_registrar": {
                "registrar_name": "Markmonitor Inc. [Tag = MARKMONITOR]",
                "website_url": "https://www.markmonitor.com"
            },
            "name_servers": [
                "ns1.googledomains.com",
                "ns3.googledomains.com",
                "ns2.googledomains.com",
                "ns4.googledomains.com"
            ],
            .
            .
            .
        },
        {
            "status": true,
            "domain_name": "google.us",
            "query_time": "2022-10-07 07:01:51",
            "whois_server": "whois.nic.us",
            "domain_registered": "yes",
            "create_date": "2002-04-19",
            "update_date": "2022-03-22",
            "expiry_date": "2023-04-18",
            "domain_registrar": {
                "iana_id": "292",
                "registrar_name": "MarkMonitor, Inc.",
                "whois_server": "whois.markmonitor.com",
                "website_url": "www.markmonitor.com",
                "email_address": "abusecomplaints@markmonitor.com",
                "phone_number": "+1.2083895740"
            },
            "registrant_contact": {...},
            "administrative_contact": {...},
            "technical_contact": {...},
            "name_servers": [
                "ns1.google.com",
                "ns2.google.com",
                "ns3.google.com",
                "ns4.google.com"
            ],
            "domain_status": [...],
            .
            .
            .
        }
    ]
}    

            


HTTP Error Codes

Below mentioned possible type of error and desc

HTTP Code
Error Message
206 Partial response. 400 Please provide domainNames 413 Requested list size is 101 which exceeds maximum list size of 100 401 Provided API key is invalid. [For Technical Support: support@whoisfreaks.com] 401 Provided API key is inactive. [For Technical Support: support@whoisfreaks.com] 401 Please buy subscription plan or add api credits then use this api key. [For Technical Support: support@whoisfreaks.com] 413 You have exceeded the limit of api credits requests [allowed_request_no].Please upgrade your plan [For Technical Support: support@whoisfreaks.com] 412 You have exceeded the limit of api plan requests and your subscription canceled.Please contact our technical support team: support@whoisfreaks.com] 413 You have exceeded the limit of Surcharge Requests [allowed_surcharge_request_no]. Please upgrade your plan [For Technical Support: support@whoisfreaks.com] 401 Your subscription is deactivated.Please buy new plan or add api credits for using whoisfreaks api's [For Technical Support: support@whoisfreaks.com] 401 Your subscription is deactivated due to many time payment failure.Please buy new plan or add api credits for using whoisfreaks api's 401 Your account is deactivated.[For Technical Support: support@whoisfreaks.com]

Credits Usage API

You need credits in order to use Whoisfreaks API. Live Whois service will charge 1 credit per successfull query for a domain. Historical Whois service will charge 2 credits per domain. Reverse whois service will charge 4 credtis per page. Surcharge requests are only allowed to credits subscribers. You can fetch credits usage and remaining credits information through an API with a time lag of 8 minutes.

GET https://api.whoisfreaks.com/v1.0/whoisapi/usage?apiKey=API_KEY
Copied

Input parameters: required

apiKey Get your API key from our billing dashboard.

Input parameters: optional

format Two formats are available JSON, XML. If you don't pass 'format' parameter, default format is JSON.


Response

You can get API key from our billing dashboard.

                    
{
    "apiKey": "API_KEY",
    "apiCredits": {
        "totalCredits": 1020079,
        "servedRequest": 1533
    },
    "apiSubscription": {
        "subscriptionStatus": "deactivated",
        "requestLimit": 0,
        "servedRequests": 18,
        "surchargeRequestLimit": 0,
        "servedSurchargeRequests": 0
    }
}
                    
            

FAQs

What is Whois API and how does it work?

Whois API contains a big and well parsed Whois record data that provides all of the Whois information data to a wide-variety of industries against any domain name, such as domain registration details, domain owner email address and many more in JSON/XML formats. Live whois Lookup API crawl whois data in real time. We do not cache live whois records. Historical and reverse whois APIs provide data from our whois database.



Which TLDs are supported by your system?

You can check the current supported TLDs list.



Do you have notification service when API credits are near to an end?

Yes, we will inform you via an email. We send notification email on 80%,90%,100% usage. You can get credits/ subscription usage information from our billing portal or through API.



What happened if API credits have been utilized and my system is using whois API?

We provide surcharge requests on all active API credits subscriptions. You can fetch credits and surcharge requests information through our API. Each subscription plan has different surcharge requests limit.



Do you charge credit on 4xx error status codes in response?

No, We do not charge credits on 4xx status codes in response. All Whois APIs follow same rule for 4xx status codes in response.



How Old You Have Historical records?

We are providing Historical Whois data from 1986.



Is each Whois Record in historical database unique?

Yes, each whois record will be unique. We only save unique whois record of the domains.



What is the minimum number of domain names required for bulk whois?

Bulk whois API can support upto 100 domains. Bulk whois search through our billing dashboard by uploading file with one domain per line can support minimmum of 100 domains and maximum of 3M domains.



Will you charge on failed domains in bulk whois search utility?

We do not charge for failed domains. We only charge for found domains and charge for not found domains in case of live lookup.