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

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

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.
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.
https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&keyword=youtube

https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&email=abc@gmail.com

https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&owner=michal

https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&company=youtube

https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&company=youtube&mode=mini

https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=reverse&company=youtube&mode=mini&page=2

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

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

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