Query and validate DNS records for any domain
Look up and validate DNS records for any domain in seconds. Whether you are verifying MX records for email delivery, checking SPF and DKIM for authentication, or debugging propagation after a DNS change, the DNS Checker API returns A, AAAA, MX, TXT, CNAME, NS, and SOA records with full detail.
X-API-Key header with every request.
All requests go through the API gateway which handles authentication, rate limiting, and usage tracking.
{
"domain": "example.com",
"recordTypes": [
"A",
"MX",
"TXT"
]
}
| Field | Type | Description |
|---|---|---|
domain |
string |
Domain name extracted from the email |
recordTypes |
array |
DNS record types to query (A, MX, TXT, CNAME, NS, SOA, AAAA) |
{
"domain": "example.com",
"records": {
"A": [
"93.184.216.34"
],
"MX": [
"mail.example.com"
],
"TXT": [
"v=spf1 include:_spf.example.com ~all"
]
},
"resolvedAt": "2026-03-25T14:30:00Z"
}
| Field | Type | Description |
|---|---|---|
domain |
string |
Domain name extracted from the email |
records |
object |
Nested object with properties |
resolvedAt |
string |
Field value |
| Status | Meaning |
|---|---|
200 | Request completed successfully |
400 | Bad request — invalid or missing parameters |
401 | Missing or invalid X-API-Key header |
429 | Rate limit exceeded — check Retry-After header |
500 | Internal server error |
400 Invalid domainRequest that triggers this:
{"domain": "invalid..domain", "recordTypes": ["A"]}
Error response:
{"type": "/problems/validation-error", "title": "Invalid Domain", "status": 400, "detail": "'invalid..domain' is not a valid domain name"}
How to fix: Provide a valid domain name (e.g., example.com). Avoid special characters and consecutive dots.
503 DNS timeoutRequest that triggers this:
{"domain": "example.com", "recordTypes": ["A", "MX", "TXT"]}
Error response:
{"type": "/problems/service-unavailable", "title": "DNS Timeout", "status": 503, "detail": "DNS query timed out after 10 seconds"}
How to fix: Retry the request. The domain may be unreachable. Check that the domain exists and nameservers are responding.
curl -X POST /v1/dns/check \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"domain": "example.com",
"recordTypes": [
"A",
"MX",
"TXT"
]
}'
// Node.js (18+) or modern browser
const response = await fetch("/v1/dns/check", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"domain": "example.com",
"recordTypes": [
"A",
"MX",
"TXT"
]
}),
});
const data = await response.json();
console.log(response.status, data);
import requests
response = requests.post(
"/v1/dns/check",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"domain": "example.com",
"recordTypes": [
"A",
"MX",
"TXT"
]
},
)
print(response.status_code)
print(response.json())
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"domain": "example.com",
"recordTypes": [
"A",
"MX",
"TXT"
]
}`)
req, _ := http.NewRequest("POST", "/v1/dns/check", body)
req.Header.Set("X-API-Key", "YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, _ := io.ReadAll(resp.Body)
fmt.Println(resp.StatusCode)
fmt.Println(string(data))
}
{
"name": "dns_checker",
"description": "Query and validate DNS records for any domain",
"inputSchema": {
"type": "object",
"properties": {
"api_key": {"type": "string", "description": "Your Orovai API key"},
"request": {"type": "object", "description": "Request body"}
},
"required": ["api_key", "request"]
},
"endpoint": "/v1/dns/check",
"method": "POST",
"headers": {
"X-API-Key": "{{api_key}}",
"Content-Type": "application/json"
}
}