GET/api/v2/ns

NS lookup API

A domain's nameservers from the registry and from the zone, each one asked directly: lame, glue, serials, DNSSEC.

GEThttps://dnsrobot.netBase URL/api/v2Version/nsEndpoint?domain=Parameters
200 OKRecorded 2026-10-25. Send it to run the request live.
{
  "query": {
    "domain": "github.com"
  },
  "zone": "github.com",
  "apex": null,
  "verdict": "ok",
  "delegation": {
    "parentZone": "com",
    "registry": true,
    "server": "c.gtld-servers.net",
    "ip": "192.26.92.30",
    "nameservers": [
      "ns-520.awsdns-01.net",
      "ns-421.awsdns-52.com",
      "ns-1707.awsdns-21.co.uk",
      "ns-1283.awsdns-32.org",
      "dns1.p08.nsone.net",
      "dns2.p08.nsone.net",
      "dns3.p08.nsone.net",
      "dns4.p08.nsone.net"
    ],
    "ttl": 172800,
    "glue": [
      {
        "host": "ns-421.awsdns-52.com",
        "addresses": [
          "205.251.193.165",
          "2600:9000:5301:a500::1"
        ]
      }
    ],
    "ds": [],
    "dsTtl": null,
    "partial": false,
    "tookMs": 134
  },
  "zoneNameservers": {
    "nameservers": [
      "ns-520.awsdns-01.net",
      "ns-421.awsdns-52.com",
      "ns-1707.awsdns-21.co.uk",
      "ns-1283.awsdns-32.org",
      "dns1.p08.nsone.net",
      "dns2.p08.nsone.net",
      "dns3.p08.nsone.net",
      "dns4.p08.nsone.net"
    ],
    "ttls": [
      900,
      3600
    ],
    "viaCloudflare": false,
    "otherSets": []
  },
  "nameservers": [
    {
      "host": "ns-520.awsdns-01.net",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "unrelated",
      "glue": [],
      "staleGlue": [],
      "ipv4": [
        "205.251.194.8"
      ],
      "ipv6": [
        "2600:9000:5302:800::1"
      ],
      "cname": null,
      "provider": {
        "id": "amazon-route-53",
        "name": "Amazon Route 53"
      },
      "status": "authoritative",
      "lame": false,
      "tookMs": 37,
      "serial": 1,
      "nsTtl": 900,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2600:9000:5302:800::1",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "2600:9000:5302::/48",
            "country": "US"
          }
        },
        {
          "ip": "205.251.194.8",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 37,
          "retried": false,
          "serial": 1,
          "edns": true,
          "nsid": "f44751081fb84bdcbc85d81b117971ff  -",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "205.251.194.0/24",
            "country": "US"
          }
        }
      ]
    },
    {
      "host": "ns-421.awsdns-52.com",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "sibling",
      "glue": [
        "205.251.193.165",
        "2600:9000:5301:a500::1"
      ],
      "staleGlue": [],
      "ipv4": [
        "205.251.193.165"
      ],
      "ipv6": [
        "2600:9000:5301:a500::1"
      ],
      "cname": null,
      "provider": {
        "id": "amazon-route-53",
        "name": "Amazon Route 53"
      },
      "status": "authoritative",
      "lame": false,
      "tookMs": 25,
      "serial": 1,
      "nsTtl": 900,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2600:9000:5301:a500::1",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "2600:9000:5301::/48",
            "country": "US"
          }
        },
        {
          "ip": "205.251.193.165",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 25,
          "retried": false,
          "serial": 1,
          "edns": true,
          "nsid": "34c8e66292a5d8d420d9005aceb47197  -",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "205.251.193.0/24",
            "country": "US"
          }
        }
      ]
    },
    {
      "host": "ns-1707.awsdns-21.co.uk",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "unrelated",
      "glue": [],
      "staleGlue": [],
      "ipv4": [
        "205.251.198.171"
      ],
      "ipv6": [
        "2600:9000:5306:ab00::1"
      ],
      "cname": null,
      "provider": {
        "id": "amazon-route-53",
        "name": "Amazon Route 53"
      },
      "status": "authoritative",
      "lame": false,
      "tookMs": 22,
      "serial": 1,
      "nsTtl": 900,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2600:9000:5306:ab00::1",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "2600:9000:5306::/48",
            "country": "US"
          }
        },
        {
          "ip": "205.251.198.171",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 22,
          "retried": false,
          "serial": 1,
          "edns": true,
          "nsid": "2ebd1945da57ee2ecad0238275f9e8c1  -",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "205.251.192.0/18",
            "country": "US"
          }
        }
      ]
    },
    {
      "host": "ns-1283.awsdns-32.org",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "unrelated",
      "glue": [],
      "staleGlue": [],
      "ipv4": [
        "205.251.197.3"
      ],
      "ipv6": [
        "2600:9000:5305:300::1"
      ],
      "cname": null,
      "provider": {
        "id": "amazon-route-53",
        "name": "Amazon Route 53"
      },
      "status": "authoritative",
      "lame": false,
      "tookMs": 41,
      "serial": 1,
      "nsTtl": 900,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2600:9000:5305:300::1",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "2600:9000:5305::/48",
            "country": "US"
          }
        },
        {
          "ip": "205.251.197.3",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 41,
          "retried": false,
          "serial": 1,
          "edns": true,
          "nsid": "fd8c45285dda4b706153bf6653144345  -",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "205.251.192.0/18",
            "country": "US"
          }
        }
      ]
    },
    {
      "host": "dns1.p08.nsone.net",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "unrelated",
      "glue": [],
      "staleGlue": [],
      "ipv4": [
        "198.51.44.8"
      ],
      "ipv6": [
        "2620:4d:4000:6259:7:8:0:1"
      ],
      "cname": null,
      "provider": {
        "id": "ns1-connect",
        "name": "NS1"
      },
      "status": "authoritative",
      "lame": false,
      "tookMs": 39,
      "serial": 1656468023,
      "nsTtl": 3600,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2620:4d:4000:6259:7:8:0:1",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 62597,
            "name": "Nsone",
            "prefix": "2620:4d:4000::/48",
            "country": "US"
          }
        },
        {
          "ip": "198.51.44.8",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 39,
          "retried": false,
          "serial": 1656468023,
          "edns": true,
          "nsid": "ns1dns-bom04-3da15be1-87e3-439a-9232-e1e533ec72fc-5344-0",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 62597,
            "name": "Nsone",
            "prefix": "198.51.44.0/24",
            "country": "US"
          }
        }
      ]
    },
    {
      "host": "dns2.p08.nsone.net",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "unrelated",
      "glue": [],
      "staleGlue": [],
      "ipv4": [
        "198.51.45.8"
      ],
      "ipv6": [
        "2a00:edc0:6259:7:8::2"
      ],
      "cname": null,
      "provider": {
        "id": "ns1-connect",
        "name": "NS1"
      },
      "status": "authoritative",
      "lame": false,
      "tookMs": 296,
      "serial": 1656468023,
      "nsTtl": 3600,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2a00:edc0:6259:7:8::2",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 62597,
            "name": "Nsone",
            "prefix": "2a00:edc0:6259::/48",
            "country": "DE"
          }
        },
        {
          "ip": "198.51.45.8",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 296,
          "retried": false,
          "serial": 1656468023,
          "edns": true,
          "nsid": "ns1dns-lhr04-f79bae0e-1089-407a-a4c7-c9e3f42803e1-5347-0",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 62597,
            "name": "Nsone",
            "prefix": "198.51.45.0/24",
            "country": "US"
          }
        }
      ]
    },
    {
      "host": "dns3.p08.nsone.net",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "unrelated",
      "glue": [],
      "staleGlue": [],
      "ipv4": [
        "198.51.44.72"
      ],
      "ipv6": [
        "2620:4d:4000:6259:7:8:0:3"
      ],
      "cname": null,
      "provider": {
        "id": "ns1-connect",
        "name": "NS1"
      },
      "status": "authoritative",
      "lame": false,
      "tookMs": 41,
      "serial": 1656468023,
      "nsTtl": 3600,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2620:4d:4000:6259:7:8:0:3",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 62597,
            "name": "Nsone",
            "prefix": "2620:4d:4000::/48",
            "country": "US"
          }
        },
        {
          "ip": "198.51.44.72",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 41,
          "retried": false,
          "serial": 1656468023,
          "edns": true,
          "nsid": "ns1dns-bom04-b57d2d73-dd00-4fb2-8520-709fc8b12c7b-5326-0",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 62597,
            "name": "Nsone",
            "prefix": "198.51.44.0/24",
            "country": "US"
          }
        }
      ]
    },
    {
      "host": "dns4.p08.nsone.net",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "unrelated",
      "glue": [],
      "staleGlue": [],
      "ipv4": [
        "198.51.45.72"
      ],
      "ipv6": [
        "2a00:edc0:6259:7:8::4"
      ],
      "cname": null,
      "provider": {
        "id": "ns1-connect",
        "name": "NS1"
      },
      "status": "authoritative",
      "lame": false,
      "tookMs": 310,
      "serial": 1656468023,
      "nsTtl": 3600,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2a00:edc0:6259:7:8::4",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 62597,
            "name": "Nsone",
            "prefix": "2a00:edc0:6259::/48",
            "country": "DE"
          }
        },
        {
          "ip": "198.51.45.72",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 310,
          "retried": false,
          "serial": 1656468023,
          "edns": true,
          "nsid": "ns1dns-lhr04-4222cdf5-2f67-4f7f-a79b-29c7d9ff3b6c-5325-0",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 62597,
            "name": "Nsone",
            "prefix": "198.51.45.0/24",
            "country": "US"
          }
        }
      ]
    }
  ],
  "soa": {
    "mname": "ns-1707.awsdns-21.co.uk",
    "rname": "awsdns-hostmaster.amazon.com",
    "serial": 1,
    "refresh": 7200,
    "retry": 900,
    "expire": 1209600,
    "minimum": 86400
  },
  "dnsProviders": [
    {
      "id": "amazon-route-53",
      "name": "Amazon Route 53",
      "nameservers": 4,
      "own": false
    },
    {
      "id": "ns1-connect",
      "name": "NS1",
      "nameservers": 4,
      "own": false
    }
  ],
  "networks": [
    {
      "asn": 16509,
      "name": "Amazon.com",
      "prefix": "205.251.194.0/24",
      "country": "US",
      "nameservers": 4
    },
    {
      "asn": 62597,
      "name": "Nsone",
      "prefix": "198.51.44.0/24",
      "country": "US",
      "nameservers": 4
    }
  ],
  "dnssec": {
    "state": "unsigned",
    "ds": [],
    "keys": [],
    "validated": false
  },
  "copies": [
    {
      "source": "google",
      "status": "ok",
      "nameservers": [
        "dns4.p08.nsone.net",
        "dns1.p08.nsone.net",
        "ns-1707.awsdns-21.co.uk",
        "ns-1283.awsdns-32.org",
        "ns-520.awsdns-01.net",
        "dns3.p08.nsone.net",
        "ns-421.awsdns-52.com",
        "dns2.p08.nsone.net"
      ],
      "ttl": 1058,
      "tookMs": 34
    },
    {
      "source": "cloudflare",
      "status": "ok",
      "nameservers": [
        "dns1.p08.nsone.net",
        "dns2.p08.nsone.net",
        "dns3.p08.nsone.net",
        "dns4.p08.nsone.net",
        "ns-1283.awsdns-32.org",
        "ns-1707.awsdns-21.co.uk",
        "ns-421.awsdns-52.com",
        "ns-520.awsdns-01.net"
      ],
      "ttl": 900,
      "tookMs": 2
    }
  ],
  "registration": {
    "registrar": "MarkMonitor Inc.",
    "ianaId": "292",
    "url": "http://www.markmonitor.com",
    "statuses": [
      "clientDeleteProhibited",
      "clientTransferProhibited",
      "clientUpdateProhibited"
    ],
    "source": "rdap"
  },
  "issues": [
    {
      "severity": "info",
      "code": "soa_serial_per_provider",
      "message": "2 providers keep their own SOA serials (1, 1656468023): normal for a zone kept at two providers; compare the records, not the serials."
    },
    {
      "severity": "info",
      "code": "dnssec_unsigned",
      "message": "The zone isn't signed with DNSSEC."
    }
  ],
  "tookMs": 2111
}

