GET/api/v2/reverse-dns

Reverse DNS API

An IP address's PTR names, whether they point back (FCrDNS), who runs its reverse zone, and the mail providers' PTR rules.

GEThttps://dnsrobot.netBase URL/api/v2Version/reverse-dnsEndpoint?ip=Parameters
200 OKRecorded 2026-10-25. Send it to run the request live.
{
  "query": {
    "ip": "8.8.8.8"
  },
  "ip": "8.8.8.8",
  "reverseName": "8.8.8.8.in-addr.arpa",
  "specialUse": null,
  "verdict": "confirmed",
  "role": "resolver",
  "ptr": [
    {
      "name": "dns.google",
      "ttl": 86400,
      "forwardConfirmed": true,
      "ipv4": [
        "8.8.8.8",
        "8.8.4.4"
      ],
      "ipv6": [
        "2001:4860:4860::8844",
        "2001:4860:4860::8888"
      ],
      "kind": "named"
    }
  ],
  "forwardConfirmed": true,
  "answer": {
    "source": "authoritative",
    "server": "ns2.google.com",
    "ip": "216.239.34.10",
    "viaCloudflare": false,
    "status": "ok",
    "rcode": "NOERROR",
    "authoritative": true,
    "negativeTtl": null,
    "cnameChain": []
  },
  "zone": {
    "name": "8.8.8.in-addr.arpa",
    "operator": {
      "kind": "holder",
      "id": "google",
      "name": "Google"
    }
  },
  "delegation": [
    {
      "zone": ".",
      "server": "b.root-servers.net",
      "ip": "170.247.170.2",
      "outcome": "referral",
      "operator": {
        "kind": "root",
        "id": "root",
        "name": "Root"
      },
      "nsTtl": 172800,
      "leg": 1
    },
    {
      "zone": "in-addr.arpa",
      "server": "f.in-addr-servers.arpa",
      "ip": "193.0.9.1",
      "outcome": "referral",
      "operator": {
        "kind": "iana",
        "id": "iana",
        "name": "IANA"
      },
      "nsTtl": 86400,
      "leg": 1
    },
    {
      "zone": "8.in-addr.arpa",
      "server": "arin.authdns.ripe.net",
      "ip": "193.0.9.10",
      "outcome": "referral",
      "operator": {
        "kind": "rir",
        "id": "arin",
        "name": "ARIN"
      },
      "nsTtl": 86400,
      "leg": 1
    },
    {
      "zone": "8.8.8.in-addr.arpa",
      "server": "ns2.google.com",
      "ip": "216.239.34.10",
      "outcome": "authoritative",
      "operator": {
        "kind": "holder",
        "id": "google",
        "name": "Google"
      },
      "nsTtl": null,
      "leg": 1
    }
  ],
  "network": {
    "asn": 15169,
    "name": "Google",
    "asName": "GOOGLE - Google LLC, US",
    "prefix": "8.8.8.0/24",
    "country": "US",
    "registry": "arin",
    "allocated": "2023-12-28"
  },
  "mail": {
    "name": "dns.google",
    "pass": 3,
    "providers": [
      {
        "id": "gmail",
        "ptr": "pass",
        "fcrdns": "pass",
        "notGeneric": "not_required",
        "pass": true,
        "unknown": false
      },
      {
        "id": "yahoo",
        "ptr": "pass",
        "fcrdns": "pass",
        "notGeneric": "pass",
        "pass": true,
        "unknown": false
      },
      {
        "id": "outlook",
        "ptr": "pass",
        "fcrdns": "not_required",
        "notGeneric": "pass",
        "pass": true,
        "unknown": false
      }
    ]
  },
  "crawler": null,
  "ptrProvider": null,
  "copies": [
    {
      "source": "google",
      "status": "ok",
      "names": [
        "dns.google"
      ],
      "ttl": 1040,
      "tookMs": 33
    },
    {
      "source": "cloudflare",
      "status": "ok",
      "names": [
        "dns.google"
      ],
      "ttl": 79471,
      "tookMs": 1
    }
  ],
  "issues": [],
  "tookMs": 2314
}

