GET/api/v2/dns/propagation
DNS propagation API
Ask 33 public resolvers around the world for a record at once and see whether they agree.
- 20 calls a minute per IP
- Same engine as the DNS Propagation Checker tool
{
"query": {
"name": "cloudflare.com",
"type": "A"
},
"verdict": "propagated",
"consensus": {
"values": [
"104.16.132.229",
"104.16.133.229"
],
"resolvers": 32
},
"summary": {
"resolvers": 33,
"agree": 32,
"differ": 0,
"noRecord": 0,
"noAnswer": 1
},
"minTtl": 11,
"medianMs": 818,
"groups": [
{
"values": [
"104.16.132.229",
"104.16.133.229"
],
"resolvers": [
"google",
"cloudflare",
"opendns",
"he",
"cira",
"uninet",
"claro",
"namecheap",
"ionos",
"ovh",
"odido",
"telekom",
"swisscom",
"quad9",
"priority",
"ultradns",
"adguard",
"teknet",
"safedns",
"yandex",
"mobily",
"lt",
"cmpak",
"bharat",
"exabytes",
"microsoft",
"idnic",
"114dns",
"lguplus",
"hinet",
"iij",
"telstra"
]
}
],
"resolvers": [
{
"id": "google",
"name": "Google",
"ip": "8.8.8.8",
"transport": "tcp",
"city": "Mountain View",
"country": "United States",
"countryCode": "US",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 300
},
{
"value": "104.16.133.229",
"ttl": 300
}
],
"cnames": [],
"tookMs": 53
},
{
"id": "cloudflare",
"name": "Cloudflare",
"ip": "1.1.1.1",
"transport": "doh",
"city": "San Francisco",
"country": "United States",
"countryCode": "US",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 203
},
{
"value": "104.16.133.229",
"ttl": 203
}
],
"cnames": [],
"tookMs": 2
},
{
"id": "opendns",
"name": "OpenDNS",
"ip": "208.67.222.222",
"transport": "tcp",
"city": "Berkeley",
"country": "United States",
"countryCode": "US",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 53
},
{
"value": "104.16.132.229",
"ttl": 53
}
],
"cnames": [],
"tookMs": 51
},
{
"id": "he",
"name": "Hurricane Electric",
"ip": "209.51.161.14",
"transport": "tcp",
"city": "New York",
"country": "United States",
"countryCode": "US",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 180
},
{
"value": "104.16.133.229",
"ttl": 180
}
],
"cnames": [],
"tookMs": 469
},
{
"id": "cira",
"name": "CIRA Canadian Shield",
"ip": "149.112.121.10",
"transport": "tcp",
"city": "Ottawa",
"country": "Canada",
"countryCode": "CA",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 48
},
{
"value": "104.16.133.229",
"ttl": 48
}
],
"cnames": [],
"tookMs": 530
},
{
"id": "uninet",
"name": "Uninet",
"ip": "148.235.82.66",
"transport": "tcp",
"city": "Mexico City",
"country": "Mexico",
"countryCode": "MX",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 300
},
{
"value": "104.16.133.229",
"ttl": 300
}
],
"cnames": [],
"tookMs": 790
},
{
"id": "claro",
"name": "Claro",
"ip": "200.248.178.54",
"transport": "tcp",
"city": "Santa Cruz do Sul",
"country": "Brazil",
"countryCode": "BR",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 255
},
{
"value": "104.16.133.229",
"ttl": 255
}
],
"cnames": [],
"tookMs": 706
},
{
"id": "namecheap",
"name": "Namecheap",
"ip": "198.54.117.10",
"transport": "tcp",
"city": "Dublin",
"country": "Ireland",
"countryCode": "IE",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 164
},
{
"value": "104.16.132.229",
"ttl": 164
}
],
"cnames": [],
"tookMs": 733
},
{
"id": "ionos",
"name": "IONOS",
"ip": "109.228.4.246",
"transport": "tcp",
"city": "London",
"country": "United Kingdom",
"countryCode": "GB",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 300
},
{
"value": "104.16.132.229",
"ttl": 300
}
],
"cnames": [],
"tookMs": 570
},
{
"id": "ovh",
"name": "OVH",
"ip": "91.121.62.94",
"transport": "tcp",
"city": "Roubaix",
"country": "France",
"countryCode": "FR",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 300
},
{
"value": "104.16.133.229",
"ttl": 300
}
],
"cnames": [],
"tookMs": 618
},
{
"id": "odido",
"name": "Odido",
"ip": "87.213.100.113",
"transport": "tcp",
"city": "Amsterdam",
"country": "Netherlands",
"countryCode": "NL",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 11
},
{
"value": "104.16.133.229",
"ttl": 11
}
],
"cnames": [],
"tookMs": 657
},
{
"id": "telekom",
"name": "Telekom Deutschland",
"ip": "195.243.214.4",
"transport": "tcp",
"city": "Oberhausen",
"country": "Germany",
"countryCode": "DE",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 300
},
{
"value": "104.16.132.229",
"ttl": 300
}
],
"cnames": [],
"tookMs": 666
},
{
"id": "swisscom",
"name": "Swisscom",
"ip": "195.186.1.111",
"transport": "tcp",
"city": "Zurich",
"country": "Switzerland",
"countryCode": "CH",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 296
},
{
"value": "104.16.132.229",
"ttl": 296
}
],
"cnames": [],
"tookMs": 696
},
{
"id": "quad9",
"name": "Quad9",
"ip": "9.9.9.9",
"transport": "tcp",
"city": "Zurich",
"country": "Switzerland",
"countryCode": "CH",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 300
},
{
"value": "104.16.132.229",
"ttl": 300
}
],
"cnames": [],
"tookMs": 845
},
{
"id": "priority",
"name": "Priority Telecom",
"ip": "212.230.255.1",
"transport": "tcp",
"city": "Madrid",
"country": "Spain",
"countryCode": "ES",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 215
},
{
"value": "104.16.133.229",
"ttl": 215
}
],
"cnames": [],
"tookMs": 692
},
{
"id": "ultradns",
"name": "UltraDNS",
"ip": "156.154.70.1",
"transport": "tcp",
"city": "Rome",
"country": "Italy",
"countryCode": "IT",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 180
},
{
"value": "104.16.133.229",
"ttl": 180
}
],
"cnames": [],
"tookMs": 529
},
{
"id": "adguard",
"name": "AdGuard",
"ip": "94.140.14.14",
"transport": "tcp",
"city": "Limassol",
"country": "Cyprus",
"countryCode": "CY",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 300
},
{
"value": "104.16.132.229",
"ttl": 300
}
],
"cnames": [],
"tookMs": 1051
},
{
"id": "teknet",
"name": "Teknet",
"ip": "31.7.37.37",
"transport": "tcp",
"city": "Antalya",
"country": "Türkiye",
"countryCode": "TR",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 169
},
{
"value": "104.16.132.229",
"ttl": 169
}
],
"cnames": [],
"tookMs": 878
},
{
"id": "safedns",
"name": "SafeDNS",
"ip": "195.46.39.39",
"transport": "tcp",
"city": "Moscow",
"country": "Russia",
"countryCode": "RU",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 124
},
{
"value": "104.16.133.229",
"ttl": 124
}
],
"cnames": [],
"tookMs": 620
},
{
"id": "yandex",
"name": "Yandex",
"ip": "77.88.8.8",
"transport": "tcp",
"city": "Moscow",
"country": "Russia",
"countryCode": "RU",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 236
},
{
"value": "104.16.132.229",
"ttl": 236
}
],
"cnames": [],
"tookMs": 995
},
{
"id": "mobily",
"name": "Mobily",
"ip": "85.194.70.174",
"transport": "tcp",
"city": "Riyadh",
"country": "Saudi Arabia",
"countryCode": "SA",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 50
},
{
"value": "104.16.133.229",
"ttl": 50
}
],
"cnames": [],
"tookMs": 867
},
{
"id": "lt",
"name": "Liquid Telecom",
"ip": "5.11.11.5",
"transport": "tcp",
"city": "Cape Town",
"country": "South Africa",
"countryCode": "ZA",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 300
},
{
"value": "104.16.133.229",
"ttl": 300
}
],
"cnames": [],
"tookMs": 972
},
{
"id": "cmpak",
"name": "CMPak",
"ip": "209.150.154.1",
"transport": "tcp",
"city": "Karachi",
"country": "Pakistan",
"countryCode": "PK",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 29
},
{
"value": "104.16.132.229",
"ttl": 29
}
],
"cnames": [],
"tookMs": 1323
},
{
"id": "bharat",
"name": "Bharat Public DNS",
"ip": "1.10.10.10",
"transport": "tcp",
"city": "New Delhi",
"country": "India",
"countryCode": "IN",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 77
},
{
"value": "104.16.133.229",
"ttl": 77
}
],
"cnames": [],
"tookMs": 818
},
{
"id": "pldt",
"name": "PLDT",
"ip": "121.58.203.4",
"transport": "tcp",
"city": "Manila",
"country": "Philippines",
"countryCode": "PH",
"state": "no_answer",
"status": "timeout",
"rcode": null,
"records": [],
"cnames": [],
"tookMs": 1500
},
{
"id": "exabytes",
"name": "Exabytes",
"ip": "117.53.152.76",
"transport": "tcp",
"city": "Kuala Lumpur",
"country": "Malaysia",
"countryCode": "MY",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 300
},
{
"value": "104.16.133.229",
"ttl": 300
}
],
"cnames": [],
"tookMs": 890
},
{
"id": "microsoft",
"name": "Microsoft",
"ip": "13.76.130.172",
"transport": "tcp",
"city": "Singapore",
"country": "Singapore",
"countryCode": "SG",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 300
},
{
"value": "104.16.132.229",
"ttl": 300
}
],
"cnames": [],
"tookMs": 875
},
{
"id": "idnic",
"name": "IDNIC",
"ip": "203.119.13.77",
"transport": "tcp",
"city": "Jakarta",
"country": "Indonesia",
"countryCode": "ID",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 171
},
{
"value": "104.16.133.229",
"ttl": 171
}
],
"cnames": [],
"tookMs": 907
},
{
"id": "114dns",
"name": "114DNS",
"ip": "114.114.115.115",
"transport": "tcp",
"city": "Xinfeng",
"country": "China",
"countryCode": "CN",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 43
},
{
"value": "104.16.132.229",
"ttl": 43
}
],
"cnames": [],
"tookMs": 1269
},
{
"id": "lguplus",
"name": "LG Uplus",
"ip": "164.124.101.2",
"transport": "tcp",
"city": "Seoul",
"country": "South Korea",
"countryCode": "KR",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 233
},
{
"value": "104.16.133.229",
"ttl": 233
}
],
"cnames": [],
"tookMs": 1389
},
{
"id": "hinet",
"name": "HiNet",
"ip": "168.95.1.1",
"transport": "tcp",
"city": "Taipei",
"country": "Taiwan",
"countryCode": "TW",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 227
},
{
"value": "104.16.133.229",
"ttl": 227
}
],
"cnames": [],
"tookMs": 1056
},
{
"id": "iij",
"name": "IIJ",
"ip": "public.dns.iij.jp",
"transport": "doh",
"city": "Tokyo",
"country": "Japan",
"countryCode": "JP",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 295
},
{
"value": "104.16.132.229",
"ttl": 295
}
],
"cnames": [],
"tookMs": 1607
},
{
"id": "telstra",
"name": "Telstra",
"ip": "139.130.4.4",
"transport": "tcp",
"city": "Sydney",
"country": "Australia",
"countryCode": "AU",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 300
},
{
"value": "104.16.133.229",
"ttl": 300
}
],
"cnames": [],
"tookMs": 1355
}
],
"tookMs": 1607
}How it works
Asks every resolver of the propagation checker in parallel (Google, Cloudflare, Quad9, OpenDNS and ISPs' resolvers on every continent) and returns each one's answer, its TTL left and its time, then groups identical answers.
The largest group is the consensus; resolvers outside it differ, which is what a change in flight looks like (propagating). With three or more groups and no majority, the name is answered per region (a CDN or geo-DNS, as github.com is): the verdict is regional and every answer counts as agreeing. NXDOMAIN, NODATA and SERVFAIL are no_record; a resolver that didn't answer in 4 seconds is no_answer, never a different answer.
Each resolver's TTL is the time left in its cache: when every copy runs out, the old answer is gone everywhere. Records are compared as sets, so order doesn't matter.
Query parameters
namestringrequiredA domain or host name (URLs work too), or an IP address withtype=PTR.typestringoptionaldefaultAThe record type. DefaultA.one of
A,AAAA,CNAME,MX,NS,PTR,SRV,SOA,TXT,CAA,DS,DNSKEY
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).namestringalwaysThe name asked, lower case, IDNs as Punycode (an IP address as its arpa name).typestringalwaysThe record type asked.one of
"A","AAAA","CNAME","MX","NS","PTR","SRV","SOA","TXT","CAA","DS","DNSKEY"
verdictstringalwayspropagated(every answer agrees),propagating(a majority, and some resolvers differ),regional(3+ different answers with no majority: answered per region),nxdomain(most say the name doesn't exist),no_record(resolvers answered without records) orno_answer(none answered).one of
"propagated","propagating","regional","nxdomain","no_record","no_answer"consensusobject or nullalwaysThe answer most resolvers gave; null when there is none or the verdict isregional.valuesarray of stringsalwaysIts records' values, sorted.resolversintegeralwaysHow many resolvers gave it.
summaryobjectalwaysThe resolvers counted by state.Show 5 fields
resolversintegeralwaysResolvers asked.agreeintegeralwaysAnswers that match the consensus (withregional: every resolver that answered with records).differintegeralwaysAnswers with records that differ from the consensus.noRecordintegeralwaysResolvers that answered without records (NXDOMAIN, NODATA, SERVFAIL, REFUSED).noAnswerintegeralwaysResolvers that didn't answer in time or couldn't be reached.
minTtlinteger or nullalwaysThe lowest TTL left among the answers, in seconds: the soonest a cached copy is fetched again.medianMsinteger or nullalwaysThe median answer time, in milliseconds.groupsarray of objectsalwaysIdentical answers grouped, largest first.valuesarray of stringsalwaysIts records' values, sorted.resolversarray of stringsalwaysThe ids of the resolvers that gave it.
resolversarray of objectsalwaysEvery resolver, in the checker's order (by region).Show 13 fields
idstringalwaysThe resolver's id, e.g.google.namestringalwaysIts operator's name.ipstringalwaysIts IPv4 address, or the DoH host of a DoH-only service.transportstringalwaystcpordoh.one of
"tcp","doh"citystringalwaysThe city it is placed in (anycast resolvers answer from the site nearest our server).countrystringalwaysThe country's name.countryCodestringalwaysISO 3166-1 alpha-2.statestringalwaysIts answer against the consensus.one of
"agrees","differs","no_record","no_answer"statusstringalwaysWhat it said:ok,nodata,nxdomain,error(another response code, seercode) ortimeout.one of
"ok","nodata","nxdomain","error","timeout"rcodestring or nullalwaysThe response code; null when it didn't answer.recordsarray of objectsalwaysIts records.Show 2 fields
valuestringalwaysThe value in presentation format.ttlintegeralwaysThe TTL left in its cache, in seconds.
cnamesarray of stringsalwaysThe CNAME targets it followed to get there, in order.tookMsintegeralwaysHow long that answer took, in milliseconds.
Errors
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/dns/propagation?name=cloudflare.com"const params = new URLSearchParams({ name: "cloudflare.com" });
const res = await fetch(`https://dnsrobot.net/api/v2/dns/propagation?${params}`);
const data = await res.json();
if (!res.ok) throw new Error(data.error.message);
console.log(data.consensus);import requests
r = requests.get(
"https://dnsrobot.net/api/v2/dns/propagation",
params={"name": "cloudflare.com"},
timeout=30,
)
data = r.json()
if not r.ok:
raise RuntimeError(data["error"]["message"])
print(data["consensus"])package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
q := url.Values{"name": {"cloudflare.com"}}
res, err := http.Get("https://dnsrobot.net/api/v2/dns/propagation?" + 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["consensus"])
}<?php
$query = http_build_query(["name" => "cloudflare.com"]);
$context = stream_context_create(["http" => ["ignore_errors" => true, "timeout" => 30]]);
$data = json_decode(file_get_contents("https://dnsrobot.net/api/v2/dns/propagation?" . $query, false, $context), true);
if (isset($data["error"])) {
throw new RuntimeException($data["error"]["message"]);
}
print_r($data["consensus"]);require "net/http"
require "json"
uri = URI("https://dnsrobot.net/api/v2/dns/propagation")
uri.query = URI.encode_www_form(name: "cloudflare.com")
data = JSON.parse(Net::HTTP.get(uri))
raise data["error"]["message"] if data["error"]
puts data["consensus"]// 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/dns/propagation?name=cloudflare.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["consensus"]);
Ok(())
}using System.Text.Json;
using var http = new HttpClient();
var res = await http.GetAsync("https://dnsrobot.net/api/v2/dns/propagation?name=cloudflare.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("consensus"));cloudflare.com's A records everywhere
GET /api/v2/dns/propagation?name=cloudflare.com{
"query": {
"name": "cloudflare.com",
"type": "A"
},
"verdict": "propagated",
"consensus": {
"values": [
"104.16.132.229",
"104.16.133.229"
],
"resolvers": 32
},
"summary": {
"resolvers": 33,
"agree": 32,
"differ": 0,
"noRecord": 0,
"noAnswer": 1
},
"minTtl": 11,
"medianMs": 818,
"groups": [
{
"values": [
"104.16.132.229",
"104.16.133.229"
],
"resolvers": [
"google",
"cloudflare",
"opendns",
// … 29 more items
]
}
],
"resolvers": [
{
"id": "google",
"name": "Google",
"ip": "8.8.8.8",
"transport": "tcp",
"city": "Mountain View",
"country": "United States",
"countryCode": "US",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 300
},
{
"value": "104.16.133.229",
"ttl": 300
}
],
"cnames": [],
"tookMs": 53
},
{
"id": "cloudflare",
"name": "Cloudflare",
"ip": "1.1.1.1",
"transport": "doh",
"city": "San Francisco",
"country": "United States",
"countryCode": "US",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.132.229",
"ttl": 203
},
{
"value": "104.16.133.229",
"ttl": 203
}
],
"cnames": [],
"tookMs": 2
},
{
"id": "opendns",
"name": "OpenDNS",
"ip": "208.67.222.222",
"transport": "tcp",
"city": "Berkeley",
"country": "United States",
"countryCode": "US",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "104.16.133.229",
"ttl": 53
},
{
"value": "104.16.132.229",
"ttl": 53
}
],
"cnames": [],
"tookMs": 51
},
// … 30 more items
],
"tookMs": 1607
}Shortened for the page: long lists show their first items.
github.com, answered per region
GET /api/v2/dns/propagation?name=github.com{
"query": {
"name": "github.com",
"type": "A"
},
"verdict": "regional",
"consensus": null,
"summary": {
"resolvers": 33,
"agree": 32,
"differ": 0,
"noRecord": 0,
"noAnswer": 1
},
"minTtl": 2,
"medianMs": 758,
"groups": [
{
"values": [
"20.207.73.82"
],
"resolvers": [
"cloudflare",
"quad9",
"adguard",
// … 3 more items
]
},
{
"values": [
"140.82.121.4"
],
"resolvers": [
"odido",
"telekom",
"teknet",
// … 2 more items
]
},
{
"values": [
"140.82.114.3"
],
"resolvers": [
"google",
"cira",
"uninet",
// … 1 more item
]
},
// … 13 more items
],
"resolvers": [
{
"id": "google",
"name": "Google",
"ip": "8.8.8.8",
"transport": "tcp",
"city": "Mountain View",
"country": "United States",
"countryCode": "US",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "140.82.114.3",
"ttl": 60
}
],
"cnames": [],
"tookMs": 61
},
{
"id": "cloudflare",
"name": "Cloudflare",
"ip": "1.1.1.1",
"transport": "doh",
"city": "San Francisco",
"country": "United States",
"countryCode": "US",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "20.207.73.82",
"ttl": 42
}
],
"cnames": [],
"tookMs": 2
},
{
"id": "opendns",
"name": "OpenDNS",
"ip": "208.67.222.222",
"transport": "tcp",
"city": "Berkeley",
"country": "United States",
"countryCode": "US",
"state": "agrees",
"status": "ok",
"rcode": "NOERROR",
"records": [
{
"value": "140.82.113.4",
"ttl": 60
}
],
"cnames": [],
"tookMs": 115
},
// … 30 more items
],
"tookMs": 1863
}Shortened for the page: long lists show their first items.