dropdown

Whois API Documentation

Overview

  • Live Whois Lookup
    Live Whois Lookup provides real-time WHOIS domain data that is directly fetched from WHOIS servers.
  • Historical Whois API
    Whois history API helps to get historical domain whois records that is directly fetched from our Whois database.
  • Reverse Whois API
    Reverse whois lookup API lets you get whois records by keyword, email, registrant name or company.
    • Keyword search utilizes case-insensitive Pattern Matching search technique to search in our historical database. For example, "whoisfreaks" matches with any keyword that have the searched pattern like "mywhoisfreaks" and "whoisfreakscom".
    • Email search uses case-insensitive exact matching technique to search in our historical database. For example, "support@whoisfreaks.com" matches only with "support@whoisfreaks.com".
    • Registrant name or Company search use full-text search technique to search in our historical database. For example, "whoisfreaks" matched with "whoisfreaks", "whoisfreak", "whois", "mywhoisfreaks" and "whoisfreakscom".
  • 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 Copy
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'
Copy

                        

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);
});


Copy

                        

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();

Copy


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"))

Copy

                        

<?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;


Copy

                        

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


Copy

                        

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));

Copy

                        

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);

Copy

                        

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))
}

Copy


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);


Copy

                        

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()


Copy

                        

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] 429 Please slow down.Your maximum request limit per minute reached. 500 Internal Server Error occurred [For Technical Support: support@whoisfreaks.com]. 503 Service is unavailable. Please try after some time or contact support@whoisfreaks.com. 504 Request is timed-out. Please contact at support@whoisfreaks.com. 403 Provided domain belongs to an inactive TLD. Please try to use historical whois lookup. [For Technical Support: support@whoisfreaks.com]

HTTP Success Codes

Below-mentioned possible type of success status codes and their desc.

HTTP Code
Description
200 OK (Request is processed successfully.) 206 Partial Response. 210 Cached response, as the WHOIS server failed to respond.

Historical Whois API

API

GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=historical&domainName=google.com Copy
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'
Copy


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);
});


Copy


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();

Copy

                        

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"))

Copy


<?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;


Copy


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


Copy


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));

Copy


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);

Copy


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))
}

Copy


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);


Copy


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()


Copy

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] 429 Please slow down.Your maximum request limit per minute reached. 500 Internal Server Error occurred [For Technical Support: support@whoisfreaks.com]. 503 Service is unavailable. Please try after some time or contact support@whoisfreaks.com. 504 Request is timed-out. Please contact at 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 Copy
Copied
GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&email=abc@gmail.com Copy
Copied
GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&owner=michal Copy
Copied
GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&company=youtube Copy
Copied
GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&company=youtube&mode=mini Copy
Copied
GET https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&company=youtube&mode=mini&page=2 Copy
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'
Copy


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);
});


Copy


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();

Copy


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"))

Copy


<?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;

Copy


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

Copy


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));

Copy


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);

Copy


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))
}

Copy


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);


Copy


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()


Copy

                        

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] 429 Please slow down.Your maximum request limit per minute reached. 500 Internal Server Error occurred [For Technical Support: support@whoisfreaks.com]. 503 Service is unavailable. Please try after some time or contact support@whoisfreaks.com. 504 Request is timed-out. Please contact at 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 Copy
Copied
Body
    

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

Copy

                    

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
Copy


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);
});

Copy


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();

Copy


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"))

Copy


<?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;    

Copy


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    

Copy


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));

Copy


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);

Copy


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))
}

Copy


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);

Copy


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()    

Copy

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
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] 429 Please slow down.Your maximum request limit per minute reached. 500 Internal Server Error occurred [For Technical Support: support@whoisfreaks.com]. 503 Service is unavailable. Please try after some time or contact support@whoisfreaks.com. 504 Request is timed-out. Please contact at support@whoisfreaks.com.

HTTP Success Codes

Below-mentioned possible type of success status codes and their desc.

HTTP Code
Description
200 OK (Request is processed successfully.) 206 Partial response. 210 Cached response, as the WHOIS server failed to respond.

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 5 credits per page. Surcharge requests are only allowed to credits subscribers. You can fetch credits usage and remaining credits information through an API.

GET https://api.whoisfreaks.com/v1.0/whoisapi/usage?apiKey=API_KEY Copy
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.



What is the number of free API credits available for new users, and are these credits rate-limited?

