# DNS Propagation API
> Check DNS propagation by querying a record across several major public resolvers at once — Google (8.8.8.8), Cloudflare (1.1.1.1), AdGuard and dns.sb — and seeing whether they all return the same answer. Pass a domain and a record type and the service queries every resolver in parallel and reports each resolver's answers, whether they are consistent (the change has fully propagated) or still differ (mid-propagation, stale caching or split-horizon DNS), the number of distinct answer sets and the union of all answers. Supported record types: A, AAAA, CNAME, MX, TXT, NS, SOA, SRV, CAA and PTR. A single-resolver endpoint queries one named resolver on its own, and a failing resolver is reported per-resolver without failing the whole call. Live DoH (DNS-over-HTTPS) JSON queries, always current. Built for verifying DNS changes after a migration or launch, debugging split-horizon or stale-cache issues, and uptime/propagation monitoring. A DNS propagation checker — distinct from single-resolver record lookup (dns), the email-authentication analyzer (emailsec) and WHOIS (whois). No upstream key, no cache.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/dnspropagation-api/..."
```

## Pricing
- **Free** (Free) — 2,200 calls/Mo, 2 req/s
- **Starter** ($6/Mo) — 43,000 calls/Mo, 8 req/s
- **Pro** ($21/Mo) — 224,000 calls/Mo, 20 req/s
- **Mega** ($54/Mo) — 840,000 calls/Mo, 50 req/s

## Endpoints

### DNS Propagation

#### `GET /v1/check` — Propagation across resolvers

**Parameters:**
- `domain` (query, required, string) — Domain to query Example: `example.com`
- `type` (query, optional, string) — A, AAAA, CNAME, MX, TXT, NS, SOA, SRV, CAA, PTR Example: `A`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/dnspropagation-api/v1/check?domain=example.com&type=A"
```

**Response:**
```json
{
    "data": {
        "type": "A",
        "domain": "example.com",
        "resolvers": [
            {
                "name": "Google",
                "rcode": 0,
                "status": "ok",
                "answers": [
                    "104.20.23.154",
                    "172.66.147.243"
                ],
                "resolver": "google"
            },
            {
                "name": "Cloudflare",
                "rcode": 0,
                "status": "ok",
                "answers": [
                    "104.20.23.154",
                    "172.66.147.243"
                ],
                "resolver": "cloudflare"
            },
            {
                "name": "AdGuard",
                "rcode": 0,
                "status": "ok",
                "answers": [
                    "104.20.23.154",
                    "172.66.147.243"
                ],
                "resolver": "adguard"
            },
            {
                "name": "dns.sb",
                "rcode": 0,
                "status": "ok",
                "answers": [
                    "104.20.23.154",
                    "172.66.147.243"
                ],
                "resolver": "dnssb"
            }
        ],
        "consistent": true,
        "resolvers_ok": 4,
        "answers_union": [
            "104.20.23.154",
            "172.66.147.243"
        ],
        "resolvers_total": 4,
        "distinct_answer_sets": 1
    },
    "meta": {
        "timestamp": "20
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/lookup` — Query one named resolver

**Parameters:**
- `domain` (query, required, string) — Domain to query Example: `cloudflare.com`
- `type` (query, optional, string) — Record type Example: `NS`
- `resolver` (query, optional, string) — google, cloudflare, adguard, dnssb Example: `google`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/dnspropagation-api/v1/lookup?domain=cloudflare.com&type=NS&resolver=google"
```

**Response:**
```json
{
    "data": {
        "name": "Google",
        "type": "NS",
        "rcode": 0,
        "domain": "cloudflare.com",
        "status": "ok",
        "answers": [
            "ns3.cloudflare.com",
            "ns4.cloudflare.com",
            "ns5.cloudflare.com",
            "ns6.cloudflare.com",
            "ns7.cloudflare.com"
        ],
        "resolver": "google"
    },
    "meta": {
        "timestamp": "2026-06-01T23:40:45.268Z",
        "request_id": "80ecc2b0-5aee-4790-9770-b9ed3e023e68"
    },
    "status": "ok",
    "message": "Resolver queried",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Resolvers & record types

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/dnspropagation-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "Check DNS propagation by querying a record across several major public resolvers at once — Google (8.8.8.8), Cloudflare (1.1.1.1), AdGuard and dns.sb — and seeing whether they all return the same answer. /v1/check?domain=example.com&type=A queries every resolver in parallel and reports each resolver's answers, whether they are consistent (a change has fully propagated) or still differ (mid-propagation or split-horizon), the number of distinct answer sets and the union of all answers. Supported record types: A, AAAA, CNAME, MX, TXT, NS, SOA, SRV, CAA, PTR. /v1/lookup queries a single named resolver. A failing resolver is reported per-resolver, never failing the whole call. Live DoH-JSON queries, no cache. Ideal for verifying DNS changes after a migration, debugging split-horizon or stale caching, and monitoring. A DNS propagation checker — distinct from single-resolver record lookup (dns), the email-auth analyzer (emailsec) and WHOIS (whois). No key, no cache.",
        "endpoints": [
            "/v1/check",
            "/v1/lookup",
            "/v1/meta"
        ],
        "resolvers": [
            {
                "id": "google",
                "name": "Google"
            },
            {
                "id": "cloudflare",
                "name": "Cloudflare"
            },
            {
                "id": "adguard",
                "name": "AdGuard"
            },
            {
                "id": "dnssb",
                "
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/dnspropagation-api
OpenAPI spec: https://www.oanor.com/api/dnspropagation-api/openapi.json