How it works

Walks the reverse zone down from a root server (IANA, then the Regional Internet Registry, then the block's holder), asks the zone's own nameservers for the PTR beside Google's and Cloudflare's copies, and follows RFC 2317 classless delegations. Every PTR name is looked up forward: a name that resolves back to the address is forward-confirmed (FCrDNS); a forward lookup that didn't finish is unknown, never "doesn't point back".

mail reads the answer against Gmail's, Yahoo Mail's and Outlook.com's published PTR rules, and generic names (the address's digits, ISP pool words, a cloud's default) are told apart from a name of your own. Crawler names (Googlebot, Bingbot, Applebot…) are verified the way their operators document: the PTR's domain plus the forward lookup, or the published IP lists.

Private and other special-use addresses have no public reverse DNS and are refused (422). The address itself is never connected to; the IP to Hostname page's certificate and HTTP probes aren't part of the API.

Answers kept: Kept for the PTR record's TTL, 30 seconds to 5 minutes (30 seconds when a part failed), shared with the Reverse DNS page. A kept answer carries an `Age` header, and the resolvers' TTLs are counted down.

Query parameters

  • ipstringrequired
    An IPv4 or IPv6 address in any usual notation, or its in-addr.arpa / ip6.arpa name. An IPv4-mapped or NAT64 address is looked up as the IPv4 address it carries.

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.

  • queryobjectalways
    What was looked up, normalised (lower case, no trailing dot, IDNs as Punycode).
    • ipstringalways
      The address as given, normalised (IPv6 compressed, RFC 5952).
  • ipstringalways
    The address looked up: the one given, or the IPv4 address inside an IPv4-mapped or NAT64 one.
  • reverseNamestring or nullalways
    Its reverse name: in-addr.arpa, or all 32 nibbles under ip6.arpa.
  • specialUseobject or nullalways
    The IANA special-purpose block it is in, when it is in one that still has public reverse DNS.
    • cidrstringalways
      The block.
    • namestringalways
      Its name in IANA's registry.
    • rfcstringalways
      The RFC that reserves it.
  • verdictstringalways
    confirmed (a PTR that points back), generic (it points back, but it is the provider's generic name), not_confirmed (no PTR name resolves back), unverified (a forward lookup didn't finish), crawler (a verified crawler), fake_crawler, google_cloud, no_ptr, broken (the reverse zone answers SERVFAIL or REFUSED), no_answer, unreadable or special_use.

    one of "confirmed", "generic", "not_confirmed", "unverified", "crawler", "fake_crawler", "google_cloud", "no_ptr", "broken", "no_answer", "unreadable", "special_use"

  • rolestringalways
    What the address is, from its names and network: a public resolver, a crawler (or crawler_fake, crawler_unverified), google_cloud, mail, cloud (a cloud's default name), cdn, an ISP pool, as112, infra, named, generic or none.

    one of "resolver", "crawler", "crawler_fake", "crawler_unverified", "google_cloud", "mail", "cloud", "cdn", "pool", "as112", "infra", "named", "generic", "none"

  • ptrarray of objectsalways
    The PTR records of the answer that counts.
    Show 6 fields
    • namestringalways
      The name, lower case.
    • ttlintegeralways
      The record's TTL, in seconds.
    • forwardConfirmedboolean or nullalways
      The name resolves back to the address; null when the forward lookup didn't finish or wasn't made (past the first 10 names).
    • ipv4array of stringsalways
      The name's A records.
    • ipv6array of stringsalways
      The name's AAAA records.
    • kindstringalways
      named (a name of its own), generic (a provider's default), crawler (a crawler's documented domain) or infra (network infrastructure).

      one of "named", "generic", "crawler", "infra"

  • forwardConfirmedboolean or nullalways
    At least one PTR name points back (FCrDNS passes); false when every name was checked and none does; null when it couldn't be settled or there is no PTR.
  • answerobject or nullalways
    The PTR answer that counts: the reverse zone's own, unless it couldn't be had; then a resolver's.
    Show 9 fields
    • sourcestringalways
      Who answered: authoritative (the zone's own nameserver, the fresh truth), google (Google Public DNS's cached copy) or cloudflare (Cloudflare 1.1.1.1's).

      one of "authoritative", "google", "cloudflare"

    • serverstring or nullalways
      The server that answered.
    • ipstring or nullalways
      Its address.
    • viaCloudflarebooleanalways
      The reverse zone is on Cloudflare's nameservers: this is 1.1.1.1's answer.
    • statusstringalways
      The answer: ok (records came back), nodata (the name exists without them), nxdomain (no such name), servfail, refused, timeout, error or unreadable (an answer our decoder refuses).

      one of "ok", "nodata", "nxdomain", "servfail", "refused", "timeout", "error", "unreadable"

    • rcodestring or nullalways
      The response code.
    • authoritativeboolean or nullalways
      The AA flag.
    • negativeTtlinteger or nullalways
      For no PTR: how long the miss is cached, in seconds.
    • cnameChainarray of objectsalways
      The CNAMEs the answer followed, in order.
      Show 3 fields
      • namestringalways
        The alias.
      • targetstringalways
        The name it points to.
      • ttlintegeralways
        The record's TTL, in seconds.
  • zoneobject or nullalways
    The reverse zone that answered and who runs it.
    • namestringalways
      The zone, e.g. 8.8.8.in-addr.arpa.
    • operatorobject or nullalways
      Who runs it: the root, IANA, a Regional Internet Registry, or the address block's holder.
      Show 3 fields
      • kindstringalways
        root, iana, rir or holder.

        one of "root", "iana", "rir", "holder"

      • idstringalways
        A stable id: iana, arin, ripe, apnic, lacnic, afrinic, or the holder's.
      • namestringalways
        Its name.
  • delegationarray of objectsalways
    The path down from the root to the reverse zone.
    Show 7 fields
    • zonestringalways
      The zone this server answers for (. for a root server).
    • serverstringalways
      The server asked.
    • ipstring or nullalways
      Its address.
    • outcomestringalways
      referral (sent us one level down), authoritative, nxdomain, blocked (on Cloudflare's network), ipv6 (IPv6-only servers), lame, timeout or error.

      one of "referral", "authoritative", "nxdomain", "blocked", "ipv6", "lame", "timeout", "error"

    • operatorobject or nullalways
      Who runs it: the root, IANA, a Regional Internet Registry, or the address block's holder.
      Show 3 fields
      • kindstringalways
        root, iana, rir or holder.

        one of "root", "iana", "rir", "holder"

      • idstringalways
        A stable id: iana, arin, ripe, apnic, lacnic, afrinic, or the holder's.
      • namestringalways
        Its name.
    • nsTtlinteger or nullalways
      The referral's NS TTL, in seconds.
    • legintegeralways
      1 for the reverse name's walk; 2 and on for each RFC 2317 CNAME followed.
  • networkobject or nullalways
    The network that announces the address (Team Cymru); null when unknown.
    Show 7 fields
    • asnintegeralways
      The AS number that announces the address.
    • namestringalways
      The network's name, cleaned ("Google", "Amazon.com").
    • prefixstringalways
      The announced prefix the address is in, e.g. 8.8.8.0/24.
    • countrystringalways
      The network's registration country (ISO 3166-1 alpha-2), as Team Cymru has it.
    • asNamestringalways
      The AS name as registered.
    • registrystringalways
      The RIR that allocated the block (arin, ripe, apnic, lacnic, afrinic).
    • allocatedstring or nullalways
      When the block was allocated (YYYY-MM-DD).
  • mailobjectalways
    The answer against the big mailbox providers' published PTR rules.
    • namestring or nullalways
      The name a receiver sees first (a forward-confirmed one when there is one).
    • passintegeralways
      Providers whose rules all pass (of 3).
    • providersarray of objectsalways
      Gmail, Yahoo Mail and Outlook.com.
      Show 6 fields
      • idstringalways
        The provider.

        one of "gmail", "yahoo", "outlook"

      • ptrstringalways
        A PTR exists: pass, fail, warn, not_required (not part of this provider's rules) or unknown (the lookup couldn't settle it).

        one of "pass", "fail", "warn", "not_required", "unknown"

      • fcrdnsstringalways
        It points back: pass, fail, warn, not_required (not part of this provider's rules) or unknown (the lookup couldn't settle it).

        one of "pass", "fail", "warn", "not_required", "unknown"

      • notGenericstringalways
        It isn't a generic or pool name: pass, fail, warn, not_required (not part of this provider's rules) or unknown (the lookup couldn't settle it).

        one of "pass", "fail", "warn", "not_required", "unknown"

      • passbooleanalways
        Every rule passes.
      • unknownbooleanalways
        No rule fails, but one couldn't be checked.
  • crawlerobject or nullalways
    The crawler check, when a PTR name claims a crawler's domain or the address is in a crawler's published list; null otherwise.
    Show 6 fields
    • idstringalways
      The crawler's id, e.g. googlebot, bingbot.
    • namestringalways
      Its name.
    • statusstringalways
      verified, fake (claims the domain, fails both checks), unverified (a check couldn't finish) or cloud (a googleusercontent.com name: any Google Cloud VM).

      one of "verified", "fake", "unverified", "cloud"

    • methodstringalways
      How it was decided: ptr (domain + forward lookup), list (published IP list) or both.

      one of "ptr", "list", "both"

    • domainstring or nullalways
      The documented domain the name ends in.
    • liststring or nullalways
      The published list the address is in.
  • ptrProviderobject or nullalways
    The cloud or ISP to set the PTR at, with its guide, when the address has none, a generic one, or one that doesn't point back.
    • idstringalways
      A stable id, e.g. aws.
    • namestringalways
      Its name.
    • docsstringalways
      Its guide to setting reverse DNS.
  • copiesarray of objectsalways
    Google's and Cloudflare's cached copies (TTLs are the time left).
    Show 5 fields
    • sourcestringalways
      google or cloudflare.

      one of "google", "cloudflare"

    • statusstringalways
      The answer: ok (records came back), nodata (the name exists without them), nxdomain (no such name), servfail, refused, timeout, error or unreadable (an answer our decoder refuses).

      one of "ok", "nodata", "nxdomain", "servfail", "refused", "timeout", "error", "unreadable"

    • namesarray of stringsalways
      Its PTR names.
    • ttlinteger or nullalways
      The TTL left, in seconds (the miss's, for no PTR).
    • tookMsintegeralways
      How long that answer took, in milliseconds.
  • issuesarray of objectsalways
    Problems found in the target's configuration, worst first. Empty when there are none.
    • severitystringalways
      error breaks something, warning risks it, info is worth knowing.

      one of "error", "warning", "info"

    • codestringalways
      Stable machine-readable code.
    • messagestringalways
      The problem and what to do about it, in plain English.

Errors

  • 422 target_not_allowed A private or other special-use address (RFC 1918, loopback, link-local, documentation ranges…), which has no public reverse DNS.

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/reverse-dns?ip=8.8.8.8"
const params = new URLSearchParams({ ip: "8.8.8.8" });
const res = await fetch(`https://dnsrobot.net/api/v2/reverse-dns?${params}`);
const data = await res.json();
if (!res.ok) throw new Error(data.error.message);
console.log(data.ptr);
import requests

r = requests.get(
    "https://dnsrobot.net/api/v2/reverse-dns",
    params={"ip": "8.8.8.8"},
    timeout=30,
)
data = r.json()
if not r.ok:
    raise RuntimeError(data["error"]["message"])
print(data["ptr"])
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"net/url"
)

func main() {
	q := url.Values{"ip": {"8.8.8.8"}}
	res, err := http.Get("https://dnsrobot.net/api/v2/reverse-dns?" + 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["ptr"])
}
<?php
$query = http_build_query(["ip" => "8.8.8.8"]);
$context = stream_context_create(["http" => ["ignore_errors" => true, "timeout" => 30]]);
$data = json_decode(file_get_contents("https://dnsrobot.net/api/v2/reverse-dns?" . $query, false, $context), true);
if (isset($data["error"])) {
    throw new RuntimeException($data["error"]["message"]);
}
print_r($data["ptr"]);
require "net/http"
require "json"

uri = URI("https://dnsrobot.net/api/v2/reverse-dns")
uri.query = URI.encode_www_form(ip: "8.8.8.8")
data = JSON.parse(Net::HTTP.get(uri))
raise data["error"]["message"] if data["error"]
puts data["ptr"]
// 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/reverse-dns?ip=8.8.8.8")?;
    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["ptr"]);
    Ok(())
}
using System.Text.Json;

using var http = new HttpClient();
var res = await http.GetAsync("https://dnsrobot.net/api/v2/reverse-dns?ip=8.8.8.8");
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("ptr"));

8.8.8.8: dns.google

GET /api/v2/reverse-dns?ip=8.8.8.8
200 OKRecorded 2026-10-25
{
  "query": {
    "ip": "8.8.8.8"
  },
  "ip": "8.8.8.8",
  "reverseName": "8.8.8.8.in-addr.arpa",
  "specialUse": null,
  "verdict": "confirmed",
  "role": "resolver",
  "ptr": [
    {
      "name": "dns.google",
      "ttl": 86400,
      "forwardConfirmed": true,
      "ipv4": [
        "8.8.8.8",
        "8.8.4.4"
      ],
      "ipv6": [
        "2001:4860:4860::8844",
        "2001:4860:4860::8888"
      ],
      "kind": "named"
    }
  ],
  "forwardConfirmed": true,
  "answer": {
    "source": "authoritative",
    "server": "ns2.google.com",
    "ip": "216.239.34.10",
    "viaCloudflare": false,
    "status": "ok",
    "rcode": "NOERROR",
    "authoritative": true,
    "negativeTtl": null,
    "cnameChain": []
  },
  "zone": {
    "name": "8.8.8.in-addr.arpa",
    "operator": {
      "kind": "holder",
      "id": "google",
      "name": "Google"
    }
  },
  "delegation": [
    {
      "zone": ".",
      "server": "b.root-servers.net",
      "ip": "170.247.170.2",
      "outcome": "referral",
      "operator": {
        "kind": "root",
        "id": "root",
        "name": "Root"
      },
      "nsTtl": 172800,
      "leg": 1
    },
    {
      "zone": "in-addr.arpa",
      "server": "f.in-addr-servers.arpa",
      "ip": "193.0.9.1",
      "outcome": "referral",
      "operator": {
        "kind": "iana",
        "id": "iana",
        "name": "IANA"
      },
      "nsTtl": 86400,
      "leg": 1
    },
    {
      "zone": "8.in-addr.arpa",
      "server": "arin.authdns.ripe.net",
      "ip": "193.0.9.10",
      "outcome": "referral",
      "operator": {
        "kind": "rir",
        "id": "arin",
        "name": "ARIN"
      },
      "nsTtl": 86400,
      "leg": 1
    },
    // … 1 more item
  ],
  "network": {
    "asn": 15169,
    "name": "Google",
    "asName": "GOOGLE - Google LLC, US",
    "prefix": "8.8.8.0/24",
    "country": "US",
    "registry": "arin",
    "allocated": "2023-12-28"
  },
  "mail": {
    "name": "dns.google",
    "pass": 3,
    "providers": [
      {
        "id": "gmail",
        "ptr": "pass",
        "fcrdns": "pass",
        "notGeneric": "not_required",
        "pass": true,
        "unknown": false
      },
      {
        "id": "yahoo",
        "ptr": "pass",
        "fcrdns": "pass",
        "notGeneric": "pass",
        "pass": true,
        "unknown": false
      },
      {
        "id": "outlook",
        "ptr": "pass",
        "fcrdns": "not_required",
        "notGeneric": "pass",
        "pass": true,
        "unknown": false
      }
    ]
  },
  "crawler": null,
  "ptrProvider": null,
  "copies": [
    {
      "source": "google",
      "status": "ok",
      "names": [
        "dns.google"
      ],
      "ttl": 1040,
      "tookMs": 33
    },
    {
      "source": "cloudflare",
      "status": "ok",
      "names": [
        "dns.google"
      ],
      "ttl": 79471,
      "tookMs": 1
    }
  ],
  "issues": [],
  "tookMs": 2314
}

Shortened for the page: long lists show their first items.

A Googlebot address, verified

GET /api/v2/reverse-dns?ip=66.249.66.1
200 OKRecorded 2026-10-25
{
  "query": {
    "ip": "66.249.66.1"
  },
  "ip": "66.249.66.1",
  "reverseName": "1.66.249.66.in-addr.arpa",
  "specialUse": null,
  "verdict": "crawler",
  "role": "crawler",
  "ptr": [
    {
      "name": "crawl-66-249-66-1.googlebot.com",
      "ttl": 86400,
      "forwardConfirmed": true,
      "ipv4": [
        "66.249.66.1"
      ],
      "ipv6": [],
      "kind": "crawler"
    }
  ],
  "forwardConfirmed": true,
  "answer": {
    "source": "authoritative",
    "server": "ns2.google.com",
    "ip": "216.239.34.10",
    "viaCloudflare": false,
    "status": "ok",
    "rcode": "NOERROR",
    "authoritative": true,
    "negativeTtl": null,
    "cnameChain": []
  },
  "zone": {
    "name": "66.249.66.in-addr.arpa",
    "operator": {
      "kind": "holder",
      "id": "google",
      "name": "Google"
    }
  },
  "delegation": [
    {
      "zone": ".",
      "server": "c.root-servers.net",
      "ip": "192.33.4.12",
      "outcome": "referral",
      "operator": {
        "kind": "root",
        "id": "root",
        "name": "Root"
      },
      "nsTtl": 172800,
      "leg": 1
    },
    {
      "zone": "in-addr.arpa",
      "server": "c.in-addr-servers.arpa",
      "ip": "196.216.169.10",
      "outcome": "referral",
      "operator": {
        "kind": "iana",
        "id": "iana",
        "name": "IANA"
      },
      "nsTtl": 86400,
      "leg": 1
    },
    {
      "zone": "66.in-addr.arpa",
      "server": "arin.authdns.ripe.net",
      "ip": "193.0.9.10",
      "outcome": "referral",
      "operator": {
        "kind": "rir",
        "id": "arin",
        "name": "ARIN"
      },
      "nsTtl": 86400,
      "leg": 1
    },
    // … 1 more item
  ],
  "network": {
    "asn": 15169,
    "name": "Google",
    "asName": "GOOGLE - Google LLC, US",
    "prefix": "66.249.64.0/20",
    "country": "US",
    "registry": "arin",
    "allocated": "2004-03-05"
  },
  "mail": {
    "name": "crawl-66-249-66-1.googlebot.com",
    "pass": 3,
    "providers": [
      {
        "id": "gmail",
        "ptr": "pass",
        "fcrdns": "pass",
        "notGeneric": "not_required",
        "pass": true,
        "unknown": false
      },
      {
        "id": "yahoo",
        "ptr": "pass",
        "fcrdns": "pass",
        "notGeneric": "pass",
        "pass": true,
        "unknown": false
      },
      {
        "id": "outlook",
        "ptr": "pass",
        "fcrdns": "not_required",
        "notGeneric": "pass",
        "pass": true,
        "unknown": false
      }
    ]
  },
  "crawler": {
    "id": "googlebot",
    "name": "Googlebot",
    "status": "verified",
    "method": "both",
    "domain": "googlebot.com",
    "list": "common-crawlers"
  },
  "ptrProvider": null,
  "copies": [
    {
      "source": "google",
      "status": "ok",
      "names": [
        "crawl-66-249-66-1.googlebot.com"
      ],
      "ttl": 4993,
      "tookMs": 43
    },
    {
      "source": "cloudflare",
      "status": "ok",
      "names": [
        "crawl-66-249-66-1.googlebot.com"
      ],
      "ttl": 84702,
      "tookMs": 1
    }
  ],
  "issues": [],
  "tookMs": 1580
}

Shortened for the page: long lists show their first items.

Cloudflare's resolver over IPv6

GET /api/v2/reverse-dns?ip=2606%3A4700%3A4700%3A%3A1111
200 OKRecorded 2026-10-25
{
  "query": {
    "ip": "2606:4700:4700::1111"
  },
  "ip": "2606:4700:4700::1111",
  "reverseName": "1.1.1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.7.4.0.0.7.4.6.0.6.2.ip6.arpa",
  "specialUse": null,
  "verdict": "confirmed",
  "role": "resolver",
  "ptr": [
    {
      "name": "one.one.one.one",
      "ttl": 1800,
      "forwardConfirmed": true,
      "ipv4": [
        "1.0.0.1",
        "1.1.1.1"
      ],
      "ipv6": [
        "2606:4700:4700::1111",
        "2606:4700:4700::1001"
      ],
      "kind": "named"
    }
  ],
  "forwardConfirmed": true,
  "answer": {
    "source": "authoritative",
    "server": "one.one.one.one",
    "ip": "1.1.1.1",
    "viaCloudflare": true,
    "status": "ok",
    "rcode": "NOERROR",
    "authoritative": false,
    "negativeTtl": null,
    "cnameChain": []
  },
  "zone": {
    "name": "0.0.7.4.6.0.6.2.ip6.arpa",
    "operator": {
      "kind": "holder",
      "id": "cloudflare",
      "name": "Cloudflare"
    }
  },
  "delegation": [
    {
      "zone": ".",
      "server": "d.root-servers.net",
      "ip": "199.7.91.13",
      "outcome": "referral",
      "operator": {
        "kind": "root",
        "id": "root",
        "name": "Root"
      },
      "nsTtl": 172800,
      "leg": 1
    },
    {
      "zone": "ip6.arpa",
      "server": "f.ip6-servers.arpa",
      "ip": "193.0.9.2",
      "outcome": "referral",
      "operator": {
        "kind": "iana",
        "id": "iana",
        "name": "IANA"
      },
      "nsTtl": 86400,
      "leg": 1
    },
    {
      "zone": "0.6.2.ip6.arpa",
      "server": "u.arin.net",
      "ip": "204.61.216.50",
      "outcome": "referral",
      "operator": {
        "kind": "rir",
        "id": "arin",
        "name": "ARIN"
      },
      "nsTtl": 1800,
      "leg": 1
    },
    // … 1 more item
  ],
  "network": {
    "asn": 13335,
    "name": "Cloudflare",
    "asName": "CLOUDFLARENET - Cloudflare, Inc., US",
    "prefix": "2606:4700:4700::/48",
    "country": "US",
    "registry": "arin",
    "allocated": "2011-11-01"
  },
  "mail": {
    "name": "one.one.one.one",
    "pass": 3,
    "providers": [
      {
        "id": "gmail",
        "ptr": "pass",
        "fcrdns": "pass",
        "notGeneric": "not_required",
        "pass": true,
        "unknown": false
      },
      {
        "id": "yahoo",
        "ptr": "pass",
        "fcrdns": "pass",
        "notGeneric": "pass",
        "pass": true,
        "unknown": false
      },
      {
        "id": "outlook",
        "ptr": "pass",
        "fcrdns": "not_required",
        "notGeneric": "pass",
        "pass": true,
        "unknown": false
      }
    ]
  },
  "crawler": null,
  "ptrProvider": null,
  "copies": [
    {
      "source": "google",
      "status": "ok",
      "names": [
        "one.one.one.one"
      ],
      "ttl": 727,
      "tookMs": 38
    },
    {
      "source": "cloudflare",
      "status": "ok",
      "names": [
        "one.one.one.one"
      ],
      "ttl": 1800,
      "tookMs": 258
    }
  ],
  "issues": [],
  "tookMs": 471
}

Shortened for the page: long lists show their first items.