Developer Reference

DNS Propagation Checker API Documentation

DNS Propagation Checker API Documentation: Check DNS record propagation across 13 global DNS servers worldwide. Essential for verifying DNS changes after migrations, troubleshooting DNS issues, or monitoring TTL expiration. Servers span North America, Europe, Asia-Pacific, and other regions for comprehensive coverage.

DNS Propagation Checker

Check DNS record propagation across 13 global DNS servers worldwide. Essential for verifying DNS changes after migrations, troubleshooting DNS issues, or monitoring TTL expiration. Servers span North America, Europe, Asia-Pacific, and other regions for comprehensive coverage.

GET /v1/dns/propagation

Query Parameters

ParameterTypeDescription
domain required string Domain to check (e.g., "example.com" or "subdomain.example.com")
type optional string Record type: A, AAAA, CNAME, MX, TXT, NS, SOA (default: A)
expected optional string Expected value to verify propagation against (e.g., new IP address)

Response Fields

FieldTypeDescription
propagation_percentagenumberPercentage of servers returning expected value (0-100)
fully_propagatedbooleanTrue if all servers return consistent values
consistentbooleanTrue if all successful responses have the same value
unique_valuesarrayAll unique record values seen across servers
resultsarrayPer-server results with location, records, TTL, response time

Example Request

# Check A record propagation
curl "https://domscan.net/v1/dns/propagation?domain=example.com&type=A"

# Check MX record with expected value
curl "https://domscan.net/v1/dns/propagation?domain=example.com&type=MX&expected=mail.example.com"
const url = new URL("https://domscan.net/v1/dns/propagation");
url.searchParams.set("domain", "example.com");
url.searchParams.set("type", "A");

const response = await fetch(url);
const data = await response.json();

console.log(`Propagation: ${data.propagation_percentage}%`);
console.log(`Fully propagated: ${data.fully_propagated}`);

// Check which servers are still showing old values
data.results
  .filter(r => !r.success || r.records[0] !== data.expected)
  .forEach(r => console.log(`${r.server.name}: ${r.records}`));
import requests

response = requests.get(
    "https://domscan.net/v1/dns/propagation",
    params={"domain": "example.com", "type": "A"}
)
data = response.json()

print(f"Propagation: {data['propagation_percentage']}%")
print(f"Fully propagated: {data['fully_propagated']}")

# Show servers with different values
for result in data['results']:
    print(f"{result['server']['name']}: {result['records']}")
package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    resp, _ := http.Get("https://domscan.net/v1/dns/propagation?domain=example.com&type=A")
    defer resp.Body.Close()

    var data map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&data)

    fmt.Printf("Propagation: %.0f%%\n", data["propagation_percentage"])
    fmt.Printf("Fully propagated: %v\n", data["fully_propagated"])
}
require 'net/http'
require 'json'

uri = URI("https://domscan.net/v1/dns/propagation?domain=example.com&type=A")
response = Net::HTTP.get_response(uri)
data = JSON.parse(response.body)

puts "Propagation: #{data['propagation_percentage']}%"
puts "Fully propagated: #{data['fully_propagated']}"

Example Response

{
  "domain": "example.com",
  "record_type": "A",
  "propagation_percentage": 100,
  "fully_propagated": true,
  "consistent": true,
  "unique_values": ["93.184.216.34"],
  "results": [
    {
      "server": {
        "name": "Cloudflare",
        "ip": "1.1.1.1",
        "location": "Global Anycast"
      },
      "success": true,
      "records": ["93.184.216.34"],
      "ttl": 86400,
      "response_time_ms": 12
    },
    {
      "server": {
        "name": "Google",
        "ip": "8.8.8.8",
        "location": "Global Anycast"
      },
      "success": true,
      "records": ["93.184.216.34"],
      "ttl": 86400,
      "response_time_ms": 15
    }
  ],
  "summary": {
    "total_servers": 13,
    "successful": 13,
    "failed": 0
  }
}
GET /v1/dns/servers

Get the list of DNS servers used for propagation checks. Returns all 13 global servers with their locations and IP addresses.

Example Response

{
  "servers": [
    {"name": "Cloudflare", "ip": "1.1.1.1", "location": "Global Anycast"},
    {"name": "Google", "ip": "8.8.8.8", "location": "Global Anycast"},
    {"name": "Quad9", "ip": "9.9.9.9", "location": "Global Anycast"},
    {"name": "OpenDNS", "ip": "208.67.222.222", "location": "US"},
    {"name": "Comodo", "ip": "8.26.56.26", "location": "US"}
  ],
  "total": 13
}

Response Fields

Field Type
servers[] object[]
servers[] object
servers[].name string
servers[].location string
servers[].country string
servers[].ip string
servers[].provider string
total integer
GET /v1/dns/history

Query Parameters

Parameter Type required
domain string required
type string optional
from string optional
to string optional
limit integer optional

Response Fields

Field Type
domain string
history[] object[]
history[] object
history[].date string
history[].record_type string
history[].changes[] object[]
history[].changes[] object
history[].changes[].action string
history[].changes[].value string
current_records object
first_seen string | null
last_seen string | null
total_changes integer
record_types_tracked[] string[]
beta_notice string
meta object
meta.note string
meta.data_source string

Example Request

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/dns/history?domain=example.com&type=A&from=2026-01-01&to=2026-04-15&limit=10"

Example Response

{
  "domain": "example.com",
  "history": [
    {
      "date": "2026-04-13",
      "record_type": "A",
      "changes": [
        {
          "action": "added",
          "value": "104.20.23.154"
        },
        {
          "action": "added",
          "value": "172.66.147.243"
        },
        {
          "action": "removed",
          "value": "104.18.26.120"
        }
      ]
    }
  ],
  "current_records": {
    "A": [
      "104.20.23.154",
      "172.66.147.243"
    ]
  },
  "first_seen": "2026-01-01",
  "last_seen": "2026-04-13",
  "total_changes": 3,
  "record_types_tracked": [
    "A"
  ],
  "beta_notice": "This endpoint is in beta. History data accumulates from API usage over time and does not include external historical sources.",
  "meta": {
    "note": "History data recorded from prior API lookups.",
    "data_source": "internal"
  }
}

Used by people at amazing companies

VercelLLM PulseOLXCasa ModernaPipeCal.comBeehiivSnykTogglRemoteSprigDeel