GET/api/v2/mx
MX lookup API
A domain's mail servers in delivery order, who runs them, their addresses, and the mail security records.
- 20 calls a minute per IP
- Same engine as the MX Lookup tool
{
"query": {
"domain": "github.com"
},
"verdict": "mail",
"zone": "github.com",
"answer": {
"source": "authoritative",
"server": "ns-421.awsdns-52.com",
"ip": "205.251.193.165",
"viaCloudflare": false,
"status": "ok",
"authoritative": true,
"dnssecValidated": null,
"negativeTtl": null,
"cnameChain": []
},
"mx": [
{
"priority": 0,
"host": "github-com.mail.protection.outlook.com",
"ttl": 300,
"provider": {
"id": "microsoft-365",
"name": "Microsoft 365",
"kind": "mailbox"
},
"status": "ok",
"cname": null,
"addresses": [
{
"ip": "52.101.10.16",
"network": {
"asn": 8075,
"name": "Microsoft",
"prefix": "52.96.0.0/12",
"country": "US"
},
"reverse": {
"name": "mail-bn6pr21cu00500.inbound.protection.outlook.com",
"forwardConfirmed": true
}
},
{
"ip": "52.101.9.26",
"network": {
"asn": 8075,
"name": "Microsoft",
"prefix": "52.96.0.0/12",
"country": "US"
},
"reverse": null
},
{
"ip": "52.101.194.164",
"network": {
"asn": 8075,
"name": "Microsoft",
"prefix": "52.96.0.0/12",
"country": "US"
},
"reverse": null
},
{
"ip": "52.101.194.3",
"network": {
"asn": 8075,
"name": "Microsoft",
"prefix": "52.96.0.0/12",
"country": "US"
},
"reverse": null
},
{
"ip": "2a01:111:f403:c902::7",
"network": {
"asn": 8075,
"name": "Microsoft",
"prefix": "2a01:111:f000::/36",
"country": "GB"
},
"reverse": {
"name": "mail-sj0pr02cu00107.inbound.protection.outlook.com",
"forwardConfirmed": true
}
},
{
"ip": "2a01:111:f403:c922::7",
"network": {
"asn": 8075,
"name": "Microsoft",
"prefix": "2a01:111:f000::/36",
"country": "GB"
},
"reverse": null
},
{
"ip": "2a01:111:f403:f804::2",
"network": {
"asn": 8075,
"name": "Microsoft",
"prefix": "2a01:111:f000::/36",
"country": "GB"
},
"reverse": null
},
{
"ip": "2a01:111:f403:f909::6",
"network": {
"asn": 8075,
"name": "Microsoft",
"prefix": "2a01:111:f000::/36",
"country": "GB"
},
"reverse": null
}
],
"dnssecSigned": false
}
],
"implicitMx": null,
"parentZone": null,
"provider": {
"mailbox": {
"id": "microsoft-365",
"name": "Microsoft 365",
"kind": "mailbox",
"evidence": [
{
"kind": "mx",
"value": "github-com.mail.protection.outlook.com"
},
{
"kind": "spf",
"value": "include:spf.protection.outlook.com"
},
{
"kind": "autodiscover",
"value": "autodiscover.outlook.com"
}
]
},
"gateway": null,
"ownServers": false,
"multipleProviders": []
},
"security": {
"spf": {
"record": "v=spf1 ip4:192.30.252.0/22 include:spf.protection.outlook.com include:_netblocks.google.com include:_netblocks2.google.com include:mail.zendesk.com include:_spf.salesforce.com include:servers.mcsv.net include:mktomail.com include:sendgrid.net ip4:62.253.227.114 ip4:166.78.69.169 ip4:166.78.69.170 ip4:166.78.71.131 ~all",
"lookups": 10,
"all": "~all",
"multipleRecords": false,
"missingIncludes": []
},
"dmarc": {
"record": "v=DMARC1; p=quarantine; sp=reject; pct=100; rua=mailto:dmarc@github.com; ruf=mailto:dmarc@github.com; fo=1",
"policy": "quarantine",
"subdomainPolicy": "reject",
"effectivePolicy": "quarantine",
"pct": 100,
"rua": [
"dmarc@github.com"
],
"inheritedFrom": null,
"multipleRecords": false
},
"mtaSts": null,
"tlsRpt": null,
"bimi": null,
"dane": [
{
"host": "github-com.mail.protection.outlook.com",
"tlsa": [],
"dnssecValidated": false,
"status": "none"
}
],
"dnssec": "unsigned",
"ds": [],
"autodiscover": "autodiscover.outlook.com"
},
"sources": [
{
"source": "authoritative",
"server": "ns-421.awsdns-52.com",
"ip": "205.251.193.165",
"status": "ok",
"viaCloudflare": false,
"records": [
{
"priority": 0,
"host": "github-com.mail.protection.outlook.com",
"ttl": 300
}
],
"tookMs": 27,
"sameAsAuthoritative": null
},
{
"source": "google",
"server": "dns.google",
"ip": "8.8.8.8",
"status": "ok",
"viaCloudflare": false,
"records": [
{
"priority": 0,
"host": "github-com.mail.protection.outlook.com",
"ttl": 205
}
],
"tookMs": 82,
"sameAsAuthoritative": true
},
{
"source": "cloudflare",
"server": "one.one.one.one",
"ip": "1.1.1.1",
"status": "ok",
"viaCloudflare": false,
"records": [
{
"priority": 0,
"host": "github-com.mail.protection.outlook.com",
"ttl": 300
}
],
"tookMs": 2,
"sameAsAuthoritative": true
}
],
"issues": [],
"tookMs": 1039
}How it works
Reads the MX records from the domain's own nameservers (reached by walking down from a root server), beside Google's and Cloudflare's cached copies, and follows every mail server to its IPv4 and IPv6 addresses, networks and reverse names. It names the mailbox provider and any gateway in front of it (Mimecast, Proofpoint…) from the providers' documented MX values, with SPF and Autodiscover as evidence when a gateway hides the mailboxes.
It reads the mail security records too: SPF with its DNS lookup count, DMARC (with RFC 9989's tree walk to a parent's record), MTA-STS with its policy file matched against the live MX, TLS-RPT, DANE (TLSA under DNSSEC) and BIMI. Null MX (RFC 7505), no MX (the implicit MX of RFC 5321 §5.1), MX hosts that are aliases or IP addresses, and Microsoft's mx.microsoft migration come back as issues, worded as the MX Lookup page words them.
The name is looked up as given: www.example.com has MX records of its own, so it is never swapped for its parent; parentZone offers the parent's when the name has none. No mail server is connected to (the page's SMTP test isn't part of the API).
Answers kept: Kept for the MX records' TTL, 30 seconds to 5 minutes (30 seconds when a part failed), shared with the MX Lookup page. A kept answer carries an `Age` header, and the resolvers' TTLs are counted down.
Query parameters
domainstringrequiredA domain, a host name or an e-mail address (its domain); URLs and IDNs in Unicode work too.
Response fields
200 with this JSON object, plus tookMs, and incomplete with warnings when a source failed. Fields marked optional appear only when they apply.
queryobjectalwaysWhat was looked up, normalised (lower case, no trailing dot, IDNs as Punycode).domainstringalwaysThe name looked up, lower case, IDNs as Punycode.
verdictstringalwaysmail(MX hosts receive mail),null_mx(accepts no mail, on purpose),null_mx_conflict(a null MX beside other hosts),no_mx(no MX, but the name's own address receives: the implicit MX),no_mail(no MX and no address),nxdomain,servfailorno_answer.one of
"mail","null_mx","null_mx_conflict","no_mx","no_mail","nxdomain","servfail","no_answer"zonestring or nullalwaysThe zone the name lives in, as the walk from the root found it.answerobject or nullalwaysThe MX answer that counts: the zone's own, unless it couldn't be had; then Google's, then Cloudflare's.Show 9 fields
sourcestringalwaysWho answered:authoritative(the zone's own nameserver, the fresh truth),google(Google Public DNS's cached copy) orcloudflare(Cloudflare 1.1.1.1's).one of
"authoritative","google","cloudflare"serverstring or nullalwaysThe server that answered.ipstring or nullalwaysIts address.viaCloudflarebooleanalwaysThe zone is on Cloudflare's nameservers, which our servers can't connect to: this is 1.1.1.1's answer, from the same network.statusstringalwaysThe answer:ok(records came back),nodata(the name exists without them),nxdomain(no such name),servfail,refused,timeout,errororunreadable(an answer our decoder refuses).one of
"ok","nodata","nxdomain","servfail","refused","timeout","error","unreadable"authoritativeboolean or nullalwaysThe AA flag.dnssecValidatedboolean or nullalwaysA resolver's AD flag; null for the zone's own answer.negativeTtlinteger or nullalwaysFor no MX or no such name: how long the miss is cached, in seconds (RFC 2308).cnameChainarray of objectsalwaysThe CNAMEs the answer followed, in order.Show 3 fields
namestringalwaysThe alias.targetstringalwaysThe name it points to.ttlintegeralwaysThe record's TTL, in seconds.
mxarray of objectsalwaysThe MX records in delivery order, each host followed to its addresses (at most 12 hosts).Show 8 fields
priorityintegeralwaysLower is tried first; equal numbers share the load.hoststringalwaysThe host name;.for a null MX.ttlintegeralwaysThe MX record's TTL, in seconds.providerobject or nullalwaysThe provider the host belongs to, matched from 110+ providers' documented MX values; null when none matches.Show 4 fields
idstringalwaysA stable id, e.g.google-workspace,microsoft-365,proofpoint.namestringalwaysThe provider's name.kindstringalwaysmailbox(hosts mailboxes),gateway(filters mail in front of them),forwarder,inbound(a receiving service) orconsumer(personal mail).one of
"mailbox","gateway","forwarder","inbound","consumer"regionstringoptionalA data-centre region read from the host (Zoho's TLD, Amazon's region…), when it names one.
statusstring or nullalwaysIts addresses:ok,nxdomain(the host doesn't exist),nodata(no A or AAAA),literal(an IP address written as the host: invalid),timeout,error;null_mxfor.; null past the first 12 hosts.one of
"ok","nxdomain","nodata","literal","timeout","error","null_mx",nullcnamestring or nullalwaysThe host is an alias (CNAME) for this name, which RFC 2181 §10.3 forbids for MX hosts.addressesarray of objectsalwaysIts IPv4 then IPv6 addresses.Show 3 fields
ipstringalwaysThe IPv4 or IPv6 address.networkobject or nullalwaysThe network behind the address (Team Cymru); null when unknown.Show 4 fields
asnintegeralwaysThe AS number that announces the address.namestringalwaysThe network's name, cleaned ("Google", "Amazon.com").prefixstringalwaysThe announced prefix the address is in, e.g.8.8.8.0/24.countrystringalwaysThe network's registration country (ISO 3166-1 alpha-2), as Team Cymru has it.
reverseobject or nullalwaysIts PTR name and whether that name resolves back to it (forward-confirmed reverse DNS); null when not checked (the first address of each family per host is).Show 2 fields
namestring or nullalwaysThe PTR name; null when it has none.forwardConfirmedbooleanalwaysThe PTR name resolves back to this address.
dnssecSignedboolean or nullalwaysIts address answer was DNSSEC-validated: where DANE can work.
implicitMxobject or nullalwaysWith no MX: the name's own addresses, where senders deliver instead (RFC 5321 §5.1).addressesarray of objectsalwaysIts IPv4 then IPv6 addresses.Show 3 fields
ipstringalwaysThe IPv4 or IPv6 address.networkobject or nullalwaysThe network behind the address (Team Cymru); null when unknown.Show 4 fields
asnintegeralwaysThe AS number that announces the address.namestringalwaysThe network's name, cleaned ("Google", "Amazon.com").prefixstringalwaysThe announced prefix the address is in, e.g.8.8.8.0/24.countrystringalwaysThe network's registration country (ISO 3166-1 alpha-2), as Team Cymru has it.
reverseobject or nullalwaysIts PTR name and whether that name resolves back to it (forward-confirmed reverse DNS); null when not checked (the first address of each family per host is).Show 2 fields
namestring or nullalwaysThe PTR name; null when it has none.forwardConfirmedbooleanalwaysThe PTR name resolves back to this address.
ttlinteger or nullalwaysThe A (else AAAA) record's TTL, in seconds.
parentZoneobject or nullalwaysWith no MX at the name: its zone apex's MX records, offered (never swapped in).namestringalwaysThe parent zone.mxarray of objectsalwaysIts MX records.Show 3 fields
priorityintegeralwaysLower is tried first; equal numbers share the load.hoststringalwaysThe mail server;.is a null MX.ttlintegeralwaysThe record's TTL, in seconds.
providerobject or nullalwaysThe provider the host belongs to, matched from 110+ providers' documented MX values; null when none matches.Show 4 fields
idstringalwaysA stable id, e.g.google-workspace,microsoft-365,proofpoint.namestringalwaysThe provider's name.kindstringalwaysmailbox(hosts mailboxes),gateway(filters mail in front of them),forwarder,inbound(a receiving service) orconsumer(personal mail).one of
"mailbox","gateway","forwarder","inbound","consumer"regionstringoptionalA data-centre region read from the host (Zoho's TLD, Amazon's region…), when it names one.
providerobject or nullalwaysWho runs the mail; null when the name has no MX hosts.Show 4 fields
mailboxobject or nullalwaysWho holds the mailboxes; null when not visible from DNS (a gateway that SPF and Autodiscover don't explain).Show 5 fields
idstringalwaysA stable id, e.g.google-workspace,microsoft-365,proofpoint.namestringalwaysThe provider's name.kindstringalwaysmailbox(hosts mailboxes),gateway(filters mail in front of them),forwarder,inbound(a receiving service) orconsumer(personal mail).one of
"mailbox","gateway","forwarder","inbound","consumer"regionstringoptionalA data-centre region read from the host (Zoho's TLD, Amazon's region…), when it names one.evidencearray of objectsalwaysWhy it is named.Show 2 fields
kindstringalwaysmx,spf(an include),autodiscoverorasn.one of
"mx","spf","autodiscover","asn"valuestringalwaysThe value that matched.
gatewayobject or nullalwaysThe filtering gateway the MX points to, in front of the mailboxes; null for none.Show 5 fields
idstringalwaysA stable id, e.g.google-workspace,microsoft-365,proofpoint.namestringalwaysThe provider's name.kindstringalwaysmailbox(hosts mailboxes),gateway(filters mail in front of them),forwarder,inbound(a receiving service) orconsumer(personal mail).one of
"mailbox","gateway","forwarder","inbound","consumer"regionstringoptionalA data-centre region read from the host (Zoho's TLD, Amazon's region…), when it names one.evidencearray of objectsalwaysWhy it is named.Show 2 fields
kindstringalwaysmx,spf(an include),autodiscoverorasn.one of
"mx","spf","autodiscover","asn"valuestringalwaysThe value that matched.
ownServersbooleanalwaysThe MX hosts sit in the domain's own zone and match no provider: its own servers.multipleProvidersarray of stringsalwaysProvider families when the MX hosts sit at more than one mailbox provider (a move in progress); empty otherwise.
securityobject or nullalwaysThe mail security records; null when the name doesn't exist or nothing answered.Show 9 fields
spfobject or nullalwaysThe SPF record (RFC 7208); null when there is none.Show 5 fields
recordstringalwaysThe record.lookupsintegeralwaysDNS-querying terms, nested includes counted; more than 10 is a permanent error.allstring or nullalwaysThe finalallterm (-all,~all,?all,+all); null withredirect=or none.multipleRecordsbooleanalwaysMore than one SPF record: a permanent error.missingIncludesarray of stringsalwaysIncluded names that publish no SPF record.
dmarcobject or nullalwaysThe DMARC record (RFC 9989); null when there is none, at the name or its parents.Show 8 fields
recordstringalwaysThe record.policystring or nullalwaysp=.subdomainPolicystring or nullalwayssp=, when set.effectivePolicystring or nullalwaysThe policy that applies to this name:p=, orsp=for a record found at a parent.pctinteger or nullalwayspct=(removed in RFC 9989; older records carry it).ruaarray of stringsalwaysAggregate report addresses.inheritedFromstring or nullalwaysThe parent the record was found at, when the name has none of its own.multipleRecordsbooleanalwaysMore than one DMARC record: receivers discard them all.
mtaStsobject or nullalwaysMTA-STS (RFC 8461); null when no_mta-stsrecord exists.Show 4 fields
recordstringalwaysThe_mta-stsTXT record.idstring or nullalwaysItsid=.delegatedTostring or nullalways_mta-stsis a CNAME to this name (a delegated policy).policyobject or nullalwaysThe policy file athttps://mta-sts.<domain>/.well-known/mta-sts.txt.Show 5 fields
statusstringalwaysok,missing,redirect(not allowed),invalidorerror(our fetch failed).one of
"ok","missing","redirect","invalid","error"modestring or nullalwaysenforce,testingornone.one of
"enforce","testing","none",nullmaxAgeinteger or nullalwaysmax_age, in seconds.mxarray of stringsalwaysThemx:patterns.httpStatusinteger or nullalwaysThe HTTP status when the file couldn't be read.
tlsRptstring or nullalwaysThe TLS-RPT record (RFC 8460); null when none.bimistring or nullalwaysThe default BIMI record; null when none.danearray of objectsalwaysDANE per mail server: TLSA records at_25._tcp.<host>.Show 4 fields
hoststringalwaysThe mail server.tlsaarray of stringsalwaysIts TLSA records.dnssecValidatedbooleanalwaysThe TLSA answer validated with DNSSEC: DANE in force.statusstringalwaysok,noneorerror.one of
"ok","none","error"
dnssecstringalwaysThe domain's DNSSEC:secure(validated),unsigned,broken(fails validation) orunknown.one of
"secure","unsigned","broken","unknown"dsarray of stringsalwaysThe zone's DS records at the parent.autodiscoverstring or nullalwaysautodiscover.<domain>'s CNAME target (Outlook's names Microsoft 365).
sourcesarray of objectsalwaysEach source's MX answer: the zone's own nameservers, Google and Cloudflare (TTLs are the time left in the resolvers' caches).Show 9 fields
sourcestringalwaysWho answered:authoritative(the zone's own nameserver, the fresh truth),google(Google Public DNS's cached copy) orcloudflare(Cloudflare 1.1.1.1's).one of
"authoritative","google","cloudflare"serverstring or nullalwaysThe server asked.ipstring or nullalwaysIts address.statusstringalwaysIts answer:ok(records came back),nodata(the name exists without them),nxdomain(no such name),servfail,refused,timeout,errororunreadable(an answer our decoder refuses).one of
"ok","nodata","nxdomain","servfail","refused","timeout","error","unreadable"unavailablestringoptionalOnly when the zone's own servers gave no answer:blocked(on Cloudflare's network),ipv6(IPv6-only servers),timeout,error,nxdomainornopath.one of
"blocked","ipv6","timeout","error","nxdomain","nopath"viaCloudflarebooleanalwaysRead through 1.1.1.1 (a zone on Cloudflare's nameservers).recordsarray of objectsalwaysIts MX records.Show 3 fields
priorityintegeralwaysLower is tried first; equal numbers share the load.hoststringalwaysThe mail server;.is a null MX.ttlintegeralwaysThe record's TTL, in seconds.
tookMsintegeralwaysHow long that answer took, in milliseconds.sameAsAuthoritativeboolean or nullalwaysThe copy holds the same records as the zone's own answer; null for the zone's own, or when either is missing.
issuesarray of objectsalwaysProblems found in the target's configuration, worst first. Empty when there are none.severitystringalwayserrorbreaks something,warningrisks it,infois worth knowing.one of
"error","warning","info"codestringalwaysStable machine-readable code.messagestringalwaysThe problem and what to do about it, in plain English.
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/mx?domain=github.com"const params = new URLSearchParams({ domain: "github.com" });
const res = await fetch(`https://dnsrobot.net/api/v2/mx?${params}`);
const data = await res.json();
if (!res.ok) throw new Error(data.error.message);
console.log(data.mx);import requests
r = requests.get(
"https://dnsrobot.net/api/v2/mx",
params={"domain": "github.com"},
timeout=30,
)
data = r.json()
if not r.ok:
raise RuntimeError(data["error"]["message"])
print(data["mx"])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/mx?" + 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["mx"])
}<?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/mx?" . $query, false, $context), true);
if (isset($data["error"])) {
throw new RuntimeException($data["error"]["message"]);
}
print_r($data["mx"]);require "net/http"
require "json"
uri = URI("https://dnsrobot.net/api/v2/mx")
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["mx"]// 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/mx?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["mx"]);
Ok(())
}using System.Text.Json;
using var http = new HttpClient();
var res = await http.GetAsync("https://dnsrobot.net/api/v2/mx?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("mx"));github.com: Microsoft 365
GET /api/v2/mx?domain=github.com{
"query": {
"domain": "github.com"
},
"verdict": "mail",
"zone": "github.com",
"answer": {
"source": "authoritative",
"server": "ns-421.awsdns-52.com",
"ip": "205.251.193.165",
"viaCloudflare": false,
"status": "ok",
"authoritative": true,
"dnssecValidated": null,
"negativeTtl": null,
"cnameChain": []
},
"mx": [
{
"priority": 0,
"host": "github-com.mail.protection.outlook.com",
"ttl": 300,
"provider": {
"id": "microsoft-365",
"name": "Microsoft 365",
"kind": "mailbox"
},
"status": "ok",
"cname": null,
"addresses": [
{
"ip": "52.101.10.16",
"network": {
"asn": 8075,
"name": "Microsoft",
"prefix": "52.96.0.0/12",
"country": "US"
},
"reverse": {
"name": "mail-bn6pr21cu00500.inbound.protection.outlook.com",
"forwardConfirmed": true
}
},
{
"ip": "52.101.9.26",
"network": {
"asn": 8075,
"name": "Microsoft",
"prefix": "52.96.0.0/12",
"country": "US"
},
"reverse": null
},
{
"ip": "52.101.194.164",
"network": {
"asn": 8075,
"name": "Microsoft",
"prefix": "52.96.0.0/12",
"country": "US"
},
"reverse": null
},
// … 5 more items
],
"dnssecSigned": false
}
],
"implicitMx": null,
"parentZone": null,
"provider": {
"mailbox": {
"id": "microsoft-365",
"name": "Microsoft 365",
"kind": "mailbox",
"evidence": [
{
"kind": "mx",
"value": "github-com.mail.protection.outlook.com"
},
{
"kind": "spf",
"value": "include:spf.protection.outlook.com"
},
{
"kind": "autodiscover",
"value": "autodiscover.outlook.com"
}
]
},
"gateway": null,
"ownServers": false,
"multipleProviders": []
},
"security": {
"spf": {
"record": "v=spf1 ip4:192.30.252.0/22 include:spf.protection.outlook.com include:_netblocks.google.com incl…",
"lookups": 10,
"all": "~all",
"multipleRecords": false,
"missingIncludes": []
},
"dmarc": {
"record": "v=DMARC1; p=quarantine; sp=reject; pct=100; rua=mailto:dmarc@github.com; ruf=mailto:dmarc@github…",
"policy": "quarantine",
"subdomainPolicy": "reject",
"effectivePolicy": "quarantine",
"pct": 100,
"rua": [
"dmarc@github.com"
],
"inheritedFrom": null,
"multipleRecords": false
},
"mtaSts": null,
"tlsRpt": null,
"bimi": null,
"dane": [
{
"host": "github-com.mail.protection.outlook.com",
"tlsa": [],
"dnssecValidated": false,
"status": "none"
}
],
"dnssec": "unsigned",
"ds": [],
"autodiscover": "autodiscover.outlook.com"
},
"sources": [
{
"source": "authoritative",
"server": "ns-421.awsdns-52.com",
"ip": "205.251.193.165",
"status": "ok",
"viaCloudflare": false,
"records": [
{
"priority": 0,
"host": "github-com.mail.protection.outlook.com",
"ttl": 300
}
],
"tookMs": 27,
"sameAsAuthoritative": null
},
{
"source": "google",
"server": "dns.google",
"ip": "8.8.8.8",
"status": "ok",
"viaCloudflare": false,
"records": [
{
"priority": 0,
"host": "github-com.mail.protection.outlook.com",
"ttl": 205
}
],
"tookMs": 82,
"sameAsAuthoritative": true
},
{
"source": "cloudflare",
"server": "one.one.one.one",
"ip": "1.1.1.1",
"status": "ok",
"viaCloudflare": false,
"records": [
{
"priority": 0,
"host": "github-com.mail.protection.outlook.com",
"ttl": 300
}
],
"tookMs": 2,
"sameAsAuthoritative": true
}
],
"issues": [],
"tookMs": 1039
}Shortened for the page: long lists show their first items.
example.com: a null MX
GET /api/v2/mx?domain=example.com{
"query": {
"domain": "example.com"
},
"verdict": "null_mx",
"zone": "example.com",
"answer": {
"source": "authoritative",
"server": "one.one.one.one",
"ip": "1.1.1.1",
"viaCloudflare": true,
"status": "ok",
"authoritative": false,
"dnssecValidated": null,
"negativeTtl": null,
"cnameChain": []
},
"mx": [
{
"priority": 0,
"host": ".",
"ttl": 300,
"provider": null,
"status": "null_mx",
"cname": null,
"addresses": [],
"dnssecSigned": null
}
],
"implicitMx": null,
"parentZone": null,
"provider": null,
"security": {
"spf": {
"record": "v=spf1 -all",
"lookups": 0,
"all": "-all",
"multipleRecords": false,
"missingIncludes": []
},
"dmarc": {
"record": "v=DMARC1;p=reject;sp=reject;adkim=s;aspf=s",
"policy": "reject",
"subdomainPolicy": "reject",
"effectivePolicy": "reject",
"pct": null,
"rua": [],
"inheritedFrom": null,
"multipleRecords": false
},
"mtaSts": null,
"tlsRpt": null,
"bimi": null,
"dane": [],
"dnssec": "secure",
"ds": [
"2371 13 2 C988EC423E3880EB8DD8A46FE06CA230EE23F35B578D64E78B29C3E1C83D245A"
],
"autodiscover": null
},
"sources": [
{
"source": "authoritative",
"server": "one.one.one.one",
"ip": "1.1.1.1",
"status": "ok",
"viaCloudflare": true,
"records": [
{
"priority": 0,
"host": ".",
"ttl": 300
}
],
"tookMs": 2,
"sameAsAuthoritative": null
},
{
"source": "google",
"server": "dns.google",
"ip": "8.8.8.8",
"status": "ok",
"viaCloudflare": false,
"records": [
{
"priority": 0,
"host": ".",
"ttl": 153
}
],
"tookMs": 47,
"sameAsAuthoritative": true
},
{
"source": "cloudflare",
"server": "one.one.one.one",
"ip": "1.1.1.1",
"status": "ok",
"viaCloudflare": false,
"records": [
{
"priority": 0,
"host": ".",
"ttl": 300
}
],
"tookMs": 2,
"sameAsAuthoritative": true
}
],
"issues": [
{
"severity": "info",
"code": "null_mx",
"message": "example.com publishes a null MX (RFC 7505): it accepts no mail, on purpose, and senders refuse m…"
}
],
"tookMs": 372
}Shortened for the page: long lists show their first items.