Skip to content
Choose your view

Domain investor or building an AI tool? The registrar view is for you too.

CDN.MN Domains · Private access by request

Check the index first.
Query the registry when it matters.

A fast, timestamped pre-check for registrars, domain investors, and AI tools. Use our private API or approved local indexes to identify names observed in DNS zones or listed as registered by participating registries⁠—before sending another live lookup.

Email us: domains@cdn.mn

  • API or local files.
  • Source timestamps included.
  • Your registration workflow stays in control.

A snapshot is not a live availability guarantee.

Where the pre-check sits in a domain search
  1. Domain search You
  2. CDN.MN pre-check
    Fed byTimestamped, approved source dataDNS-zone observations through authorized ICANN CZDS access or participating registry feeds
  3. Observation + source + timestamp
    • Evidence
    • Source snapshot (UTC)
    • Current availability: not checked
  4. Registrar decides whether to recheck or proceed You

For registrars

A pre-check that leaves the decision with you.

Less repetitive checking.

Use recent membership observations to decide which names need a live lookup.

Choose where the check runs.

Start with the private API, or use approved downloadable indexes in your own infrastructure.

Keep the decision yours.

Use evidence, timestamps, and freshness to apply your own search and registration policy.

Why a shared pre-check

Checks multiply. Not every one has to reach the registry.

Illustrative scenario — not a CDN.MN measurement

Without a shared index, every preliminary check becomes a registry query (WHOIS, RDAP or EPP). With CDN.MN, in this scenario about 85 of every 100 are answered from the index (taken in a snapshot), and only the rest reach the registry.

100 dots per lane; the counters carry the totals.

Scenario
1 client × 100 checks, then 1 client × 1,000 checks, then 1,000 clients × 1,000 checks
Registry queries without CDN.MN
100, then 1,000, then 1,000,000
Answered from the index with CDN.MN
85, then 850, then 850,000
Registry queries with CDN.MN
15, then 150, then 150,000

The share is an assumption, not a measurement. Model your own inputs

How it works

A shared pre-check. Not another registration authority.

  1. Build from authorized sources.

    We index permitted DNS-zone observations from authorized access through ICANN CZDS and work with participating registries on additional data feeds, including registered names that may not appear in DNS.

  2. Check once, in the right place.

    Your registrar or agent checks the CDN.MN API, or checks an approved hashed list or Bloom file locally.

  3. Decide with context.

    The result includes its evidence and snapshot time. Use it to prioritize names, request a live check, or continue an authorized registration workflow through your registrar.

“Not found” means not found in that dataset. It does not mean available to register.

Registrars may skip a separate EPP check before an authorized registration attempt where their integration and registry rules permit. CDN.MN does not submit registrations or authorize purchases. The registry still decides whether a registration succeeds.

See what a result carries

Interactive example — not a live domain lookup.

Example clock: · Example freshness policy: 36 hours

Choose an example scenario

delegated.example

Taken in snapshotFreshness: Fresh

Exact source membership, or a strong full-length hash match, supports a historical observation.

Evidence
Observed in the DNS zone snapshot
Match method
Exact match in the source list
Source
DNS zone snapshot
Source snapshot
Snapshot age
2 hours before the example clock
Current availability
Not checked — a pre-check never reports whether a name can be registered now.

Safe next step

The name was observed as delegated in the DNS zone snapshot. Deprioritize it under your caching policy, and recheck with the registry when current availability matters.

registered.example

Taken in snapshotFreshness: Fresh

Exact source membership, or a strong full-length hash match, supports a historical observation.

Evidence
Listed as registered in the registry snapshot
Match method
Exact match in the source list
Source
Registry's registered-name list
Source snapshot
Snapshot age
2 hours before the example clock
Current availability
Not checked — a pre-check never reports whether a name can be registered now.

Safe next step

The registry's own list shows the name as registered, even though it may not appear in DNS. Deprioritize it under your caching policy, and recheck when current availability matters.

candidate.example

Possible matchFreshness: Fresh

A Bloom filter reports possible membership; there is no independent exact confirmation.

Evidence
Possible match in the registry's Bloom file, not confirmed
Match method
Bloom filter: possible membership, not an exact confirmation
Source
Registry's Bloom file
Source snapshot
Snapshot age
2 hours before the example clock
Bloom false-positive target
1e-6An illustrative filter parameter: about one false positive per million checks of names that are genuinely absent, under the model's assumptions. It is not the probability that this answer is wrong.
Current availability
Not checked — a pre-check never reports whether a name can be registered now.

Safe next step

A Bloom file reports a possible match, with no exact confirmation for this snapshot. Confirm with the registry before treating the name as taken or unavailable.

newidea.example

Not found in this snapshotFreshness: Fresh

No match in the specified usable dataset.

