Appearance
DNS (DoH) Resolver
As part of our platform we offer a completely free DNS over HTTPS resolver (subject to limits for abuse, read below). This is a primitive we use within our service for underlying metadata and only volume is logged not specific queries or traffic.
latency uses the public resolvers below with fallback, in order. If all three are down the api will attempt to serve the last cached result if available or a 503 Service Unavailable.
| Provider | DNS | Primary |
|---|---|---|
| 8.8.8.8 | Yes | |
| Cloudflare | 1.1.1.1 | No |
| Quad9 | 9.9.9.9 | No |
API
- Base path:
https://ws.latency.app/v1/dns - Auth: none (public)
- Privacy: query names are not logged.
- Rate limit: per client IP, default 600 requests/minute. Over the limit returns
429.
On the house
The DNS resolver is free and unmetered. Its 600/min per-IP budget exists only to keep abuse out, not to push you onto a plan: DoH queries are never counted against your monitor, function, or API quotas, on any plan or none. Point a tool, a script, or your whole browser at it and go. The other public primitives share a separate public budget (see rate limits).
Endpoints
The resolver accepts queries in two interchangeable forms at the same path. /v1/dns/query is the canonical path; /v1/dns/dns-query is an alias for clients that follow the RFC 8484 naming convention.
JSON form
The simplest way to ask. Pass a name and record type as query parameters and get JSON back.
bash
curl "https://ws.latency.app/v1/dns/query?name=example.com&type=A"| Parameter | Meaning | Default |
|---|---|---|
name | The domain to resolve. Required. | - |
type | Record type: A, AAAA, MX, TXT, CNAME, NS, … | A |
The response is application/dns-json, the same shape Google and Cloudflare return:
json
{
"Status": 0,
"Answer": [
{ "name": "example.com", "type": 1, "TTL": 300, "data": "93.184.216.34" }
]
}type: 1 is an A record; Status: 0 means success (NOERROR).
Wire form (RFC 8484)
For DoH clients and libraries. The DNS message is carried as raw bytes and the response is a binary DNS packet (application/dns-message).
bash
# GET: base64url-encoded query in the ?dns= parameter
curl "https://ws.latency.app/v1/dns/query?dns=<base64url-encoded-query>"
# POST: the raw query as the request body
curl -H 'content-type: application/dns-message' \
--data-binary @query.bin \
https://ws.latency.app/v1/dns/queryPoint a DoH-capable client at the endpoint directly:
https://ws.latency.app/v1/dns/queryRecord types
Common types you can request with the JSON form:
| Type | Use |
|---|---|
A | IPv4 address |
AAAA | IPv6 address |
CNAME | Alias to another name |
MX | Mail servers |
TXT | Text records (SPF, verification, …) |
NS | Authoritative name servers |
Why use it
- Confirm what a name resolves to right now, from our network's vantage point, useful when debugging a propagation delay or a split-horizon setup.
- Feed other primitives. The inspector uses this resolver internally to turn a bare domain into an IP before geolocating it.
- A private, uncensored resolver for scripts and tools, with no query logging.