GET/api/v2/domain-ip
Domain to IP API
Every IPv4 and IPv6 address a name resolves to, with each address's network, reverse name, CDN and city, the CNAME chain and five resolvers' answers.
- 30 calls a minute per IP
- Same engine as the Domain to IP tool
{
"query": {
"domain": "github.com",
"resolver": "google"
},
"status": "ok",
"zone": "github.com",
"resolver": {
"id": "google",
"name": "Google Public DNS",
"ip": "8.8.8.8",
"protocol": "tcp",
"timeMs": 68
},
"cname": [],
"ttl": {
"a": 40,
"aaaa": null
},
"addresses": [
{
"ip": "140.82.114.3",
"version": 4,
"ttl": 40,
"ptr": "lb-140-82-114-3-iad.github.com",
"network": {
"asn": 36459,
"name": "GitHub",
"asName": "GITHUB - GitHub, Inc., US",
"prefix": "140.82.114.0/24",
"registry": "arin",
"country": "US"
},
"cdn": null,
"location": {
"city": "San Francisco (South Beach)",
"region": "California",
"country": "US",
"latitude": 37.782,
"longitude": -122.391
},
"special": null,
"seenBy": [
"google"
]
}
],
"cdn": null,
"twin": {
"name": "www.github.com",
"status": "ok",
"ipv4": [
"140.82.112.4"
],
"ipv6": [],
"cname": [
"github.com"
],
"sameAddresses": false,
"networks": [
"GitHub"
],
"cdn": null
},
"resolvers": [
{
"id": "google",
"name": "Google Public DNS",
"ip": "8.8.8.8",
"protocol": "tcp",
"timeMs": 68,
"status": "ok",
"ipv4": [
"140.82.114.3"
],
"ipv6": [],
"withheld": 0,
"ttl": 40,
"agrees": true
},
{
"id": "cloudflare",
"name": "Cloudflare 1.1.1.1",
"ip": "1.1.1.1",
"protocol": "doh",
"timeMs": 2,
"status": "ok",
"ipv4": [
"20.207.73.82"
],
"ipv6": [],
"withheld": 0,
"ttl": 35,
"agrees": false
},
{
"id": "quad9",
"name": "Quad9",
"ip": "9.9.9.9",
"protocol": "tcp",
"timeMs": 42,
"status": "ok",
"ipv4": [
"20.207.73.82"
],
"ipv6": [],
"withheld": 0,
"ttl": 41,
"agrees": false
},
{
"id": "opendns",
"name": "OpenDNS",
"ip": "208.67.222.222",
"protocol": "tcp",
"timeMs": 65,
"status": "ok",
"ipv4": [
"140.82.112.4"
],
"ipv6": [],
"withheld": 0,
"ttl": 60,
"agrees": false
},
{
"id": "adguard",
"name": "AdGuard DNS",
"ip": "94.140.14.14",
"protocol": "tcp",
"timeMs": 501,
"status": "ok",
"ipv4": [
"20.207.73.82"
],
"ipv6": [],
"withheld": 0,
"ttl": 29,
"agrees": false
}
],
"blocked": false,
"truncated": 0,
"issues": [
{
"severity": "info",
"code": "no_ipv6",
"message": "github.com has no AAAA record, so IPv6-only clients can't reach it."
}
],
"checkedAt": "2026-10-25T08:13:13.439Z",
"tookMs": 1150
}How it works
Resolves the name the way a browser's resolver does: one round of A and AAAA queries (with the CNAME chain and TTLs) to the chosen public resolver (Google, Cloudflare, Quad9, OpenDNS or AdGuard), and the other four asked the same at once, so rotating answers, geo-DNS and a filtering resolver's block show up in resolvers. www and the bare domain are asked together (twin).
Each address gets the network that announces it (Team Cymru), its reverse name (PTR) and, for a server's own address, DB-IP's city. An address of a CDN or security proxy is shared with other sites: it gets no city, and an address of the twin or another resolver that skips the CDN is never returned (withheld counts them, the twin names only their network). When an address's network can't be looked up, the same withholding applies, as if the name were behind a CDN.
A name that doesn't exist, has no A/AAAA record or whose DNS fails (SERVFAIL) is a finding (status), not an error; only the chosen resolver not answering at all is a 504.
Query parameters
domainstringrequiredThe host name to resolve; a URL, a trailing dot or a Unicode name (IDN) is fine.www.is kept: www.example.com often points somewhere else than example.com.resolverstringoptionaldefaultgoogleThe public resolver whose answer is the main one; the other four are asked beside it.one of
google,cloudflare,quad9,opendns,adguard
Response fields
200 with this JSON object, plus tookMs, and incomplete with warnings when a source failed. Fields marked optional appear only when they apply.
queryobjectalwaysWhat was looked up, normalised (lower case, no trailing dot, IDNs as Punycode).domainstringalwaysThe name resolved: lower case, Punycode, no trailing dot.resolverstringalwaysThe chosen resolver.one of
"google","cloudflare","quad9","opendns","adguard"
statusstringalwaysThe chosen resolver's answer: addresses (ok), no such name (nxdomain), the name exists without A/AAAA records (no_address), or its DNS failed (servfail).one of
"ok","nxdomain","no_address","servfail"zonestringalwaysThe registrable domain (example.co.uk for www.example.co.uk).resolverobjectalwaysThe chosen resolver and how it answered.Show 5 fields
idstringalwaysIts id.one of
"google","cloudflare","quad9","opendns","adguard"namestringalwaysIts name (Google Public DNS).ipstringalwaysIts address.protocolstringalwaysHow it was asked: DNS over TCP, or DNS over HTTPS (Cloudflare, or when TCP failed).one of
"tcp","doh"timeMsintegeralwaysIts answer time from our server, queueing included.
cnamearray of objectsalwaysThe CNAMEs followed from the name to its addresses, in order.namestringalwaysThe alias.targetstringalwaysWhere it points.ttlintegeralwaysSeconds the resolver may still keep it.
ttlobjectalwaysThe address sets' TTLs (the lowest), in seconds.ainteger or nullalwaysThe A set's TTL, null without A records.aaaainteger or nullalwaysThe AAAA set's TTL, null without AAAA records.
addressesarray of objectsalwaysThe chosen resolver's addresses, IPv4 first, in its order (at most 64 per family).Show 9 fields
ipstringalwaysThe address.versionintegeralwaysIP version.one of
4,6ttlintegeralwaysSeconds the resolver may still keep the record.ptrstring or nullalwaysIts reverse DNS name, null when there is none (looked up for the first 24 addresses).networkobject or nullalwaysThe network that announces it (Team Cymru); null for private space or when the lookup didn't answer.Show 6 fields
asnintegeralwaysThe AS number.namestringalwaysThe operator as people write it (Google).asNamestringalwaysThe AS name as registered (GOOGLE - Google LLC, US).prefixstringalwaysThe routed block.registrystringalwaysThe RIR that holds the block, as Team Cymru writes it (arin,ripencc,apnic,lacnic,afrinic).countrystring or nullalwaysWhere the block is registered (ISO 3166-1 alpha-2): the organization's country, not the server's.
cdnobject or nullalwaysThe CDN or security proxy the address belongs to (by its network, reverse name or the CNAME chain), null when none.Show 2 fields
idstringalwaysStable lower-case id of the company or product, e.g.google-workspace.namestringalwaysIts name as people write it.
locationobject or nullalwaysDB-IP's city for a server's own address; null for a CDN's address (it answers from many places), private space, or no data.Show 5 fields
citystring or nullalwaysCity.regionstring or nullalwaysRegion or state.countrystring or nullalwaysCountry (ISO 3166-1 alpha-2).latitudenumberalwaysApproximate latitude (city level).longitudenumberalwaysApproximate longitude (city level).
specialstring or nullalwaysSpecial-purpose space the address is in;unspecifiedis 0.0.0.0 or ::, a resolver's way of blocking. null for a public address.one of
"private","cgnat","loopback","link-local","documentation","multicast","reserved","unspecified",nullseenByarray of stringsalwaysThe resolvers that returned it.
cdnobject or nullalwaysThe CDN or security proxy the name is behind, null when none.idstringalwaysStable CDN id (cloudflare,akamai,fastly,cloudfront…).namestringalwaysIts name.detectedBystringalwaysHow it was recognised: the addresses' network, a CNAME target, or a reverse name.one of
"network","cname","ptr"
twinobject or nullalwaysThe www name for a bare domain, or the bare domain for a www name; null for deeper names or when the lookup stopped.Show 8 fields
namestringalwaysThe twin's name.statusstringalwaysWhat the twin resolved to.one of
"ok","empty","nxdomain","error"ipv4array of strings or nullalwaysIts IPv4 addresses; null when they are withheld (they skip the CDN the name is behind).ipv6array of strings or nullalwaysIts IPv6 addresses; null when withheld.cnamearray of stringsalwaysIts CNAME targets in order (empty when withheld).sameAddressesbooleanalwaysIt resolves to exactly the same addresses as the name.networksarray of stringsalwaysWhere it points instead, by network name, when its addresses differ.cdnobject or nullalwaysThe CDN it is behind, null when none.Show 2 fields
idstringalwaysStable lower-case id of the company or product, e.g.google-workspace.namestringalwaysIts name as people write it.
resolversarray of objectsalwaysEvery resolver's answer for the name, the chosen one first. The other four are a comparison: one that takes over 2.2 s is reported astimeout.Show 11 fields
idstringalwaysIts id.one of
"google","cloudflare","quad9","opendns","adguard"namestringalwaysIts name.ipstringalwaysIts address.protocolstringalwaysHow it was asked.one of
"tcp","doh"timeMsintegeralwaysIts answer time from our server.statusstringalwaysIts answer;blockedis a filtering resolver's block (0.0.0.0, a block page, or Quad9's NXDOMAIN while the others resolve the name).one of
"ok","empty","nxdomain","servfail","timeout","blocked"ipv4array of stringsalwaysIts IPv4 addresses (any that skip the name's CDN left out).ipv6array of stringsalwaysIts IPv6 addresses (any that skip the name's CDN left out).withheldintegeralwaysAddresses left out because they skip the CDN the name is behind (they may be the origin).ttlinteger or nullalwaysIts lowest TTL, null without records.agreesbooleanalwaysIt returned the same address set as the chosen resolver (only the families it answered count).
blockedbooleanalwaysThe chosen resolver answered 0.0.0.0, :: or a block page instead of the name's addresses.truncatedintegeralwaysAddress records past 64 per family, left out.issuesarray of objectsalwaysProblems found in the target's configuration, worst first. Empty when there are none.severitystringalwayserrorbreaks something,warningrisks it,infois worth knowing.one of
"error","warning","info"codestringalwaysStable machine-readable code.messagestringalwaysThe problem and what to do about it, in plain English.
checkedAtstringalwaysWhen the sources were asked (ISO 8601 UTC). A kept answer is older than the request.
Errors
422target_not_allowedA private or special-use name (.local, .internal, .test…).504timeoutThe chosen resolver didn't answer in time; retry, or pick anotherresolver.
Plus the errors every endpoint can return: 400 for a missing or unreadable parameter, 429 past the limit, 503 when every source failed.
Code samples
curl "https://dnsrobot.net/api/v2/domain-ip?domain=github.com"const params = new URLSearchParams({ domain: "github.com" });
const res = await fetch(`https://dnsrobot.net/api/v2/domain-ip?${params}`);
const data = await res.json();
if (!res.ok) throw new Error(data.error.message);
console.log(data.addresses);import requests
r = requests.get(
"https://dnsrobot.net/api/v2/domain-ip",
params={"domain": "github.com"},
timeout=30,
)
data = r.json()
if not r.ok:
raise RuntimeError(data["error"]["message"])
print(data["addresses"])package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
q := url.Values{"domain": {"github.com"}}
res, err := http.Get("https://dnsrobot.net/api/v2/domain-ip?" + q.Encode())
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]any
if err := json.NewDecoder(res.Body).Decode(&data); err != nil {
panic(err)
}
if res.StatusCode != http.StatusOK {
panic(data["error"])
}
fmt.Println(data["addresses"])
}<?php
$query = http_build_query(["domain" => "github.com"]);
$context = stream_context_create(["http" => ["ignore_errors" => true, "timeout" => 30]]);
$data = json_decode(file_get_contents("https://dnsrobot.net/api/v2/domain-ip?" . $query, false, $context), true);
if (isset($data["error"])) {
throw new RuntimeException($data["error"]["message"]);
}
print_r($data["addresses"]);require "net/http"
require "json"
uri = URI("https://dnsrobot.net/api/v2/domain-ip")
uri.query = URI.encode_www_form(domain: "github.com")
data = JSON.parse(Net::HTTP.get(uri))
raise data["error"]["message"] if data["error"]
puts data["addresses"]// Cargo.toml: reqwest = { version = "0.13", features = ["blocking", "json"] }, serde_json = "1"
fn main() -> Result<(), Box<dyn std::error::Error>> {
let res = reqwest::blocking::get("https://dnsrobot.net/api/v2/domain-ip?domain=github.com")?;
let ok = res.status().is_success();
let data: serde_json::Value = res.json()?;
if !ok {
return Err(data["error"]["message"].to_string().into());
}
println!("{}", data["addresses"]);
Ok(())
}using System.Text.Json;
using var http = new HttpClient();
var res = await http.GetAsync("https://dnsrobot.net/api/v2/domain-ip?domain=github.com");
var data = JsonDocument.Parse(await res.Content.ReadAsStringAsync()).RootElement;
if (!res.IsSuccessStatusCode)
throw new Exception(data.GetProperty("error").GetProperty("message").GetString());
Console.WriteLine(data.GetProperty("addresses"));github.com
GET /api/v2/domain-ip?domain=github.com{
"query": {
"domain": "github.com",
"resolver": "google"
},
"status": "ok",
"zone": "github.com",
"resolver": {
"id": "google",
"name": "Google Public DNS",
"ip": "8.8.8.8",
"protocol": "tcp",
"timeMs": 68
},
"cname": [],
"ttl": {
"a": 40,
"aaaa": null
},
"addresses": [
{
"ip": "140.82.114.3",
"version": 4,
"ttl": 40,
"ptr": "lb-140-82-114-3-iad.github.com",
"network": {
"asn": 36459,
"name": "GitHub",
"asName": "GITHUB - GitHub, Inc., US",
"prefix": "140.82.114.0/24",
"registry": "arin",
"country": "US"
},
"cdn": null,
"location": {
"city": "San Francisco (South Beach)",
"region": "California",
"country": "US",
"latitude": 37.782,
"longitude": -122.391
},
"special": null,
"seenBy": [
"google"
]
}
],
"cdn": null,
"twin": {
"name": "www.github.com",
"status": "ok",
"ipv4": [
"140.82.112.4"
],
"ipv6": [],
"cname": [
"github.com"
],
"sameAddresses": false,
"networks": [
"GitHub"
],
"cdn": null
},
"resolvers": [
{
"id": "google",
"name": "Google Public DNS",
"ip": "8.8.8.8",
"protocol": "tcp",
"timeMs": 68,
"status": "ok",
"ipv4": [
"140.82.114.3"
],
"ipv6": [],
"withheld": 0,
"ttl": 40,
"agrees": true
},
{
"id": "cloudflare",
"name": "Cloudflare 1.1.1.1",
"ip": "1.1.1.1",
"protocol": "doh",
"timeMs": 2,
"status": "ok",
"ipv4": [
"20.207.73.82"
],
"ipv6": [],
"withheld": 0,
"ttl": 35,
"agrees": false
},
{
"id": "quad9",
"name": "Quad9",
"ip": "9.9.9.9",
"protocol": "tcp",
"timeMs": 42,
"status": "ok",
"ipv4": [
"20.207.73.82"
],
"ipv6": [],
"withheld": 0,
"ttl": 41,
"agrees": false
},
// … 2 more items
],
"blocked": false,
"truncated": 0,
"issues": [
{
"severity": "info",
"code": "no_ipv6",
"message": "github.com has no AAAA record, so IPv6-only clients can't reach it."
}
],
"checkedAt": "2026-10-25T08:13:13.439Z",
"tookMs": 1150
}Shortened for the page: long lists show their first items.
Behind a CDN (www.cloudflare.com)
GET /api/v2/domain-ip?domain=www.cloudflare.com{
"query": {
"domain": "www.cloudflare.com",
"resolver": "google"
},
"status": "ok",
"zone": "cloudflare.com",
"resolver": {
"id": "google",
"name": "Google Public DNS",
"ip": "8.8.8.8",
"protocol": "tcp",
"timeMs": 93
},
"cname": [],
"ttl": {
"a": 300,
"aaaa": 300
},
"addresses": [
{
"ip": "104.16.123.96",
"version": 4,
"ttl": 300,
"ptr": null,
"network": {
"asn": 13335,
"name": "Cloudflare",
"asName": "CLOUDFLARENET - Cloudflare, Inc., US",
"prefix": "104.16.112.0/20",
"registry": "arin",
"country": "US"
},
"cdn": {
"id": "cloudflare",
"name": "Cloudflare"
},
"location": null,
"special": null,
"seenBy": [
"google",
"cloudflare",
"quad9",
// … 2 more items
]
},
{
"ip": "104.16.124.96",
"version": 4,
"ttl": 300,
"ptr": null,
"network": {
"asn": 13335,
"name": "Cloudflare",
"asName": "CLOUDFLARENET - Cloudflare, Inc., US",
"prefix": "104.16.112.0/20",
"registry": "arin",
"country": "US"
},
"cdn": {
"id": "cloudflare",
"name": "Cloudflare"
},
"location": null,
"special": null,
"seenBy": [
"google",
"cloudflare",
"quad9",
// … 2 more items
]
},
{
"ip": "2606:4700::6810:7c60",
"version": 6,
"ttl": 300,
"ptr": null,
"network": {
"asn": 13335,
"name": "Cloudflare",
"asName": "CLOUDFLARENET - Cloudflare, Inc., US",
"prefix": "2606:4700::/44",
"registry": "arin",
"country": "US"
},
"cdn": {
"id": "cloudflare",
"name": "Cloudflare"
},
"location": null,
"special": null,
"seenBy": [
"google",
"cloudflare",
"quad9",
// … 2 more items
]
},
// … 1 more item
],
"cdn": {
"id": "cloudflare",
"name": "Cloudflare",
"detectedBy": "network"
},
"twin": {
"name": "cloudflare.com",
"status": "ok",
"ipv4": [
"104.16.133.229",
"104.16.132.229"
],
"ipv6": [
"2606:4700::6810:85e5",
"2606:4700::6810:84e5"
],
"cname": [],
"sameAddresses": false,
"networks": [
"Cloudflare"
],
"cdn": {
"id": "cloudflare",
"name": "Cloudflare"
}
},
"resolvers": [
{
"id": "google",
"name": "Google Public DNS",
"ip": "8.8.8.8",
"protocol": "tcp",
"timeMs": 93,
"status": "ok",
"ipv4": [
"104.16.123.96",
"104.16.124.96"
],
"ipv6": [
"2606:4700::6810:7c60",
"2606:4700::6810:7b60"
],
"withheld": 0,
"ttl": 300,
"agrees": true
},
{
"id": "cloudflare",
"name": "Cloudflare 1.1.1.1",
"ip": "1.1.1.1",
"protocol": "doh",
"timeMs": 1,
"status": "ok",
"ipv4": [
"104.16.124.96",
"104.16.123.96"
],
"ipv6": [
"2606:4700::6810:7b60",
"2606:4700::6810:7c60"
],
"withheld": 0,
"ttl": 190,
"agrees": true
},
{
"id": "quad9",
"name": "Quad9",
"ip": "9.9.9.9",
"protocol": "tcp",
"timeMs": 447,
"status": "ok",
"ipv4": [
"104.16.123.96",
"104.16.124.96"
],
"ipv6": [
"2606:4700::6810:7b60",
"2606:4700::6810:7c60"
],
"withheld": 0,
"ttl": 289,
"agrees": true
},
// … 2 more items
],
"blocked": false,
"truncated": 0,
"issues": [],
"checkedAt": "2026-10-25T08:13:14.812Z",
"tookMs": 1289
}Shortened for the page: long lists show their first items.
Asked through Quad9 (wikipedia.org)
GET /api/v2/domain-ip?domain=wikipedia.org&resolver=quad9{
"query": {
"domain": "wikipedia.org",
"resolver": "quad9"
},
"status": "ok",
"zone": "wikipedia.org",
"resolver": {
"id": "quad9",
"name": "Quad9",
"ip": "9.9.9.9",
"protocol": "tcp",
"timeMs": 854
},
"cname": [],
"ttl": {
"a": 70,
"aaaa": 180
},
"addresses": [
{
"ip": "103.102.166.224",
"version": 4,
"ttl": 70,
"ptr": "text-lb.eqsin.wikimedia.org",
"network": {
"asn": 14907,
"name": "Wikimedia Foundation",
"asName": "WIKIMEDIA - Wikimedia Foundation Inc., US",
"prefix": "103.102.166.0/24",
"registry": "apnic",
"country": "US"
},
"cdn": null,
"location": {
"city": "San Francisco (Financial District)",
"region": "California",
"country": "US",
"latitude": 37.789,
"longitude": -122.402
},
"special": null,
"seenBy": [
"quad9",
"cloudflare",
"adguard"
]
},
{
"ip": "2001:df2:e500:ed1a::1",
"version": 6,
"ttl": 180,
"ptr": "text-lb.eqsin.wikimedia.org",
"network": {
"asn": 14907,
"name": "Wikimedia Foundation",
"asName": "WIKIMEDIA - Wikimedia Foundation Inc., US",
"prefix": "2001:df2:e500::/48",
"registry": "apnic",
"country": "US"
},
"cdn": null,
"location": {
"city": "Singapore",
"region": null,
"country": "SG",
"latitude": 1.352,
"longitude": 103.82
},
"special": null,
"seenBy": [
"quad9",
"cloudflare",
"adguard"
]
}
],
"cdn": null,
"twin": {
"name": "www.wikipedia.org",
"status": "ok",
"ipv4": [
"103.102.166.224"
],
"ipv6": [
"2001:df2:e500:ed1a::1"
],
"cname": [
"dyna.wikimedia.org"
],
"sameAddresses": true,
"networks": [],
"cdn": null
},
"resolvers": [
{
"id": "quad9",
"name": "Quad9",
"ip": "9.9.9.9",
"protocol": "tcp",
"timeMs": 854,
"status": "ok",
"ipv4": [
"103.102.166.224"
],
"ipv6": [
"2001:df2:e500:ed1a::1"
],
"withheld": 0,
"ttl": 70,
"agrees": true
},
{
"id": "google",
"name": "Google Public DNS",
"ip": "8.8.8.8",
"protocol": "tcp",
"timeMs": 105,
"status": "ok",
"ipv4": [
"208.80.154.224"
],
"ipv6": [
"2620:0:861:ed1a::1"
],
"withheld": 0,
"ttl": 180,
"agrees": false
},
{
"id": "cloudflare",
"name": "Cloudflare 1.1.1.1",
"ip": "1.1.1.1",
"protocol": "doh",
"timeMs": 139,
"status": "ok",
"ipv4": [
"103.102.166.224"
],
"ipv6": [
"2001:df2:e500:ed1a::1"
],
"withheld": 0,
"ttl": 171,
"agrees": true
},
// … 2 more items
],
"blocked": false,
"truncated": 0,
"issues": [],
"checkedAt": "2026-10-25T08:13:16.155Z",
"tookMs": 1263
}Shortened for the page: long lists show their first items.