DNSfish API · v1

The DNS API for ops, monitors, and CI.

Same engine as the UI, exposed as JSON, JSONP, and DNS-over-HTTPS. No API key required for the public tier.

Try bulk lookupAPI healthRead the docs

No API key required for the public tier. Rate limits apply at the edge.

GET/v1/lookup/:domain200 OK

Returns every record type for a domain, queried against your selected resolver. Pass ?types=A,MX,TXT to limit.

Parameters

NameTypeDefaultDescription
domainstringRequired. The hostname to look up.
typesstring[]allComma-separated list. e.g. A,AAAA,MX
resolverstringcloudflareOne of cloudflare, google, quad9, opendns, auth

Example request

cURL
$ curl "https://dnsfish.com/v1/lookup/github.com" \
-H "Accept: application/json"

Response

application/json200 OK
{
"domain": "github.com",
"resolver": "cloudflare",
"queried_at": "2026-05-24T18:42:11Z",
"latency_ms": 42,
"dnssec": { "signed": false, "ad": false },
"answers": {
"A": [{ "value": "140.82.114.4", "ttl": 60 }],
"MX": [{ "priority": 1, "value": "aspmx.l.google.com." }, /* 4 more */]
}
}

SDK snippets

JavaScript (fetch)
const r = await fetch(
"https://dnsfish.com/v1/lookup/github.com"
)
const data = await r.json()
console.log(data.answers.A)
Python (requests)
import requests
r = requests.get(
"https://dnsfish.com/v1/lookup/github.com"
)
print(r.json()["answers"]["A"])
Go (net/http)
resp, _ := http.Get(
"https://dnsfish.com/v1/lookup/github.com")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
Shell (curl + jq)
$ curl -s "https://dnsfish.com/v1/lookup/github.com" \
| jq '.answers.A[].value'
"140.82.114.4"