A deep dive into the DNS and Internet infrastructure concepts behind every iDig endpoint, and how the API implements them.
The Domain Name System (DNS) is the Internet's address book. When a user types example.com into a browser, a DNS resolver translates that human-readable name into an IP address (e.g. 93.184.216.34) that routers can use to deliver packets. DNS stores many types of records beyond simple addresses:
| Record Type | Purpose |
|---|---|
A | Maps a name to an IPv4 address |
AAAA | Maps a name to an IPv6 address |
NS | Delegates a zone to authoritative nameservers |
SOA | Start of Authority — serial, refresh, retry, expire, minimum TTL |
MX | Mail exchange — where to deliver email |
TXT | Arbitrary text — used for SPF, DKIM, domain verification |
CNAME | Canonical name alias — points one name to another |
CAA | Certificate Authority Authorization — which CAs may issue certs |
SRV | Service locator — hostname + port for protocols like SIP, XMPP |
TLSA | DANE — pins TLS certificates to DNS (DNSSEC-dependent) |
DS | Delegation Signer — links a child zone's DNSSEC key to the parent |
Additionally, a query may request reverse DNS (PTR record for an IP), WHOIS data (registrar metadata), and Quad-A (AAAA / IPv6) records.
The root endpoint performs the equivalent of the Unix dig command. Given a domain d and a record type rr (defaulting to a; can be all for every type), it:
dnssec=yes), WHOIS summary (whois=yes), Quad-A records (quadA=yes), and reverse DNS (reverse=yes).The response is the foundational data that all other endpoints build upon.
DNSSEC (Domain Name System Security Extensions) adds cryptographic signatures to DNS records, allowing resolvers to verify that answers haven't been tampered with. It works as a chain of trust:
Root Zone (.) → TLD (.com) → Domain (example.com)
DS → DNSKEY DS → DNSKEY DS → DNSKEY + RRSIG
Each zone signs its records with a Zone Signing Key (ZSK) and publishes a Key Signing Key (KSK) whose hash (the DS record) is placed in the parent zone. A validating resolver walks this chain from the root to verify every link.
Possible outcomes:
The endpoint runs the equivalent of delv (DNSSEC lookup and validation utility) against a local Unbound recursive resolver:
A).status, validated (boolean), reason_codes, and remediation (fix suggestions).output trace showing each fetch step in the chain (when trace=yes).warnings for non-fatal diagnostics that can usually be ignored when status is secure.Even when DNSSEC validates today, operational issues can break it tomorrow:
This endpoint builds a comprehensive operational report:
When a domain "doesn't work," the cause could be many things: the domain doesn't exist (NXDOMAIN), the nameserver refuses queries (REFUSED), there's no data for the requested type (NODATA), or the nameserver itself is failing (SERVFAIL). A structured resolution check disambiguates these by testing multiple record types against the authoritative nameservers.
rcode (NOERROR, NXDOMAIN, SERVFAIL, etc.), records found, TTL, and query time.ok, nxdomain, nodata, servfail, refused, timeout, or degraded.errors explaining what's wrong.Most DNS problems fall into a small number of categories. An automated diagnostic engine can aggregate resolution and DNSSEC checks to answer three questions that cover the vast majority of support tickets:
/resolve/check and /dnssec/validate.direct_answers — plain-language answers to the three key questions, each with an ok flag, a summary answer, and optional details or fixes.summary, confidence level, and the full underlying resolution and DNSSEC data for drill-down.When a DNS record is changed (e.g. migrating a website to a new IP), the change doesn't take effect instantly worldwide. Each resolver caches records for the duration of their TTL. Different resolvers in different geographies may return different answers for a period — this is DNS propagation.
Operators need to know: "Has my DNS change reached all major resolvers yet?"
summary.consistent is true only if every resolver returns the same answer set.summary.variants shows which resolvers returned which answers — making it easy to see which regions are still serving stale data.A domain's authoritative nameservers should all serve identical data. Inconsistencies arise from:
consistent boolean.Time to Live (TTL) is how long (in seconds) a resolver may cache a DNS record before re-querying. High TTLs (e.g. 86400 = 24 hours) are efficient for stable records but disastrous during migrations: if you change your A record but resolvers have the old IP cached for 24 hours, users will hit the old server for up to a day.
Best practice before a migration:
ok, elevated, or high.ttl_human (e.g. "24.0h") for readability.migration_ready — false if any TTL is dangerously high.recommendations for pre-migration TTL lowering.Email spoofing is trivially easy without authentication. Four complementary DNS-based mechanisms protect against it and build sender trust:
SPF (Sender Policy Framework) — A TXT record listing which IPs/servers are authorized to send mail for the domain. Receiving servers check the sending IP against this list. Key concerns:
all qualifier: -all (hard fail) vs ~all (soft fail) vs ?all (neutral).include:, redirect, a, mx mechanisms).DKIM (DomainKeys Identified Mail) — The sending server signs each message with a private key; the public key is published in DNS as a TXT record at <selector>._domainkey.<domain>. Receiving servers verify the signature. Key concerns:
google, Microsoft: selector1/selector2, SendGrid: smtpapi).DMARC (Domain-based Message Authentication, Reporting & Conformance) — A policy record that tells receiving servers what to do when SPF and DKIM fail: none (monitor), quarantine (spam folder), or reject (drop). Also specifies where to send aggregate reports (rua) and forensic reports (ruf).
BIMI (Brand Indicators for Message Identification) — A TXT record at default._bimi.<domain> that specifies a brand logo (SVG) and an optional Verified Mark Certificate (VMC). When DMARC enforcement is in place, email clients like Gmail can display the brand's logo next to messages — a visual trust signal for recipients. Key requirements:
quarantine or reject (not none).all qualifier, counts DNS lookups against the 10-lookup limit, and rates as pass/warn/fail.dkim_selectors. Provider inference: detects the MX provider (Google Workspace, Microsoft 365, SendGrid, Mailchimp, Postmark, Mailgun, Zoho, FastMail, Mimecast, SparkPost, Brevo, HubSpot, etc.) and automatically adds provider-specific selectors. Returns providers_detected and provider_selectors_added. For each found key, reports type, approximate bit size, status, and testing mode._dmarc.<domain> TXT record, parses policy, subdomain policy, pct, alignment modes, and reporting addresses.default._bimi.<domain> for a BIMI record, validates the logo URL (must be HTTPS SVG), and detects presence of a VMC. BIMI can provide a small bonus to borderline email security grades. Recommendations are only shown when SPF/DKIM/DMARC are already solid.recommendations.MX (Mail Exchange) records tell the world where to deliver email for a domain. Proper configuration requires:
issues and warnings.DNS-based Blackhole Lists (DNSBLs, also called RBLs — Real-time Blackhole Lists) are databases of IP addresses known to send spam or host malware. Email servers worldwide query these lists in real time: if the sending IP is listed, the message is rejected or flagged.
The lookup mechanism is elegant: to check if IP 1.2.3.4 is on blacklist bl.example.com, query 4.3.2.1.bl.example.com for an A record. If it resolves (typically to 127.0.0.x), the IP is listed; the specific x value and any accompanying TXT record indicate the reason.
Being blacklisted can silently destroy email deliverability. Operators often don't know until recipients stop receiving their mail.
clean_ips vs listed_ips.pass (no listings) or fail (one or more listings).The Extensible Provisioning Protocol (EPP) is the standard protocol between domain registrars and registries. Each domain has a set of EPP status codes that control what operations are permitted:
| Code | Meaning |
|---|---|
clientTransferProhibited | Registrar has locked the domain against transfers |
clientDeleteProhibited | Registrar has locked against deletion |
clientUpdateProhibited | Registrar has locked against changes |
serverHold | Registry has suspended the domain (won't resolve) |
pendingDelete | Domain is being deleted and cannot be recovered |
redemptionPeriod | Domain expired and is in a grace period before release |
Domains without transfer locks are vulnerable to unauthorized transfers (domain hijacking).
WHOIS is a protocol (RFC 3912) for querying databases that store information about registered domain names. The data includes:
WHOIS data is notoriously inconsistent in format across registrars and TLDs. Parsing it reliably requires handling hundreds of variations.
domain_age_days and days_until_expiry.issues with warnings for: domains expiring within 30 or 90 days, already-expired domains, missing critical fields.SSL/TLS (Secure Sockets Layer / Transport Layer Security) encrypts communication between browsers and servers. The server presents a certificate that:
Certificate problems are one of the two most common causes of "site down" reports (the other being DNS). An expired certificate or a domain mismatch produces a browser warning that blocks access.
domain_match — does the cert cover this specific domain (exact match or wildcard)?valid — trusted, not expired, and domain matches.issues: expired cert, domain mismatch, verification failures, untrusted issuer.warnings: upcoming expiry at 7 / 30 / 90 day thresholds.Even when DNS resolves correctly and the SSL certificate is valid, the web server itself might not respond. Additionally, modern security best practices require:
Strict-Transport-Security (HSTS), X-Frame-Options, Content-Security-Policy (CSP) protect against downgrade attacks, clickjacking, and XSS.https://<domain>, records reachability, status code, response time, and response headers.http://<domain>, checks whether it redirects to HTTPS.https://<domain> (up to 10 hops) with loop detection, recording each hop's URL, status code, and response time.final_url — where the chain ultimately lands.pass (HTTPS works and HTTP redirects to HTTPS), warn (partial), or fail (HTTPS down or no redirect).Every IP address is assigned to an organization and can be approximately mapped to a physical location. Geolocation databases correlate IP ranges with:
This is useful for verifying where a domain's infrastructure is physically hosted.
issues for any IPs that couldn't be geolocated.A domain's attack surface extends beyond the apex domain. Subdomains like admin.example.com, staging.example.com, db.example.com, or vpn.example.com often expose internal infrastructure, development environments, or forgotten services. Subdomain enumeration is a standard step in security audits and penetration testing.
www, mail, ftp, smtp, api, app, dev, staging, test, admin, portal, ns1–ns4, vpn, cdn, static, blog, shop, docs, git, db, grafana, auth, sso, status, autodiscover, _dmarc, and more.DANE (DNS-based Authentication of Named Entities) uses DNSSEC-signed TLSA records to pin TLS certificates to DNS, removing or reducing dependency on the public Certificate Authority system. A TLSA record at _443._tcp.example.com declares which certificate (or public key) the server should present.
TLSA records specify four parameters:
| Field | Values | Meaning |
|---|---|---|
| Usage | 0–3 | 0 = PKIX-TA (CA constraint), 1 = PKIX-EE (cert constraint), 2 = DANE-TA (trust anchor), 3 = DANE-EE (end entity — most common) |
| Selector | 0–1 | 0 = full certificate, 1 = SubjectPublicKeyInfo only |
| Matching Type | 0–2 | 0 = exact match, 1 = SHA-256 hash, 2 = SHA-512 hash |
| Certificate Data | hex | The hash or full DER data to match against |
DANE validation requires both DNSSEC (to trust the TLSA records) and access to the live certificate (to compare). Neither /ssl/check nor a TLSA lookup alone can validate DANE — you need both sides.
_<port>._tcp.<domain> (default port 443).pass (at least one TLSA record matches) or fail.Supports all four TLSA usage types (PKIX-TA, PKIX-EE, DANE-TA, DANE-EE). A natural companion to /ssl/check and /dnssec/validate.
AXFR (Authoritative Zone Transfer) is a DNS mechanism that allows a secondary nameserver to request a complete copy of a zone from the primary. When properly configured, AXFR is restricted to authorized secondary nameservers. When misconfigured, anyone can download the entire zone file — exposing every subdomain, mail server, internal hostname, TXT record, and service record.
An open zone transfer is a critical security misconfiguration. It gives attackers a complete map of the domain's DNS infrastructure, revealing:
dig AXFR @ns domain against each nameserver.vulnerable: true if any NS allows public zone transfer.pass (all refused) or critical (at least one allowed).issues for each vulnerable nameserver.A natural companion to /zone/consistency — run both for a complete zone audit.
Organizations managing portfolios of domains (registrars, hosting providers, security teams) need to audit many domains at once. Running individual checks domain-by-domain is slow and inefficient. A batch API allows submitting a list of domains with a set of checks and retrieving all results asynchronously.
Submit a batch of domains for one or more checks. Returns a job_id immediately; checks run asynchronously in a background worker (up to 15 minutes).
Request body (JSON):
{"domains": ["example.com", "example.org"], "checks": ["dns", "ssl", "mx"]}
Available checks: dns, ssl, mx, email, geo, ttl, whois, blacklist, http, subdomains, dane, dnssec_validate, dnssec_health, zone_consistency, axfr, propagation, domain_status, resolve, diagnose.
| Plan | Max Domains per Request |
|---|---|
| Pro | 10 |
| Business | 50 |
| Unlimited | 100 |
Quota cost: 1 request per domain × check (deducted at submission). Free-tier tokens cannot use batch.
Poll for results. Returns:
status: queued, processing, complete, or failed.completed / total: progress counter.results: per-domain check results (populated as they complete).Results are available for 24 hours after job creation.
The iDig API is designed as a composable diagnostic toolkit. While each endpoint stands alone, they combine to answer progressively deeper questions:
GET / Does the domain resolve at all?GET /http/check Is the web server responding?GET /ssl/check Is the certificate valid?GET /dane/validate TLSA records match the cert?GET /email/security SPF, DKIM, DMARC, BIMI?GET /mx/check MX records healthy?GET /blacklist/check IPs on spam blacklists?GET /propagation Reached all global resolvers?GET /zone/consistency Nameservers agree?GET /ttl/check TTLs low enough?GET /dnssec/validate DNSSEC chain valid?GET /dnssec/health Keys & sigs healthy?GET /domain/status Transfer-locked?GET /whois Expiry? Registrar?GET /zone/axfr Zone transfers locked down?GET /geo Where are servers located?GET /subdomains What's publicly discoverable?POST /batch Submit domains + checksGET /batch/{job_id} Poll for results