How it works

Walks down from a root server to the registry and reads the delegation (the NS set, its TTL, the glue and the DS), then asks every listed nameserver's IPv4 addresses directly over TCP for the zone's SOA and NS with recursion off: whether it answers with authority, its serial, its time, whether it offers recursion or zone transfers to anyone, and whether it speaks EDNS. Google's and Cloudflare's cached copies and the registrar (RDAP, else WHOIS) come beside it.

Every reading the NS Lookup page makes that isn't fine comes back in issues: a lame delegation (no listed server serves the zone), lame servers, registry and zone listing different servers, missing or stale glue, one nameserver or one network, differing serials, an NS name that is an alias, open recursion, open zone transfers, missing EDNS, and a DS that matches no key.

Honest about what a server can't test: servers on Cloudflare's network are read through 1.1.1.1 (our servers can't connect to them), IPv6-only ones aren't tested, and a server silent over TCP while Google or Cloudflare still resolves the zone is nameserver_no_tcp, never lame. A subdomain is answered with the zone that holds it (apex says so).

Answers kept: Kept for the shortest NS TTL seen, 30 seconds to 5 minutes (30 seconds when a part failed), shared with the NS Lookup page. A kept answer carries an `Age` header.

Query parameters

  • domainstringrequired
    A domain (a URL or an e-mail address works too; IDNs in Unicode are sent as Punycode).

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).
    • domainstringalways
      The name looked up, lower case, IDNs as Punycode.
  • zonestring or nullalways
    The zone the lookup is about (the name itself, or the zone that holds it); null when the registry couldn't be reached.
  • apexobject or nullalways
    When the name isn't a zone of its own: what it is.
    • namestringalways
      The name looked up.
    • kindstringalways
      inside_zone (a name inside zone), alias (a CNAME, not followed) or missing (doesn't exist in zone).

      one of "inside_zone", "alias", "missing"

    • aliasTargetstring or nullalways
      The alias's target, for alias.
  • verdictstringalways
    ok, lame (no listed server serves the zone), partly_lame, dnssec_broken, no_tcp, mismatch (registry and zone differ), glue, one_network, issues (other warnings, see issues), partly_checked, not_delegated, no_answer (the registry didn't answer), silent (no server answered us, and no resolver copy to compare) or unknown.

    one of "ok", "lame", "partly_lame", "dnssec_broken", "no_tcp", "mismatch", "glue", "one_network", "issues", "partly_checked", "not_delegated", "no_answer", "silent", "unknown"

  • delegationobject or nullalways
    The registry's (or parent zone's) referral, asked again with recursion off.
    Show 11 fields
    • parentZonestringalways
      The zone that delegates it: com, or a parent zone for a delegated subdomain.
    • registrybooleanalways
      The parent is a registry (a TLD or a public suffix).
    • serverstringalways
      The parent's server asked.
    • ipstring or nullalways
      Its address.
    • nameserversarray of stringsalways
      The NS set the registry hands out.
    • ttlinteger or nullalways
      The NS TTL at the cut, in seconds; null when the referral couldn't be asked again.
    • gluearray of objectsalways
      Glue addresses the registry hands out.
      Show 2 fields
      • hoststringalways
        The nameserver.
      • addressesarray of stringsalways
        Its glue A and AAAA addresses.
    • dsarray of objectsalways
      DS records at the parent.
      Show 4 fields
      • keyTagintegeralways
        The key tag of the DNSKEY it points at.
      • algorithmintegeralways
        The DNSSEC algorithm number (13 = ECDSA P-256).
      • digestTypeintegeralways
        The digest type (2 = SHA-256).
      • digeststringalways
        The digest, hexadecimal, upper case.
    • dsTtlinteger or nullalways
      The DS TTL, in seconds.
    • partialbooleanalways
      The referral couldn't be asked again: names and IPv4 glue from the walk only.
    • tookMsinteger or nullalways
      How long that answer took, in milliseconds; null when it wasn't timed.
  • zoneNameserversobject or nullalways
    The zone's own NS set, as most servers answered it with authority.
    Show 4 fields
    • nameserversarray of stringsalways
      The NS set.
    • ttlsarray of integersalways
      The distinct NS TTLs the servers hand out, in seconds.
    • viaCloudflarebooleanalways
      Read through 1.1.1.1 (every server is on Cloudflare's network).
    • otherSetsarray of arraysalways
      Other NS sets some servers answered with (an old copy of the zone at a previous host).
  • nameserversarray of objectsalways
    Every nameserver, the registry's in its order, then those only the zone lists.
    Show 17 fields
    • hoststringalways
      Its host name.
    • inRegistrybooleanalways
      Listed at the registry.
    • inZonebooleanalways
      Listed in the zone's own NS records.
    • glueRelationstringalways
      Where its name sits (RFC 9471): in_domain (inside the zone: glue required), sibling (under the parent: glue optional) or unrelated.

      one of "in_domain", "sibling", "unrelated"

    • gluearray of stringsalways
      Glue the registry hands out for it.
    • staleGluearray of stringsalways
      Glue addresses that aren't among its own A/AAAA answers.
    • ipv4array of stringsalways
      Its A records.
    • ipv6array of stringsalways
      Its AAAA records.
    • cnamestring or nullalways
      Its name is an alias (CNAME) for this name: not allowed for an NS (RFC 2181 §10.3).
    • providerobject or nullalways
      The DNS host its name belongs to, from documented NS patterns; null when unknown.
      Show 2 fields
      • idstringalways
        A stable id, e.g. amazon-route-53.
      • namestringalways
        The host's name.
    • statusstringalways
      Its answer over all its addresses: authoritative (answered the zone's SOA with authority), not_authoritative, refused, servfail, notauth, error_code (another code), timeout (after one retry), error, via_cloudflare (on Cloudflare's network: read through 1.1.1.1), ipv6_not_tested, private_address, no_address, unresolved (its name didn't resolve and there is no glue) or skipped (the lookup's deadline came first).

      one of "authoritative", "not_authoritative", "refused", "servfail", "notauth", "error_code", "timeout", "error", "via_cloudflare", "ipv6_not_tested", "private_address", "no_address", "unresolved", "skipped"

    • lamebooleanalways
      It doesn't serve the zone: a lame answer, or silence that Google and Cloudflare confirm with SERVFAIL.
    • tookMsinteger or nullalways
      Its fastest authoritative answer, TCP setup included, in milliseconds.
    • serialinteger or nullalways
      The zone's SOA serial it serves.
    • nsTtlinteger or nullalways
      The NS TTL it hands out, in seconds.
    • differentNsSetbooleanalways
      It answers with a different NS set from the zone's.
    • addressesarray of objectsalways
      Each address asked (IPv6 ones listed, not tested).
      Show 12 fields
      • ipstringalways
        The address.
      • statusstringalways
        Its answer: authoritative (answered the zone's SOA with authority), not_authoritative, refused, servfail, notauth, error_code (another code), timeout (after one retry), error, via_cloudflare (on Cloudflare's network: read through 1.1.1.1), ipv6_not_tested, private_address, no_address, unresolved (its name didn't resolve and there is no glue) or skipped (the lookup's deadline came first).

        one of "authoritative", "not_authoritative", "refused", "servfail", "notauth", "error_code", "timeout", "error", "via_cloudflare", "ipv6_not_tested", "private_address", "no_address", "unresolved", "skipped"

      • rcodestring or nullalways
        The response code it sent.
      • tookMsinteger or nullalways
        How long that answer took, in milliseconds; null when it wasn't timed.
      • retriedbooleanalways
        The first try got no answer; the second did or didn't.
      • serialinteger or nullalways
        The SOA serial.
      • ednsboolean or nullalways
        It answered with an EDNS OPT record.
      • nsidstring or nullalways
        Its NSID (RFC 5001), when it sent one.
      • recursionstring or nullalways
        open (it resolves names for anyone), closed or unknown.

        one of "open", "closed", "unknown", null

      • zoneTransferstring or nullalways
        AXFR for anyone: allowed, refused or unknown.

        one of "allowed", "refused", "unknown", null

      • specialBlockstring or nullalways
        For a private or special address: the IANA block it is in.
      • networkobject or nullalways
        The network behind the address (Team Cymru); null when unknown.
        Show 4 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.
  • soaobject or nullalways
    The zone's SOA, from the first server that answered with authority.
    Show 7 fields
    • mnamestring or nullalways
      The primary (MNAME).
    • rnamestring or nullalways
      The contact mailbox (RNAME).
    • serialintegeralways
      The serial.
    • refreshinteger or nullalways
      Refresh, in seconds.
    • retryinteger or nullalways
      Retry, in seconds.
    • expireinteger or nullalways
      Expire, in seconds.
    • minimuminteger or nullalways
      The negative-caching TTL, in seconds.
  • dnsProvidersarray of objectsalways
    The DNS hosts behind the listed servers.
    Show 4 fields
    • idstringalways
      A stable id, own:<zone> for the zone's own servers, domain:<domain> for an unknown one.
    • namestringalways
      Its name.
    • nameserversintegeralways
      How many listed servers it runs.
    • ownbooleanalways
      The zone runs its own servers.
  • networksarray of objectsalways
    The networks behind the servers' IPv4 addresses, most servers first.
    Show 5 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.
    • nameserversintegeralways
      How many listed servers it carries.
  • dnssecobjectalways
    DNSSEC at the cut.
    Show 4 fields
    • statestringalways
      signed (a DS matches a zone key), broken (no key matches, or signatures don't validate), keys_without_ds, unsigned or unknown.

      one of "signed", "broken", "keys_without_ds", "unsigned", "unknown"

    • dsarray of objectsalways
      The DS records at the parent.
      Show 4 fields
      • keyTagintegeralways
        The key tag of the DNSKEY it points at.
      • algorithmintegeralways
        The DNSSEC algorithm number (13 = ECDSA P-256).
      • digestTypeintegeralways
        The digest type (2 = SHA-256).
      • digeststringalways
        The digest, hexadecimal, upper case.
    • keysarray of objectsalways
      The zone's DNSKEYs.
      Show 4 fields
      • keyTagintegeralways
        Its key tag.
      • flagsintegeralways
        257 = KSK, 256 = ZSK.
      • algorithmintegeralways
        The algorithm number.
      • kskbooleanalways
        A key-signing key.
    • validatedboolean or nullalways
      Google validated the zone's SOA (the AD flag).
  • copiesarray of objectsalways
    Google's and Cloudflare's cached copies of the NS set (their 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"

    • nameserversarray of stringsalways
      The NS set.
    • ttlinteger or nullalways
      The TTL left, in seconds.
    • tookMsintegeralways
      How long that answer took, in milliseconds.
  • registrationobject or nullalways
    The registration (RDAP, else WHOIS); null when it couldn't be read.
    Show 5 fields
    • registrarstring or nullalways
      The registrar's name.
    • ianaIdstring or nullalways
      The registrar's IANA id.
    • urlstring or nullalways
      The registrar's website.
    • statusesarray of stringsalways
      The registration's status codes (EPP).
    • sourcestring or nullalways
      Where it was read: rdap or whois.

      one of "rdap", "whois", null

  • 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

  • 429 rate_limited Also when the domain was looked up 30 times in the last minute by all callers together (a lookup that isn't kept asks its nameservers directly).

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

r = requests.get(
    "https://dnsrobot.net/api/v2/ns",
    params={"domain": "github.com"},
    timeout=30,
)
data = r.json()
if not r.ok:
    raise RuntimeError(data["error"]["message"])
print(data["nameservers"])
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/ns?" + 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["nameservers"])
}
<?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/ns?" . $query, false, $context), true);
if (isset($data["error"])) {
    throw new RuntimeException($data["error"]["message"]);
}
print_r($data["nameservers"]);
require "net/http"
require "json"

uri = URI("https://dnsrobot.net/api/v2/ns")
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["nameservers"]
// 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/ns?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["nameservers"]);
    Ok(())
}
using System.Text.Json;

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

github.com: Route 53 and NS1

GET /api/v2/ns?domain=github.com
200 OKRecorded 2026-10-25
{
  "query": {
    "domain": "github.com"
  },
  "zone": "github.com",
  "apex": null,
  "verdict": "ok",
  "delegation": {
    "parentZone": "com",
    "registry": true,
    "server": "c.gtld-servers.net",
    "ip": "192.26.92.30",
    "nameservers": [
      "ns-520.awsdns-01.net",
      "ns-421.awsdns-52.com",
      "ns-1707.awsdns-21.co.uk",
      // … 5 more items
    ],
    "ttl": 172800,
    "glue": [
      {
        "host": "ns-421.awsdns-52.com",
        "addresses": [
          "205.251.193.165",
          "2600:9000:5301:a500::1"
        ]
      }
    ],
    "ds": [],
    "dsTtl": null,
    "partial": false,
    "tookMs": 134
  },
  "zoneNameservers": {
    "nameservers": [
      "ns-520.awsdns-01.net",
      "ns-421.awsdns-52.com",
      "ns-1707.awsdns-21.co.uk",
      // … 5 more items
    ],
    "ttls": [
      900,
      3600
    ],
    "viaCloudflare": false,
    "otherSets": []
  },
  "nameservers": [
    {
      "host": "ns-520.awsdns-01.net",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "unrelated",
      "glue": [],
      "staleGlue": [],
      "ipv4": [
        "205.251.194.8"
      ],
      "ipv6": [
        "2600:9000:5302:800::1"
      ],
      "cname": null,
      "provider": {
        "id": "amazon-route-53",
        "name": "Amazon Route 53"
      },
      "status": "authoritative",
      "lame": false,
      "tookMs": 37,
      "serial": 1,
      "nsTtl": 900,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2600:9000:5302:800::1",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "2600:9000:5302::/48",
            "country": "US"
          }
        },
        {
          "ip": "205.251.194.8",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 37,
          "retried": false,
          "serial": 1,
          "edns": true,
          "nsid": "f44751081fb84bdcbc85d81b117971ff  -",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "205.251.194.0/24",
            "country": "US"
          }
        }
      ]
    },
    {
      "host": "ns-421.awsdns-52.com",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "sibling",
      "glue": [
        "205.251.193.165",
        "2600:9000:5301:a500::1"
      ],
      "staleGlue": [],
      "ipv4": [
        "205.251.193.165"
      ],
      "ipv6": [
        "2600:9000:5301:a500::1"
      ],
      "cname": null,
      "provider": {
        "id": "amazon-route-53",
        "name": "Amazon Route 53"
      },
      "status": "authoritative",
      "lame": false,
      "tookMs": 25,
      "serial": 1,
      "nsTtl": 900,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2600:9000:5301:a500::1",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "2600:9000:5301::/48",
            "country": "US"
          }
        },
        {
          "ip": "205.251.193.165",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 25,
          "retried": false,
          "serial": 1,
          "edns": true,
          "nsid": "34c8e66292a5d8d420d9005aceb47197  -",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "205.251.193.0/24",
            "country": "US"
          }
        }
      ]
    },
    {
      "host": "ns-1707.awsdns-21.co.uk",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "unrelated",
      "glue": [],
      "staleGlue": [],
      "ipv4": [
        "205.251.198.171"
      ],
      "ipv6": [
        "2600:9000:5306:ab00::1"
      ],
      "cname": null,
      "provider": {
        "id": "amazon-route-53",
        "name": "Amazon Route 53"
      },
      "status": "authoritative",
      "lame": false,
      "tookMs": 22,
      "serial": 1,
      "nsTtl": 900,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2600:9000:5306:ab00::1",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "2600:9000:5306::/48",
            "country": "US"
          }
        },
        {
          "ip": "205.251.198.171",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 22,
          "retried": false,
          "serial": 1,
          "edns": true,
          "nsid": "2ebd1945da57ee2ecad0238275f9e8c1  -",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 16509,
            "name": "Amazon.com",
            "prefix": "205.251.192.0/18",
            "country": "US"
          }
        }
      ]
    },
    // … 5 more items
  ],
  "soa": {
    "mname": "ns-1707.awsdns-21.co.uk",
    "rname": "awsdns-hostmaster.amazon.com",
    "serial": 1,
    "refresh": 7200,
    "retry": 900,
    "expire": 1209600,
    "minimum": 86400
  },
  "dnsProviders": [
    {
      "id": "amazon-route-53",
      "name": "Amazon Route 53",
      "nameservers": 4,
      "own": false
    },
    {
      "id": "ns1-connect",
      "name": "NS1",
      "nameservers": 4,
      "own": false
    }
  ],
  "networks": [
    {
      "asn": 16509,
      "name": "Amazon.com",
      "prefix": "205.251.194.0/24",
      "country": "US",
      "nameservers": 4
    },
    {
      "asn": 62597,
      "name": "Nsone",
      "prefix": "198.51.44.0/24",
      "country": "US",
      "nameservers": 4
    }
  ],
  "dnssec": {
    "state": "unsigned",
    "ds": [],
    "keys": [],
    "validated": false
  },
  "copies": [
    {
      "source": "google",
      "status": "ok",
      "nameservers": [
        "dns4.p08.nsone.net",
        "dns1.p08.nsone.net",
        "ns-1707.awsdns-21.co.uk",
        // … 5 more items
      ],
      "ttl": 1058,
      "tookMs": 34
    },
    {
      "source": "cloudflare",
      "status": "ok",
      "nameservers": [
        "dns1.p08.nsone.net",
        "dns2.p08.nsone.net",
        "dns3.p08.nsone.net",
        // … 5 more items
      ],
      "ttl": 900,
      "tookMs": 2
    }
  ],
  "registration": {
    "registrar": "MarkMonitor Inc.",
    "ianaId": "292",
    "url": "http://www.markmonitor.com",
    "statuses": [
      "clientDeleteProhibited",
      "clientTransferProhibited",
      "clientUpdateProhibited"
    ],
    "source": "rdap"
  },
  "issues": [
    {
      "severity": "info",
      "code": "soa_serial_per_provider",
      "message": "2 providers keep their own SOA serials (1, 1656468023): normal for a zone kept at two providers;…"
    },
    {
      "severity": "info",
      "code": "dnssec_unsigned",
      "message": "The zone isn't signed with DNSSEC."
    }
  ],
  "tookMs": 2111
}

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

