Google Public DNS and Cloudflare 1.1.1.1 both answer DNS queries over HTTPS in JSON. Status 0 means success; answers carry the record type as a number (1 = A, 15 = MX, 16 = TXT).
None — no key, no signup. Every example runs as-is.
Full reference: https://developers.google.com/speed/public-dns/docs/doh/json
curl "https://dns.google/resolve?name=example.com&type=A"
{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": true,
"CD": false,
"Question": [
{
"name": "example.com.",
"type": 1
}
],
"Answer": [
{
"name": "example.com.",
"type": 1,
"TTL": 300,
"data": "104.20.23.154"
},
{
"name": "example.com.",
"type": 1,
"TTL": 300,
"data": "172.66.147.243"
}
],
"Comment": "Response from 108.162.192.162."
}
curl "https://dns.google/resolve?name=gmail.com&type=MX"
{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": false,
"CD": false,
"Question": [
{
"name": "gmail.com.",
"type": 15
}
],
"Answer": [
{
"name": "gmail.com.",
"type": 15,
"TTL": 532,
"data": "30 alt3.gmail-smtp-in.l.google.com."
},
{
"name": "gmail.com.",
"type": 15,
"TTL": 532,
"data": "5 gmail-smtp-in.l.google.com."
}
]
}
Cloudflare needs Accept: application/dns-json.
curl "https://cloudflare-dns.com/dns-query?name=google.com&type=TXT" \
-H "Accept: application/dns-json"
{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": false,
"CD": false,
"Question": [
{
"name": "google.com",
"type": 16
}
],
"Answer": [
{
"name": "google.com",
"type": 16,
"TTL": 8,
"data": "\"MS=E4A68B9AB2BB9670BCE15412F62916164C0B20BB\""
},
{
"name": "google.com",
"type": 16,
"TTL": 8,
"data": "\"arcules-domain-verification=2R4t5G7nI6tRCo61lpxxbLksPYstxhGmtV75cpr8x9K\""
}
]
}