We will provide 500 API credits to new users and yes, those credits have a rate-limiting of 10 requests per minute for Live APIs, 5 requests per minute for Bulk Domain Lookup, and 1 request per minute for Reverse/Historical Endpoints.



How do you perform a search using "company" parameter on whois data in reverse API?

The company parameter enables you to search for domain whois data based on a publicly available company name. Simply input the company name, and the API will return domains associated with that company using search based query. For example, if you enter "meta", the API will return all domains that are owned by companies with word "meta" in their names.



How do you perform a search using "owner" parameter on whois data in reverse API?

With the owner parameter, you can search for domain whois data based on the name of the domain owner that will be publicly available in records. Enter the owner's name, and the API will provide a list of domains linked to that owner using search based query. For example, if you enter "michael", the API will search that name in full name of the owner.



Can I perform a search on whois records based on email address in reverse API?

Yes, you can search for whois information using an email address. The email parameter allows you to retrieve domains associated with a specific email address. Please note that this search is limited to publicly available email addresses. The search is precise, so make sure to input the complete and exact email.



What are the length limitations for the keyword parameter in reverse whois API queries?

When using the keyword parameter in reverse whois API queries, the keyword should be a minimum of 3 letters and a maximum of 63 letters.



Is the search case-insensitive?

Yes, all searches conducted through the reverse whois api are case-insensitive. This ensures that your queries are not affected by the letter case of your input.



Can I combine multiple parameters in a single request in reverse whois api?

Currently, the reverse whois api supports using only one parameter per query. If you want to perform a more specific query, you can refine your query by using the appropriate parameter that best matches your criteria.



Why are certain keywords restricted, and how can I access data associated with them?

Certain keywords that involve extensive hundred of millions of data are restricted to maintain the quality of our services. If you require information related to these keywords, please contact us at our support. We will assist you in accessing the restricted data through a customized solution that may charge custom price depending on the data.



Do you offer pagination for the reverse whois API, and how many records are provided per page?

Yes, we offer pagination for the reverse whois API. Currently, we provide two modes for the reverse whois api: the default mode and the mini mode. In the default mode, we provide 50 records per page, allowing you to retrieve a comprehensive list of domain whois data. In the mini mode, we offer 100 records per page, which is ideal for users who prefer a more concise display of data. We provide only domain name, creation date, expiry date, update date , owner's name, company and email in mini mode.



What is meant by Live Lookup endpoint and how much data latency does it offer?

Our Live Lookup API offers real-time access to various endpoints, including domain whois, SSL and DNS data. By directly connecting to authoritative sources, this API ensures that you receive the most current and up-to-date information, eliminating data latency.



What type of data do you provide in Historical API endpoint and how often is it updated?

Our Historical API offers a blend of up-to-date information and comprehensive unique historical data. We will provide all previous unique records related to that domain along with the latest data. Please note that we update our database on monthly basis, so the maximum data latency in our historical api data can be 1 month.



Do you have rate limiting on number of requests being made on your paid plans?

Yes, we have rate limiting on requests being made on all of our paid plans. The requests limit is shown in the following table.
The Table is divided into three types of plans:

1) API Credits

Credits live-rpm bulk-rpm historical/reverse-rpm
5000 20 8 3
15000 35 12 5
50000 80 20 10
150000 120 25 15
450000 150 35 20
1000000 200 50 25
3000000 300 70 35

2) API Subscription

Credits live-rpm bulk-rpm historical/reverse-rpm
5000 20 8 3
15000 35 12 5
50000 80 20 10
150,000 120 25 15
450,000 150 35 20
1,000,000 200 50 25
3,000,000 300 70 35

  • live-rpm: API requests per minute limit for live Whois lookup API, domain availability API, SSL certificate lookup API, and DNS lookup API endpoints.
  • bulk-rpm: API requests per minute limit for bulk domain Whois lookup API endpoint.
  • historical/reverse-rpm: API requests per minute limit for historical, and reverse Whois API endpoints.
In case, the request per minute exceeds, it'll throw an error with HTTP error code of 429.



Do you provide any headers in API response regarding rate limiting?

Yes, there are following three header parameters in the response:

  • X-RateLimit-Allowed-Requests (Tells the max allowed API requests per minute on a specific plan)
  • X-RateLimit-Remaining-Requests (Tells the remaining API requests per minute for that plan)
  • X-RateLimit-Remaining-Time (Tells after how much time the API requests per minute will be reset)