wikipedia.org

GET /api/v2/ns?domain=wikipedia.org
200 OKRecorded 2026-10-25
{
  "query": {
    "domain": "wikipedia.org"
  },
  "zone": "wikipedia.org",
  "apex": null,
  "verdict": "one_network",
  "delegation": {
    "parentZone": "org",
    "registry": true,
    "server": "b0.org.afilias-nst.org",
    "ip": "199.19.54.1",
    "nameservers": [
      "ns1.wikimedia.org",
      "ns2.wikimedia.org",
      "ns0.wikimedia.org"
    ],
    "ttl": 3600,
    "glue": [
      {
        "host": "ns0.wikimedia.org",
        "addresses": [
          "208.80.154.238",
          "2620:0:861:53::1"
        ]
      },
      {
        "host": "ns1.wikimedia.org",
        "addresses": [
          "208.80.153.231",
          "2620:0:860:53::1"
        ]
      },
      {
        "host": "ns2.wikimedia.org",
        "addresses": [
          "198.35.27.27",
          "2a02:ec80:53::1"
        ]
      }
    ],
    "ds": [],
    "dsTtl": null,
    "partial": false,
    "tookMs": 50
  },
  "zoneNameservers": {
    "nameservers": [
      "ns1.wikimedia.org",
      "ns2.wikimedia.org",
      "ns0.wikimedia.org"
    ],
    "ttls": [
      172800
    ],
    "viaCloudflare": false,
    "otherSets": []
  },
  "nameservers": [
    {
      "host": "ns1.wikimedia.org",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "sibling",
      "glue": [
        "208.80.153.231",
        "2620:0:860:53::1"
      ],
      "staleGlue": [],
      "ipv4": [
        "208.80.153.231"
      ],
      "ipv6": [
        "2620:0:860:53::1"
      ],
      "cname": null,
      "provider": null,
      "status": "authoritative",
      "lame": false,
      "tookMs": 512,
      "serial": 2026060420,
      "nsTtl": 172800,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2620:0:860:53::1",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 14907,
            "name": "Wikimedia Foundation",
            "prefix": "2620:0:860::/48",
            "country": "US"
          }
        },
        {
          "ip": "208.80.153.231",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 512,
          "retried": false,
          "serial": 2026060420,
          "edns": true,
          "nsid": "dns2005-auth",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 14907,
            "name": "Wikimedia Foundation",
            "prefix": "208.80.152.0/23",
            "country": "US"
          }
        }
      ]
    },
    {
      "host": "ns2.wikimedia.org",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "sibling",
      "glue": [
        "198.35.27.27",
        "2a02:ec80:53::1"
      ],
      "staleGlue": [],
      "ipv4": [
        "198.35.27.27"
      ],
      "ipv6": [
        "2a02:ec80:53::1"
      ],
      "cname": null,
      "provider": null,
      "status": "authoritative",
      "lame": false,
      "tookMs": 302,
      "serial": 2026060420,
      "nsTtl": 172800,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2a02:ec80:53::1",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 14907,
            "name": "Wikimedia Foundation",
            "prefix": "2a02:ec80:53::/48",
            "country": "US"
          }
        },
        {
          "ip": "198.35.27.27",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 302,
          "retried": false,
          "serial": 2026060420,
          "edns": true,
          "nsid": "dns3003-auth",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 14907,
            "name": "Wikimedia Foundation",
            "prefix": "198.35.27.0/24",
            "country": "US"
          }
        }
      ]
    },
    {
      "host": "ns0.wikimedia.org",
      "inRegistry": true,
      "inZone": true,
      "glueRelation": "sibling",
      "glue": [
        "208.80.154.238",
        "2620:0:861:53::1"
      ],
      "staleGlue": [],
      "ipv4": [
        "208.80.154.238"
      ],
      "ipv6": [
        "2620:0:861:53::1"
      ],
      "cname": null,
      "provider": null,
      "status": "authoritative",
      "lame": false,
      "tookMs": 430,
      "serial": 2026060420,
      "nsTtl": 172800,
      "differentNsSet": false,
      "addresses": [
        {
          "ip": "2620:0:861:53::1",
          "status": "ipv6_not_tested",
          "rcode": null,
          "tookMs": null,
          "retried": false,
          "serial": null,
          "edns": null,
          "nsid": null,
          "recursion": null,
          "zoneTransfer": null,
          "specialBlock": null,
          "network": {
            "asn": 14907,
            "name": "Wikimedia Foundation",
            "prefix": "2620:0:861::/48",
            "country": "US"
          }
        },
        {
          "ip": "208.80.154.238",
          "status": "authoritative",
          "rcode": "NOERROR",
          "tookMs": 430,
          "retried": false,
          "serial": 2026060420,
          "edns": true,
          "nsid": "dns1005-auth",
          "recursion": "closed",
          "zoneTransfer": "refused",
          "specialBlock": null,
          "network": {
            "asn": 14907,
            "name": "Wikimedia Foundation",
            "prefix": "208.80.154.0/23",
            "country": "US"
          }
        }
      ]
    }
  ],
  "soa": {
    "mname": "ns0.wikimedia.org",
    "rname": "hostmaster.wikimedia.org",
    "serial": 2026060420,
    "refresh": 43200,
    "retry": 7200,
    "expire": 1209600,
    "minimum": 3600
  },
  "dnsProviders": [
    {
      "id": "domain:wikimedia.org",
      "name": "wikimedia.org",
      "nameservers": 3,
      "own": false
    }
  ],
  "networks": [
    {
      "asn": 14907,
      "name": "Wikimedia Foundation",
      "prefix": "208.80.152.0/23",
      "country": "US",
      "nameservers": 3
    }
  ],
  "dnssec": {
    "state": "unsigned",
    "ds": [],
    "keys": [],
    "validated": false
  },
  "copies": [
    {
      "source": "google",
      "status": "ok",
      "nameservers": [
        "ns2.wikimedia.org",
        "ns0.wikimedia.org",
        "ns1.wikimedia.org"
      ],
      "ttl": 21210,
      "tookMs": 46
    },
    {
      "source": "cloudflare",
      "status": "ok",
      "nameservers": [
        "ns0.wikimedia.org",
        "ns1.wikimedia.org",
        "ns2.wikimedia.org"
      ],
      "ttl": 172800,
      "tookMs": 141
    }
  ],
  "registration": {
    "registrar": "MarkMonitor Inc.",
    "ianaId": "292",
    "url": "https://www.markmonitor.com/about-us/",
    "statuses": [
      "clientDeleteProhibited",
      "clientTransferProhibited",
      "clientUpdateProhibited"
    ],
    "source": "rdap"
  },
  "issues": [
    {
      "severity": "warning",
      "code": "single_network",
      "message": "Every nameserver answers from AS14907 (Wikimedia Foundation): one routing problem there reaches …"
    },
    {
      "severity": "info",
      "code": "dnssec_unsigned",
      "message": "The zone isn't signed with DNSSEC."
    }
  ],
  "tookMs": 2572
}

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