Evidence
No match in the DNS zone snapshot
Match method
No membership match
Source
DNS zone snapshot
Source snapshot
Snapshot age
2 hours before the example clock
Current availability
Not checked — a pre-check never reports whether a name can be registered now.

Safe next step

Not found in this DNS zone snapshot. Registered names can be missing from DNS zones, and a name may have been registered since the snapshot. Check the authoritative registry; this is not an availability guarantee.

oldrecord.example

Taken in snapshotFreshness: Stale

The source snapshot is more than 36 hours older than the example clock. Recheck with the registry before relying on it.

Exact source membership, or a strong full-length hash match, supports a historical observation.

Evidence
Listed as registered in the registry snapshot
Match method
Full-length SHA-256 hash match (negligible collision risk, not zero)
Source
Registry's hashed list
Source snapshot
Snapshot age
11 days before the example clock
Current availability
Not checked — a pre-check never reports whether a name can be registered now.

Safe next step

The name was listed as registered in an older registry snapshot, and that snapshot is stale. Recheck with the registry before relying on this observation.

unknown.example

No usable coverageFreshness: Freshness unknown

The source snapshot time is unknown, so freshness cannot be computed. No timestamp is invented.

The dataset is missing, unusable, incompatible, unauthorized, or its scope does not cover this query.

Evidence
No usable evidence
Match method
Not matched: no usable dataset covers this name
Source snapshot
Unknown — no source snapshot time is available, and none is invented.
Current availability
Not checked — a pre-check never reports whether a name can be registered now.

Safe next step

No usable dataset covers this name, so there is no source snapshot time to show. Use your normal authorized registry workflow.

View example response
Example JSON response
{
  "schema_version": "1.0-example",
  "example": true,
  "results": [
    {
      "domain": "delegated.example",
      "state": "taken",
      "evidence": "dns_delegation",
      "match_method": "exact",
      "source_type": "zone_file",
      "dataset_id": "example-zone-demo",
      "snapshot_id": "demo-2026-10-12",
      "as_of": "2026-10-12T00:00:00Z",
      "timestamp_basis": "source_snapshot",
      "ingested_at": "2026-10-12T00:15:00Z",
      "checked_at": "2026-10-12T02:00:00Z",
      "freshness": "fresh",
      "current_availability": "not_checked",
      "bloom_false_positive_probability": null
    }
  ]
}
{
  "schema_version": "1.0-example",
  "example": true,
  "results": [
    {
      "domain": "registered.example",
      "state": "taken",
      "evidence": "registry_registered",
      "match_method": "exact",
      "source_type": "registry_list",
      "dataset_id": "example-registry-demo",
      "snapshot_id": "demo-2026-10-12",
      "as_of": "2026-10-12T00:00:00Z",
      "timestamp_basis": "source_snapshot",
      "ingested_at": "2026-10-12T00:20:00Z",
      "checked_at": "2026-10-12T02:00:00Z",
      "freshness": "fresh",
      "current_availability": "not_checked",
      "bloom_false_positive_probability": null
    }
  ]
}
{
  "schema_version": "1.0-example",
  "example": true,
  "results": [
    {
      "domain": "candidate.example",
      "state": "possibly_taken",
      "evidence": "registry_registered",
      "match_method": "bloom",
      "source_type": "registry_bloom",
      "dataset_id": "example-registry-bloom-demo",
      "snapshot_id": "demo-2026-10-12",
      "as_of": "2026-10-12T00:00:00Z",
      "timestamp_basis": "source_snapshot",
      "ingested_at": "2026-10-12T00:30:00Z",
      "checked_at": "2026-10-12T02:00:00Z",
      "freshness": "fresh",
      "current_availability": "not_checked",
      "bloom_false_positive_probability": 0.000001
    }
  ]
}
{
  "schema_version": "1.0-example",
  "example": true,
  "results": [
    {
      "domain": "newidea.example",
      "state": "not_in_snapshot",
      "evidence": "none",
      "match_method": "none",
      "source_type": "zone_file",
      "dataset_id": "example-zone-demo",
      "snapshot_id": "demo-2026-10-12",
      "as_of": "2026-10-12T00:00:00Z",
      "timestamp_basis": "source_snapshot",
      "ingested_at": "2026-10-12T00:15:00Z",
      "checked_at": "2026-10-12T02:00:00Z",
      "freshness": "fresh",
      "current_availability": "not_checked",
      "bloom_false_positive_probability": null
    }
  ]
}
{
  "schema_version": "1.0-example",
  "example": true,
  "results": [
    {
      "domain": "oldrecord.example",
      "state": "taken",
      "evidence": "registry_registered",
      "match_method": "sha256",
      "source_type": "registry_hashes",
      "dataset_id": "example-registry-hashes-demo",
      "snapshot_id": "demo-2026-10-01",
      "as_of": "2026-10-01T00:00:00Z",
      "timestamp_basis": "source_snapshot",
      "ingested_at": "2026-10-01T00:40:00Z",
      "checked_at": "2026-10-12T02:00:00Z",
      "freshness": "stale",
      "current_availability": "not_checked",
      "bloom_false_positive_probability": null
    }
  ]
}
{
  "schema_version": "1.0-example",
  "example": true,
  "results": [
    {
      "domain": "unknown.example",
      "state": "unknown",
      "evidence": "none",
      "match_method": "none",
      "source_type": null,
      "dataset_id": null,
      "snapshot_id": null,
      "as_of": null,
      "timestamp_basis": "unknown",
      "ingested_at": null,
      "checked_at": "2026-10-12T02:00:00Z",
      "freshness": "unknown",
      "current_availability": "not_checked",
      "bloom_false_positive_probability": null
    }
  ]
}

