Internal alpha · keys on request

The DNS lifecycle, as an API.

DomainDefender's dataset, queryable over HTTPS. Every endpoint is a direct view of MongoDB, computed on-demand. Registration facts, DNSSEC status, EPP locks, nameserver delegations, registrant country, plus the lifecycle cohorts (fresh / expiring / pending-delete / stale) that are our core differentiator.

Live · GET /v1/meta

What's in the corpus right now

fetched on page load
Records
Zone domains
Latest record
Service
version: …

source · https://designation-pennsylvania-lanka-remember.trycloudflare.com/v1/meta

Base URL
https://designation-pennsylvania-lanka-remember.trycloudflare.com
Open interactive docs →

this URL is ephemeral until we bind a stable custom domain; bookmark this page, not the URL

Who it's for

Four audiences, one dataset.

Security researchers
Add registration context to alerts

"Was this phishing domain registered in the last 7 days? Who's the registrar? Is DNSSEC signed?"

Registrar analytics teams
Track your market share + competitors

"What % of .xyz registrations did we win last month vs. Dynadot?"

Academic researchers
Longitudinal DNS measurement at scale

"Export every domain that re-registered within 30 days of expiry across .com in 2025."

SOC / threat-intel teams
Pivoting from an indicator to its neighbourhood

"Other domains that share this one's registrar, NS set, and creation window?"

How it works

Your browser to our Mongo in five hops.

client client curl / Python / SDK CF CF edge TLS + DDoS + cache CF CF tunnel outbound, no firewall changes FastAPI FastAPI auth + rate limit + query MongoDB MongoDB ~430k domain_metadata records

outbound-only tunnel · database never exposed to the public internet · TLS at the edge

Honest limit: today's tunnel is a Cloudflare quick-tunnel (trycloudflare.com hostname) — convenient for development, but the URL rotates on tunnel restart and the path flakes intermittently. Migrating to a named tunnel (api.domaindefender.com or similar) is queued.

Get a key

Request access.

Internal alpha. Keys are issued manually. Reach out via the contact page with a one-liner about how you'd use it.

Quickstart

Pick your language.

live examples
# 1. Public: no key
curl -s https://designation-pennsylvania-lanka-remember.trycloudflare.com/v1/meta

# 2. Lookup a domain
KEY="dd_live_..."
curl -s -H "X-API-Key: $KEY" https://designation-pennsylvania-lanka-remember.trycloudflare.com/v1/domain/example.com

# 3. Lifecycle — fresh registrations in the last 7 days
curl -s -H "X-API-Key: $KEY" \
  "https://designation-pennsylvania-lanka-remember.trycloudflare.com/v1/lifecycle/fresh?window_days=7&limit=5"
What you get back

Sample responses.

GET /v1/domain/{domain} auth required
{
  "domain": "example.com",
  "tld": "com",
  "registrar": "MarkMonitor Inc.",
  "registrar_iana_id": "292",
  "creation_date": "1995-08-13T04:00:00Z",
  "expiry_date":   "2026-08-13T04:00:00Z",
  "updated_date":  "2025-08-14T07:01:39Z",
  "dnssec": false,
  "status": [
    "clientDeleteProhibited",
    "clientTransferProhibited",
    "clientUpdateProhibited"
  ],
  "nameservers": [
    "a.iana-servers.net",
    "b.iana-servers.net"
  ],
  "registrant_country": "US",
  "rdap_status": "ok",
  "enriched_at": "2026-04-22T14:03:17Z"
}
GET /v1/domain/{domain}/lifecycle auth required
[
  { "event": "registered",
    "timestamp": "1995-08-13T04:00:00Z" },
  { "event": "updated",
    "timestamp": "2025-08-14T07:01:39Z" },
  { "event": "expiry_scheduled",
    "timestamp": "2026-08-13T04:00:00Z" },
  { "event": "observed",
    "timestamp": "2026-04-22T14:03:17Z" }
]
GET /v1/lifecycle/fresh?window_days=7 auth required
{
  "window_days": 7,
  "tld": null,
  "total": 1651,
  "returned": 3,
  "results": [
    { "domain": "kuanefor.rest",
      "creation_date": "2026-04-22T01:18:03Z",
      "registrar": "Porkbun LLC",
      "tld": "rest" },
    { "domain": "wd188.living",
      "creation_date": "2026-04-22T01:11:52Z",
      "registrar": "Spaceship, Inc.",
      "tld": "living" },
    { "domain": "wd66.living",
      "creation_date": "2026-04-22T01:11:52Z",
      "registrar": "Spaceship, Inc.",
      "tld": "living" }
  ]
}
GET /v1/tld/{tld}/stats auth required
{
  "tld": "com",
  "enriched_count": 4736,
  "dnssec_signed": 193,
  "dnssec_rate_pct": 4.08,
  "oldest_creation_date": "1992-09-09T04:00:00Z",
  "newest_creation_date": "2026-04-21T19:09:20Z"
}
Endpoints

The v1 surface.

All endpoints under /v1/. Full spec + interactive try-it at https://designation-pennsylvania-lanka-remember.trycloudflare.com/v1/docs.

method · pathdescriptionauth
GET /v1/health Service health + Mongo reachability public
GET /v1/meta Corpus size + latest record timestamp public
GET /v1/domain/{domain} Full record for one domain key
GET /v1/domain/{domain}/lifecycle Event stream: registered / updated / expired / observed key
GET /v1/tld/{tld}/stats Record count, DNSSEC %, oldest + newest for a TLD key
GET /v1/tld/{tld}/top-registrars Leading registrars within a TLD key
GET /v1/registrar/{name}/stats Volume, DNSSEC rate, transfer-lock rate key
GET /v1/registrar/{name}/tld-breakdown Top TLDs a registrar operates in key
GET /v1/country/{iso2}/stats Volume + DNSSEC for a registrant country key
GET /v1/search?... Multi-facet filter, cursor-paginated key
GET /v1/lifecycle/fresh?window_days=30 Domains registered in the last N days key
GET /v1/lifecycle/expiring?window_days=30 Domains expiring in the next N days key
GET /v1/lifecycle/pending-delete Currently in EPP pendingDelete status key
GET /v1/lifecycle/stale?min_age_years=3 Live domains with no registry update in N+ years key
Positioning

Depth over breadth.

Commercial vendors (Whisper, SecurityTrails, WhoisXML, DomainTools) spread their effort wide across infrastructure layers: domains, IPs, certs, ASNs, routing. DomainDefender picks one slice and goes deep: the biography of every domain we track, not just its current snapshot. The lifecycle endpoints are where that depth shows up.

What commercial graphs give you

"Here's what this domain looks like right now: registrar X, NS Y, cert Z, AS W."

What DomainDefender adds

"Here's its full biography: when it registered, every time the registry record changed, when it expired, whether it got re-registered by a new owner, and how its neighbourhood evolved at each step."

Rate limits · tiers

What keys can do.

Tiers are wired into the code; paid tiers aren't launched yet.

tierper dayper minutestatus
academic 100 10 issued on request
developer 500 20 scoped (future)
pro 10,000 100 paid (deferred)
business 50,000 300 paid (deferred)
enterprise contract (deferred)
internal project team only
Pipeline
loading…