Fictitious domains and a fixed example clock. No DNS, WHOIS, RDAP, HTTP or EPP request is made.

How to read a result

Result

  • Taken in snapshot
  • Possible match
  • Not found in this snapshot
  • No usable coverage

Freshness

  • Fresh
  • Stale
  • Freshness unknown

Access options

Use the API. Or keep the pre-check local.

Private API

Private access by request

Integrate a timestamped pre-check without maintaining the full index yourself.

Keep in mind

Result certainty depends on the source and matching method. Access is authenticated and subject to the agreed limits.

Request API access

Hashed lists

Private access by request

Download an approved domain-hash index and compare hashes inside your own infrastructure.

Keep in mind

No plaintext list; guessed names remain testable. Full-length hashes have negligible collision risk, not an absolute zero-risk guarantee.

Request file access

Bloom files

Private access by request

Download a compact membership filter for high-volume local pre-checks.

Keep in mind

A positive is a possible match unless independently verified. An absence concerns that snapshot only.

Request file access

Available formats and coverage depend on each source's permissions. Local checks do not send individual searched names to CDN.MN.

Model your potential reduction in preliminary checks.

Illustrative inputs—not CDN.MN measurements

Preliminary requests potentially avoided
54,000
Preliminary requests remaining
46,000

Assumes one preliminary upstream request per candidate name.

Leave unconfirmed Bloom positives out of the match share.

Final registration operations, extra verification, CDN.MN requests, and source ingestion are not counted. This is not a latency, cost, or total-infrastructure-load guarantee.

Registry contribution

Four ways to contribute. No public zone-file download required.

Not every registry can publish a domain list. Choose an approach that fits your policy, then agree how the resulting information may be used and delivered.

  1. Private source to hashed index

    Registry supplies
    A zone file or registered-name list, shared privately with CDN.MN.
    CDN.MN processes
    CDN.MN receives the names and generates the agreed hashes.
    Possible approved output
    Private API and/or approved hashed downloads.
  2. Private source to Bloom file

    Registry supplies
    A zone file or registered-name list, shared privately with CDN.MN.
    CDN.MN processes
    CDN.MN receives the names and builds a Bloom filter.
    Possible approved output
    Private API and/or approved Bloom downloads.
  3. Registry-generated hashes

    Registry supplies
    A normalized, agreed-format hash export.
    CDN.MN processes
    CDN.MN stores and indexes the supplied hashes.
    Possible approved output
    Private API and/or approved hashed downloads.
  4. Registry-generated Bloom file

    Registry supplies
    A compatible filter and agreed metadata.
    CDN.MN processes
    CDN.MN uses the supplied filter without requiring a plaintext export.
    Possible approved output
    Probabilistic API responses and/or approved Bloom downloads.

Prefer no downstream files? Discuss API-only delivery with approved access and query limits.

What we agree before sharing

Access to a source and permission to distribute it are separate. We review the permitted use of each source for each delivery mode—API, hashed download, or Bloom download—before offering it, and a mode that is not approved stays off.

Download access can be revoked, but copies already downloaded cannot be technically recalled. API-only delivery gives stronger control over query volume; it does not remove guessing or licensing questions.

Please don't email source files, credentials, or database exports. Start with the short form; we'll agree on a secure transfer method afterwards.

How participation starts

  1. Agree on scope and permitted use
  2. Validate a sample privately
  3. Connect a scheduled feed

Sources and freshness

Know the source. Know the snapshot.

DNS-zone observations and registered-name feeds answer different questions. We keep those sources distinct so you can see what a result actually supports.

Authorized access through ICANN's Centralized Zone Data Service, or CZDS, provides one source of DNS-delegation observations. CZDS is an access channel to participating registries' zone files, not an endorsement of CDN.MN.

We aim to refresh supported datasets at least once every 24 hours, subject to source publication and access. Each response shows the source snapshot time, where available, so you can apply your own freshness policy.

A missing, delayed, or unsupported source is not silently treated as an available domain.

What each timestamp means
Source snapshot time as_of
When the source captured the data. It can be unknown; it is never replaced with a later time.
Ingestion time ingested_at
When CDN.MN downloaded and processed that snapshot.
Response time checked_at
When the pre-check answered. It says nothing about the age of the data.

Coverage

Tell us which TLDs and registration zones you need. We'll confirm current coverage, available formats, and refresh arrangements during onboarding.

Email us

Developers and AI agents

More automated searches should not mean more unnecessary lookups.

Domain-search agents can generate large candidate lists. Give them a pre-check step before they contact registry infrastructure: normalize names, remove duplicates, check a local index or the private API, then use an authorized live check only when the workflow needs it.

Machine-readable results should preserve the source, timestamp, and difference between an exact observation and a possible match. A “not found” result is never permission to spend money or register a name.

  1. Batch and deduplicate

  2. Respect freshness and limits

  3. Keep registration separate

View the illustrative API contract

Illustrative API contract — final endpoints and fields confirmed during onboarding.

Illustrative request
# Illustrative server-side request, not a public demo endpoint.
# Use a real scoped token only after access has been granted.
curl 'https://domains.cdn.mn/api/v1/check' \
  --request POST \
  --header "Authorization: Bearer ${CDNMN_DOMAIN_API_KEY}" \
  --header 'Content-Type: application/json' \
  --data '{"domains":["registered.example"]}'
Example exact historical result
{
  "schema_version": "1.0-example",
  "example": true,
  "results": [
    {
      "domain": "registered.example",
      "state": "taken",
      "evidence": "registry_registered",
      "match_method": "exact",
      "source_type": "registry_list",
      "dataset_id": "example-registry-demo",
      "snapshot_id": "demo-2026-10-12",
      "as_of": "2026-10-12T00:00:00Z",
      "timestamp_basis": "source_snapshot",
      "ingested_at": "2026-10-12T00:20:00Z",
      "checked_at": "2026-10-12T02:00:00Z",
      "freshness": "fresh",
      "current_availability": "not_checked",
      "bloom_false_positive_probability": null
    }
  ]
}

Participation and pricing

Shared infrastructure. A straightforward funding model.

For registries

Free participation

There is no service fee for contributing an agreed registry dataset. We work with you on scope, refreshes, access, and permitted distribution.

Join as a registry

For registrars, domain investors and AI-tool developers

Monthly service access

A reasonable monthly fee supports data processing, storage, delivery, and maintenance. Contact us to discuss the TLDs, API usage, and local-file access your team needs.

Request access and pricing

Private access by request.

FAQ

Common questions.

Email us: domains@cdn.mn

Does “Taken” mean a domain is definitely unavailable right now?

No. It means the specified source supports a historical membership observation. The domain may have changed since then. Check the registry when present availability matters.

Does “Not found” mean I can register the domain?

No. Registered names can be missing from DNS zones, a name may have been registered since the snapshot, or registry policy may make it unavailable. The authoritative registration workflow decides.

Can a Bloom file report a match for a name that is not in the source?

Yes. That is a Bloom false positive. Bloom-only positives are marked as possible matches unless independently confirmed. This is separate from a domain changing after the snapshot.

Do hashed or Bloom files make the names completely private?

They avoid distributing a readable name list, but guessed names can still be tested. Hash counts and Bloom metadata can also reveal information about dataset size. The chosen format and agreement must reflect that limitation.

What must a registry share?

An approved zone or registered-name source, or an agreed-format hash export or Bloom file. Registrant contact records and EPP credentials are not required for this membership service. API-only downstream delivery can also be discussed.

Which TLDs are covered?

Coverage depends on authorized sources and participating registries. Ask us about your target TLDs and registration zones; we will confirm the current scope during onboarding.

How often is the data updated?

The goal is daily refreshes for supported sources, subject to source publication and access. Results carry source timestamps where available. Check the freshness flag rather than assuming every response contains new data.

Do I have to replace my existing registrar integration?

No. This is a pre-check step in front of your existing workflow. Your registry or registrar connection remains responsible for authoritative checks and registrations.

Can domain investors and AI-tool developers request access?

Yes. Use the registrar view and tell us your use case, target TLDs, and expected volume. Access and permitted uses are agreed during onboarding.

Is this an ICANN-operated or ICANN-endorsed service?

No. CDN.MN is an independent service. Authorized access through ICANN CZDS is one source of zone data; it is not ICANN certification or endorsement of this product.

Contact

Make your next domain search more efficient.

Tell us what you operate and which namespaces you need. We'll discuss the right feed or access method.

CDN.MN Domains — Domain Pre-Checks for Registrars and Registries